From 438dcbfe74a6da1a8949d8fb785092d934499b60 Mon Sep 17 00:00:00 2001 From: Matthias Schiffer Date: Mon, 10 Jul 2017 18:37:25 +0200 Subject: [PATCH] base-files: automatically handle paths and symlinks for RAMFS_COPY_BIN Depending on busybox applet selection, paths of basic utiilties may differ, and may not work as symlinks to busybox. Simply using whatever binary is found in PATH and detecting symlinks automatically is more robust and easier to maintain. The list of binaries is also slightly cleaned up and duplicates are removed. Signed-off-by: Matthias Schiffer --- .../base-files/files/lib/upgrade/common.sh | 27 +++++++----- package/base-files/files/lib/upgrade/stage2 | 43 ++++++++----------- package/base-files/files/sbin/sysupgrade | 2 - .../ar71xx/base-files/lib/upgrade/platform.sh | 2 +- .../base-files/lib/upgrade/platform.sh | 2 +- .../base-files/lib/upgrade/platform.sh | 2 +- .../base-files/lib/upgrade/platform.sh | 2 +- .../mvebu/base-files/lib/upgrade/platform.sh | 2 +- .../base-files/lib/upgrade/platform.sh | 2 +- .../rb532/base-files/lib/upgrade/platform.sh | 2 +- 10 files changed, 40 insertions(+), 46 deletions(-) diff --git a/package/base-files/files/lib/upgrade/common.sh b/package/base-files/files/lib/upgrade/common.sh index c8b71015c2e4..428ec735d62e 100644 --- a/package/base-files/files/lib/upgrade/common.sh +++ b/package/base-files/files/lib/upgrade/common.sh @@ -6,28 +6,33 @@ RAM_ROOT=/tmp/root libs() { ldd $* 2>/dev/null | sed -r 's/(.* => )?(.*) .*/\2/'; } install_file() { # [ ... ] + local target dest dir for file in "$@"; do + if [ -L "$file" ]; then + target="$(readlink -f "$file")" + dest="$RAM_ROOT/$file" + [ ! -f "$dest" ] && { + dir="$(dirname "$dest")" + mkdir -p "$dir" + ln -s "$target" "$dest" + } + file="$target" + fi dest="$RAM_ROOT/$file" - [ -f $file -a ! -f $dest ] && { - dir="$(dirname $dest)" + [ -f "$file" -a ! -f "$dest" ] && { + dir="$(dirname "$dest")" mkdir -p "$dir" - cp $file $dest + cp "$file" "$dest" } done } -install_bin() { # [ ... ] +install_bin() { + local src files src=$1 files=$1 [ -x "$src" ] && files="$src $(libs $src)" install_file $files - shift - for link in "$@"; do { - dest="$RAM_ROOT/$link" - dir="$(dirname $dest)" - mkdir -p "$dir" - [ -f "$dest" ] || ln -s $src $dest - }; done } run_hooks() { diff --git a/package/base-files/files/lib/upgrade/stage2 b/package/base-files/files/lib/upgrade/stage2 index 9d12cc801cf9..5a439f1201b1 100755 --- a/package/base-files/files/lib/upgrade/stage2 +++ b/package/base-files/files/lib/upgrade/stage2 @@ -17,6 +17,9 @@ export VERBOSE=1 export CONFFILES=/tmp/sysupgrade.conffiles export CONF_TAR=/tmp/sysupgrade.tgz +RAMFS_COPY_BIN= # extra programs for temporary ramfs root +RAMFS_COPY_DATA= # extra data files + [ -f "$CONF_TAR" ] || export SAVE_CONFIG=0 [ -f /tmp/sysupgrade.always.overwrite.bootdisk.partmap ] && export SAVE_PARTITIONS=0 @@ -41,32 +44,20 @@ supivot() { # } switch_to_ramfs() { - install_bin /bin/busybox /bin/ash /bin/sh /bin/mount /bin/umount \ - /sbin/pivot_root /sbin/reboot /bin/sync /bin/dd /bin/grep \ - /bin/cp /bin/mv /bin/tar /usr/bin/md5sum "/usr/bin/[" /bin/dd \ - /bin/vi /bin/ls /bin/cat /usr/bin/awk /usr/bin/hexdump \ - /bin/sleep /bin/zcat /usr/bin/bzcat /usr/bin/printf /usr/bin/wc \ - /bin/cut /usr/bin/printf /bin/sync /bin/mkdir /bin/rmdir \ - /bin/rm /usr/bin/basename /bin/kill /bin/chmod /usr/bin/find \ - /bin/mknod /bin/touch /bin/sed - - install_bin /sbin/mtd - install_bin /sbin/mount_root - install_bin /sbin/snapshot - install_bin /sbin/snapshot_tool - install_bin /usr/sbin/ubiupdatevol - install_bin /usr/sbin/ubiattach - install_bin /usr/sbin/ubiblock - install_bin /usr/sbin/ubiformat - install_bin /usr/sbin/ubidetach - install_bin /usr/sbin/ubirsvol - install_bin /usr/sbin/ubirmvol - install_bin /usr/sbin/ubimkvol - install_bin /usr/sbin/partx - install_bin /usr/sbin/losetup - install_bin /usr/sbin/mkfs.ext4 - for file in $RAMFS_COPY_BIN; do - install_bin ${file//:/ } + for binary in \ + /bin/busybox /bin/ash /bin/sh /bin/mount /bin/umount \ + pivot_root mount_root reboot sync kill sleep \ + md5sum hexdump cat zcat bzcat dd tar \ + ls basename find cp mv rm mkdir rmdir mknod touch chmod \ + '[' printf wc grep awk sed cut \ + mtd partx losetup mkfs.ext4 \ + ubiupdatevol ubiattach ubiblock ubiformat \ + ubidetach ubirsvol ubirmvol ubimkvol \ + snapshot snapshot_tool \ + $RAMFS_COPY_BIN + do + local file="$(which "$binary" 2>/dev/null)" + [ -n "$file" ] && install_bin "$file" done install_file /etc/resolv.conf /lib/*.sh /lib/functions/*.sh /lib/upgrade/*.sh $RAMFS_COPY_DATA diff --git a/package/base-files/files/sbin/sysupgrade b/package/base-files/files/sbin/sysupgrade index 809e789f9f43..359f21f51c3d 100755 --- a/package/base-files/files/sbin/sysupgrade +++ b/package/base-files/files/sbin/sysupgrade @@ -4,8 +4,6 @@ . /lib/functions/system.sh # initialize defaults -RAMFS_COPY_BIN="" # extra programs for temporary ramfs root -RAMFS_COPY_DATA="" # extra data files export MTD_CONFIG_ARGS="" export INTERACTIVE=0 export VERBOSE=1 diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh index cf51fe2d8059..ba65a790060c 100755 --- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh +++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh @@ -7,7 +7,7 @@ PART_NAME=firmware RAMFS_COPY_DATA=/lib/ar71xx.sh -[ -x /usr/sbin/nandwrite ] && RAMFS_COPY_BIN=/usr/sbin/nandwrite +RAMFS_COPY_BIN='nandwrite' CI_BLKSZ=65536 CI_LDADR=0x80060000 diff --git a/target/linux/bcm53xx/base-files/lib/upgrade/platform.sh b/target/linux/bcm53xx/base-files/lib/upgrade/platform.sh index 6a9e4950450c..1f778c72b689 100644 --- a/target/linux/bcm53xx/base-files/lib/upgrade/platform.sh +++ b/target/linux/bcm53xx/base-files/lib/upgrade/platform.sh @@ -1,4 +1,4 @@ -RAMFS_COPY_BIN='/usr/bin/osafeloader /usr/bin/oseama' +RAMFS_COPY_BIN='osafeloader oseama' PART_NAME=firmware diff --git a/target/linux/ipq806x/base-files/lib/upgrade/platform.sh b/target/linux/ipq806x/base-files/lib/upgrade/platform.sh index 141058f7bae2..246361bbf601 100644 --- a/target/linux/ipq806x/base-files/lib/upgrade/platform.sh +++ b/target/linux/ipq806x/base-files/lib/upgrade/platform.sh @@ -3,7 +3,7 @@ PART_NAME=firmware REQUIRE_IMAGE_METADATA=1 -RAMFS_COPY_BIN='/usr/sbin/fw_printenv /usr/sbin/fw_setenv' +RAMFS_COPY_BIN='fw_printenv fw_setenv' RAMFS_COPY_DATA='/etc/fw_env.config /var/lock/fw_printenv.lock' platform_check_image() { diff --git a/target/linux/kirkwood/base-files/lib/upgrade/platform.sh b/target/linux/kirkwood/base-files/lib/upgrade/platform.sh index c8c66c1b9d67..f75acb0d61e1 100644 --- a/target/linux/kirkwood/base-files/lib/upgrade/platform.sh +++ b/target/linux/kirkwood/base-files/lib/upgrade/platform.sh @@ -1,6 +1,6 @@ . /lib/kirkwood.sh -RAMFS_COPY_BIN='/usr/sbin/fw_printenv /usr/sbin/fw_setenv' +RAMFS_COPY_BIN='fw_printenv fw_setenv' RAMFS_COPY_DATA='/etc/fw_env.config /var/lock/fw_printenv.lock' platform_check_image() { diff --git a/target/linux/mvebu/base-files/lib/upgrade/platform.sh b/target/linux/mvebu/base-files/lib/upgrade/platform.sh index 8085634dca64..dd21c0958e36 100755 --- a/target/linux/mvebu/base-files/lib/upgrade/platform.sh +++ b/target/linux/mvebu/base-files/lib/upgrade/platform.sh @@ -5,7 +5,7 @@ . /lib/mvebu.sh -RAMFS_COPY_BIN='/usr/sbin/fw_printenv /usr/sbin/fw_setenv' +RAMFS_COPY_BIN='fw_printenv fw_setenv' RAMFS_COPY_DATA='/lib/mvebu.sh /etc/fw_env.config /var/lock/fw_printenv.lock' REQUIRE_IMAGE_METADATA=1 diff --git a/target/linux/pistachio/base-files/lib/upgrade/platform.sh b/target/linux/pistachio/base-files/lib/upgrade/platform.sh index ee5d5066c341..4edc06bf9f87 100755 --- a/target/linux/pistachio/base-files/lib/upgrade/platform.sh +++ b/target/linux/pistachio/base-files/lib/upgrade/platform.sh @@ -6,7 +6,7 @@ # See /LICENSE for more information. # -RAMFS_COPY_BIN="/usr/sbin/fw_printenv /usr/sbin/fw_setenv /bin/mkdir /bin/dmesg /bin/sed /bin/grep" +RAMFS_COPY_BIN='fw_printenv fw_setenv dmesg' RAMFS_COPY_DATA="/etc/fw_env.config" REQUIRE_IMAGE_METADATA=0 diff --git a/target/linux/rb532/base-files/lib/upgrade/platform.sh b/target/linux/rb532/base-files/lib/upgrade/platform.sh index 29fe18de3041..bfa73a7a246d 100644 --- a/target/linux/rb532/base-files/lib/upgrade/platform.sh +++ b/target/linux/rb532/base-files/lib/upgrade/platform.sh @@ -1,5 +1,5 @@ REQUIRE_IMAGE_METADATA=1 -RAMFS_COPY_BIN=/usr/sbin/nandwrite +RAMFS_COPY_BIN='nandwrite' CI_KERNPART=none platform_check_image() { -- 2.30.2