base-files: use jshn lib for ubus sysupgrade argument generation
[openwrt/staging/dedeckeh.git] / package / base-files / files / sbin / sysupgrade
index 58b613b5a0854f25ca824a1b439fd505e2dabdca..abd34bdcfb6388280e844ce370c60f23d25dc806 100755 (executable)
@@ -2,8 +2,10 @@
 
 . /lib/functions.sh
 . /lib/functions/system.sh
+. /usr/share/libubox/jshn.sh
 
 # initialize defaults
+export MTD_ARGS=""
 export MTD_CONFIG_ARGS=""
 export INTERACTIVE=0
 export VERBOSE=1
@@ -190,9 +192,6 @@ add_overlayfiles() {
        return 0
 }
 
-# hooks
-sysupgrade_image_check="fwtool_check_signature fwtool_check_image platform_check_image"
-
 if [ $SAVE_OVERLAY = 1 ]; then
        [ ! -d /overlay/upper/etc ] && {
                echo "Cannot find '/overlay/upper/etc', required for '-c'" >&2
@@ -295,7 +294,7 @@ type platform_check_image >/dev/null 2>/dev/null || {
 case "$IMAGE" in
        http://*|\
        https://*)
-               wget -O/tmp/sysupgrade.img "$IMAGE"
+               wget -O/tmp/sysupgrade.img "$IMAGE" || exit 1
                IMAGE=/tmp/sysupgrade.img
                ;;
 esac
@@ -315,20 +314,19 @@ case "$IMAGE" in
                ;;
 esac
 
-export ARGV="$IMAGE"
-export ARGC=1
-
-for check in $sysupgrade_image_check; do
-       ( $check "$IMAGE" ) || {
-               if [ $FORCE -eq 1 ]; then
-                       echo "Image check '$check' failed but --force given - will update anyway!" >&2
-                       break
-               else
-                       echo "Image check '$check' failed." >&2
-                       exit 1
-               fi
-       }
-done
+json_load "$(/usr/libexec/validate_firmware_image "$IMAGE")" || {
+       echo "Failed to check image"
+       exit 1
+}
+json_get_var valid "valid"
+[ "$valid" -eq 0 ] && {
+       if [ $FORCE -eq 1 ]; then
+               echo "Image check failed but --force given - will update anyway!" >&2
+       else
+               echo "Image check failed." >&2
+               exit 1
+       fi
+}
 
 if [ -n "$CONF_IMAGE" ]; then
        case "$(get_magic_word $CONF_IMAGE cat)" in
@@ -353,24 +351,24 @@ if [ $TEST -eq 1 ]; then
        exit 0
 fi
 
-if [ $SAVE_PARTITIONS -eq 0 ]; then
-       touch /tmp/sysupgrade.always.overwrite.bootdisk.partmap
-else
-       rm -f /tmp/sysupgrade.always.overwrite.bootdisk.partmap
-fi
-
 install_bin /sbin/upgraded
 v "Commencing upgrade. Closing all shell sessions."
 
-COMMAND='. /lib/functions.sh; include /lib/upgrade; do_upgrade_stage2'
+COMMAND='/lib/upgrade/do_stage2'
 
 if [ -n "$FAILSAFE" ]; then
        printf '%s\x00%s\x00%s' "$RAM_ROOT" "$IMAGE" "$COMMAND" >/tmp/sysupgrade
        lock -u /tmp/.failsafe
 else
-       ubus call system sysupgrade "{
-               \"prefix\": $(json_string "$RAM_ROOT"),
-               \"path\": $(json_string "$IMAGE"),
-               \"command\": $(json_string "$COMMAND")
-       }"
+       json_init
+       json_add_string prefix "$RAM_ROOT"
+       json_add_string path "$IMAGE"
+       [ $FORCE -eq 1 ] && json_add_boolean force 1
+       [ $SAVE_CONFIG -eq 1 ] && json_add_string backup "$CONF_TAR"
+       json_add_string command "$COMMAND"
+       json_add_object options
+       json_add_int save_partitions "$SAVE_PARTITIONS"
+       json_close_object
+
+       ubus call system sysupgrade "$(json_dump)"
 fi