[LEDE-DEV] [PATCH] base-files: sysupgrade. Added the ability to use URL as source

John Crispin john at phrozen.org
Wed Aug 24 00:59:57 PDT 2016



On 13/08/2016 13:04, adron at yapic.net wrote:
> From: Sergey Sergeev <adron at yapic.net>
> 
>   scp uls(like this scp://adron@192.168.88.6:lede/lede-ar71xx-mikrotik-NAND-512b-squashfs-sysupgrade.bin)
>     is supported too. And you also can specify custom ssh port(...8.88.6:22110:lede...)
> 
> Signed-off-by: Sergey Sergeev <adron at yapic.net>
> ---
>  package/base-files/files/lib/upgrade/common.sh | 26 +++++++++++++++++++++-----
>  package/base-files/files/sbin/sysupgrade       | 15 +++++++++++++++
>  2 files changed, 36 insertions(+), 5 deletions(-)
> 
> diff --git a/package/base-files/files/lib/upgrade/common.sh b/package/base-files/files/lib/upgrade/common.sh
> index ea03f77..080bea5 100644
> --- a/package/base-files/files/lib/upgrade/common.sh
> +++ b/package/base-files/files/lib/upgrade/common.sh
> @@ -180,20 +180,36 @@ get_image() { # <source> [ <command> ]
>  	local from="$1"
>  	local conc="$2"
>  	local cmd
> +	local need_quotes=1
>  
>  	case "$from" in
> -		http://*|ftp://*) cmd="wget -O- -q";;
> -		*) cmd="cat";;
> +		scp://*)
> +			cmd="ssh"
> +			# extract custom ssh port(if specified)
> +			local custom_port=`echo $from | sed -ne 's!.\+:\([0-9]\+\):.\+!\1!p'`
> +			[ -n "$custom_port" ] && {
> +				cmd="$cmd -p $custom_port"
> +				# remove custom port from url
> +				from=`echo $from | sed -ne 's!:\([0-9]\+\):!:!p'`
> +			}
> +			need_quotes=0 # here we add quotes manually
> +			from=`echo $from | sed -ne 's!scp://!\"!p' | sed -ne 's!:\(.\+\)!\" \"cat \1\"!p'`
> +		;;
> +		http://* | https://* | ftp://*) cmd="wget -O-" ;;
> +		*) cmd="cat" ;;
>  	esac
> +
> +	# if needed => add quotes to $from var
> +	[ $need_quotes -eq 1 ] && from=\"$from\"
> +
>  	if [ -z "$conc" ]; then
> -		local magic="$(eval $cmd \"$from\" 2>/dev/null | dd bs=2 count=1 2>/dev/null | hexdump -n 2 -e '1/1 "%02x"')"
> +		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";;
>  			425a) conc="bzcat";;
>  		esac
>  	fi
> -
> -	eval "$cmd \"$from\" 2>/dev/null ${conc:+| $conc}"
> +	eval "$cmd $from ${conc:+| $conc}"
>  }
>  
>  get_magic_word() {
> diff --git a/package/base-files/files/sbin/sysupgrade b/package/base-files/files/sbin/sysupgrade
> index 2f441f8..fc1df22 100755
> --- a/package/base-files/files/sbin/sysupgrade
> +++ b/package/base-files/files/sbin/sysupgrade
> @@ -137,6 +137,21 @@ include /lib/upgrade
>  
>  [ "$1" = "nand" ] && nand_upgrade_stage2 $@
>  
> +get_if_URL(){
> +	local url="$1"
> +	local url_repl_file="/tmp/sysupgrade-URL.bin"
> +
> +	case "$url" in
> +		http://* | https://* | ftp://* | scp://*)
> +		get_image "$url" "cat" > $url_repl_file
> +		ARGV=${ARGV/"$url"/"$url_repl_file"}
> +		;;
> +	esac
> +}
> +
> +# get image file from URL if specified
> +get_if_URL "$ARGV"
> +

this get_if_url mus go away. the way it should work is
1) derive local file basename from url
2) if not there yet, download
3) if already downloaded, cat it

that way only get_image needs to be changed and the functionality is
self contained. get_image should transparently download the image and if
it already did that cat it

	John


>  do_save_conffiles() {
>  	local conf_tar="${1:-$CONF_TAR}"
>  
> 



More information about the Lede-dev mailing list