diff options
author | Emery Hemingway <emery@vfemail.net> | 2014-12-02 11:46:45 -0500 |
---|---|---|
committer | Luca Bruno <lethalman88@gmail.com> | 2014-12-04 12:03:10 +0100 |
commit | e69f876cca403e5b45b51086fc94908639f4b548 (patch) | |
tree | e3a6352e2658b6a64e76be58c701de78ee23e9d3 /nixos | |
parent | 3faacca0444828adb4965ebab64dbfb57a4354df (diff) | |
download | nixlib-e69f876cca403e5b45b51086fc94908639f4b548.tar nixlib-e69f876cca403e5b45b51086fc94908639f4b548.tar.gz nixlib-e69f876cca403e5b45b51086fc94908639f4b548.tar.bz2 nixlib-e69f876cca403e5b45b51086fc94908639f4b548.tar.lz nixlib-e69f876cca403e5b45b51086fc94908639f4b548.tar.xz nixlib-e69f876cca403e5b45b51086fc94908639f4b548.tar.zst nixlib-e69f876cca403e5b45b51086fc94908639f4b548.zip |
nixos: iPXE client for GRUB
fix bug in grub/install-grub.pl that would replace @bootRoot@ with an invalid string
Diffstat (limited to 'nixos')
-rwxr-xr-x | nixos/modules/module-list.nix | 1 | ||||
-rw-r--r-- | nixos/modules/system/boot/loader/grub/install-grub.pl | 3 | ||||
-rw-r--r-- | nixos/modules/system/boot/loader/grub/ipxe.nix | 64 |
3 files changed, 67 insertions, 1 deletions
diff --git a/nixos/modules/module-list.nix b/nixos/modules/module-list.nix index e94cfeaf8d3b..5bd056e5bc9d 100755 --- a/nixos/modules/module-list.nix +++ b/nixos/modules/module-list.nix @@ -359,6 +359,7 @@ ./system/boot/loader/efi.nix ./system/boot/loader/generations-dir/generations-dir.nix ./system/boot/loader/grub/grub.nix + ./system/boot/loader/grub/ipxe.nix ./system/boot/loader/grub/memtest.nix ./system/boot/loader/gummiboot/gummiboot.nix ./system/boot/loader/init-script/init-script.nix diff --git a/nixos/modules/system/boot/loader/grub/install-grub.pl b/nixos/modules/system/boot/loader/grub/install-grub.pl index 981b60c004c2..ffee0271e93b 100644 --- a/nixos/modules/system/boot/loader/grub/install-grub.pl +++ b/nixos/modules/system/boot/loader/grub/install-grub.pl @@ -341,8 +341,9 @@ addEntry("NixOS - Default", $defaultConfig); $conf .= "$extraEntries\n" unless $extraEntriesBeforeNixOS; +my $grubBootPath = $grubBoot->path; # extraEntries could refer to @bootRoot@, which we have to substitute -$conf =~ s/\@bootRoot\@/$grubBoot->path/g; +$conf =~ s/\@bootRoot\@/$grubBootPath/g; # Emit submenus for all system profiles. sub addProfile { diff --git a/nixos/modules/system/boot/loader/grub/ipxe.nix b/nixos/modules/system/boot/loader/grub/ipxe.nix new file mode 100644 index 000000000000..9b5097a4cfd9 --- /dev/null +++ b/nixos/modules/system/boot/loader/grub/ipxe.nix @@ -0,0 +1,64 @@ +# This module adds a scripted iPXE entry to the GRUB boot menu. + +{ config, lib, pkgs, ... }: + +with lib; + +let + scripts = builtins.attrNames config.boot.loader.grub.ipxe; + + grubEntry = name: + '' + menuentry "iPXE - ${name}" { + linux16 @bootRoot@/ipxe.lkrn + initrd16 @bootRoot@/${name}.ipxe + } + + ''; + + scriptFile = name: + let + value = builtins.getAttr name config.boot.loader.grub.ipxe; + in + if builtins.typeOf value == "path" then value + else builtins.toFile "${name}.ipxe" value; +in +{ + options = + { boot.loader.grub.ipxe = mkOption { + type = types.attrsOf (types.either types.path types.str); + description = + '' + Set of iPXE scripts available for + booting from the GRUB boot menu. + ''; + default = { }; + example = literalExample '' + { demo = ''' + #!ipxe + dhcp + chain http://boot.ipxe.org/demo/boot.php + '''; + }; + ''; + }; + }; + + config = mkIf (builtins.length scripts != 0) { + + boot.loader.grub.extraEntries = + if config.boot.loader.grub.version == 2 then + toString (map grubEntry scripts) + else + throw "iPXE is not supported with GRUB 1."; + + boot.loader.grub.extraFiles = + { "ipxe.lkrn" = "${pkgs.ipxe}/ipxe.lkrn"; } + // + builtins.listToAttrs ( map + (name: { name = name+".ipxe"; value = scriptFile name; }) + scripts + ); + }; + +} |