]> git.pld-linux.org Git - projects/geninitrd.git/commitdiff
- merged from branches/devel
authorczarny <czarny@pld-linux.org>
Thu, 14 Dec 2006 16:03:12 +0000 (16:03 +0000)
committerczarny <czarny@pld-linux.org>
Thu, 14 Dec 2006 16:03:12 +0000 (16:03 +0000)
- tweaked geninitrd.sysconfig for default options
- some documentation added

svn-id: @8103

geninitrd
geninitrd.8.xml
geninitrd.sysconfig

index 2b6671ac8ec9ddf542338744fd54666464e0048f..295c017cbe08bd3ec8b52ac36b8fc5dfd52981dc 100755 (executable)
--- a/geninitrd
+++ b/geninitrd
@@ -5,6 +5,13 @@
 #      by PLD Linux Team
 #
 # based on mkinitrd from RedHat
+#
+# TODO:
+# - make udev start before insomds
+# - make proper use of USE_UDEV - don't copy fules if USE_UDEV is off no!
+# - sanitize - one mounting of /proc and /sys at the begining and one umount at the end!
+# - chekup and test and ready to go!
+#
 
 RCSID='$Id$'
 PATH=/sbin:$PATH
@@ -41,6 +48,11 @@ modext=".o"
 rootdev_nr=0
 # default bootsplash is off, if it have to be on, install bootsplash package
 BOOT_SPLASH=no
+# default same as bootsplash, if on install splashutils and some splashutils theme
+FB_SPLASH=no
+# defualt we don't use udev to make nodes for static modules, as per default
+# PLD loads the modules needed to mount and boot
+PROBESTATICMODULES=no
 
 # is /dev on tmpfs. internal variable
 tmpfs_dev=
@@ -59,7 +71,8 @@ usage () {
        echo "       [--with=<module>] [--image-version] [--fstab=<fstab>] [--nocompress]"
        echo "       [--initrdfs=rom|ext2|cram] [--modules-conf=<modules.conf>]"
        echo "       [--with-raidstart] [--without-raidstart] [--with-insmod-static]"
-       echo "       [--without-bootsplash] [--lvmtoolsversion=1|2] [--with-udev] [--without-udev]"
+       echo "       [--without-bootsplash] [--without-fbsplash]"
+       echo "       [--lvmtoolsversion=1|2] [--with-udev] [--without-udev]"
        echo "       [--without-suspend] [--without-suspend2] [--without-dmraid]"
        echo "       <initrd-image> <kernel-version>"
        echo "       (ex: `basename $0` /boot/initrd-2.2.5-15.img 2.2.5-15)"
@@ -781,6 +794,10 @@ if [ -r /etc/sysconfig/bootsplash ] ; then
        . /etc/sysconfig/bootsplash
 fi
 
+if [ -r /etc/sysconfig/fbsplash ] ; then
+       . /etc/sysconfig/fbsplash
+fi
+
 if [ ! -x /bin/initrd-busybox ] ; then
        echo "/bin/initrd-busybox is missing !"
        exit 1
@@ -817,6 +834,9 @@ while [ $# -gt 0 ]; do
        --without-bootsplash)
                BOOT_SPLASH="no"
                ;;
+       --without-fbsplash)
+               FB_SPLASH="no"
+               ;;
        --without-suspend)
                USE_SUSPEND="no";
                ;;
@@ -915,8 +935,7 @@ pack_version_long="`echo "$kernel"|awk -F. '{print sprintf("%03d%03d%03d",$1,$2,
 if [ "x" = "x$INITRDFS" ] ; then
        if [ "x" = "x$FS" ] ; then
                # default value
-               # XXX: initramfs blocked for now
-               if [ "1" = " 0" -a "$pack_version" -ge "002005" ] ; then
+               if [ "$pack_version" -ge "002005" ] ; then
                        INITRDFS="initramfs"
                else
                        INITRDFS="rom"
@@ -1005,6 +1024,16 @@ if is_yes "$USE_SUSPEND"; then
        fi
 fi
 
