-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On 05/22/2014 10:16 PM, André Valentin wrote:
>
> Signed-off-by: André Valentin <[email protected]> ---
> package/system/procd/patches/100-sysupgrade.patch | 73
> +++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644
> package/system/procd/patches/100-sysupgrade.patch
>
> diff --git a/package/system/procd/patches/100-sysupgrade.patch
> b/package/system/procd/patches/100-sysupgrade.patch new file mode 100644
> index 0000000..dbe9e5d --- /dev/null +++
> b/package/system/procd/patches/100-sysupgrade.patch @@ -0,0 +1,73 @@ +diff
> -uNrp procd-2014-03-18.orig/procd.h procd-2014-03-18/procd.h +---
> procd-2014-03-18.orig/procd.h 2014-03-21 10:15:26.000000000 +0100 ++++
> procd-2014-03-18/procd.h 2014-05-20 22:09:35.000000000 +0200 +@@ -36,6
> +36,7 @@ void ubus_init_system(struct ubus_contex + + void
> procd_state_next(void); + void procd_shutdown(int event); ++void
> procd_sysupgrade_as_init(int event); + void procd_early(void); + void
> procd_preinit(void); + void procd_coldplug(void); +diff -uNrp
> procd-2014-03-18.orig/system.c procd-2014-03-18/system.c +---
> procd-2014-03-18.orig/system.c 2014-03-21 10:15:26.000000000 +0100 ++++
> procd-2014-03-18/system.c 2014-05-20 22:12:17.000000000 +0200 +@@ -195,6
> +195,50 @@ static int system_upgrade(struct ubus_co + } + + enum { ++
> UPG_COMMAND, ++ UPG_ARGUMENTS, ++ __UPG_MAX ++}; ++ ++static
> const struct
> blobmsg_policy upgrade_policy[__UPG_MAX] = { ++ [UPG_COMMAND] = { .name
> =
> "command", .type = BLOBMSG_TYPE_STRING }, ++ [UPG_ARGUMENTS] = { .name =
> "arguments", .type = BLOBMSG_TYPE_STRING },
Be careful! sysupgrade parses the arguments and opens files relative to the
current working directory $PWD. While just passing through the arguments
string does work for absolute path names, it will NOT work for relative paths
if $PWD of procd != $PWD of sysupgrade
Probably the best is to pass the arguments as single fields in the blobmsg
instead of passing a string which is later on interpreted by the shell.
[UPG_IMAGE] = { .name = "images", .type = BLOBMSG_TYPE_STRING },
[UPG_SAVECONFIG] = { .name = "saveconfig", .type = BLOBMSG_TYPE_BOOL },
> ++}; ++ ++static int system_upgrade_as_init(struct ubus_context *ctx,
> struct ubus_object *obj, ++ struct ubus_request_data *req,
> const char
> *method, ++ struct blob_attr *msg) ++{ ++ struct blob_attr
> *tb[__UPG_MAX]; ++ const char *cmd; ++ const char *args; ++ ++ if
> (!msg) ++
> return UBUS_STATUS_INVALID_ARGUMENT; ++ ++ blobmsg_parse(upgrade_policy,
> __UPG_MAX, tb, blob_data(msg), blob_len(msg));
these two lines are indented with spaces instead of tabs:
> ++ if (!tb[UPG_COMMAND] || !tb[UPG_ARGUMENTS]) ++
> return UBUS_STATUS_INVALID_ARGUMENT;
> ++ ++ cmd = strdup(blobmsg_get_string(tb[UPG_COMMAND])); ++ args =
> strdup(blobmsg_get_string(tb[UPG_ARGUMENTS])); ++ ++ if (!cmd ||
> !strlen(cmd)) { ++ LOG("sysupgrade command should not be empty!");
> ++
> return 0; ++ } ++ ++ upgrade_running = 1; ++ LOG("Running sysupgrade as
> init, cmd: '%s %s'\n", cmd, args); ++ procd_inittab_run("shutdown"); ++
> if
> (args && strlen(args)) { ++ execl(cmd, cmd, args , (char *) 0); ++
> } ++
> execl(cmd, cmd, (char *) 0); ++ return 0; ++} ++ ++enum { +
> WDT_FREQUENCY, + WDT_TIMEOUT, + WDT_STOP, +@@ -296,6 +337,7 @@ static
> const struct ubus_method system_m + UBUS_METHOD_NOARG("board",
> system_board), + UBUS_METHOD_NOARG("info", system_info), +
> UBUS_METHOD_NOARG("upgrade", system_upgrade), ++
> UBUS_METHOD("upgrade_as_init", system_upgrade_as_init, upgrade_policy), +
> UBUS_METHOD("watchdog", watchdog_set, watchdog_policy), +
> UBUS_METHOD("signal", proc_signal, signal_policy), + };
>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v2.0.22 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://www.enigmail.net/
iQEcBAEBAgAGBQJTf0TyAAoJECBgbL4bcbCQYscH/R9D6e0fNkreS1sc+YoDCXG/
JkuN3j0iVR4/BQFl0W2Bn2L5g392BL0HjFPBDV/M+CDH9Iy0XlDLiAf2k3bJgVsJ
HOWglRWU7OXT/tYgJfpzRqtHJSm1bgH5amMZp7MPhU8KWtPWrI7y7MZYmGpE6kfS
vSjE45WWUVSO9OZfoqgz7t6y+OO4IhEFkEx547HKwEdj56BIH6qL7foia/hQC0sC
VK/aFr1bRBlqM8t4u4dpRrlrltkz7OLBQydcWwnivgpmtmGNGseZwNq5BW6QVHlN
vSfbGXFrbJJaWrqn/U3Ui2Ew0rPdI5tIzQQod4TjT5lMG0A6MVY2wy1g6hb5QRA=
=n18c
-----END PGP SIGNATURE-----
_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel