X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fopenwrt.git;a=blobdiff_plain;f=package%2Fbase-files%2Ffiles%2Fsbin%2Fsysupgrade;h=359f21f51c3d5491f8bfcc9bf96819d2e91c11cc;hp=2f441f868badb57ed70d67b15117c2bdd47cc137;hb=438dcbfe74a6da1a8949d8fb785092d934499b60;hpb=4aeeead303cda2a85895fde9d3983eae323a30e1 diff --git a/package/base-files/files/sbin/sysupgrade b/package/base-files/files/sbin/sysupgrade index 2f441f868b..359f21f51c 100755 --- a/package/base-files/files/sbin/sysupgrade +++ b/package/base-files/files/sbin/sysupgrade @@ -1,17 +1,15 @@ #!/bin/sh + . /lib/functions.sh . /lib/functions/system.sh # initialize defaults -RAMFS_COPY_BIN="" # extra programs for temporary ramfs root -RAMFS_COPY_DATA="" # extra data files export MTD_CONFIG_ARGS="" export INTERACTIVE=0 export VERBOSE=1 export SAVE_CONFIG=1 export SAVE_OVERLAY=0 export SAVE_PARTITIONS=1 -export DELAY= export CONF_IMAGE= export CONF_BACKUP_LIST=0 export CONF_BACKUP= @@ -25,7 +23,6 @@ export TEST=0 while [ -n "$1" ]; do case "$1" in -i) export INTERACTIVE=1;; - -d) export DELAY="$2"; shift;; -v) export VERBOSE="$(($VERBOSE + 1))";; -q) export VERBOSE="$(($VERBOSE - 1))";; -n) export SAVE_CONFIG=0;; @@ -50,10 +47,9 @@ done export CONFFILES=/tmp/sysupgrade.conffiles export CONF_TAR=/tmp/sysupgrade.tgz -export ARGV="$*" -export ARGC="$#" +IMAGE="$1" -[ -z "$ARGV" -a -z "$NEED_IMAGE" -o $HELP -gt 0 ] && { +[ -z "$IMAGE" -a -z "$NEED_IMAGE" -o $HELP -gt 0 ] && { cat <...] $0 [-q] [-i] @@ -90,7 +86,7 @@ EOF exit 1 } -[ -n "$ARGV" -a -n "$NEED_IMAGE" ] && { +[ -n "$IMAGE" -a -n "$NEED_IMAGE" ] && { cat <<-EOF -b|--create-backup and -r|--restore-backup do not perform a firmware upgrade. Do not specify both -b|-r and a firmware image. @@ -128,21 +124,21 @@ add_overlayfiles() { } # hooks -sysupgrade_image_check="platform_check_image" +sysupgrade_image_check="fwtool_check_image platform_check_image" +sysupgrade_pre_upgrade="fwtool_pre_upgrade" [ $SAVE_OVERLAY = 0 -o ! -d /overlay/etc ] && \ sysupgrade_init_conffiles="add_uci_conffiles" || \ sysupgrade_init_conffiles="add_overlayfiles" include /lib/upgrade -[ "$1" = "nand" ] && nand_upgrade_stage2 $@ - do_save_conffiles() { local conf_tar="${1:-$CONF_TAR}" [ -z "$(rootfs_type)" ] && { echo "Cannot save config while running from ramdisk." ask_bool 0 "Abort" && exit + rm -f "$conf_tar" return 0 } run_hooks "$CONFFILES" $sysupgrade_init_conffiles @@ -183,8 +179,33 @@ type platform_check_image >/dev/null 2>/dev/null || { exit 1 } +case "$IMAGE" in + http://*) + wget -O/tmp/sysupgrade.img "$IMAGE" + IMAGE=/tmp/sysupgrade.img + ;; +esac + +IMAGE="$(readlink -f "$IMAGE")" + +case "$IMAGE" in + '') + echo "Image file not found." + exit 1 + ;; + /tmp/*) ;; + *) + v "Image not in /tmp, copying..." + cp -f "$IMAGE" /tmp/sysupgrade.img + IMAGE=/tmp/sysupgrade.img + ;; +esac + +export ARGV="$IMAGE" +export ARGC=1 + for check in $sysupgrade_image_check; do - ( eval "$check \"\$ARGV\"" ) || { + ( $check "$IMAGE" ) || { if [ $FORCE -eq 1 ]; then echo "Image check '$check' failed but --force given - will update anyway!" break @@ -210,6 +231,7 @@ elif ask_bool $SAVE_CONFIG "Keep config files over reflash"; then [ $TEST -eq 1 ] || do_save_conffiles export SAVE_CONFIG=1 else + [ $TEST -eq 1 ] || rm -f "$CONF_TAR" export SAVE_CONFIG=0 fi @@ -217,28 +239,26 @@ if [ $TEST -eq 1 ]; then exit 0 fi -run_hooks "" $sysupgrade_pre_upgrade - -# Some platforms/devices may want different sysupgrade process, e.g. without -# killing processes yet or calling ubus system upgrade method. -# This is needed e.g. on NAND devices where we just want to trigger stage1 at -# this point. -if type 'platform_pre_upgrade' >/dev/null 2>/dev/null; then - platform_pre_upgrade "$ARGV" +if [ $SAVE_PARTITIONS -eq 0 ]; then + touch /tmp/sysupgrade.always.overwrite.bootdisk.partmap +else + rm -f /tmp/sysupgrade.always.overwrite.bootdisk.partmap fi -ubus call system upgrade -touch /tmp/sysupgrade +run_hooks "" $sysupgrade_pre_upgrade + +install_bin /sbin/upgraded +v "Commencing upgrade. All shell sessions will be closed now." -if [ ! -f /tmp/failsafe ] ; then - kill_remaining TERM - sleep 3 - kill_remaining KILL -fi +COMMAND='. /lib/functions.sh; include /lib/upgrade; do_upgrade_stage2' -if [ -n "$(rootfs_type)" ]; then - v "Switching to ramdisk..." - run_ramfs '. /lib/functions.sh; include /lib/upgrade; do_upgrade' +if [ -n "$FAILSAFE" ]; then + printf '%s\x00%s\x00%s' "$RAM_ROOT" "$IMAGE" "$COMMAND" >/tmp/sysupgrade + lock -u /tmp/.failsafe else - do_upgrade + ubus call system sysupgrade "{ + \"prefix\": $(json_string "$RAM_ROOT"), + \"path\": $(json_string "$IMAGE"), + \"command\": $(json_string "$COMMAND") + }" fi