diff options
-rw-r--r-- | package/block-extroot/files/50_determine_usb_root | 7 | ||||
-rw-r--r-- | package/block-extroot/files/55_determine_extroot_sysupgrade | 6 | ||||
-rw-r--r-- | package/block-extroot/files/60_pivot_usb_root | 13 | ||||
-rw-r--r-- | package/block-extroot/files/extmount.sh | 10 | ||||
-rw-r--r-- | package/block-mount/files/mount.sh | 7 |
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 e87855c2a..8c5841e32 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 5a6ad04f8..d458b63bb 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 1c9be97ca..b610a4ade 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 1d5ebf26f..44d662e63 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 3056c73aa..d82a92783 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 } |