function installmodule() {
local module
+ local load
for module in $@; do
+ [ "$module" = "--load" ] && load=1
module=$(locatemodule $module)
[ -z "$module" ] && continue
install $module
done
+ if [ "$load" = "1" ]; then
+ for module in $@; do
+ [ "$module" = "--load" ] && continue
+ cat >> $TMPDIR/sbin/real-init <<EOF
+vecho "Loading module $i..."
+modprobe $i
+EOF
+ done
+ fi
}
resolve_device_name() {
done
cd $(read_link ./device)
if echo $PWD | grep -q /virtio-pci/ ; then
- installmodule virtio_pci
+ installmodule --load virtio_pci
fi
while [ "$PWD" != "/sys/devices" ]; do
deps=
if [ -f modalias ]; then
- installmodule $(cat modalias)
+ installmodule --load $(cat modalias)
fi
[ -z "$deps" -a -L driver/module ] && \
deps=$(basename $(read_link driver/module))
- installmodule $deps
+ installmodule --load $deps
cd ..
done
}
# Install some essential binaries
install bash chmod cat cut dd dmesg env grep kbd_mode kill killall5 ln ls lsmod mkdir \
- mknod modprobe mount mountpoint openvt pidof rm sed setfont sh sleep switchroot \
+ mknod modprobe mount mountpoint openvt pidof ps rm sed setfont sh sleep switchroot \
udevadm udevd umount /lib/udev/console_init /lib/udev/vol_id
# Copy modprobe.conf and friends over
install $f
done
+# Install an empty fstab
+touch $TMPDIR/etc/fstab
+
# terminfo bits make things work better if you fall into interactive mode
[ -d "/usr/lib/terminfo" ] && \
for f in $(find /usr/lib/terminfo -type f); do
# #
###############################################################################
-if [ -e "new-functions" ]; then
- . new-functions
-else
- . /usr/lib/mkinitramfs/functions
-fi
+. /usr/lib/mkinitramfs/functions
# Add usb support
MODULES="$MODULES ehci-hcd ohci-hcd uhci-hcd"
findstoragedriver ${rootdev##/dev/}
cat >> sbin/real-init <<'EOF'
+
+# Users can override rootfs target on the kernel commandline
+for o in $(cat /proc/cmdline); do
+ case $o in
+ root=*)
+ rootdev=${o#root=}
+ ;;
+ rootflags=*)
+ rootflags=${o#rootflags=}
+ ;;
+ rootfstype=*)
+ rootfstype=${o#rootfstype=}
+ ;;
+ esac
+done
+
vecho "Starting udevd..."
udevd --daemon
vecho "Waiting for system to settle..."
udevadm settle --timeout=30 || :
-vecho "Mounting root filesystem..."
+vecho "Mounting root filesystem $rootdev..."
mount $rootdev /sysroot $rootfs $rootopts
kill $(pidof udevd)
# #
###############################################################################
-if [ -e "new-functions" ]; then
- . new-functions
-else
- . /usr/lib/mkinitramfs/functions
-fi
+. /usr/lib/mkinitramfs/functions
# Modules needed by the live system
MODULES="$MODULES aufs squashfs loop"