789e9c2549
This makes is possible to modify /lib/modules content - especially install other kernel packages, without unmounting the whole /lib/modules. Since dom0-provided modules will no longer conflict with VM kernel packages (assuming kernel versions are different), there is no need for qubes-kernel-vm-placeholder anymore. Having only one subdirectory of /lib/modules mounted is somehow tricky, because: 1. Directory name isn't always the same - it depends on kernel version. This means that mountpoint must be created dynamically (so $NEWROOT must be mounted in R/W for a moment). 2. There is one-command way to mount only a subdirectory of some filesystem. So use a trick: mount it in some temporary directory, get interesting subdir with `mount --bind`, then unmount temporary directory. QubesOS/qubes-issues#1354
26 lines
738 B
Bash
26 lines
738 B
Bash
#!/bin/sh
|
|
#
|
|
# This file should be places in pre-pivot directory in dracut's initramfs
|
|
#
|
|
|
|
|
|
kver="`uname -r`"
|
|
if ! [ -d "$NEWROOT/lib/modules/$kver/kernel" ]; then
|
|
echo "Waiting for /dev/xvdd device..."
|
|
while ! [ -e /dev/xvdd ]; do sleep 0.1; done
|
|
|
|
# Mount only `uname -r` subdirectory, to leave the rest of /lib/modules writable
|
|
mkdir -p /tmp/modules
|
|
mount -n -t ext3 /dev/xvdd /tmp/modules
|
|
if ! [ -d "$NEWROOT/lib/modules/$kver" ]; then
|
|
mount "$NEWROOT" -o remount,rw
|
|
mkdir -p "$NEWROOT/lib/modules/$kver"
|
|
mount "$NEWROOT" -o remount,ro
|
|
fi
|
|
mount --bind "/tmp/modules/$kver" "$NEWROOT/lib/modules/$kver"
|
|
umount /tmp/modules
|
|
rmdir /tmp/modules
|
|
fi
|
|
|
|
killall udevd systemd-udevd
|