[PATCH 33/50] We now have a simple hook structure and 3 defined hook points.

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.)
master
Victor Lowther 2009-02-13 04:42:50 -08:00 committed by Dave Jones
parent cd20f1f6eb
commit ec1ad3347c
6 changed files with 25 additions and 14 deletions

View File

@ -4,6 +4,9 @@ all:
install: install:
mkdir -p $(DESTDIR)/usr/libexec/dracut mkdir -p $(DESTDIR)/usr/libexec/dracut
mkdir -p $(DESTDIR)/sbin 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 dracut $(DESTDIR)/sbin/dracut
install -m 0755 init $(DESTDIR)/usr/libexec/dracut/init install -m 0755 init $(DESTDIR)/usr/libexec/dracut/init
install -m 0755 switch_root $(DESTDIR)/usr/libexec/dracut/switch_root 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 install -m 0755 echoer $(DESTDIR)/usr/libexec/dracut/echoer
mkdir $(DESTDIR)/usr/libexec/dracut/rules.d 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 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: clean:
rm -f *~ rm -f *~



5
dracut
View File

@ -110,6 +110,11 @@ fi
cp $initfile "$initdir/init" cp $initfile "$initdir/init"
cp $switchroot "$initdir/sbin/switch_root" cp $switchroot "$initdir/sbin/switch_root"
cp $echoer "$initdir/echoer" 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 # and create some directory structure
for d in etc proc sys sysroot dev/pts; do mkdir -p "$initdir/$d"; done for d in etc proc sys sysroot dev/pts; do mkdir -p "$initdir/$d"; done

19
init
View File

@ -23,8 +23,8 @@ getarg() {


source_all() { source_all() {
local f local f
[[ -d $1 ]] || return [[ $1 && -d /$1 ]] || return
for f in "$d"/*; do; . "$f"; done for f in "/$1"/*; do [[ -f $f ]] && . "$f"; done
} }


echo "Starting initrd..." echo "Starting initrd..."
@ -51,6 +51,8 @@ mknod /dev/tty0 c 4 0
mknod /dev/tty1 c 4 1 mknod /dev/tty1 c 4 1
mknod /dev/null c 1 3 mknod /dev/null c 1 3


source_all pre-udev

# start up udev and trigger cold plugs # start up udev and trigger cold plugs
udevd --daemon udevd --daemon
udevadm trigger >/dev/null 2>&1 udevadm trigger >/dev/null 2>&1
@ -75,7 +77,7 @@ esac
tries=0 tries=0
echo "Waiting up to 30 seconds for $root to become available" echo "Waiting up to 30 seconds for $root to become available"
udevadm settle --timeout=30 udevadm settle --timeout=30
source_all /pre-mount source_all pre-mount


echo "Trying to mount rootfs $root" echo "Trying to mount rootfs $root"
[[ -e $root ]] || emergency_shell [[ -e $root ]] || emergency_shell
@ -91,16 +93,7 @@ mount --bind /dev $NEWROOT/dev
mount -t proc /proc $NEWROOT/proc mount -t proc /proc $NEWROOT/proc
mount -t sysfs /sys $NEWROOT/sys mount -t sysfs /sys $NEWROOT/sys


# FIXME: load selinux policy. this should really be done after we switchroot source_all pre-pivot
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


# kill off udev # kill off udev
kill $(pidof udevd) kill $(pidof udevd)

0
pre-mount/50cryptroot Normal file → Executable file
View File

0
pre-mount/99resume Normal file → Executable file
View File

10
pre-pivot/50selinux-loadpolicy Executable file
View File

@ -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