[readonly/geninitrd: 499/1068] - splash generations moved to function - create only /init on initramfs due need to keep pid=1

draenog draenog at pld-linux.org
Sat Nov 2 19:54:20 CET 2013


commit f5db170b4f600ae9a1beaecab67694a74737e918
Author: Elan Ruusamäe <glen at pld-linux.org>
Date:   Fri Nov 2 17:16:10 2007 +0000

    - splash generations moved to function
    - create only /init on initramfs due need to keep pid=1
    
    svn-id: @8969

 geninitrd | 137 +++++++++++++++++++++++++++++++++++---------------------------
 1 file changed, 78 insertions(+), 59 deletions(-)
---
diff --git a/geninitrd b/geninitrd
index bb4cb08..b02c30a 100755
--- a/geninitrd
+++ b/geninitrd
@@ -543,6 +543,7 @@ find_modules_scsi() {
 	local n
 	for n in $PRESCSIMODS; do
 		if [ "X$n" = "Xunknown" ]; then
+			debug "Finding SCSI modules using scsi_hostadapter"
 			local mod scsimodules=$(modprobe_conf | awk '/scsi_hostadapter/ && ! /^[\t ]*#/ { print $3; }')
 			for mod in $scsimodules; do
 				# for now allow scsi modules to come from anywhere. There are some
@@ -1306,6 +1307,10 @@ mkdir -p "$MNTPOINT"
 # We don't need this directory, so let's save space
 rm -rf "$MNTPOINT"/lost+found
 
+> "$RCFILE"
+chmod a+rx "$RCFILE"
+ln -s linuxrc $MNTIMAGE/init
+
 inst_d /{lib,bin,etc,dev,loopfs,var}
 
 modules_install "$MODULES"
@@ -1317,8 +1322,6 @@ mknod "$MNTIMAGE/dev/null" c 1 3
 mknod "$MNTIMAGE/dev/zero" c 1 5
 inst_d /dev/pts /dev/shm
 
-ln -s /linuxrc $MNTIMAGE/init
-
 inst /bin/initrd-busybox /bin/initrd-busybox
 ln -s initrd-busybox $MNTIMAGE/bin/sh
 ln -s initrd-busybox $MNTIMAGE/bin/busybox # for older busyboxes who had /bin/busybox as EXEPATH
@@ -1488,6 +1491,56 @@ initrd_gen_dmraid() {
 	EOF
 }
 
+initrd_gen_bootsplash() {
+	local target="$1"
+
+	if [ ! -x /bin/splash.bin ]; then
+		echo >&2 "Failed to execute /bin/splash.bin. Is bootsplash package installed?"
+	elif [ -z "$THEME" ]; then
+		echo >&2 "Please configure your /etc/sysconfig/bootsplash first."
+		echo >&2 "Generating bootsplashes skipped."
+	else
+		if [ -n "$BOOT_SPLASH_RESOLUTIONS" ]; then
+			for res in $BOOT_SPLASH_RESOLUTIONS; do
+				if [ -f "/etc/bootsplash/themes/$THEME/config/bootsplash-$res.cfg" ]; then
+					/bin/splash.bin -s -f "/etc/bootsplash/themes/$THEME/config/bootsplash-$res.cfg" >> "$target" && \
+					debug "Added $res $THEME theme to initrd."
+				else
+					echo >&2 "/etc/bootsplash/themes/$THEME/config/bootsplash-$res.cfg doesn't exist, skipped"
+				fi
+			done
+		else
+			echo >&2 "No BOOT_SPLASH_RESOLUTIONS specified in /etc/sysconfig/bootsplash."
+			echo >&2 "Not adding bootsplash to initrd."
+		fi
+	fi
+}
+
+initrd_gen_fbsplash() {
+	local target="$1"
+
+	if [ ! -x /usr/bin/splash_geninitramfs ]; then
+		echo >&2 "Failed to execute /usr/bin/splash_geninitramfs. Is splashutils package installed?"
+	elif [ -z "$SPLASH_THEME" ]; then
+		echo >&2 "Please configure your /etc/sysconfig/fbsplash first."
+		echo >&2 "Generating fbsplashes skipped."
+	else
+		if [ -n "$FB_SPLASH_RESOLUTIONS" ]; then
+			for res in $FB_SPLASH_RESOLUTIONS; do
+				if [ -f "/etc/splash/$SPLASH_THEME/$res.cfg" ]; then
+					/usr/bin/splash_geninitramfs -a $target -r $res $SPLASH_THEME && \
+					debug "Added $res $SPLASH_THEME theme to initramfs."
+				else
+					echo >&2 "/etc/splash/$SPLASH_THEME/$res.cfg doesn't exist, skipped"
+				fi
+			done
+		else
+			echo >&2 "No FB_SPLASH_RESOLUTIONS specified in /etc/sysconfig/fbsplash."
+			echo >&2 "Not adding fbsplash to initramfs."
+		fi
+	fi
+}
+
 # Generates /dev nodes based on /proc/partitions information.
 # Needs /proc mounted.
 # Can be called multiple times.
@@ -1809,40 +1862,44 @@ if [ "$INITRDFS" = "initramfs" ]; then
 		fi
 	EOF
 
-	busybox_applet switch_root
 	add_linuxrc <<-EOF
-		if [ "\$device" = '/dev/no_partition_found' ]; then
-			device="$rootdev"
+		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="\$(busybox awk ' /init=\// { gsub(/.*init=/,NIL,\$0); gsub(/ .*/,NIL,\$0); print \$0; }  ' /proc/cmdline )"
-		if [ -z "\$init" -o ! -x "/newroot\$init" ]; then
+		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
-	add_linuxrc <<-EOF
-		exec switch_root /newroot \$init
 
-		echo "Error ! initramfs should not reach this place."
+	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
+		exec chroot /newroot $init
 
-		echo "Failed to chroot !"
+		echo "Failed to chroot!"
 	EOF
-	# we need real file, not symlink
-	rm -f $MNTIMAGE/init
-	cp -a $MNTIMAGE/linuxrc $MNTIMAGE/init
+	# 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 $MNTIMAGE/linuxrc $MNTIMAGE/init
 else
 	# other than initramfs
 	umount_all
 fi
 
-chmod +x "$RCFILE"
-
 (cd "$MNTIMAGE"; tar cf - .) | (cd "$MNTPOINT"; tar xf -)
 
 case "$INITRDFS" in
@@ -1889,49 +1946,11 @@ else
 fi
 
 if is_yes "$BOOT_SPLASH"; then
-	if [ ! -x /bin/splash.bin ]; then
-		echo >&2 "Failed to execute /bin/splash.bin. Is bootsplash package installed?"
-	elif [ -z "$THEME" ]; then
-		echo >&2 "Please configure your /etc/sysconfig/bootsplash first."
-		echo >&2 "Generating bootsplashes skipped."
-	else
-		if [ -n "$BOOT_SPLASH_RESOLUTIONS" ]; then
-			for res in $BOOT_SPLASH_RESOLUTIONS; do
-				if [ -f "/etc/bootsplash/themes/$THEME/config/bootsplash-$res.cfg" ]; then
-					/bin/splash.bin -s -f "/etc/bootsplash/themes/$THEME/config/bootsplash-$res.cfg" >> "$target" && \
-					debug "Added $res $THEME theme to initrd."
-				else
-					echo >&2 "/etc/bootsplash/themes/$THEME/config/bootsplash-$res.cfg doesn't exist, skipped"
-				fi
-			done
-		else
-			echo >&2 "No BOOT_SPLASH_RESOLUTIONS specified in /etc/sysconfig/bootsplash."
-			echo >&2 "Not adding bootsplash to initrd."
-		fi
-	fi
+	initrd_gen_bootsplash "$target"
 fi
 
 if is_yes "$FB_SPLASH"; then
-	if [ ! -x /usr/bin/splash_geninitramfs ]; then
-		echo >&2 "Failed to execute /usr/bin/splash_geninitramfs. Is splashutils package installed?"
-	elif [ -z "$SPLASH_THEME" ]; then
-		echo >&2 "Please configure your /etc/sysconfig/fbsplash first."
-		echo >&2 "Generating fbsplashes skipped."
-	else
-		if [ -n "$FB_SPLASH_RESOLUTIONS" ]; then
-			for res in $FB_SPLASH_RESOLUTIONS; do
-				if [ -f "/etc/splash/$SPLASH_THEME/$res.cfg" ]; then
-					/usr/bin/splash_geninitramfs -a $target -r $res $SPLASH_THEME && \
-					debug "Added $res $SPLASH_THEME theme to initramfs."
-				else
-					echo >&2 "/etc/splash/$SPLASH_THEME/$res.cfg doesn't exist, skipped"
-				fi
-			done
-		else
-			echo >&2 "No FB_SPLASH_RESOLUTIONS specified in /etc/sysconfig/fbsplash."
-			echo >&2 "Not adding fbsplash to initramfs."
-		fi
-	fi
+	initrd_gen_fbsplash "$target"
 fi
 
 rm -rf "$MNTIMAGE" "$MNTPOINT" "$IMAGE"
================================================================

---- gitweb:

http://git.pld-linux.org/gitweb.cgi/readonly/geninitrd.git/commitdiff/147754ca159d40ca5eb541074dc043d8cbd92090



More information about the pld-cvs-commit mailing list