[LEDE-DEV] [RFC 04/13] procd: upgraded: add support for passing a "command" argument to stage2

Matthias Schiffer mschiffer at universe-factory.net
Sun Apr 23 17:06:53 PDT 2017


This allows us to make use of upgraded in "snapshot convert" as well.

Signed-off-by: Matthias Schiffer <mschiffer at 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.mschiffer at universe-factory.net>
+In-Reply-To: <3462ccc0c91964ec92c1c61cde803a6504b2fb24.1492975837.git.mschiffer at universe-factory.net>
+References: <3462ccc0c91964ec92c1c61cde803a6504b2fb24.1492975837.git.mschiffer at universe-factory.net>
+From: Matthias Schiffer <mschiffer at 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 <mschiffer at 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




More information about the Lede-dev mailing list