base-files: upgrade: add case to export_bootdevice
authorKlaus Kudielka <klaus.kudielka@gmail.com>
Sat, 17 Aug 2019 13:52:01 +0000 (15:52 +0200)
committerPetr Štetiar <ynezz@true.cz>
Sun, 5 Jan 2020 15:41:35 +0000 (16:41 +0100)
The factory uboot of the Turris Omnia boots with "root=b301", and we
instruct new users to sysupgrade from there (e.g. method 1, step 7).
Currently, this will fail with "Unable to determine upgrade device".
Add a new case to export_bootdevice, which parses the hex argument.

Ref: https://github.com/openwrt/openwrt/pull/2340#issuecomment-561317688
Fixes: 2e5a0b81ec29 ("mvebu: sysupgrade: sdcard: keep user added partitons")
Reviewed-by: Hauke Mehrtens <hauke@hauke-m.de>
Signed-off-by: Klaus Kudielka <klaus.kudielka@gmail.com>
Signed-off-by: Petr Štetiar <ynezz@true.cz>
(cherry picked from commit 3a4f587c465a0531b820ca1a3e90eb05c4927b68)

package/base-files/files/lib/upgrade/common.sh

index 0d3162d4fcf6f9ac04705b5b076443440609e9dc..a986cc0b5c724d8bb3f529bd92c3c7b00a586649 100644 (file)
@@ -103,7 +103,7 @@ get_magic_long() {
 }
 
 export_bootdevice() {
-       local cmdline bootdisk rootpart uuid blockdev uevent line
+       local cmdline bootdisk rootpart uuid blockdev uevent line class
        local MAJOR MINOR DEVNAME DEVTYPE
 
        if read cmdline < /proc/cmdline; then
@@ -139,6 +139,18 @@ export_bootdevice() {
                        /dev/*)
                                uevent="/sys/class/block/${rootpart##*/}/../uevent"
                        ;;
+                       0x[a-f0-9][a-f0-9][a-f0-9] | 0x[a-f0-9][a-f0-9][a-f0-9][a-f0-9] | \
+                       [a-f0-9][a-f0-9][a-f0-9] | [a-f0-9][a-f0-9][a-f0-9][a-f0-9])
+                               rootpart=0x${rootpart#0x}
+                               for class in /sys/class/block/*; do
+                                       while read line; do
+                                               export -n "$line"
+                                       done < "$class/uevent"
+                                       if [ $((rootpart/256)) = $MAJOR -a $((rootpart%256)) = $MINOR ]; then
+                                               uevent="$class/../uevent"
+                                       fi
+                               done
+                       ;;
                esac
 
                if [ -e "$uevent" ]; then