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

John Crispin john at phrozen.org
Mon Aug 15 05:51:13 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\"

we are back to square 1 here. is it not possible to just always use
quotes ? why would scp not require/work with them

	John

> +
>  	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"
> +
>  do_save_conffiles() {
>  	local conf_tar="${1:-$CONF_TAR}"
>  
> 



More information about the Lede-dev mailing list