aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Dickinson <daniel@cshore.neomailbox.net>2011-03-13 09:24:24 +0000
committerDaniel Dickinson <daniel@cshore.neomailbox.net>2011-03-13 09:24:24 +0000
commit2edddd450b0610a08c30cf3be6504f8199df16f8 (patch)
tree2ecde042e1f9ca33ce04a4ffcdd521a9c4fb3bc1
parent72748339e82bbf5242e74801568282529b465ee1 (diff)
downloadupstream-2edddd450b0610a08c30cf3be6504f8199df16f8.tar.gz
upstream-2edddd450b0610a08c30cf3be6504f8199df16f8.tar.bz2
upstream-2edddd450b0610a08c30cf3be6504f8199df16f8.zip
[package] extroot: block-mount block-extroot: Added ability to do a whole disk extroot instead of only an overlay-based extroot.
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@26109 3c298f89-4303-0410-b956-a3cf2f4a3e73
-rw-r--r--package/block-extroot/files/50_determine_usb_root7
-rw-r--r--package/block-extroot/files/55_determine_extroot_sysupgrade6
-rw-r--r--package/block-extroot/files/60_pivot_usb_root13
-rw-r--r--package/block-extroot/files/extmount.sh10
-rw-r--r--package/block-mount/files/mount.sh7
5 files changed, 37 insertions, 6 deletions
diff --git a/package/block-extroot/files/50_determine_usb_root b/package/block-extroot/files/50_determine_usb_root
index e87855c2a7..8c5841e32b 100644
--- a/package/block-extroot/files/50_determine_usb_root
+++ b/package/block-extroot/files/50_determine_usb_root
@@ -37,10 +37,17 @@ determine_external_root() {
}
config_load fstab
config_foreach config_mount_by_section mount 1
+ ER_OVERLAY_ROM="/no-extroot"
[ "$rootfs_found" = "1" ] && grep -q ' /overlay ' /proc/mounts && {
pi_extroot_mount_success=true
pi_mount_skip_next=false
+ ER_OVERLAY_ROM="/overlay"
+ }
+ [ "$rootfs_found" = "1" ] && grep -q ' /rom ' /proc/mounts && {
+ pi_extroot_mount_success=true
+ pi_mount_skip_next=false
+ ER_OVERLAY_ROM="/rom"
}
}
UCI_CONFIG_DIR="$OLD_UCI_CONFIG_DIR"
diff --git a/package/block-extroot/files/55_determine_extroot_sysupgrade b/package/block-extroot/files/55_determine_extroot_sysupgrade
index 5a6ad04f89..d458b63bb1 100644
--- a/package/block-extroot/files/55_determine_extroot_sysupgrade
+++ b/package/block-extroot/files/55_determine_extroot_sysupgrade
@@ -13,7 +13,7 @@ check_set_md5sum() {
er_extroot_md5sum="$(cat $er_md5sum_file)"
fi
- local er_overlay_file="/overlay/etc/extroot.md5sum"
+ local er_overlay_file="${ER_OVERLAY_ROM}/etc/extroot.md5sum"
local er_extroot_overlay_md5sum
if [ -f "$er_overlay_file" ]; then
@@ -24,8 +24,8 @@ check_set_md5sum() {
cat $er_md5sum_file >$er_overlay_file
elif [ "$er_extroot_overlay_md5sum" != "$er_extroot_md5sum" ]; then
pi_extroot_mount_success="false"
- mkdir -p /tmp/overlay-disabled
- mount --move /overlay /tmp/overlay-disabled
+ mkdir -p /tmp${ER_OVERLAY_ROM}-disabled
+ mount --move ${ER_OVERLAY_ROM} /tmp${ER_OVERLAY_ROM}-disabled
fi
}
diff --git a/package/block-extroot/files/60_pivot_usb_root b/package/block-extroot/files/60_pivot_usb_root
index 1c9be97cae..b610a4ade1 100644
--- a/package/block-extroot/files/60_pivot_usb_root
+++ b/package/block-extroot/files/60_pivot_usb_root
@@ -9,10 +9,17 @@
external_root_pivot() {
check_skip || [ "$pi_extroot_mount_success" != "true" ] || {
echo "switching to external rootfs"
- if [ "$ER_IS_SQUASHFS" = "true" ]; then
- umount /tmp/overlay
+ if [ "$ER_OVERLAY_ROM" = "/overlay" ]; then
+ if [ "$ER_IS_SQUASHFS" = "true" ]; then
+ umount /tmp/overlay
+ fi
+ mount -o remount,ro / && fopivot /overlay /rom && pi_mount_skip_next=true
+ elif [ "$ER_OVERLAY_ROM" = "/rom" ]; then
+ if [ "$ER_IS_SQUASHFS" = "true" ]; then
+ umount /tmp/overlay
+ fi
+ mount -o remount,ro / && pivot_rom /rom /rom && pi_mount_skip_next=true
fi
- mount -o remount,ro / && fopivot /overlay /rom && pi_mount_skip_next=true
}
}
diff --git a/package/block-extroot/files/extmount.sh b/package/block-extroot/files/extmount.sh
index 1d5ebf26fa..44d662e63a 100644
--- a/package/block-extroot/files/extmount.sh
+++ b/package/block-extroot/files/extmount.sh
@@ -24,3 +24,13 @@ er_load_modules() {
rm -rf /tmp/extroot_modules
}
+pivot_rom() { # <new_root> <old_root>
+ mount -o move /proc $1/proc && \
+ pivot_root $1 $1$2 && {
+ mount -o move $2/dev /dev
+ mount -o move $2/tmp /tmp
+ mount -o move $2/sys /sys 2>&-
+ return 0
+ }
+}
+
diff --git a/package/block-mount/files/mount.sh b/package/block-mount/files/mount.sh
index 3056c73aa9..d82a927835 100644
--- a/package/block-mount/files/mount.sh
+++ b/package/block-mount/files/mount.sh
@@ -41,10 +41,14 @@ config_mount_by_section() {
if [ "$find_rootfs" = "1" ]; then
if [ "$is_rootfs" -eq 1 ]; then
target=/overlay
+ elif [ "$target" = "/" ]; then
+ target=/rom
fi
else
if [ "$is_rootfs" -eq 1 ] || [ "$target" = "/overlay" ]; then
target=/tmp/overlay-disabled
+ elif [ "$target" = "/" ] || [ "$target" = "/rom" ]; then
+ target="/tmp/rom-disabled"
fi
fi
@@ -59,6 +63,9 @@ config_mount_by_section() {
[ "$target" = "/overlay" ] && {
rootfs_found=1
}
+ [ "$target" = "/rom" ] && {
+ rootfs_found=1
+ }
}
return 0
}