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

John Crispin john at phrozen.org
Sat Aug 13 00:08:11 PDT 2016



On 12/08/2016 16:54, Сергеев Сергей wrote:
> Hello. I made a new version of the patch according to your notes:
> http://patchwork.ozlabs.org/patch/658677/
> 
> I remove the shell redirection to stderr because we need to show a
> diagnostic messages (for wget) as well as the certificate accept request
> and enter the password messages (for ssh)
> Both wget and ssh are send these messages to stderr

adding this info here is useless. it needs to go intot he commit
description of the patch.

	John

>> Hi
>>
>> comments inline
>>
>> On 08/08/2016 13:23, 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 | 30
>>> +++++++++++++++++++++-----
>>>   package/base-files/files/sbin/sysupgrade       | 15 +++++++++++++
>>>   2 files changed, 40 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..0b0ad9a 100644
>>> --- a/package/base-files/files/lib/upgrade/common.sh
>>> +++ b/package/base-files/files/lib/upgrade/common.sh
>>> @@ -180,20 +180,40 @@ get_image() { # <source> [ <command> ]
>>>       local from="$1"
>>>       local conc="$2"
>>>       local cmd
>>> +    local need_shield=1
>>>         case "$from" in
>>> -        http://*|ftp://*) cmd="wget -O- -q";;
>>> -        *) cmd="cat";;
>>> +        scp://*)
>>> +            cmd="ssh"
>>> +            local stuff="${from#scp://}"
>>> +            # extract user name and host
>>> +            local user_and_host=${stuff%%:*}
>>> +            # extract custom ssh port(if specified)
>>> +            local custom_port=${stuff%:*}
>>> +            custom_port=${custom_port##$user_and_host}
>>> +            custom_port=${custom_port#:}
>>> +            [ -n "$custom_port" ] && cmd="$cmd -p $custom_port"
>>> +            # extract target file for cat
>>> +            local target_file=${stuff##*:}
>>> +            # recompile from string
>>> +            need_shield=0
>>> +            from="\"$user_and_host\" \"cat $target_file\""
>> apart from the port this seems very static and shuld be solvable using
>> awk or sed. the code above looks pretty hard to read.
>>
>>> +            ;;
>>> +        http://* | https://* | ftp://*) cmd="wget -O-" ;;
>>> +        *) cmd="cat" ;;
>>>       esac
>>> +
>>> +    # if needed => add shielding quotes to $from var
>>> +    [ "$need_shield" -eq "1" ] && from="\"$from\""
>>> +
>> is there ever a need to *not* have quotes ? it looks liek always having
>> them wont harm.
>>
>>>       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}"
>> why do you remove the shell redirection here ?
>>
>>     John
>>
>>>   }
>>>     get_magic_word() {
>>> diff --git a/package/base-files/files/sbin/sysupgrade
>>> b/package/base-files/files/sbin/sysupgrade
>>> index 2f441f8..9158363 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://*)
>>> +        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}"
>>>  
> 
> 
> _______________________________________________
> Lede-dev mailing list
> Lede-dev at lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/lede-dev



More information about the Lede-dev mailing list