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:
		| @@ -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. | ||||||
|   | |||||||
							
								
								
									
										3
									
								
								elements/dracut-ramdisk/dracut-drivers.d/base-drivers
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								elements/dracut-ramdisk/dracut-drivers.d/base-drivers
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | virtio | ||||||
|  | virtio_net | ||||||
|  | virtio_blk | ||||||
							
								
								
									
										29
									
								
								elements/dracut-ramdisk/post-install.d/01-ensure-drivers
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										29
									
								
								elements/dracut-ramdisk/post-install.d/01-ensure-drivers
									
									
									
									
									
										Executable 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 | ||||||
| @@ -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 | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Ben Nemec
					Ben Nemec