autoupdater: verify the image before upgrading (#247)

Let sysupgrade run a --test upgrade to verify that the image is
compatible before attempting an upgrade.
This fixes an issue where a router can get stuck without network
connectivity when a a remote autoupgrade was triggered.

Fixes #193
This commit is contained in:
Grische 2021-09-08 17:41:05 +02:00 committed by GitHub
parent 83534952a5
commit 0648b2dbf7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 18 additions and 0 deletions

View File

@ -378,6 +378,24 @@ static bool autoupdate(const char *mirror, struct settings *s, int lock_fd) {
}
}
/* Test the image upgrade (issue #193) */
{
static const char *const exec_builtin = "exec ";
static const char *const test_option = " --test ";
char buf[strlen(exec_builtin) + strlen(sysupgrade_path) + strlen(test_option) + strlen(firmware_path) + 1];
strcpy(buf, exec_builtin);
strcat(buf, sysupgrade_path);
strcat(buf, test_option);
strcat(buf, firmware_path);
const int sysupgrade_ret = system(buf);
if (WEXITSTATUS(sysupgrade_ret) != 0 ) {
fprintf(stderr, "autoupdater: warning: sysupgrade --test failed with return code: %d\n", WEXITSTATUS(sysupgrade_ret));
goto fail_after_download;
}
}
clear_manifest(m);
/**** Call sysupgrade ************************************************/