[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