diff options
author | Lluís Batlle i Rossell <viric@vicerveza.homeunix.net> | 2011-04-09 09:25:06 +0000 |
---|---|---|
committer | Lluís Batlle i Rossell <viric@vicerveza.homeunix.net> | 2011-04-09 09:25:06 +0000 |
commit | 240801542afac4fde83f8669cf20ae15e917a24c (patch) | |
tree | 95969e3e89fa610333dc8b78fe36c88f1c95f252 /pkgs/tools/misc/grub | |
parent | e756ff25d3eeb5a09f3bdf745484e6a52b6cc8ac (diff) | |
download | nixlib-240801542afac4fde83f8669cf20ae15e917a24c.tar nixlib-240801542afac4fde83f8669cf20ae15e917a24c.tar.gz nixlib-240801542afac4fde83f8669cf20ae15e917a24c.tar.bz2 nixlib-240801542afac4fde83f8669cf20ae15e917a24c.tar.lz nixlib-240801542afac4fde83f8669cf20ae15e917a24c.tar.xz nixlib-240801542afac4fde83f8669cf20ae15e917a24c.tar.zst nixlib-240801542afac4fde83f8669cf20ae15e917a24c.zip |
Restoring grub 1.98 from svn, and adding it as a package apart. This allows
easy using package overrides in nixos to use grub 1.98. I found 1.98 can boot from /dev/md* devices, while 1.99rc1 cannot due to some upstream problem. Once it works, we can remove this 1.98 again. svn path=/nixpkgs/trunk/; revision=26761
Diffstat (limited to 'pkgs/tools/misc/grub')
-rw-r--r-- | pkgs/tools/misc/grub/1.98.nix | 79 | ||||
-rw-r--r-- | pkgs/tools/misc/grub/device-mapper-symlinks.patch | 28 |
2 files changed, 107 insertions, 0 deletions
diff --git a/pkgs/tools/misc/grub/1.98.nix b/pkgs/tools/misc/grub/1.98.nix new file mode 100644 index 000000000000..df7d3408b619 --- /dev/null +++ b/pkgs/tools/misc/grub/1.98.nix @@ -0,0 +1,79 @@ +{ fetchurl, stdenv, bison, gettext, ncurses, libusb, freetype, qemu }: + +let unifont_bdf = fetchurl { + url = "http://unifoundry.com/unifont-5.1.20080820.bdf.gz"; + sha256 = "0s0qfff6n6282q28nwwblp5x295zd6n71kl43xj40vgvdqxv0fxx"; + }; +in + +stdenv.mkDerivation rec { + name = "grub-1.98"; + + src = fetchurl { + url = "ftp://alpha.gnu.org/gnu/grub/${name}.tar.gz"; + sha256 = "05660x82y2rwrzm0d1c4z07fbh02qwmacsmbbav6fa855s4w3wmy"; + }; + + buildInputs = [ bison ncurses libusb freetype gettext ] + ++ stdenv.lib.optional doCheck qemu; + + preConfigure = + '' for i in "tests/util/"*.in + do + sed -i "$i" -e's|/bin/bash|/bin/sh|g' + done + + # Apparently, the QEMU executable is no longer called + # `qemu-system-i386', even on i386. + # + # In addition, use `-nodefaults' to avoid errors like: + # + # chardev: opening backend "stdio" failed + # qemu: could not open serial device 'stdio': Invalid argument + # + # See <http://www.mail-archive.com/qemu-devel@nongnu.org/msg22775.html>. + sed -i "tests/util/grub-shell.in" \ + -e's/qemu-system-i386/qemu-system-x86_64 -nodefaults/g' + ''; + + patches = + [ # The udev rules for LVM create symlinks in /dev/mapper rathe + # than device nodes, causing GRUB to fail to recognize LVM + # volumes. See + # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=550704 + # This ugly workaround makes `find_root_device' use stat() on + # files in /dev/mapper instead of lstat(). + ./device-mapper-symlinks.patch + ]; + + postPatch = + '' gunzip < "${unifont_bdf}" > "unifont.bdf" + sed -i "configure" \ + -e "s|/usr/src/unifont.bdf|$PWD/unifont.bdf|g" + ''; + + doCheck = true; + + meta = { + description = "GNU GRUB, the Grand Unified Boot Loader (2.x alpha)"; + + longDescription = + '' GNU GRUB is a Multiboot boot loader. It was derived from GRUB, GRand + Unified Bootloader, which was originally designed and implemented by + Erich Stefan Boleyn. + + Briefly, the boot loader is the first software program that runs when a + computer starts. It is responsible for loading and transferring + control to the operating system kernel software (such as the Hurd or + the Linux). The kernel, in turn, initializes the rest of the + operating system (e.g., GNU). + ''; + + homepage = http://www.gnu.org/software/grub/; + + license = "GPLv3+"; + + maintainers = [ stdenv.lib.maintainers.ludo ]; + platforms = stdenv.lib.platforms.gnu; + }; +} diff --git a/pkgs/tools/misc/grub/device-mapper-symlinks.patch b/pkgs/tools/misc/grub/device-mapper-symlinks.patch new file mode 100644 index 000000000000..0a21a51de799 --- /dev/null +++ b/pkgs/tools/misc/grub/device-mapper-symlinks.patch @@ -0,0 +1,28 @@ +Only in grub-1.97.1-orig/: grub-1.97.1 +diff -rc -x '*~' grub-1.97.1-orig/util/getroot.c grub-1.97.1/util/getroot.c +*** grub-1.97.1-orig/util/getroot.c 2009-11-09 16:48:16.000000000 +0100 +--- grub-1.97.1/util/getroot.c 2010-01-08 00:26:12.000000000 +0100 +*************** +*** 217,224 **** + continue; + + if (S_ISLNK (st.st_mode)) +! /* Don't follow symbolic links. */ +! continue; + + if (S_ISDIR (st.st_mode)) + { +--- 217,229 ---- + continue; + + if (S_ISLNK (st.st_mode)) +! { +! if (strcmp(dir, "mapper") != 0) +! /* Don't follow symbolic links. */ +! continue; +! if (stat (ent->d_name, &st) < 0) +! continue; +! } + + if (S_ISDIR (st.st_mode)) + { |