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

adron at yapic.net adron at yapic.net
Sat Aug 13 04:04:06 PDT 2016


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




More information about the Lede-dev mailing list