diff --git a/package/base-files/files/sbin/sysupgrade b/package/base-files/files/sbin/sysupgrade index 3a5087a0c8..935d08048e 100755 --- a/package/base-files/files/sbin/sysupgrade +++ b/package/base-files/files/sbin/sysupgrade @@ -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 @@ -249,7 +248,7 @@ do_save_conffiles() { v "Saving config files..." [ "$VERBOSE" -gt 1 ] && TAR_V="v" || TAR_V="" - tar c${TAR_V}zpf "$conf_tar" -T "$CONFFILES" 2>/dev/null + tar c${TAR_V}zf "$conf_tar" -T "$CONFFILES" 2>/dev/null if [ "$?" -ne 0 ]; then echo "Failed to create the configuration backup." rm -f "$conf_tar" @@ -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,27 @@ 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 + force_attr="" + [ $FORCE -eq 1 ] && force_attr="\"force\": true," + backup_attr="" + [ $SAVE_CONFIG -eq 1 ] && backup_attr="\"backup\": $(json_string $CONF_TAR)," ubus call system sysupgrade "{ \"prefix\": $(json_string "$RAM_ROOT"), \"path\": $(json_string "$IMAGE"), - \"command\": $(json_string "$COMMAND") + $force_attr + $backup_attr + \"command\": $(json_string "$COMMAND"), + \"options\": { + \"save_partitions\": $SAVE_PARTITIONS + } }" fi