+if is_yes "$FB_SPLASH"; then
+       if is_yes "$BOOT_SPLASH"; then
+               echo >&2 "You can't use both bootsplash and fbsplash! Please choose one."
+               exit 1
+       elif [ "$INITRDFS" != "initramfs" ]; then
+               echo >&2 "FB_SPLASH works only if INITRDFS is initramfs!."
+               exit 1
+       fi
+fi
+
 if [ ! -f /proc/mounts ]; then
        echo >&2 "WARNING: /proc filesystem not mounted, may cause wrong results or failure."
 fi
@@ -1047,6 +1076,9 @@ if is_yes "$USE_SUSPEND2"; then
        findmodule "-lzf"
 fi
 
+if is_yes "$FB_SPLASH"; then
+       findmodule "-evdev"
+fi
 if [ -n "$ifneeded" -a -z "$MODULES" ]; then
        debug "No modules are needed -- not building initrd image."
        exit 0
@@ -1172,22 +1204,29 @@ initrd_gen_udev() {
        mkdir -p $MNTIMAGE/sys
 
        inst /sbin/initrd-udev $MNTIMAGE/sbin/udev
-       ln -s udev $MNTIMAGE/sbin/udevstart
        inst /etc/udev/udev.conf $MNTIMAGE/etc/udev/udev.conf
 
-       ln -s udev $MNTIMAGE/sbin/hotplug
-
        if is_yes "$USE_UDEV"; then
                initrd_gen_tmpfs_dev >> "$s"
-               cat >> "$s" <<-EOF
-mount -t proc none /proc
-mount -t sysfs none /sys
-: 'Starting udev'
-/sbin/udevstart
-echo -n /sbin/hotplug > /proc/sys/kernel/hotplug
-umount /proc
-umount /sys
-EOF
+               cat >> "$s" <<- 'EOF'
+                       mount -t proc none /proc
+                       mount -t sysfs none /sys
+                       : 'Starting udev'
+                       /sbin/udev
+                       echo -n /sbin/hotplug > /proc/sys/kernel/hotplug
+                       EOF
+               if is_yes "$PROBESTATICMODS"; then
+                       inst /sbin/initrd-udevtrigger $MNTIMAGE/sbin/udevtrigger
+                       inst /sbin/initrd-udevsettle $MNTIMAGE/sbin/udevsettle
+                       cat >> "$s" <<- 'EOF'
+                               /sbin/udevtrigger
+                               /sbin/udevsettle
+                               EOF
+               fi
+               cat >> "$s" <<- 'EOF'
+                       umount /proc
+                       umount /sys
+                       EOF
        fi
 }
 
@@ -1464,8 +1503,58 @@ fi
 if [ "$INITRDFS" = "initramfs" ]; then
        mkdir -p $MNTIMAGE/newroot
        cp -HR $org_rootdev $MNTIMAGE/dev
