SVN: geninitrd/trunk/geninitrd

glen glen at pld-linux.org
Wed Nov 12 21:55:46 CET 2008


Author: glen
Date: Wed Nov 12 21:55:46 2008
New Revision: 9982

Modified:
   geninitrd/trunk/geninitrd
Log:
- move ramfs rootdev finding and mounting to initrd_gen_initramfs_switchroot function

Modified: geninitrd/trunk/geninitrd
==============================================================================
--- geninitrd/trunk/geninitrd	(original)
+++ geninitrd/trunk/geninitrd	Wed Nov 12 21:55:46 2008
@@ -1715,6 +1715,84 @@
 	EOF
 }
 
+initrd_gen_initramfs_switchroot() {
+	inst_d /newroot
+	if [ "$rootdev" = "/dev/nfs" ]; then
+		echo "rootfs on NFS root=/dev/nfs"
+	else
+		[ ! -e "$DESTDIR/$rootdev" ] && inst $rootdev $rootdev
+	fi
+	# Parsing root parameter
+	# We support passing root as hda3 /dev/hda3 0303 0x0303 and 303
+	add_linuxrc <<-'EOF'
+		device=/dev/no_partition_found
+		eval "$(busybox awk -v c="$ROOT" '
+			BEGIN {
+				num_pattern_short = "[0-9a-f][0-9a-f][0-9a-f]";
+				num_pattern = "[0-9a-f]" num_pattern_short;
+				dev_pattern = "[hms][a-z][a-z]([0-9])+";
+				partition = "no_partition_found";
+				min = -1; maj = -1;
+
+				sub("^0x", "", c);
+				if (c ~ "^" num_pattern_short "$") sub("^", "0", c);
+				if (c ~ "^" num_pattern  "$") {
+					maj = sprintf("%s",substr(c,1,2));
+					min = sprintf("%s",substr(c,3));
+				}
+				if (c ~ "^\/dev\/" dev_pattern "$") sub("^/dev/","", c);
+				if (c ~ "^" dev_pattern "$") partition = c;
+			}
+
+			$4 ~ partition { maj = $1; min = $2; }
+			$1 ~ maj && $2 ~ min { partition = $4; }
+
+			END {
+				print sprintf("device=/dev/%s\nmaj=%s\nmin=%s",
+					partition, maj, min);
+			}
+			' /proc/partitions)"
+		if [ "$device" != '/dev/no_partition_found' -a ! -b $device ]; then
+			mknod $device b $maj $min
+		fi
+	EOF
+
+	add_linuxrc <<-EOF
+		rootdev=$rootdev
+		rootfs=$rootFs
+	EOF
+
+	add_linuxrc <<-'EOF'
+		if [ "$device" = '/dev/no_partition_found' ]; then
+			device=$rootdev
+		fi
+
+		mount -t $rootfs -r $device /newroot
+		init="$(echo "$CMDLINE" | busybox awk '/init=\// { gsub(/.*init=/,NIL,$0); gsub(/ .*/,NIL,$0); print }')"
+		if [ -z "$init" -o ! -x "/newroot$init" ]; then
+			init=/sbin/init
+		fi
+	EOF
+
+	umount_all
+	busybox_applet switch_root
+	add_linuxrc <<-'EOF'
+		exec switch_root /newroot $init
+
+		echo "Error! initramfs should not reach this place."
+		echo "It probably means you've got old version of busybox, with broken"
+		echo "initramfs support. Trying to boot anyway, but won't promise anything."
+
+		exec chroot /newroot $init
+
+		echo "Failed to chroot!"
+	EOF
+	# we need /init being real file, not symlink, otherwise the initramfs will
+	# not be ran by pid 1 which is required for switch_root
+	mv $DESTDIR/linuxrc $DESTDIR/init
+	ln -s init $DESTDIR/linuxrc
+}
+
 # main()
 if [ "$(id -u)" != 0 ]; then
 	die "You need to be root to generate initrd"
@@ -2214,83 +2292,8 @@
 [ ! -e "$DESTDIR/$rootdev_add" ] && inst $rootdev_add /dev
 
 if [ "$INITRDFS" = "initramfs" ]; then
-	inst_d /newroot
-	if [ "$rootdev" = "/dev/nfs" ]; then
-		echo "rootfs on NFS root=/dev/nfs"
-	else
-		[ ! -e "$DESTDIR/$rootdev" ] && inst $rootdev $rootdev
-	fi
-	# Parsing root parameter
-	# We support passing root as hda3 /dev/hda3 0303 0x0303 and 303
-	add_linuxrc <<-'EOF'
-		device=/dev/no_partition_found
-		eval "$(busybox awk -v c="$ROOT" '
-			BEGIN {
-				num_pattern_short = "[0-9a-f][0-9a-f][0-9a-f]";
-				num_pattern = "[0-9a-f]" num_pattern_short;
-				dev_pattern = "[hms][a-z][a-z]([0-9])+";
-				partition = "no_partition_found";
-				min = -1; maj = -1;
-
-				sub("^0x", "", c);
-				if (c ~ "^" num_pattern_short "$") sub("^", "0", c);
-				if (c ~ "^" num_pattern  "$") {
-					maj = sprintf("%s",substr(c,1,2));
-					min = sprintf("%s",substr(c,3));
-				}
-				if (c ~ "^\/dev\/" dev_pattern "$") sub("^/dev/","", c);
-				if (c ~ "^" dev_pattern "$") partition = c;
-			}
-
-			$4 ~ partition { maj = $1; min = $2; }
-			$1 ~ maj && $2 ~ min { partition = $4; }
-
-			END {
-				print sprintf("device=/dev/%s\nmaj=%s\nmin=%s",
-					partition, maj, min);
-			}
-			' /proc/partitions)"
-		if [ "$device" != '/dev/no_partition_found' -a ! -b $device ]; then
-			mknod $device b $maj $min
-		fi
-	EOF
-
-	add_linuxrc <<-EOF
-		rootdev=$rootdev
-		rootfs=$rootFs
-	EOF
-
-	add_linuxrc <<-'EOF'
-		if [ "$device" = '/dev/no_partition_found' ]; then
-			device=$rootdev
-		fi
-
-		mount -t $rootfs -r $device /newroot
-		init="$(echo "$CMDLINE" | busybox awk '/init=\// { gsub(/.*init=/,NIL,$0); gsub(/ .*/,NIL,$0); print }')"
-		if [ -z "$init" -o ! -x "/newroot$init" ]; then
-			init=/sbin/init
-		fi
-	EOF
-
-	umount_all
-	busybox_applet switch_root
-	add_linuxrc <<-'EOF'
-		exec switch_root /newroot $init
-
-		echo "Error! initramfs should not reach this place."
-		echo "It probably means you've got old version of busybox, with broken"
-		echo "initramfs support. Trying to boot anyway, but won't promise anything."
-
-		exec chroot /newroot $init
-
-		echo "Failed to chroot!"
-	EOF
-	# we need /init being real file, not symlink, otherwise the initramfs will
-	# not be ran by pid 1 which is required for switch_root
-	mv $DESTDIR/linuxrc $DESTDIR/init
-	ln -s init $DESTDIR/linuxrc
+	initrd_gen_initramfs_switchroot
 else
-	# other than initramfs
 	umount_all
 fi
 


More information about the pld-cvs-commit mailing list