[package] extroot: block-mount block-extroot: Added ability to do a whole disk extroo...
authorcshore <cshore@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Sun, 13 Mar 2011 09:24:24 +0000 (09:24 +0000)
committercshore <cshore@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Sun, 13 Mar 2011 09:24:24 +0000 (09:24 +0000)
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@26109 3c298f89-4303-0410-b956-a3cf2f4a3e73

package/block-extroot/files/50_determine_usb_root
package/block-extroot/files/55_determine_extroot_sysupgrade
package/block-extroot/files/60_pivot_usb_root
package/block-extroot/files/extmount.sh
package/block-mount/files/mount.sh

index e87855c..8c5841e 100644 (file)
@@ -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"
index 5a6ad04..d458b63 100644 (file)
@@ -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
 }
 
index 1c9be97..b610a4a 100644 (file)
@@ -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
        }
 }
 
index 1d5ebf2..44d662e 100644 (file)
@@ -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
+       }
+}
+
index 3056c73..d82a927 100644 (file)
@@ -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        
        }