diff options
author | Michael Raskin <7c6f434c@mail.ru> | 2017-07-05 22:48:49 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-07-05 22:48:49 +0200 |
commit | d38d3d1096c8deb2bd1bfc45c8f675b71d74fb21 (patch) | |
tree | bae170d38bb94abdb2058a647875a7466609047a | |
parent | 16f02e8116e3cabf55844cb4bfdb840c5d2d1a83 (diff) | |
parent | 55208cc2e18bf40a76e6c9ae7c16108d80fed666 (diff) | |
download | nixlib-d38d3d1096c8deb2bd1bfc45c8f675b71d74fb21.tar nixlib-d38d3d1096c8deb2bd1bfc45c8f675b71d74fb21.tar.gz nixlib-d38d3d1096c8deb2bd1bfc45c8f675b71d74fb21.tar.bz2 nixlib-d38d3d1096c8deb2bd1bfc45c8f675b71d74fb21.tar.lz nixlib-d38d3d1096c8deb2bd1bfc45c8f675b71d74fb21.tar.xz nixlib-d38d3d1096c8deb2bd1bfc45c8f675b71d74fb21.tar.zst nixlib-d38d3d1096c8deb2bd1bfc45c8f675b71d74fb21.zip |
Merge pull request #25724 from michalpalka/pvgrub-new
pvgrub_image: add package
-rw-r--r-- | pkgs/tools/misc/grub/2.0x.nix | 5 | ||||
-rw-r--r-- | pkgs/tools/misc/grub/pvgrub_image/configs/grub-bootstrap.cfg | 1 | ||||
-rw-r--r-- | pkgs/tools/misc/grub/pvgrub_image/configs/grub.cfg | 10 | ||||
-rw-r--r-- | pkgs/tools/misc/grub/pvgrub_image/default.nix | 42 | ||||
-rw-r--r-- | pkgs/top-level/all-packages.nix | 6 |
5 files changed, 63 insertions, 1 deletions
diff --git a/pkgs/tools/misc/grub/2.0x.nix b/pkgs/tools/misc/grub/2.0x.nix index 7a70f2bdbff3..2bbeea8133e7 100644 --- a/pkgs/tools/misc/grub/2.0x.nix +++ b/pkgs/tools/misc/grub/2.0x.nix @@ -3,6 +3,7 @@ , zfs ? null , efiSupport ? false , zfsSupport ? true +, xenSupport ? false }: with stdenv.lib; @@ -46,6 +47,7 @@ in ( assert efiSupport -> canEfi; assert zfsSupport -> zfs != null; +assert !(efiSupport && xenSupport); stdenv.mkDerivation rec { name = "grub-${version}"; @@ -98,7 +100,8 @@ stdenv.mkDerivation rec { patches = [ ./fix-bash-completion.patch ]; configureFlags = optional zfsSupport "--enable-libzfs" - ++ optionals efiSupport [ "--with-platform=efi" "--target=${efiSystemsBuild.${stdenv.system}.target}" "--program-prefix=" ]; + ++ optionals efiSupport [ "--with-platform=efi" "--target=${efiSystemsBuild.${stdenv.system}.target}" "--program-prefix=" ] + ++ optionals xenSupport [ "--with-platform=xen" "--target=${efiSystemsBuild.${stdenv.system}.target}"]; # save target that grub is compiled for grubTarget = if efiSupport diff --git a/pkgs/tools/misc/grub/pvgrub_image/configs/grub-bootstrap.cfg b/pkgs/tools/misc/grub/pvgrub_image/configs/grub-bootstrap.cfg new file mode 100644 index 000000000000..e9883149ab5d --- /dev/null +++ b/pkgs/tools/misc/grub/pvgrub_image/configs/grub-bootstrap.cfg @@ -0,0 +1 @@ +normal (memdisk)/grub.cfg diff --git a/pkgs/tools/misc/grub/pvgrub_image/configs/grub.cfg b/pkgs/tools/misc/grub/pvgrub_image/configs/grub.cfg new file mode 100644 index 000000000000..69115b7101c9 --- /dev/null +++ b/pkgs/tools/misc/grub/pvgrub_image/configs/grub.cfg @@ -0,0 +1,10 @@ +# The parentheses around ${root} here to match Grub's config file syntax +if search -s -f /boot/grub/grub.cfg ; then + echo "Reading (${root})/boot/grub/grub.cfg" + configfile /boot/grub/grub.cfg +fi + +if search -s -f /grub/grub.cfg ; then + echo "Reading (${root})/grub/grub.cfg" + configfile /grub/grub.cfg +fi diff --git a/pkgs/tools/misc/grub/pvgrub_image/default.nix b/pkgs/tools/misc/grub/pvgrub_image/default.nix new file mode 100644 index 000000000000..ee6e5065f40b --- /dev/null +++ b/pkgs/tools/misc/grub/pvgrub_image/default.nix @@ -0,0 +1,42 @@ +{ stdenv, grub2_xen }: + +with stdenv.lib; +let + efiSystemsBuild = { + "i686-linux".target = "i386"; + "x86_64-linux".target = "x86_64"; + "aarch64-linux".target = "aarch64"; + }; + +in ( + +stdenv.mkDerivation rec { + name = "pvgrub-image"; + + configs = ./configs; + + buildInputs = [ grub2_xen ]; + + buildCommand = '' + cp "${configs}"/* . + tar -cf memdisk.tar grub.cfg + # We include all modules except all_video.mod as otherwise grub will fail printing "no symbol table" + # if we include it. + grub-mkimage -O "${efiSystemsBuild.${stdenv.system}.target}-xen" -c grub-bootstrap.cfg \ + -m memdisk.tar -o "grub-${efiSystemsBuild.${stdenv.system}.target}-xen.bin" \ + $(ls "${grub2_xen}/lib/grub/${efiSystemsBuild.${stdenv.system}.target}-xen/" |grep 'mod''$'|grep -v '^all_video\.mod''$') + mkdir -p "$out/lib/grub-xen" + cp "grub-${efiSystemsBuild.${stdenv.system}.target}-xen.bin" $out/lib/grub-xen/ + ''; + + meta = with stdenv.lib; { + description = "PvGrub image for use for booting PV Xen guests"; + + longDescription = + '' This package provides a PvGrub image for booting Para-Virtualized (PV) + Xen guests + ''; + + platforms = platforms.gnu; + }; +}) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index c124a2314a76..8ee08d94061c 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -2257,6 +2257,12 @@ with pkgs; zfsSupport = false; }; + grub2_xen = callPackage ../tools/misc/grub/2.0x.nix { + xenSupport = true; + }; + + grub2_pvgrub_image = callPackage ../tools/misc/grub/pvgrub_image { }; + grub4dos = callPackage ../tools/misc/grub4dos { stdenv = stdenv_32bit; }; |