From e4630c1d41d513eb709bddb39043da84442235a7 Mon Sep 17 00:00:00 2001 From: Shea Levy Date: Thu, 1 May 2014 10:56:55 -0400 Subject: [PATCH] grub: Allow setting the boot root explicitly If /boot is a btrfs subvolume, it will be on a different device than / but not be at the root from grub's perspective. This should be fixed in a nicer way by #2449, but that can't go into 14.04. --- nixos/modules/system/boot/loader/grub/grub.nix | 11 ++++++++++- nixos/modules/system/boot/loader/grub/install-grub.pl | 5 +++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/nixos/modules/system/boot/loader/grub/grub.nix b/nixos/modules/system/boot/loader/grub/grub.nix index a3b09223cbb..0cc060db8f9 100644 --- a/nixos/modules/system/boot/loader/grub/grub.nix +++ b/nixos/modules/system/boot/loader/grub/grub.nix @@ -25,7 +25,7 @@ let inherit (cfg) version extraConfig extraPerEntryConfig extraEntries extraEntriesBeforeNixOS extraPrepareConfig configurationLimit copyKernels timeout - default devices; + default devices explicitBootRoot; path = (makeSearchPath "bin" [ pkgs.coreutils pkgs.gnused pkgs.gnugrep pkgs.findutils pkgs.diffutils ]) + ":" + (makeSearchPath "sbin" [ @@ -209,6 +209,15 @@ in ''; }; + explicitBootRoot = mkOption { + default = ""; + type = types.str; + description = '' + The relative path of /boot within the parent volume. Leave empty + if /boot is not a btrfs subvolume. + ''; + }; + }; }; diff --git a/nixos/modules/system/boot/loader/grub/install-grub.pl b/nixos/modules/system/boot/loader/grub/install-grub.pl index a83733db63b..c3aa8518b8b 100644 --- a/nixos/modules/system/boot/loader/grub/install-grub.pl +++ b/nixos/modules/system/boot/loader/grub/install-grub.pl @@ -39,6 +39,7 @@ my $configurationLimit = int(get("configurationLimit")); my $copyKernels = get("copyKernels") eq "true"; my $timeout = int(get("timeout")); my $defaultEntry = int(get("default")); +my $explicitBootRoot = get("explicitBootRoot"); $ENV{'PATH'} = get("path"); die "unsupported GRUB version\n" if $grubVersion != 1 && $grubVersion != 2; @@ -61,6 +62,10 @@ if (stat("/")->dev != stat("/boot")->dev) { $copyKernels = 1; } +if ($explicitBootRoot ne "") { + $bootRoot = $explicitBootRoot; +} + # Generate the header. my $conf .= "# Automatically generated. DO NOT EDIT THIS FILE!\n";