Allow elements to add drivers to dracut

It is reasonable that elements may need to include additional
kernel modules in a dracut ramdisk.  This is done with the
--add-drivers option to dracut, but previously the value passed
was hard-coded.

This change allows an element to put a file containing its desired
drivers in a dracut-drivers.d directory, and the list there will
be added to the list of drivers added.  This functions in
essentially the same way as the binary-deps.d directory that
already exists for including additional executables in a ramdisk.

Change-Id: Ie892b908d36c175a469f7cde7dd803ad4b1942b6
This commit is contained in:
Ben Nemec 2015-01-30 13:50:49 -06:00
parent a341ca84e7
commit 6377c723aa
4 changed files with 45 additions and 1 deletions

View File

@ -6,3 +6,15 @@ Build Dracut-based ramdisks
This is an alternative to the `ramdisk` element that uses This is an alternative to the `ramdisk` element that uses
Dracut to provide the base system functionality instead of Dracut to provide the base system functionality instead of
Busybox. Busybox.
For elements that need additional drivers in the ramdisk image,
a dracut-drivers.d feature is included that works in a similar
fashion to the binary-deps.d feature. The element needing to
add drivers should create a dracut-drivers.d directory and
populate it with a single file listing all of the kernel modules
it needs added to the ramdisk. Comments are not supported in this
file. Note that these modules must be installed in the chroot first.
By default, the virtio, virtio_net, and virtio_blk modules are
included so that ramdisks are able to function properly in a
virtualized environment.

View File

@ -0,0 +1,3 @@
virtio
virtio_net
virtio_blk

View File

@ -0,0 +1,29 @@
#!/bin/bash
set -eu
set -o pipefail
if [ ${DIB_DEBUG_TRACE:-1} -gt 0 ]; then
set -x
fi
TARGET_DIR="/tmp/in_target.d/"
EXTRA_DRIVERS=
for _FILE in $(ls ${TARGET_DIR}/dracut-drivers.d/) ; do
_FILE="${TARGET_DIR}/dracut-drivers.d/${_FILE}"
if [ -s $_FILE ]; then
for _LINE in $(cat $_FILE) ; do
EXTRA_DRIVERS="${EXTRA_DRIVERS} $_LINE"
done
fi
done
if [ "$EXTRA_DRIVERS" = "" ]; then
echo "No extra drivers found"
else
DRIVERS_OUTPUT="/etc/dib_dracut_drivers"
echo "Creating extra drivers record at: ${DRIVERS_OUTPUT}"
echo "$EXTRA_DRIVERS" >${DRIVERS_OUTPUT}
fi

View File

@ -66,7 +66,7 @@ dracut -N \
--kernel-cmdline "rd.shell rd.debug rd.neednet=1 rd.driver.pre=ahci" \ --kernel-cmdline "rd.shell rd.debug rd.neednet=1 rd.driver.pre=ahci" \
--include "$TMP_MOUNT_PATH/" / \ --include "$TMP_MOUNT_PATH/" / \
--kver "${KERNEL_VERSION}" \ --kver "${KERNEL_VERSION}" \
--add-drivers "virtio virtio_net virtio_blk" \ --add-drivers "$(cat /etc/dib_dracut_drivers)" \
-o "dash plymouth" \ -o "dash plymouth" \
/tmp/ramdisk /tmp/ramdisk