aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2017-07-10 18:37:25 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2017-07-11 17:26:32 +0200
commit438dcbfe74a6da1a8949d8fb785092d934499b60 (patch)
tree0f455ad4fd7d82cbe7c037afd27d9e9ca9537d12
parentf464da623db1a53231e5f7d54a51e355c0d32dff (diff)
downloadupstream-438dcbfe74a6da1a8949d8fb785092d934499b60.tar.gz
upstream-438dcbfe74a6da1a8949d8fb785092d934499b60.tar.bz2
upstream-438dcbfe74a6da1a8949d8fb785092d934499b60.zip
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 <mschiffer@universe-factory.net>
-rw-r--r--package/base-files/files/lib/upgrade/common.sh27
-rwxr-xr-xpackage/base-files/files/lib/upgrade/stage243
-rwxr-xr-xpackage/base-files/files/sbin/sysupgrade2
-rwxr-xr-xtarget/linux/ar71xx/base-files/lib/upgrade/platform.sh2
-rw-r--r--target/linux/bcm53xx/base-files/lib/upgrade/platform.sh2
-rw-r--r--target/linux/ipq806x/base-files/lib/upgrade/platform.sh2
-rw-r--r--target/linux/kirkwood/base-files/lib/upgrade/platform.sh2
-rwxr-xr-xtarget/linux/mvebu/base-files/lib/upgrade/platform.sh2
-rwxr-xr-xtarget/linux/pistachio/base-files/lib/upgrade/platform.sh2
-rw-r--r--target/linux/rb532/base-files/lib/upgrade/platform.sh2
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 c8b71015c2e..428ec735d62 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() { # <file> [ <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() { # <file> [ <symlink> ... ]
+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 9d12cc801cf..5a439f1201b 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() { # <new_root> <old_root>
}
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 809e789f9f4..359f21f51c3 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 cf51fe2d805..ba65a790060 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 6a9e4950450..1f778c72b68 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 141058f7bae..246361bbf60 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 c8c66c1b9d6..f75acb0d61e 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 8085634dca6..dd21c0958e3 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 ee5d5066c34..4edc06bf9f8 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 29fe18de304..bfa73a7a246 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() {