From patchwork Sat Jan 10 17:54:51 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: gianluca X-Patchwork-Id: 427386 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from arrakis.dune.hu (arrakis.dune.hu [78.24.191.176]) (using TLSv1.1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by ozlabs.org (Postfix) with ESMTPS id 9A03A14015A for ; Sun, 11 Jan 2015 04:55:36 +1100 (AEDT) Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id E739F283DBF; Sat, 10 Jan 2015 18:53:08 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on arrakis.dune.hu X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=BAYES_00,T_DKIM_INVALID autolearn=unavailable version=3.3.2 Received: from arrakis.dune.hu (localhost [127.0.0.1]) by arrakis.dune.hu (Postfix) with ESMTP id 4F6032809BA for ; Sat, 10 Jan 2015 18:53:03 +0100 (CET) X-policyd-weight: using cached result; rate: -5.5 Received: from m-r2.th.seeweb.it (m-r2.th.seeweb.it [5.144.164.171]) by arrakis.dune.hu (Postfix) with ESMTPS for ; Sat, 10 Jan 2015 18:53:01 +0100 (CET) Received: from fseek.strangled.net (host146-190-dynamic.24-79-r.retail.telecomitalia.it [79.24.190.146]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by m-r2.th.seeweb.it (Postfix) with ESMTPSA id 4A8723EEC4 for ; Sat, 10 Jan 2015 18:55:09 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=sottospazio.it; h=x-mailer:message-id:date:date:subject:subject:from:from; s= mail; t=1420912507; x=1422726908; bh=XRe491Kd2yuN25qA2bI6On+ppTT GDrNG58DqW4dvNFc=; b=LIFjBSiErnWAiI2ikY3AGvDADsb2aNpBZcR6jLkuhvS HHax6O69176ul2Lel1put/Zqx8dmN5xdNlfkaY5hs3dZ/uAhh1/1s9PNWPEcRzVF iQweFmb+OhUUTTZ+a5fkJBbIueb+7gsIu1OM8Im4DC2pyKLB61MywIScjhPGb95I = Received: by mail.seek.priv (Postfix, from userid 1000) id 1D7CB60141; Sat, 10 Jan 2015 18:55:07 +0100 (CET) From: Gianluca Anzolin To: openwrt-devel@lists.openwrt.org Date: Sat, 10 Jan 2015 18:54:51 +0100 Message-Id: <1420912491-21359-1-git-send-email-gianluca@sottospazio.it> X-Mailer: git-send-email 1.7.10.4 Subject: [OpenWrt-Devel] [PATCH] procd: reorder the arguments of command invocations X-BeenThere: openwrt-devel@lists.openwrt.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: OpenWrt Development List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: openwrt-devel-bounces@lists.openwrt.org Sender: "openwrt-devel" Some commands in the script /lib/upgrade/nand.sh (provided by procd) use option arguments after non-option arguments. This unfortunately doesn't work with musl because it doesn't yet support permutations of the arguments: when getopt finds a non-option argument it returns -1 and ignores any option which may follow. One visible side effect is that sysupgrade doesn't work with musl/NAND tarballs. The following patch reorders the command invocations by placing the options before any non-option argument. Tested on a Netgear WNDR4300 built with ubifs support and musl libc. Signed-off-by: Gianluca Anzolin --- package/system/procd/files/nand.sh | 40 +++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/package/system/procd/files/nand.sh b/package/system/procd/files/nand.sh index 7fb9343..a22381d 100644 --- a/package/system/procd/files/nand.sh +++ b/package/system/procd/files/nand.sh @@ -58,7 +58,7 @@ nand_get_magic_long() { } get_magic_long_tar() { - ( tar xf $1 $2 -O | dd bs=4 count=1 | hexdump -v -n 4 -e '1/1 "%02x"') 2> /dev/null + ( tar -O -xf $1 $2 | dd bs=4 count=1 | hexdump -v -n 4 -e '1/1 "%02x"') 2> /dev/null } identify_magic() { @@ -132,13 +132,13 @@ nand_upgrade_prepare_ubi() { fi if [ ! "$ubidev" ]; then - ubiformat /dev/mtd$mtdnum -y + ubiformat -y /dev/mtd$mtdnum ubiattach -m "$mtdnum" sync ubidev="$( nand_find_ubi "$CI_UBIPART" )" [ "$has_env" -gt 0 ] && { - ubimkvol /dev/$ubidev -n 0 -N ubootenv -s 1MiB - ubimkvol /dev/$ubidev -n 1 -N ubootenv2 -s 1MiB + ubimkvol -n 0 -N ubootenv -s 1MiB /dev/$ubidev + ubimkvol -n 1 -N ubootenv2 -s 1MiB /dev/$ubidev } fi @@ -157,13 +157,13 @@ nand_upgrade_prepare_ubi() { fi # kill volumes - [ "$kern_ubivol" ] && ubirmvol /dev/$ubidev -N kernel || true - [ "$root_ubivol" ] && ubirmvol /dev/$ubidev -N rootfs || true - [ "$data_ubivol" ] && ubirmvol /dev/$ubidev -N rootfs_data || true + [ "$kern_ubivol" ] && ubirmvol -N kernel /dev/$ubidev || true + [ "$root_ubivol" ] && ubirmvol -N rootfs /dev/$ubidev || true + [ "$data_ubivol" ] && ubirmvol -N rootfs_data /dev/$ubidev || true # update kernel if [ "$has_kernel" = "1" ]; then - if ! ubimkvol /dev/$ubidev -N kernel -s $kernel_length; then + if ! ubimkvol -N kernel -s $kernel_length /dev/$ubidev ; then echo "cannot create kernel volume" return 1; fi @@ -176,14 +176,14 @@ nand_upgrade_prepare_ubi() { else root_size_param="-s $rootfs_length" fi - if ! ubimkvol /dev/$ubidev -N rootfs $root_size_param; then + if ! ubimkvol -N rootfs $root_size_param /dev/$ubidev ; then echo "cannot create rootfs volume" return 1; fi # create rootfs_data for non-ubifs rootfs if [ "$rootfs_type" != "ubifs" ]; then - if ! ubimkvol /dev/$ubidev -N rootfs_data -m; then + if ! ubimkvol -N rootfs_data -m /dev/$ubidev ; then echo "cannot initialize rootfs_data volume" return 1 fi @@ -219,7 +219,7 @@ nand_upgrade_ubinized() { local mtddev="/dev/mtd${mtdnum}" ubidetach -p "${mtddev}" || true sync - ubiformat "${mtddev}" -y -f "${ubi_file}" + ubiformat -y -f "${mtddev}" "${ubi_file}" ubiattach -p "${mtddev}" nand_do_upgrade_success } @@ -232,7 +232,7 @@ nand_upgrade_ubifs() { local ubidev="$( nand_find_ubi "$CI_UBIPART" )" local root_ubivol="$(nand_find_volume $ubidev rootfs)" - ubiupdatevol /dev/$root_ubivol -s $rootfs_length $1 + ubiupdatevol -s $rootfs_length /dev/$root_ubivol $1 nand_do_upgrade_success } @@ -242,8 +242,8 @@ nand_upgrade_tar() { local board_name="$(cat /tmp/sysinfo/board_name)" local kernel_mtd="$(find_mtd_index $CI_KERNPART)" - local kernel_length=`(tar xf $tar_file sysupgrade-$board_name/kernel -O | wc -c) 2> /dev/null` - local rootfs_length=`(tar xf $tar_file sysupgrade-$board_name/root -O | wc -c) 2> /dev/null` + local kernel_length=`(tar -O -xf $tar_file sysupgrade-$board_name/kernel | wc -c) 2> /dev/null` + local rootfs_length=`(tar -O -xf $tar_file sysupgrade-$board_name/root | wc -c) 2> /dev/null` local rootfs_type="$(identify_tar "$tar_file" sysupgrade-$board_name/root)" @@ -251,7 +251,7 @@ nand_upgrade_tar() { local has_env=0 [ "$kernel_length" != 0 -a -n "$kernel_mtd" ] && { - tar xf $tar_file sysupgrade-$board_name/kernel -O | mtd write - $CI_KERNPART + tar -O -xf $tar_file sysupgrade-$board_name/kernel | mtd write - $CI_KERNPART } [ "$kernel_length" = 0 -o ! -z "$kernel_mtd" ] && has_kernel=0 @@ -260,13 +260,13 @@ nand_upgrade_tar() { local ubidev="$( nand_find_ubi "$CI_UBIPART" )" [ "$has_kernel" = "1" ] && { local kern_ubivol="$(nand_find_volume $ubidev kernel)" - tar xf $tar_file sysupgrade-$board_name/kernel -O | \ - ubiupdatevol /dev/$kern_ubivol -s $kernel_length - + tar -O -xf $tar_file sysupgrade-$board_name/kernel | \ + ubiupdatevol -s $kernel_length /dev/$kern_ubivol - } local root_ubivol="$(nand_find_volume $ubidev rootfs)" - tar xf $tar_file sysupgrade-$board_name/root -O | \ - ubiupdatevol /dev/$root_ubivol -s $rootfs_length - + tar -O -xf $tar_file sysupgrade-$board_name/root | \ + ubiupdatevol -s $rootfs_length /dev/$root_ubivol - nand_do_upgrade_success } @@ -340,7 +340,7 @@ append sysupgrade_pre_upgrade nand_upgrade_stage1 nand_do_platform_check() { local board_name="$1" local tar_file="$2" - local control_length=`(tar xf $tar_file sysupgrade-$board_name/CONTROL -O | wc -c) 2> /dev/null` + local control_length=`(tar -O -xf $tar_file sysupgrade-$board_name/CONTROL | wc -c) 2> /dev/null` local file_type="$(identify $2)" [ "$control_length" = 0 -a "$file_type" != "ubi" -a "$file_type" != "ubifs" ] && {