diff --git a/package/base-files/files/sbin/sysupgrade b/package/base-files/files/sbin/sysupgrade index 935d08048e..3a5087a0c8 100755 --- a/package/base-files/files/sbin/sysupgrade +++ b/package/base-files/files/sbin/sysupgrade @@ -2,10 +2,8 @@ . /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 @@ -192,6 +190,9 @@ 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 @@ -248,7 +249,7 @@ do_save_conffiles() { v "Saving config files..." [ "$VERBOSE" -gt 1 ] && TAR_V="v" || TAR_V="" - tar c${TAR_V}zf "$conf_tar" -T "$CONFFILES" 2>/dev/null + tar c${TAR_V}zpf "$conf_tar" -T "$CONFFILES" 2>/dev/null if [ "$?" -ne 0 ]; then echo "Failed to create the configuration backup." rm -f "$conf_tar" @@ -314,19 +315,20 @@ case "$IMAGE" in ;; esac -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 -} +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 if [ -n "$CONF_IMAGE" ]; then case "$(get_magic_word $CONF_IMAGE cat)" in @@ -351,27 +353,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/upgrade/do_stage2' +COMMAND='. /lib/functions.sh; include /lib/upgrade; do_upgrade_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"), - $force_attr - $backup_attr - \"command\": $(json_string "$COMMAND"), - \"options\": { - \"save_partitions\": $SAVE_PARTITIONS - } + \"command\": $(json_string "$COMMAND") }" fi