[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
parent
cd20f1f6eb
commit
ec1ad3347c
5
Makefile
5
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 *~
|
||||
|
||||
|
|
5
dracut
5
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
|
||||
|
|
19
init
19
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)
|
||||
|
|
|
@ -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…
Reference in New Issue