diff options
| author | acinonyx <acinonyx@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2009-06-10 22:22:48 +0000 | 
|---|---|---|
| committer | acinonyx <acinonyx@3c298f89-4303-0410-b956-a3cf2f4a3e73> | 2009-06-10 22:22:48 +0000 | 
| commit | 4f43c816a4ca405bedadc0f62ef109d210c02054 (patch) | |
| tree | 71b3dfa11315dc3c8f5f1c094a9a14cd7cf1a287 | |
| parent | 638d4ea3a76ce102bbe0327c5aafb2d836d04996 (diff) | |
[package] base-files: Detect and decompressed gzipped images automatically when flashing with sysupgrade
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@16407 3c298f89-4303-0410-b956-a3cf2f4a3e73
| -rw-r--r-- | package/base-files/files/lib/upgrade/common.sh | 21 | ||||
| -rwxr-xr-x | package/base-files/files/sbin/sysupgrade | 5 | 
2 files changed, 15 insertions, 11 deletions
| diff --git a/package/base-files/files/lib/upgrade/common.sh b/package/base-files/files/lib/upgrade/common.sh index ef7ce57e7..018cc72f4 100644 --- a/package/base-files/files/lib/upgrade/common.sh +++ b/package/base-files/files/lib/upgrade/common.sh @@ -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() { diff --git a/package/base-files/files/sbin/sysupgrade b/package/base-files/files/sbin/sysupgrade index ecc5e9a70..f25195a52 100755 --- a/package/base-files/files/sbin/sysupgrade +++ b/package/base-files/files/sbin/sysupgrade @@ -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 | 
