auc: remove superfluous variables

Remove parsing of data which is not used within `auc`. Later iterations
may use these but they can be gradually added whenever needed.

Also remove HTTP code handling of error codes no longer used by the
backend. Early iterations of the server where infinitely complex to
figure out created images and announce them to clients but ever since
everything is stored in JSON, things got better (aka simpler).

If a package is missing on the upstream server, color it in red.

Signed-off-by: Paul Spooren <mail@aparcar.org>
This commit is contained in:
Paul Spooren 2021-08-25 22:41:35 -10:00 committed by Daniel Golle
parent 078bd4189c
commit 6527d65b9b
1 changed files with 5 additions and 144 deletions

View File

@ -96,18 +96,10 @@ struct branch {
char *version_code;
char *version_number;
bool snapshot;
time_t release_time;
time_t eol_time;
char *path;
char *path_packages;
char *arch_packages;
char *pubkey;
char *updates;
char **repos;
char **extra_repos;
char **extra_repos_names;
char **default_packages;
char **device_packages;
};
static LIST_HEAD(branches);
@ -192,37 +184,25 @@ static const struct blobmsg_policy upgtest_policy[__UPGTEST_MAX] = {
* policy for branches.json
*/
enum {
BRANCH_DATE_EOL,
BRANCH_DATE_RELEASE,
BRANCH_ENABLED,
BRANCH_EXTRA_REPOS,
BRANCH_GIT_BRANCH,
BRANCH_NAME,
BRANCH_PATH,
BRANCH_PATH_PACKAGES,
BRANCH_PUBKEY,
BRANCH_REPOS,
BRANCH_SNAPSHOT,
BRANCH_TARGETS,
BRANCH_UPDATES,
BRANCH_VERSIONS,
__BRANCH_MAX,
};
static const struct blobmsg_policy branches_policy[__BRANCH_MAX] = {
[BRANCH_DATE_EOL] = { .name = "eol", .type = BLOBMSG_TYPE_STRING },
[BRANCH_DATE_RELEASE] = { .name = "release_date", .type = BLOBMSG_TYPE_STRING },
[BRANCH_ENABLED] = { .name = "enabled", .type = BLOBMSG_TYPE_BOOL },
[BRANCH_EXTRA_REPOS] = { .name = "extra_repos", .type = BLOBMSG_TYPE_TABLE },
[BRANCH_GIT_BRANCH] = { .name = "git_branch", .type = BLOBMSG_TYPE_STRING },
[BRANCH_NAME] = { .name = "name", .type = BLOBMSG_TYPE_STRING },
[BRANCH_PATH] = { .name = "path", .type = BLOBMSG_TYPE_STRING },
[BRANCH_PATH_PACKAGES] = { .name = "path_packages", .type = BLOBMSG_TYPE_STRING },
[BRANCH_PUBKEY] = { .name = "pubkey", .type = BLOBMSG_TYPE_STRING },
[BRANCH_REPOS] = { .name = "repos", .type = BLOBMSG_TYPE_ARRAY },
[BRANCH_SNAPSHOT] = { .name = "snapshot", .type = BLOBMSG_TYPE_BOOL },
[BRANCH_TARGETS] = { .name = "targets", .type = BLOBMSG_TYPE_TABLE },
[BRANCH_UPDATES] = { .name = "updates", .type = BLOBMSG_TYPE_STRING },
[BRANCH_VERSIONS] = { .name = "versions", .type = BLOBMSG_TYPE_ARRAY },
};
@ -232,22 +212,17 @@ static const struct blobmsg_policy branches_policy[__BRANCH_MAX] = {
enum {
TARGET_ARCH_PACKAGES,
TARGET_BINDIR,
TARGET_BUILD_AT,
TARGET_DEFAULT_PACKAGES,
TARGET_DEVICE_PACKAGES,
TARGET_ENQUEUED_AT,
TARGET_IMAGE_PREFIX,
TARGET_IMAGES,
TARGET_DETAIL,
TARGET_MANIFEST,
TARGET_METADATA_VERSION,
TARGET_REQUEST_HASH,
TARGET_SOURCE_DATE_EPOCH,
TARGET_QUEUE_POSITION,
TARGET_STATUS,
TARGET_STDERR,
TARGET_STDOUT,
TARGET_SUPPORTED_DEVICES,
TARGET_TARGET,
TARGET_TITLES,
TARGET_VERSION_CODE,
@ -258,22 +233,17 @@ enum {
static const struct blobmsg_policy target_policy[__TARGET_MAX] = {
[TARGET_ARCH_PACKAGES] = { .name = "arch_packages", .type = BLOBMSG_TYPE_STRING },
[TARGET_BINDIR] = { .name = "bin_dir", .type = BLOBMSG_TYPE_STRING },
[TARGET_BUILD_AT] = { .name = "built_at", .type = BLOBMSG_TYPE_STRING },
[TARGET_DEFAULT_PACKAGES] = { .name = "default_packages", .type = BLOBMSG_TYPE_ARRAY },
[TARGET_DEVICE_PACKAGES] = { .name = "device_packages", .type = BLOBMSG_TYPE_ARRAY },
[TARGET_ENQUEUED_AT] = { .name = "enqueued_at", .type = BLOBMSG_TYPE_STRING },
[TARGET_IMAGE_PREFIX] = { .name = "image_prefix", .type = BLOBMSG_TYPE_STRING },
[TARGET_IMAGES] = { .name = "images", .type = BLOBMSG_TYPE_ARRAY },
[TARGET_MANIFEST] = { .name = "manifest", .type = BLOBMSG_TYPE_TABLE },
[TARGET_DETAIL] = { .name = "detail", .type = BLOBMSG_TYPE_STRING },
[TARGET_METADATA_VERSION] = { .name = "metadata_version", .type = BLOBMSG_TYPE_INT32 },
[TARGET_REQUEST_HASH] = { .name = "request_hash", .type = BLOBMSG_TYPE_STRING },
[TARGET_SOURCE_DATE_EPOCH] = { .name = "source_date_epoch", .type = BLOBMSG_TYPE_STRING },
[TARGET_QUEUE_POSITION] = { .name = "queue_position", .type = BLOBMSG_TYPE_INT32 },
[TARGET_STATUS] = { .name = "status", .type = BLOBMSG_TYPE_STRING },
[TARGET_STDERR] = { .name = "stderr", .type = BLOBMSG_TYPE_STRING },
[TARGET_STDOUT] = { .name = "stdout", .type = BLOBMSG_TYPE_STRING },
[TARGET_SUPPORTED_DEVICES] = { .name = "supported_devices", .type = BLOBMSG_TYPE_ARRAY },
[TARGET_TARGET] = { .name = "target", .type = BLOBMSG_TYPE_STRING },
[TARGET_TITLES] = { .name = "titles", .type = BLOBMSG_TYPE_ARRAY },
[TARGET_VERSION_CODE] = { .name = "version_code", .type = BLOBMSG_TYPE_STRING },
@ -503,7 +473,8 @@ static void pkglist_check_cb(struct ubus_request *req, int type, struct blob_att
pkg = avl_find_element(&pkg_tree, blobmsg_name(cur), pkg, avl);
if (!pkg) {
fprintf(stderr, "installed package %s cannot be found in remote list!\n", blobmsg_name(cur));
fprintf(stderr, "installed package %s%s%s cannot be found in remote list!\n",
ANSI_COLOR_RED, blobmsg_name(cur), ANSI_COLOR_RESET);
*status |= PKG_NOT_FOUND;
continue;
}
@ -615,7 +586,6 @@ static void board_cb(struct ubus_request *req, int type, struct blob_attr *msg)
if (tb[BOARD_ROOTFS_TYPE])
rootfs_type = strdup(blobmsg_get_string(tb[BOARD_ROOTFS_TYPE]));
blobmsg_add_string(buf, "distro", distribution);
blobmsg_add_string(buf, "target", target);
blobmsg_add_string(buf, "version", version);
blobmsg_add_string(buf, "revision", revision);
@ -735,61 +705,12 @@ static void header_done_cb(struct uclient *cl)
request_done(cl);
rc=-ESRCH;
break;
case 409:
fprintf(stderr, "Conflicting packages requested\n");
request_done(cl);
rc=-EINVAL;
break;
case 412:
fprintf(stderr, "%s target %s (%s) not found. Please report this at %s\n",
distribution, target, board_name, server_issues);
request_done(cl);
rc=-ENOSYS;
break;
case 413:
fprintf(stderr, "image too big.\n");
rc=-E2BIG;
request_done(cl);
break;
case 416:
fprintf(stderr, "File download already fully retrieved; nothing to do.\n");
request_done(cl);
break;
case 422:
fprintf(stderr, "unknown package '%s' requested.\n",
blobmsg_get_string(tb[H_UNKNOWN_PACKAGE]));
rc=-ENOPKG;
request_done(cl);
break;
case 501:
fprintf(stderr, "ImageBuilder didn't produce sysupgrade file.\n");
rc=-ENODATA;
request_done(cl);
break;
case 204:
fprintf(stdout, "system is up to date.\n");
uptodate=1;
rc=0;
request_done(cl);
break;
case 206:
if (!cur_resume) {
fprintf(stderr, "Error: Partial content received, full content requested\n");
request_done(cl);
break;
}
if (!tb[H_RANGE]) {
fprintf(stderr, "Content-Range header is missing\n");
break;
}
if (sscanf(blobmsg_get_string(tb[H_RANGE]),
"bytes %"PRIu64"-%"PRIu64"/%"PRIu64,
&resume_offset, &resume_end, &resume_size) != 3) {
fprintf(stderr, "Content-Range header is invalid\n");
break;
}
case 201:
case 202:
retry = true;
@ -1030,52 +951,6 @@ static char* alloc_replace_var(char *in, const char *var, const char *replace)
return res;
}
static time_t parse_reldate(char *str)
{
int m, d, y;
if (!str ||
strlen(str) != 10 ||
sscanf(str, "%4d-%2d-%2d", &y, &m, &d) != 3)
return (time_t)0;
struct tm time = {
.tm_mday = d,
.tm_mon = m - 1,
.tm_year = y - 1900,
};
return timegm(&time);
}
static int json_to_string_arrays(struct blob_attr *j, char ***vars, char ***names)
{
int i = 0;
struct blob_attr *cur;
int rem;
if (j) {
i = blobmsg_check_array(j, BLOBMSG_TYPE_STRING);
if (i < 0)
return i;
}
if (i > 0) {
*vars = calloc((i + 1), sizeof(char *));
if (names)
*names = calloc((i + 1), sizeof(char *));
i = 0;
blobmsg_for_each_attr(cur, j, rem) {
if (names)
(*names)[i] = strdup(blobmsg_name(cur));
(*vars)[i++] = strdup(blobmsg_get_string(cur));
}
}
return i;
}
static int request_target(struct branch *br, char *url)
{
static struct blob_buf boardbuf;
@ -1097,12 +972,7 @@ static int request_target(struct branch *br, char *url)
if (!tb[TARGET_METADATA_VERSION] ||
!tb[TARGET_ARCH_PACKAGES] ||
!tb[TARGET_DEFAULT_PACKAGES] ||
!tb[TARGET_DEVICE_PACKAGES] ||
!tb[TARGET_IMAGE_PREFIX] ||
!tb[TARGET_IMAGES] ||
!tb[TARGET_SOURCE_DATE_EPOCH] ||
!tb[TARGET_SUPPORTED_DEVICES] ||
!tb[TARGET_TARGET]) {
blob_buf_free(&boardbuf);
return -ENODATA;
@ -1119,9 +989,6 @@ static int request_target(struct branch *br, char *url)
if (strcmp(blobmsg_get_string(tb[TARGET_ARCH_PACKAGES]), br->arch_packages))
return -EINVAL;
json_to_string_arrays(tb[TARGET_DEFAULT_PACKAGES], &br->default_packages, NULL);
json_to_string_arrays(tb[TARGET_DEVICE_PACKAGES], &br->device_packages, NULL);
if (tb[TARGET_VERSION_CODE])
br->version_code = strdup(blobmsg_get_string(tb[TARGET_VERSION_CODE]));
@ -1158,7 +1025,6 @@ static void process_branch(struct blob_attr *branch, bool only_active)
/* mandatory fields */
if (!(tb[BRANCH_ENABLED] && blobmsg_get_bool(tb[BRANCH_ENABLED]) &&
tb[BRANCH_NAME] && tb[BRANCH_PATH] && tb[BRANCH_PATH_PACKAGES] &&
tb[BRANCH_UPDATES] && tb[BRANCH_PUBKEY] && tb[BRANCH_REPOS] &&
tb[BRANCH_VERSIONS] && tb[BRANCH_TARGETS]))
return;
@ -1181,13 +1047,6 @@ static void process_branch(struct blob_attr *branch, bool only_active)
br->name = strdup(blobmsg_get_string(tb[BRANCH_NAME]));
br->path = strdup(blobmsg_get_string(tb[BRANCH_PATH]));
br->path_packages = strdup(blobmsg_get_string(tb[BRANCH_PATH_PACKAGES]));
br->pubkey = strdup(blobmsg_get_string(tb[BRANCH_PUBKEY]));
br->updates = strdup(blobmsg_get_string(tb[BRANCH_UPDATES]));
br->release_time = parse_reldate(blobmsg_get_string(tb[BRANCH_DATE_RELEASE]));
br->eol_time = parse_reldate(blobmsg_get_string(tb[BRANCH_DATE_RELEASE]));
json_to_string_arrays(tb[BRANCH_REPOS], &br->repos, NULL);
json_to_string_arrays(tb[BRANCH_EXTRA_REPOS], &br->extra_repos, &br->extra_repos_names);
br->version = strdup(blobmsg_get_string(curver));
br->snapshot = !!strcasestr(blobmsg_get_string(curver), "snapshot");
@ -1574,7 +1433,9 @@ static void usage(const char *arg0)
fprintf(stdout, " -r\t\tcheck only for release upgrades\n");
fprintf(stdout, " -F <fstype>\toverride filesystem type\n");
fprintf(stdout, " -y\t\tdon't wait for user confirmation\n");
fprintf(stdout, "\n");
fprintf(stdout, "Please report issues to improve the server:\n");
fprintf(stdout, "%s\n", server_issues);
}