mirror of
https://github.com/freifunk-gluon/packages.git
synced 2024-06-17 04:33:59 +02:00
autoupdater: add check for manifest info
With the option -c (--check) we only download the manifest and verify them. If manifest is valid and a new firmware is available then result is printed to stdout. VERSION=<image_version> SIZE=<image_size> Signed-off-by: Florian Eckert <fe@dev.tdt.de>
This commit is contained in:
parent
1dc8416ac1
commit
66f36382f0
|
@ -84,6 +84,8 @@ static void usage(void) {
|
||||||
" -h, --help Show this help.\n\n"
|
" -h, --help Show this help.\n\n"
|
||||||
" -n, --no-action Download and validate the manifest as usual, but do not\n"
|
" -n, --no-action Download and validate the manifest as usual, but do not\n"
|
||||||
" really flash a new firmware if one is available.\n\n"
|
" really flash a new firmware if one is available.\n\n"
|
||||||
|
" -c, --check Validate the manifest as usual, but do not\n"
|
||||||
|
" download a new firmware.\n\n"
|
||||||
" --fallback Upgrade if and only if the upgrade timespan of the new\n"
|
" --fallback Upgrade if and only if the upgrade timespan of the new\n"
|
||||||
" version has passed for at least 24 hours.\n\n"
|
" version has passed for at least 24 hours.\n\n"
|
||||||
" --force-version Skip version check to allow downgrades.\n\n"
|
" --force-version Skip version check to allow downgrades.\n\n"
|
||||||
|
@ -100,6 +102,7 @@ static void parse_args(int argc, char *argv[], struct settings *settings) {
|
||||||
OPTION_FORCE = 'f',
|
OPTION_FORCE = 'f',
|
||||||
OPTION_HELP = 'h',
|
OPTION_HELP = 'h',
|
||||||
OPTION_NO_ACTION = 'n',
|
OPTION_NO_ACTION = 'n',
|
||||||
|
OPTION_CHECK = 'c',
|
||||||
OPTION_FALLBACK = 256,
|
OPTION_FALLBACK = 256,
|
||||||
OPTION_FORCE_VERSION = 257,
|
OPTION_FORCE_VERSION = 257,
|
||||||
};
|
};
|
||||||
|
@ -109,12 +112,13 @@ static void parse_args(int argc, char *argv[], struct settings *settings) {
|
||||||
{"force", no_argument, NULL, OPTION_FORCE},
|
{"force", no_argument, NULL, OPTION_FORCE},
|
||||||
{"fallback", no_argument, NULL, OPTION_FALLBACK},
|
{"fallback", no_argument, NULL, OPTION_FALLBACK},
|
||||||
{"no-action", no_argument, NULL, OPTION_NO_ACTION},
|
{"no-action", no_argument, NULL, OPTION_NO_ACTION},
|
||||||
|
{"check", no_argument, NULL, OPTION_CHECK},
|
||||||
{"force-version", no_argument, NULL, OPTION_FORCE_VERSION},
|
{"force-version", no_argument, NULL, OPTION_FORCE_VERSION},
|
||||||
{"help", no_argument, NULL, OPTION_HELP},
|
{"help", no_argument, NULL, OPTION_HELP},
|
||||||
};
|
};
|
||||||
|
|
||||||
while (true) {
|
while (true) {
|
||||||
int c = getopt_long(argc, argv, "b:fhn", options, NULL);
|
int c = getopt_long(argc, argv, "b:fhnc", options, NULL);
|
||||||
if (c < 0)
|
if (c < 0)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -139,6 +143,10 @@ static void parse_args(int argc, char *argv[], struct settings *settings) {
|
||||||
settings->no_action = true;
|
settings->no_action = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case OPTION_CHECK:
|
||||||
|
settings->check = true;
|
||||||
|
break;
|
||||||
|
|
||||||
case OPTION_FORCE_VERSION:
|
case OPTION_FORCE_VERSION:
|
||||||
settings->force_version = true;
|
settings->force_version = true;
|
||||||
break;
|
break;
|
||||||
|
@ -286,7 +294,8 @@ static bool autoupdate(const char *mirror, struct settings *s, int lock_fd) {
|
||||||
sprintf(manifest_url, "%s/%s.manifest", mirror, s->branch);
|
sprintf(manifest_url, "%s/%s.manifest", mirror, s->branch);
|
||||||
|
|
||||||
|
|
||||||
printf("Retrieving manifest from %s ...\n", manifest_url);
|
if (!s->check)
|
||||||
|
printf("Retrieving manifest from %s ...\n", manifest_url);
|
||||||
|
|
||||||
/* Download manifest */
|
/* Download manifest */
|
||||||
ecdsa_sha256_init(&m->hash_ctx);
|
ecdsa_sha256_init(&m->hash_ctx);
|
||||||
|
@ -334,6 +343,17 @@ static bool autoupdate(const char *mirror, struct settings *s, int lock_fd) {
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (s->check) {
|
||||||
|
printf(
|
||||||
|
"VERSION=%s\n"
|
||||||
|
"SIZE=%u\n",
|
||||||
|
m->version,
|
||||||
|
m->imagesize
|
||||||
|
);
|
||||||
|
ret = true;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
if (!s->force && random() >= RAND_MAX * get_probability(m->date, m->priority, s->fallback)) {
|
if (!s->force && random() >= RAND_MAX * get_probability(m->date, m->priority, s->fallback)) {
|
||||||
fputs("autoupdater: info: no autoupdate this time. Use -f to override.\n", stderr);
|
fputs("autoupdater: info: no autoupdate this time. Use -f to override.\n", stderr);
|
||||||
ret = true;
|
ret = true;
|
||||||
|
|
|
@ -33,6 +33,7 @@ struct settings {
|
||||||
bool force;
|
bool force;
|
||||||
bool fallback;
|
bool fallback;
|
||||||
bool no_action;
|
bool no_action;
|
||||||
|
bool check;
|
||||||
bool force_version;
|
bool force_version;
|
||||||
const char *branch;
|
const char *branch;
|
||||||
unsigned long good_signatures;
|
unsigned long good_signatures;
|
||||||
|
|
Loading…
Reference in New Issue
Block a user