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..2a5b258608
--- /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.1493040735.git.mschif...@universe-factory.net>
+In-Reply-To: 
<3462ccc0c91964ec92c1c61cde803a6504b2fb24.1493040735.git.mschif...@universe-factory.net>
+References: 
<3462ccc0c91964ec92c1c61cde803a6504b2fb24.1493040735.git.mschif...@universe-factory.net>
+From: Matthias Schiffer <mschif...@universe-factory.net>
+Date: Sun, 23 Apr 2017 19:04:25 +0200
+Subject: [PATCH 3/5] 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.13.0


_______________________________________________
Lede-dev mailing list
Lede-dev@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/lede-dev

Reply via email to