2
0
forked from Ivasoft/openwrt

x86_64: fix invoking sysupgrade on PARTUUID mounted system

Fix sysupgrade to determine the correct boot block device to use if
/proc/cmdline contains a PARTUUID root.

Change the preinit move_config() hook to use the UUID scanning code
from sysupgrade in order to avoid code duplication.

Signed-off-by: Jo-Philipp Wich <jow@openwrt.org>

SVN-Revision: 42968
This commit is contained in:
Jo-Philipp Wich
2014-10-19 20:28:43 +00:00
parent e2e2e54bfe
commit 05abf01ac0
2 changed files with 49 additions and 57 deletions

View File

@@ -2,40 +2,10 @@
# Copyright (C) 2012-2014 OpenWrt.org
move_config() {
local cmdline uuid disk dev
. /lib/upgrade/platform.sh
if read cmdline < /proc/cmdline; then
case "$cmdline" in
*block2mtd=*)
disk="${cmdline##*block2mtd=}"
disk="${disk%%,*}"
;;
*root=*)
disk="${cmdline##*root=}"
disk="${disk%% *}"
;;
esac
case "$disk" in
PARTUUID=[a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9][a-f0-9]-02)
uuid="${cmdline#PARTUUID=}"
uuid="${uuid%-02}"
for disk in /dev/[hsv]d[a-z]; do
set -- $(dd if=$disk bs=1 skip=440 count=4 2>/dev/null | hexdump -v -e '4/1 "%02x "')
if [ "$4$3$2$1" = "$uuid" ]; then
dev="${disk}1"
break
fi
done
;;
/dev/*)
dev="${disk%[0-9]}1"
;;
esac
fi
if [ -n "$dev" ]; then
mount -t ext4 -o rw,noatime "$dev" /mnt
if platform_export_bootpart; then
mount -t ext4 -o rw,noatime "$BOOTPART" /mnt
mv -f /mnt/sysupgrade.tgz /
umount /mnt
fi