base-files: Detect and decompressed gzipped images automatically when flashing with...
authorVasilis Tsiligiannis <acinonyx@openwrt.gr>
Wed, 10 Jun 2009 22:22:48 +0000 (22:22 +0000)
committerVasilis Tsiligiannis <acinonyx@openwrt.gr>
Wed, 10 Jun 2009 22:22:48 +0000 (22:22 +0000)
SVN-Revision: 16407

package/base-files/files/lib/upgrade/common.sh
package/base-files/files/sbin/sysupgrade

index ef7ce57e7ec61ba6ee48e5436787f8799d477b56..018cc72f47988c89a0c0f960172561473c79ca9e 100644 (file)
@@ -103,16 +103,23 @@ rootfs_type() {
        mount | awk '($3 ~ /^\/$/) && ($5 !~ /rootfs/) { print $5 }'
 }
 
-get_image() {
+get_image() { # <source> [ <command> ]
        local from="$1"
-       local conc="cat"
+       local cmd="$2"
+       local conc
 
-       [ "$GZIPED" -eq 1 ] && conc="zcat"
+       if [ -z "$cmd" ]; then
+               case "$from" in
+                       http://*|ftp://*) cmd="wget -O- -q";;
+                       *) cmd="cat";;
+               esac
+               local magic="$(eval $cmd $from | dd bs=2 count=1 2>/dev/null | hexdump -n 2 -e '1/1 "%02x"')"
+               case "$magic" in
+                       1f8b) conc="| zcat";;
+               esac
+       fi
 
-       case "$from" in
-               http://*|ftp://*) wget -O- -q "$from" | "$conc";;
-               *) cat "$from" | "$conc";;
-       esac
+       eval "$cmd $from $conc"
 }
 
 get_magic_word() {
index ecc5e9a70888163b96ee4cd326fbd60bd23eba11..f25195a520000d021444ae2a11ee440519f3319b 100755 (executable)
@@ -9,7 +9,6 @@ export VERBOSE=1
 export SAVE_CONFIG=1
 export DELAY=
 export CONF_IMAGE=
-export GZIPED=0
 # parse options
 while [ -n "$1" ]; do 
        case "$1" in
@@ -19,7 +18,6 @@ while [ -n "$1" ]; do
                -q) export VERBOSE="$(($VERBOSE - 1))";;
                -n) export SAVE_CONFIG=0;;
                -f) export CONF_IMAGE="$2"; shift;;
-               -g) export GZIPED=1;;
                -*)
                        echo "Invalid option: $1"
                        exit 1
@@ -42,7 +40,6 @@ Usage: $0 [options] <image file or URL>
 Options:
        -d <delay>   add a delay before rebooting
        -f <config>  restore configuration from .tar.gz (file or url)
-       -g           gziped image
        -i           interactive mode
        -n           do not save configuration over reflash
        -q           less verbose
@@ -99,7 +96,7 @@ if [ -n "$CONF_IMAGE" ]; then
                        exit 1
                ;;
        esac
-       get_image "$CONF_IMAGE" > "$CONF_TAR"
+       get_image "$CONF_IMAGE" "cat" > "$CONF_TAR"
        export SAVE_CONFIG=1
 elif ask_bool $SAVE_CONFIG "Keep config files over reflash"; then
        do_save_conffiles