From f92889429229b4bc75bcb8a7536a7e6726e353a2 Mon Sep 17 00:00:00 2001 From: AndersonTorres Date: Tue, 13 Jan 2015 10:56:05 -0200 Subject: [PATCH] rEFInd (version 0.8.4): New Package rEFInd is a graphical, EFI-based boot manager --- pkgs/tools/bootloaders/refind/default.nix | 115 ++++++++++++++++++++++ pkgs/top-level/all-packages.nix | 2 + 2 files changed, 117 insertions(+) create mode 100644 pkgs/tools/bootloaders/refind/default.nix diff --git a/pkgs/tools/bootloaders/refind/default.nix b/pkgs/tools/bootloaders/refind/default.nix new file mode 100644 index 000000000000..85a544ccd4c8 --- /dev/null +++ b/pkgs/tools/bootloaders/refind/default.nix @@ -0,0 +1,115 @@ +{ stdenv, fetchurl +, unzip, gnu-efi, efibootmgr, dosfstools, imagemagick }: + +assert (stdenv.system == "x86_64-linux" ||stdenv.system == "i686-linux"); + +stdenv.mkDerivation rec { + + name = "refind-${version}"; + srcName = "refind-src-${version}"; + version = "0.8.4"; + + src = fetchurl { + url = "http://downloads.sourceforge.net/project/refind/${version}/${srcName}.zip"; + sha256 = "09g6x41fc7vvwv2y9kggjmazyhdvkn8qr02v769x33f20bfiz2zc"; + }; + + buildInputs = [ unzip gnu-efi efibootmgr dosfstools imagemagick ]; + + HOSTARCH = + if stdenv.system == "x86_64-linux" then "x64" + else if stdenv.system == "i686-linux" then "ia32" else "null"; + + patchPhase = '' + sed -e 's|-DEFI_FUNCTION_WRAPPER|-DEFI_FUNCTION_WRAPPER -maccumulate-outgoing-args|g' -i Make.common + sed -e 's|-DEFIX64|-DEFIX64 -maccumulate-outgoing-args|g' -i Make.common + sed -e 's|-m64|-maccumulate-outgoing-args -m64|g' -i filesystems/Make.gnuefi + ''; + + buildPhase = '' + make prefix= EFIINC=${gnu-efi}/include/efi EFILIB=${gnu-efi}/lib GNUEFILIB=${gnu-efi}/lib EFICRT0=${gnu-efi}/lib LDSCRIPT=${gnu-efi}/lib/elf_x86_64_efi.lds gnuefi fs_gnuefi + ''; + + installPhase = '' + install -d $out/bin/ + install -d $out/share/refind/drivers_${HOSTARCH}/ + install -d $out/share/refind/tools_${HOSTARCH}/ + install -d $out/share/refind/docs/html/ + install -d $out/share/refind/docs/Styles/ + install -d $out/share/refind/fonts/ + install -d $out/share/refind/icons/ + install -d $out/share/refind/images/ + install -d $out/share/refind/keys/ + + # refind uefi app + install -D -m0644 refind/refind_${HOSTARCH}.efi $out/share/refind/refind_${HOSTARCH}.efi + + # uefi drivers + install -D -m0644 drivers_${HOSTARCH}/*.efi $out/share/refind/drivers_${HOSTARCH}/ + + # uefi apps + install -D -m0644 gptsync/gptsync_${HOSTARCH}.efi $out/share/refind/tools_${HOSTARCH}/gptsync_${HOSTARCH}.efi + + # helper scripts + install -D -m0755 install.sh $out/bin/refind-install + install -D -m0755 mkrlconf.sh $out/bin/refind-mkrlconf + install -D -m0755 mvrefind.sh $out/bin/refind-mvrefind + install -D -m0755 fonts/mkfont.sh $out/bin/refind-mkfont + + # sample config files + install -D -m0644 refind.conf-sample $out/share/refind/refind.conf-sample + + # docs + install -D -m0644 docs/refind/* $out/share/refind/docs/html/ + install -D -m0644 docs/Styles/* $out/share/refind/docs/Styles/ + install -D -m0644 README.txt $out/share/refind/docs/README.txt + install -D -m0644 NEWS.txt $out/share/refind/docs/NEWS.txt + install -D -m0644 BUILDING.txt $out/share/refind/docs/BUILDING.txt + install -D -m0644 CREDITS.txt $out/share/refind/docs/CREDITS.txt + + # fonts + install -D -m0644 fonts/* $out/share/refind/fonts/ + rm -f $out/share/refind/fonts/mkfont.sh + + # icons + install -D -m0644 icons/* $out/share/refind/icons/ + + # images + install -D -m0644 images/*.{png,bmp} $out/share/refind/images/ + + # keys + install -D -m0644 keys/* $out/share/refind/keys/ + + # fix sharp-bang paths + patchShebangs $out/bin/refind-* + + # Post-install fixes + sed -e "s|^ThisDir=.*|ThisDir=$out/share/refind/|g" -i $out/bin/refind-install + sed -e "s|^RefindDir=.*|RefindDir=$out/share/refind/|g" -i $out/bin/refind-install + sed -e "s|^ThisScript=.*|ThisScript=$out/bin/refind-install|g" -i $out/bin/refind-install + ''; + + meta = with stdenv.lib; { + description = "A graphical {,U}EFI boot manager"; + longDescription = '' + rEFInd is a graphical boot manager for EFI- and UEFI-based + computers, such as all Intel-based Macs and recent (most 2011 + and later) PCs. rEFInd presents a boot menu showing all the EFI + boot loaders on the EFI-accessible partitions, and optionally + BIOS-bootable partitions on Macs. EFI-compatbile OSes, including + Linux, provide boot loaders that rEFInd can detect and + launch. rEFInd can launch Linux EFI boot loaders such as ELILO, + GRUB Legacy, GRUB 2, and 3.3.0 and later kernels with EFI stub + support. EFI filesystem drivers for ext2/3/4fs, ReiserFS, HFS+, + and ISO-9660 enable rEFInd to read boot loaders from these + filesystems, too. rEFInd's ability to detect boot loaders at + runtime makes it very easy to use, particularly when paired with + Linux kernels that provide EFI stub support. + ''; + homepage = http://refind.sourceforge.net/; + maintainers = [ maintainers.AndersonTorres ]; + platforms = [ "i686-linux" "x86_64-linux" ]; + }; + +} +# TODO: detect CPU host architecture (HOSTARCH can be ia32 or x64) diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 7fe6b9f53fe5..e0791ed15f58 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -12915,6 +12915,8 @@ let runit = callPackage ../tools/system/runit { }; + refind = callPackage ../tools/bootloaders/refind { }; + xlockmore = callPackage ../misc/screensavers/xlockmore { }; sails = callPackage ../misc/sails { };