base-files: automatically handle paths and symlinks for RAMFS_COPY_BIN
[openwrt/openwrt.git] / package / base-files / files / lib / upgrade / stage2
index bdbb8926643287f48a4ae62c5d1d4b4a29130859..5a439f1201b1dc452493a7ce6129d41aa206b072 100755 (executable)
@@ -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
-
-       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