basefiles: Reword sysupgrade message
[openwrt/staging/chunkeey.git] / package / base-files / files / sbin / sysupgrade
index 2d67371ef74b4b970076a069e97f4fd6a1e0bc95..482be068d9d9be3d740989f03c54df01719e7a90 100755 (executable)
@@ -1,13 +1,9 @@
 #!/bin/sh
 
-[ "$1" = "nand" ] && exec /lib/upgrade/stage2 "$2" "$3"
-
 . /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
@@ -59,7 +55,6 @@ Usage: $0 [<upgrade-option>...] <image file or URL>
        $0 [-q] [-i] <backup-command> <file>
 
 upgrade-option:
-       -d <delay>   add a delay before rebooting
        -f <config>  restore configuration from .tar.gz (file or url)
        -i           interactive mode
        -c           attempt to preserve all changed files in /etc/
@@ -101,25 +96,38 @@ EOF
 # prevent messages from clobbering the tarball when using stdout
 [ "$CONF_BACKUP" = "-" ] && export VERBOSE=0
 
+
+list_conffiles() {
+       awk '
+               BEGIN { conffiles = 0 }
+               /^Conffiles:/ { conffiles = 1; next }
+               !/^ / { conffiles = 0; next }
+               conffiles == 1 { print }
+       ' /usr/lib/opkg/status
+}
+
+list_changed_conffiles() {
+       # Cannot handle spaces in filenames - but opkg cannot either...
+       list_conffiles | while read file csum; do
+               [ -r "$file" ] || continue
+
+               echo "${csum}  ${file}" | sha256sum -sc - || echo "$file"
+       done
+}
+
 add_uci_conffiles() {
        local file="$1"
        ( find $(sed -ne '/^[[:space:]]*$/d; /^#/d; p' \
                /etc/sysupgrade.conf /lib/upgrade/keep.d/* 2>/dev/null) \
                -type f -o -type l 2>/dev/null;
-         opkg list-changed-conffiles ) | sort -u > "$file"
+         list_changed_conffiles ) | sort -u > "$file"
        return 0
 }
 
 add_overlayfiles() {
        local file="$1"
-       if [ -d /overlay/upper ]; then
-               local overlaydir="/overlay/upper"
-       else
-               local overlaydir="/overlay"
-       fi
-       find $overlaydir/etc/ -type f -o -type l | sed \
+       find /overlay/upper/etc/ -type f -o -type l | sed \
                -e 's,^/overlay\/upper/,/,' \
-               -e 's,^/overlay/,/,' \
                -e '\,/META_[a-zA-Z0-9]*$,d' \
                -e '\,/functions.sh$,d' \
                -e '\,/[^/]*-opkg$,d' \
@@ -130,9 +138,16 @@ add_overlayfiles() {
 # hooks
 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" || \
+
+if [ $SAVE_OVERLAY = 1 ]; then
+       [ ! -d /overlay/upper/etc ] && {
+               echo "Cannot find '/overlay/upper/etc', required for '-c'"
+               exit 1
+       }
        sysupgrade_init_conffiles="add_overlayfiles"
+else
+       sysupgrade_init_conffiles="add_uci_conffiles"
+fi
 
 include /lib/upgrade
 
@@ -156,7 +171,7 @@ do_save_conffiles() {
 }
 
 if [ $CONF_BACKUP_LIST -eq 1 ]; then
-       add_uci_conffiles "$CONFFILES"
+       run_hooks "$CONFFILES" $sysupgrade_init_conffiles
        cat "$CONFFILES"
        rm -f "$CONFFILES"
        exit 0
@@ -252,9 +267,17 @@ fi
 run_hooks "" $sysupgrade_pre_upgrade
 
 install_bin /sbin/upgraded
-v "Commencing upgrade. All shell sessions will be closed now."
-ubus call system sysupgrade "{
-       \"prefix\": \"$RAM_ROOT\",
-       \"path\": $(json_string "$IMAGE"),
-       \"command\": \". /lib/functions.sh; include /lib/upgrade; do_upgrade_stage2\"
-}"
+v "Commencing upgrade. Closing all shell sessions."
+
+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
+       ubus call system sysupgrade "{
+               \"prefix\": $(json_string "$RAM_ROOT"),
+               \"path\": $(json_string "$IMAGE"),
+               \"command\": $(json_string "$COMMAND")
+       }"
+fi