base-files: sysupgrade: always cleanup after backups
[openwrt/staging/wigyori.git] / package / base-files / files / sbin / sysupgrade
index 7e0a00e13b8ee4be7163936fd01a7beff0ce5c99..43e129e1d77ca00bc0eea41903c788db2eab9643 100755 (executable)
@@ -19,6 +19,7 @@ export CONF_IMAGE=
 export CONF_BACKUP_LIST=0
 export CONF_BACKUP=
 export CONF_RESTORE=
+export IGNORE_MINOR_COMPAT=0
 export NEED_IMAGE=
 export HELP=0
 export FORCE=0
@@ -44,6 +45,7 @@ while [ -n "$1" ]; do
                -F|--force) export FORCE=1;;
                -T|--test) export TEST=1;;
                -h|--help) export HELP=1; break;;
+               --ignore-minor-compat-version) export IGNORE_MINOR_COMPAT=1;;
                -*)
                        echo "Invalid option: $1" >&2
                        exit 1
@@ -80,6 +82,8 @@ upgrade-option:
                     Verify image and config .tar.gz but do not actually flash.
        -F | --force
                     Flash image even if image checks fail, this is dangerous!
+       --ignore-minor-compat-version
+                    Flash image even if the minor compat version is incompatible.
        -q           less verbose
        -v           more verbose
        -h | --help  display this help
@@ -253,11 +257,12 @@ 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
-       if [ "$?" -ne 0 ]; then
+       sed -i -e 's,^/,,' "$CONFFILES"
+       tar c${TAR_V}zf "$conf_tar" -C / -T "$CONFFILES"
+       local err=$?
+       if [ "$err" -ne 0 ]; then
                echo "Failed to create the configuration backup."
                rm -f "$conf_tar"
-               exit 1
        fi
 
        [ "$UMOUNT_ETCBACKUP_DIR" -eq 1 ] && {
@@ -265,6 +270,8 @@ do_save_conffiles() {
                rm -rf "$RAMFS"
        }
        rm -f "$CONFFILES"
+
+       return "$err"
 }
 
 if [ $CONF_BACKUP_LIST -eq 1 ]; then
@@ -277,7 +284,7 @@ fi
 
 if [ -n "$CONF_BACKUP" ]; then
        do_save_conffiles "$CONF_BACKUP"
-       exit $?
+       exit
 fi
 
 if [ -n "$CONF_RESTORE" ]; then
@@ -346,7 +353,7 @@ if [ -n "$CONF_IMAGE" ]; then
        get_image "$CONF_IMAGE" "cat" > "$CONF_TAR"
        export SAVE_CONFIG=1
 elif ask_bool $SAVE_CONFIG "Keep config files over reflash"; then
-       [ $TEST -eq 1 ] || do_save_conffiles "$CONF_TAR"
+       [ $TEST -eq 1 ] || do_save_conffiles "$CONF_TAR" || exit
        export SAVE_CONFIG=1
 else
        [ $TEST -eq 1 ] || rm -f "$CONF_TAR"