Browse Source

extroot: block-mount block-extroot: Added ability to do a whole disk extroot instead of only an overlay-based extroot.

SVN-Revision: 26109
Daniel Dickinson 15 years ago
parent
commit
183b4d1a28

+ 7 - 0
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"

+ 3 - 3
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
 }
 

+ 10 - 3
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
 	}
 }
 

+ 10 - 0
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
+	}
+}
+

+ 7 - 0
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	
 	}