[LEDE-DEV] [PATCH] base-files: sysupgrade. Added the ability to use URL as source
Сергеев Сергей
adron at yapic.net
Mon Aug 15 06:26:45 PDT 2016
Hello.
>
>> 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
because in the case of scp quotes are already present:
$
from=scp://adron@192.168.88.6:lede/bin/lede-ar71xx-mikrotik-NAND-512b-squashfs-sysupgrade.bin
$ from=`echo $from | sed -ne 's!scp://!\"!p' | sed -ne 's!:\(.\+\)!\"
\"cat \1\"!p'`
$ echo $from
"adron at 192.168.88.6" "cat
lede/bin/lede-ar71xx-mikrotik-NAND-512b-squashfs-sysupgrade.bin"
$
>
> 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