-       echo "mount -t $rootFs $org_rootdev /newroot" >> "$s"
-       echo "switch_root /newroot /sbin/init" >> "$s"
+       # Parsing root parameter
+       # We support passing root as hda3 /dev/hda3 0303 0x0303
+       cat << 'EOF' >> "$s"
+set +x
+mount -t proc none /proc
+root="$(busybox awk -v prefix="root=" ' \
+function separate_root ( txt ) \
+{ \
+    gsub(/.*root=/,NIL,txt); \
+    gsub(/ .*/,NIL,txt); \
+    return txt \
+} \
+BEGIN { \
+    num_pattern = "[0-9][0-9][0-9][0-9]"; \
+    dev_pattern = "[hms][a-z][a-z]([0-9])+"; \
+    partition = "Metallica rocks!"; \
+    min = -1; maj = -1; \
+} \
+$0 ~ prefix "0x" num_pattern { sub(/root=0x/,"root="); } \
+$0 ~ prefix num_pattern { \
+    gsub(/.*root=/,NIL,partition); \
+    gsub(/ .*/,NIL,partition); \
+    partition = separate_root( $0 ); \
+    maj = sprintf("%d",substr(partition,1,2)); \
+    min = sprintf("%d",substr(partition,3)); \
+} \
+$0 ~ prefix "\/dev\/" dev_pattern { sub(/root=\/dev\//,"root="); } \
+$0 ~ prefix dev_pattern { \
+    partition = separate_root( $0 ); \
+} \
+$4 ~ partition { maj = $1; min = $2; } \
+$1 ~ maj && $2 ~ min { partition = $4; } \
+END { print sprintf("/dev/%s %d %d", partition, maj, min); }
+' /proc/cmdline /proc/partitions)"
+device=${root% * *}
+maj=${root#* }
+maj=${maj% *}
+min=${root#* * }
+set -x
+if [ ! -b $device ]; then
+       mknod $device b $maj $min
+fi
+EOF
+       cat << EOF >> "$s"
+mount -t $rootFs \$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
+       init=/sbin/init
+fi
+umount /proc
+exec switch_root /newroot \$init
+EOF
        # we need real file, not symlink
        rm -f $MNTIMAGE/init
        cp -a $MNTIMAGE/linuxrc $MNTIMAGE/init
@@ -1536,6 +1625,29 @@ if is_yes "$BOOT_SPLASH"; then
        fi
 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
+fi
+
 rm -rf "$MNTIMAGE" "$MNTPOINT" "$IMAGE"
 
 # vim:ts=4:sw=4:noet:fdm=marker
index b22c72b20c33ad33b6223d4063447999176830df..b0882ad179a6eddc69a440a334aad5c0f75a39c4 100644 (file)
        </para>
        <para>For eg. if you have Promise FastTrack controler then add "alias ataraid_hostadapter pdcraid" to /etc/modules.conf.</para>
 </refsect1>
+<refsect1>
+       <title>Splash support</title>
+       <para>
+               Geninitrd supports both <application>bootsplash</application> and <application>fbsplash</application> (<application>splashutils</application>) incorpororation into boot proces.
+       </para>
+       <para>
+           For both <application>fbsplash</application> and <application>bootsplash</application> to work, the kernel needs to be patched respectivly. 
+       </para>
+       <para>
+               Additionally, for <application>fbsplash</application> and <application>bootsplash</application> you need to pass special kernel parameters during boot. Use <application>rc-boot</application>, <application>lilo</application> or <application>grub</application> to pass the parameters. For details on parameters please consult <application>fbsplash</application> or <application>bootsplash</application> documentation.
+       </para>
+</refsect1>
 <refsect1>
        <title>Linux 2.6.x support</title>
        <para>To bulild initrd for Linux 2.6.x kernels you must have module-init-tools and use --with-insmod-static switch or use initrd version of recent busybox that comes in busybox-initrd package.
        <member>Artur Frysiak <email>wiget(at)pld-linux.org</email>, </member>
        <member>Dariusz Karolczak <email>inglod(at)pld-linux.org</email>, </member>
        <member>Tomasz Kloczko <email>kloczek(at)pld.org.pl</email>, </member>
+       <member>Cezary KrzyĚźanowski <email>czarny(at)pld-linux.org</email>, </member>
        <member>Arkadiusz Miskiewicz <email>arekm(at)pld-linux.org</email>, </member>
        <member>Michal Moskal <email>malekith(at)pld-linux.org</email>, </member>
        <member>Jan Rekorajski <email>baggins(at)pld-linux.org</email>, </member>
index 223e82ac4b78380ec1c5cc7db4a4b832d1b920ed..311ca06e40d141c0242b5bb0a6c2afb8e8f2c75c 100644 (file)
@@ -14,12 +14,18 @@ COMPRESS=yes
 ## Use udev to create /dev?
 #USE_UDEV=no
 
+## Should udev make device nodes for staticly linked devices as well?
+#PROBSTATICMODULES=yes
+
 ## Use suspend to disk?
 USE_SUSPEND=no
 
-# Do install software suspend2 modules?
+## Do install software suspend2 modules?
 USE_SUSPEND2=no
 
+## Should we use splash image?
+# FB_SPLASH=yes
+
 # sleep after module loading
 #MODULE_qla2xxx_USLEEP="2000000"
 
This page took 0.065025 seconds and 4 git commands to generate.