]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
[PATCH 33/50] We now have a simple hook structure and 3 defined hook points.
authorVictor Lowther <victor.lowther@gmail.com>
Fri, 13 Feb 2009 12:42:50 +0000 (04:42 -0800)
committerDave Jones <davej@redhat.com>
Mon, 16 Feb 2009 18:56:42 +0000 (13:56 -0500)
Any script placed in /pre-udev will be sourced just before udev starts
device scanning and loading.

Any script placed in /pre-mount will be sourced just before we try to
mount a root filesystem.

Any script placed in /pre-pivot will be sourced just before we switch to the
new root filesystem.

These hooks should be the minimum needed to add back plymouth and deal with
more advanced filesysem mounting needs (multipath, iscsi, nfs, nbd, etc.)

Makefile
dracut
init
pre-mount/50cryptroot [changed mode: 0644->0755]
pre-mount/99resume [changed mode: 0644->0755]
pre-pivot/50selinux-loadpolicy [new file with mode: 0755]

index a4d1348f3c7c4c6c75013a2752312be2ad652be7..6d7cb68b845d0b6eedfca934eafbec838a358c42 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -4,6 +4,9 @@ all:
 install:
        mkdir -p $(DESTDIR)/usr/libexec/dracut
        mkdir -p $(DESTDIR)/sbin
+       mkdir -p $(DESTDIR)/usr/libexec/dracut/pre-mount
+       mkdir -p $(DESTDIR)/usr/libexec/dracut/pre-udev
+       mkdir -p $(DESTDIR)/usr/libexec/dracut/pre-pivot
        install -m 0755 dracut $(DESTDIR)/sbin/dracut
        install -m 0755 init $(DESTDIR)/usr/libexec/dracut/init
        install -m 0755 switch_root $(DESTDIR)/usr/libexec/dracut/switch_root
@@ -11,7 +14,7 @@ install:
        install -m 0755 echoer $(DESTDIR)/usr/libexec/dracut/echoer
        mkdir $(DESTDIR)/usr/libexec/dracut/rules.d
        for rule in rules.d/*.rules ; do install -m 0644 $$rule $(DESTDIR)/usr/libexec/dracut/rules.d ; done
-
+       for hooks in pre-*/* ; do install -m 0755 $$hook $(DESTDIR/usr/libexec/dracut ; done
 clean:
        rm -f *~
 
diff --git a/dracut b/dracut
index 382290e6ef6753b9bf636a83e62eca7d23cf1380..ecf58dcb2cd2264e3ead6fd16032bb1c51205fd7 100755 (executable)
--- a/dracut
+++ b/dracut
@@ -110,6 +110,11 @@ fi
 cp $initfile "$initdir/init"
 cp $switchroot "$initdir/sbin/switch_root"
 cp $echoer "$initdir/echoer"
+for hookdir in $hookdirs; do
+    for hook in "$dsrc/$hookdir"/*; do
+       [[ -f $hook ]] && inst "$hook" "/$hookdir/${hook##*/}"
+    done
+done
 
 # and create some directory structure
 for d in etc proc sys sysroot dev/pts; do mkdir -p "$initdir/$d"; done
diff --git a/init b/init
index 0b158dc26baba1e76018d03b0d0dfc511b304e8f..611781cb9d4307cf2eec9f62a3a8986dd0cb227f 100755 (executable)
--- a/init
+++ b/init
@@ -23,8 +23,8 @@ getarg() {
 
 source_all() {
     local f
-    [[ -d $1 ]] || return
-    for f in "$d"/*; do; . "$f"; done
+    [[ $1 &&  -d /$1 ]] || return
+    for f in "/$1"/*; do [[ -f $f ]] && . "$f"; done
 }
 
 echo "Starting initrd..."
@@ -51,6 +51,8 @@ mknod /dev/tty0 c 4 0
 mknod /dev/tty1 c 4 1
 mknod /dev/null c 1 3
 
+source_all pre-udev
+
 # start up udev and trigger cold plugs
 udevd --daemon
 udevadm trigger >/dev/null 2>&1
@@ -75,7 +77,7 @@ esac
 tries=0
 echo "Waiting up to 30 seconds for $root to become available"
 udevadm settle --timeout=30
-source_all /pre-mount
+source_all pre-mount
 
 echo "Trying to mount rootfs $root"
 [[ -e $root ]] || emergency_shell
@@ -91,16 +93,7 @@ mount --bind /dev $NEWROOT/dev
 mount -t proc /proc $NEWROOT/proc
 mount -t sysfs /sys $NEWROOT/sys
 
-# FIXME: load selinux policy.  this should really be done after we switchroot 
-if [ -x $NEWROOT/usr/sbin/load_policy ]; then
-  chroot $NEWROOT /usr/sbin/load_policy -i
-  if (($? == 3)); then
-    echo "Initial SELinux policy load failed and enforcing mode requested."
-    echo "Not continuing"
-    sleep 100d
-    exit 1
-  fi
-fi
+source_all pre-pivot
 
 # kill off udev
 kill $(pidof udevd)
old mode 100644 (file)
new mode 100755 (executable)
old mode 100644 (file)
new mode 100755 (executable)
diff --git a/pre-pivot/50selinux-loadpolicy b/pre-pivot/50selinux-loadpolicy
new file mode 100755 (executable)
index 0000000..8cc3133
--- /dev/null
@@ -0,0 +1,10 @@
+#!/bin/bash
+# FIXME: load selinux policy.  this should really be done after we switchroot 
+[[ -x $NEWROOT/usr/sbin/load_policy ]] || return
+chroot $NEWROOT /usr/sbin/load_policy -i
+if (($? == 3)); then
+   echo "Initial SELinux policy load failed and enforcing mode requested."
+   echo "Not continuing"
+   sleep 100d
+   exit 1
+fi