On 13/08/2016 13:04, ad...@yapic.net wrote:
> From: Sergey Sergeev <ad...@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 <ad...@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}"
>  
> 

_______________________________________________
Lede-dev mailing list
Lede-dev@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/lede-dev

Reply via email to