diff options
author | Colin Guthrie <colin@mageia.org> | 2012-04-10 20:30:53 +0000 |
---|---|---|
committer | Colin Guthrie <colin@mageia.org> | 2012-04-10 20:30:53 +0000 |
commit | 9e3367d2f80d6d140ed921adb4d6cfcdd0778148 (patch) | |
tree | 5638610cff8940ef29b4a1e4853ba3883d6faeb1 /tools/drakx-in-chroot | |
parent | 9bb834d0897e829586c4047fa119cd71ddc95380 (diff) | |
download | drakx-9e3367d2f80d6d140ed921adb4d6cfcdd0778148.tar drakx-9e3367d2f80d6d140ed921adb4d6cfcdd0778148.tar.gz drakx-9e3367d2f80d6d140ed921adb4d6cfcdd0778148.tar.bz2 drakx-9e3367d2f80d6d140ed921adb4d6cfcdd0778148.tar.xz drakx-9e3367d2f80d6d140ed921adb4d6cfcdd0778148.zip |
installer: allow generation of host-only initrd during install
During install dracut will generate a generic (i.e. large) initrd.
As we now start udev early, we can use udev metadata when generating
our initrd and thus we can generate our default, hostonly initrd.
Thus ensure relevant directories (/run) are bind mounted and fake a
/run/initramfs folder which is used in dracut to detect a boot
which will have sufficient metadata in the udev DB.
Tested with an install on a new disk and creating LVMs and
also on an install where the pre-existing LVMs were reused.
Suitable fixes to drakx-in-chroot have also been added, but
remain untested
Diffstat (limited to 'tools/drakx-in-chroot')
-rwxr-xr-x | tools/drakx-in-chroot | 18 |
1 files changed, 16 insertions, 2 deletions
diff --git a/tools/drakx-in-chroot b/tools/drakx-in-chroot index 380e4b47d..42ebedb71 100755 --- a/tools/drakx-in-chroot +++ b/tools/drakx-in-chroot @@ -58,7 +58,7 @@ if (-d $SLASH_LOCATION) { rm_rf($SLASH_LOCATION); } -mkdir_p("$SLASH_LOCATION$_") foreach '/dev', '/dev/usb', '/etc', '/var', '/proc', '/sys', $STAGE2_LOCATION_ROOTED, $MEDIA_LOCATION_ROOTED, $prefix_ROOTED; +mkdir_p("$SLASH_LOCATION$_") foreach '/dev', '/dev/usb', '/etc', '/var', '/proc', '/sys', '/run', $STAGE2_LOCATION_ROOTED, $MEDIA_LOCATION_ROOTED, $prefix_ROOTED; sys("$sudo rm -rf $dir") if $ENV{CLEAN}; -e $dir or sys("$sudo mkdir -p $dir"); @@ -82,6 +82,20 @@ sys("$sudo mount -o bind $repository_uri $SLASH_LOCATION$MEDIA_LOCATION_ROOTED") sys("$sudo mount -t proc none $SLASH_LOCATION/proc"); sys("$sudo mount -t sysfs none $SLASH_LOCATION/sys"); +sys("$sudo mount -t tmpfs none $SLASH_LOCATION/run"); + +if (-d "/run/udev") { + # Ensure we mount the udev run dir for various extra metadata from udevadm + mkdir_p("$SLASH_LOCATION/run/udev"); + sys("$sudo mount -o bind /run/udev $SLASH_LOCATION/run/udev"); +} + +if (-d "/run/initramfs") { + # If dracut has been used (and thus udev has yummy metadata) make sure + # drakx knows about it when running in the chroot + mkdir_p("$SLASH_LOCATION/run/initramfs"); + sys("$sudo mount -o bind /run/initramfs $SLASH_LOCATION/run/initramfs"); +} if ($disk_iso_repository) { my $repository_arch = $repository_arch || 'i586'; @@ -179,7 +193,7 @@ sub create_initial_devices() { sub umount_all() { my $err; clean_stage2_updates(); - my @procs = ('/proc/bus/usb', '/proc', '/sys'); + my @procs = ('/proc/bus/usb', '/proc', '/sys', '/run/udev', '/run/initramfs', '/run'); foreach ((map { "$prefix_ROOTED$_" } @procs, ''), @procs, $STAGE2_LOCATION_ROOTED, $LOOP_MOUNT_POINT, $MEDIA_LOCATION_ROOTED, $IMAGE_LOCATION_ROOTED) { my $dir = "$SLASH_LOCATION$_"; rmdir $dir; |