Author: glen
Date: Fri Nov  2 18:16:10 2007
New Revision: 8969

Modified:
   geninitrd/trunk/geninitrd
Log:
- splash generations moved to function
- create only /init on initramfs due need to keep pid=1

Modified: geninitrd/trunk/geninitrd
==============================================================================
--- geninitrd/trunk/geninitrd   (original)
+++ geninitrd/trunk/geninitrd   Fri Nov  2 18:16:10 2007
@@ -543,6 +543,7 @@
        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 @@
 # 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/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 @@
        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 @@
                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 @@
 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"
_______________________________________________
pld-cvs-commit mailing list
[email protected]
http://lists.pld-linux.org/mailman/listinfo/pld-cvs-commit

Reply via email to