Browse Source

[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 16 years ago committed by Dave Jones
parent
commit
ec1ad3347c
  1. 5
      Makefile
  2. 5
      dracut
  3. 19
      init
  4. 0
      pre-mount/50cryptroot
  5. 0
      pre-mount/99resume
  6. 10
      pre-pivot/50selinux-loadpolicy

5
Makefile

@ -4,6 +4,9 @@ all: @@ -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: @@ -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 *~


5
dracut

@ -110,6 +110,11 @@ fi @@ -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

19
init

@ -23,8 +23,8 @@ getarg() { @@ -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 @@ -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 @@ -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 @@ -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)

0
pre-mount/50cryptroot

0
pre-mount/99resume

10
pre-pivot/50selinux-loadpolicy

@ -0,0 +1,10 @@ @@ -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
Loading…
Cancel
Save