die "failed to prepare EFI boot using Grub on '$espdev': $err" if $err;
}
-sub set_grub_default_cfg {
- my ($targetdir) = @_;
-
- my $grub_cfg = <<EOF;
-# If you change this file, run 'update-grub' afterwards to update
-# /boot/grub/grub.cfg.
-# For full documentation of the options in this file, see:
-# info -f grub -n 'Simple configuration'
-
-GRUB_DEFAULT=0
-GRUB_TIMEOUT=5
-GRUB_DISTRIBUTOR="$setup->{fullname}"
-GRUB_CMDLINE_LINUX_DEFAULT="quiet"
-GRUB_CMDLINE_LINUX=""
-
-# Disable os-prober, it might add menu entries for each guest
-GRUB_DISABLE_OS_PROBER=true
-
-# Uncomment to enable BadRAM filtering, modify to suit your needs
-# This works with Linux (no patch required) and with any kernel that obtains
-# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
-#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"
-
-# Uncomment to disable graphical terminal (grub-pc only)
-#GRUB_TERMINAL=console
-
-# The resolution used on graphical terminal
-# note that you can use only modes which your graphic card supports via VBE
-# you can see them in real GRUB with the command `vbeinfo'
-#GRUB_GFXMODE=640x480
-
-# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
-#GRUB_DISABLE_LINUX_UUID=true
-
-# Disable generation of recovery mode menu entries
-GRUB_DISABLE_RECOVERY="true"
-
-# Uncomment to get a beep at grub start
-#GRUB_INIT_TUNE="480 440 1"
-EOF
-
- write_config($grub_cfg, "$targetdir/etc/default/grub")
-}
-
sub extract_data {
my ($basefile, $targetdir) = @_;
update_progress(0.8, 0.95, 1, "make system bootable");
- # NOTE: rewrites /etc/default/grub completely, all iterative changes need to be after this
- set_grub_default_cfg($targetdir);
-
if ($use_zfs) {
- syscmd("sed -i -e 's/^GRUB_CMDLINE_LINUX=.*/GRUB_CMDLINE_LINUX=\"root=ZFS=$zfspoolname\\/ROOT\\/$zfsrootvolname boot=zfs\"/' $targetdir/etc/default/grub") == 0 ||
- die "unable to update /etc/default/grub\n";
+ # add ZFS options while preserving existing kernel cmdline
+ my $zfs_snippet = "GRUB_CMDLINE_LINUX=\"\$GRUB_CMDLINE_LINUX root=ZFS=$zfspoolname/ROOT/$zfsrootvolname boot=zfs\"";
+ write_config($zfs_snippet, "$targetdir/etc/default/grub.d/zfs.cfg");
write_config("root=ZFS=$zfspoolname/ROOT/$zfsrootvolname boot=zfs", "$targetdir/etc/kernel/cmdline");