diff --git a/dracut b/dracut index 186d6adc..30f0f9da 100755 --- a/dracut +++ b/dracut @@ -42,6 +42,11 @@ hookdirs="pre-udev pre-mount pre-pivot" initdir=$(mktemp -d -t initramfs.XXXXXX) trap 'rm -rf "$initdir"' 0 # clean up after ourselves no matter how we die. +# Create some directory structure first +for d in bin sbin usr/bin usr/sbin usr/lib etc proc sys sysroot dev/pts; do + mkdir -p "$initdir/$d"; +done + # executables that we have to have exe="/bin/bash /bin/mount /bin/mknod /bin/mkdir /sbin/modprobe /sbin/udevd /sbin/udevadm /sbin/nash /sbin/pidof /bin/sleep /usr/sbin/chroot /bin/echo /bin/cat /bin/sed" lvmexe="/sbin/lvm" @@ -51,7 +56,7 @@ debugexe="/bin/ls /bin/ln /bin/ps /bin/grep /bin/more /bin/dmesg" # udev things we care about udevexe="/lib/udev/vol_id /lib/udev/console_init" -# install base files +# install base executables for binary in $exe $debugexe $udevexe $lvmexe $cryptexe ; do inst $binary done @@ -62,6 +67,26 @@ if [[ -f /bin/dash ]]; then ln -sf /bin/dash "${initdir}/bin/sh" fi +# install our scripts and hooks +inst "$initfile" "/init" +inst "$switchroot" "/sbin/switch_root" +inst "$echoer" "/echoer" +for hookdir in $hookdirs; do + for hook in "$dsrc/$hookdir"/*; do + [[ -f $hook ]] && inst "$hook" "/$hookdir/${hook##*/}" + done +done + +# FIXME: hard-coded module list of doom. +[[ $modules ]] || modules="=ata =block =drm dm-crypt aes sha256 cbc" + +instmods $modules + +# Grab modules for all filesystem types we currently have mounted +while read d mp t rest; do + instmods "$t" +done "$outfile"; )