aboutsummaryrefslogtreecommitdiff
path: root/src/cli/stasis/system_requirements.c
blob: d8d7df3a1c7d1cee26a066fad50dbcd15a79e085 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include "system_requirements.h"

void check_system_env_requirements() {
    msg(STASIS_MSG_L1, "Checking environment\n");
    globals.envctl = envctl_init();
    envctl_register(&globals.envctl, STASIS_ENVCTL_PASSTHRU, NULL, "TMPDIR");
    envctl_register(&globals.envctl, STASIS_ENVCTL_PASSTHRU, NULL, "STASIS_ROOT");
    envctl_register(&globals.envctl, STASIS_ENVCTL_PASSTHRU, NULL, "STASIS_SYSCONFDIR");
    envctl_register(&globals.envctl, STASIS_ENVCTL_PASSTHRU, NULL, "STASIS_CPU_COUNT");
    envctl_register(&globals.envctl, STASIS_ENVCTL_REQUIRED | STASIS_ENVCTL_REDACT, callback_except_gh, "STASIS_GH_TOKEN");
    envctl_register(&globals.envctl, STASIS_ENVCTL_REQUIRED, callback_except_jf, "STASIS_JF_ARTIFACTORY_URL");
    envctl_register(&globals.envctl, STASIS_ENVCTL_REDACT, NULL, "STASIS_JF_ACCESS_TOKEN");
    envctl_register(&globals.envctl, STASIS_ENVCTL_PASSTHRU, NULL, "STASIS_JF_USER");
    envctl_register(&globals.envctl, STASIS_ENVCTL_REDACT, NULL, "STASIS_JF_PASSWORD");
    envctl_register(&globals.envctl, STASIS_ENVCTL_REDACT, NULL, "STASIS_JF_SSH_KEY_PATH");
    envctl_register(&globals.envctl, STASIS_ENVCTL_REDACT, NULL, "STASIS_JF_SSH_PASSPHRASE");
    envctl_register(&globals.envctl, STASIS_ENVCTL_REDACT, NULL, "STASIS_JF_CLIENT_CERT_CERT_PATH");
    envctl_register(&globals.envctl, STASIS_ENVCTL_REDACT, NULL, "STASIS_JF_CLIENT_CERT_KEY_PATH");
    envctl_register(&globals.envctl, STASIS_ENVCTL_REQUIRED, callback_except_jf, "STASIS_JF_REPO");
    envctl_do_required(globals.envctl, globals.verbose);
}

void check_system_requirements(struct Delivery *ctx) {
    const char *tools_required[] = {
        "rsync",
        NULL,
    };

    msg(STASIS_MSG_L1, "Checking system requirements\n");
    for (size_t i = 0; tools_required[i] != NULL; i++) {
        if (!find_program(tools_required[i])) {
            msg(STASIS_MSG_L2 | STASIS_MSG_ERROR, "'%s' must be installed.\n", tools_required[i]);
            exit(1);
        }
    }

    if (!globals.tmpdir && !ctx->storage.tmpdir) {
        delivery_init_tmpdir(ctx);
    }

    struct DockerCapabilities dcap;
    if (!docker_capable(&dcap)) {
        msg(STASIS_MSG_L2 | STASIS_MSG_WARN, "Docker is broken\n");
        msg(STASIS_MSG_L3, "Available: %s\n", dcap.available ? "Yes" : "No");
        msg(STASIS_MSG_L3, "Usable: %s\n", dcap.usable ? "Yes" : "No");
        msg(STASIS_MSG_L3, "Podman [Docker Emulation]: %s\n", dcap.podman ? "Yes" : "No");
        msg(STASIS_MSG_L3, "Build plugin(s): ");
        if (dcap.usable) {
            if (dcap.build & STASIS_DOCKER_BUILD) {
                printf("build ");
            }
            if (dcap.build & STASIS_DOCKER_BUILD_X) {
                printf("buildx ");
            }
            puts("");
        } else {
            printf("N/A\n");
        }

        // disable docker builds
        globals.enable_docker = false;
    }
}

void check_requirements(struct Delivery *ctx) {
    check_system_requirements(ctx);
    check_system_env_requirements();
}

void check_system_path() {
    char *pathvar = NULL;
    pathvar = getenv("PATH");
    if (!pathvar) {
        msg(STASIS_MSG_ERROR | STASIS_MSG_L2, "PATH variable is not set. Cannot continue.\n");
        exit(1);
    }
}