This allows us to make use of upgraded in "snapshot convert" as well.
Signed-off-by: Matthias Schiffer <mschif...@universe-factory.net> Note: obviously, this patch should go into the procd repo when it is actually applied; it is provided like this for now to allow easier testing of the whole series. --- ...d-support-for-passing-a-command-argument-.patch | 104 +++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 package/system/procd/patches/0003-upgraded-add-support-for-passing-a-command-argument-.patch diff --git a/package/system/procd/patches/0003-upgraded-add-support-for-passing-a-command-argument-.patch b/package/system/procd/patches/0003-upgraded-add-support-for-passing-a-command-argument-.patch new file mode 100644 index 0000000000..5d6f39204d --- /dev/null +++ b/package/system/procd/patches/0003-upgraded-add-support-for-passing-a-command-argument-.patch @@ -0,0 +1,104 @@ +From a90626d588abf71426f57513174427b0bf8feeab Mon Sep 17 00:00:00 2001 +Message-Id: <a90626d588abf71426f57513174427b0bf8feeab.1492975837.git.mschif...@universe-factory.net> +In-Reply-To: <3462ccc0c91964ec92c1c61cde803a6504b2fb24.1492975837.git.mschif...@universe-factory.net> +References: <3462ccc0c91964ec92c1c61cde803a6504b2fb24.1492975837.git.mschif...@universe-factory.net> +From: Matthias Schiffer <mschif...@universe-factory.net> +Date: Sun, 23 Apr 2017 19:04:25 +0200 +Subject: [PATCH 3/4] upgraded: add support for passing a "command" argument to + stage2 + +This allows us to make use of upgraded in "snapshot convert" as well. + +Signed-off-by: Matthias Schiffer <mschif...@universe-factory.net> +--- + system.c | 10 +++++++--- + upgraded/upgraded.c | 13 +++++++------ + 2 files changed, 14 insertions(+), 9 deletions(-) + +diff --git a/system.c b/system.c +index 193c9b0..69ba57e 100644 +--- a/system.c ++++ b/system.c +@@ -346,19 +346,21 @@ static int proc_signal(struct ubus_context *ctx, struct ubus_object *obj, + enum { + SYSUPGRADE_PATH, + SYSUPGRADE_PREFIX, ++ SYSUPGRADE_COMMAND, + __SYSUPGRADE_MAX + }; + + static const struct blobmsg_policy sysupgrade_policy[__SYSUPGRADE_MAX] = { + [SYSUPGRADE_PATH] = { .name = "path", .type = BLOBMSG_TYPE_STRING }, + [SYSUPGRADE_PREFIX] = { .name = "prefix", .type = BLOBMSG_TYPE_STRING }, ++ [SYSUPGRADE_COMMAND] = { .name = "command", .type = BLOBMSG_TYPE_STRING }, + }; + + static void +-procd_exec_upgraded(const char *prefix, char *path) ++procd_exec_upgraded(const char *prefix, char *path, char *command) + { + char *wdt_fd = watchdog_fd(); +- char *argv[] = { "/sbin/upgraded", NULL, NULL}; ++ char *argv[] = { "/sbin/upgraded", NULL, NULL, NULL}; + + if (chroot(prefix)) { + fprintf(stderr, "Failed to chroot for upgraded exec.\n"); +@@ -366,6 +368,7 @@ procd_exec_upgraded(const char *prefix, char *path) + } + + argv[1] = path; ++ argv[2] = command; + + DEBUG(2, "Exec to upgraded now\n"); + if (wdt_fd) { +@@ -395,7 +398,8 @@ static int sysupgrade(struct ubus_context *ctx, struct ubus_object *obj, + return UBUS_STATUS_INVALID_ARGUMENT; + + procd_exec_upgraded(blobmsg_get_string(tb[SYSUPGRADE_PREFIX]), +- blobmsg_get_string(tb[SYSUPGRADE_PATH])); ++ blobmsg_get_string(tb[SYSUPGRADE_PATH]), ++ tb[SYSUPGRADE_COMMAND] ? blobmsg_get_string(tb[SYSUPGRADE_COMMAND]) : NULL); + return 0; + } + +diff --git a/upgraded/upgraded.c b/upgraded/upgraded.c +index aa0b4ff..303edb7 100644 +--- a/upgraded/upgraded.c ++++ b/upgraded/upgraded.c +@@ -39,11 +39,12 @@ static void upgrade_proc_cb(struct uloop_process *proc, int ret) + uloop_end(); + } + +-static void sysupgrade(char *folder) ++static void sysupgrade(char *path, char *command) + { +- char *args[] = { "/sbin/sysupgrade", "nand", NULL, NULL }; ++ char *args[] = { "/sbin/sysupgrade", "nand", NULL, NULL, NULL }; + +- args[2] = folder; ++ args[2] = path; ++ args[3] = command; + upgrade_proc.cb = upgrade_proc_cb; + upgrade_proc.pid = fork(); + if (!upgrade_proc.pid) { +@@ -80,14 +81,14 @@ int main(int argc, char **argv) + } + close(fd); + +- if (argc != 2) { +- fprintf(stderr, "sysupgrade stage 2 failed, no folder specified\n"); ++ if (argc != 2 && argc != 3) { ++ fprintf(stderr, "sysupgrade stage 2 failed, invalid command line\n"); + return -1; + } + + uloop_init(); + watchdog_init(0); +- sysupgrade(argv[1]); ++ sysupgrade(argv[1], (argc == 3) ? argv[2] : NULL); + uloop_run(); + + reboot(RB_AUTOBOOT); +-- +2.12.2 + -- 2.12.2 _______________________________________________ Lede-dev mailing list Lede-dev@lists.infradead.org http://lists.infradead.org/mailman/listinfo/lede-dev