6152007747
imgtrust is needed to run netboot.xyz scripts. ping is useful for testing network settings. Also add HTTP option for clarity (it's already being built).
85 lines
2.4 KiB
Nix
85 lines
2.4 KiB
Nix
{ stdenv, lib, fetchgit, perl, cdrkit, syslinux, xz, openssl, gnu-efi, mtools
|
|
, embedScript ? null
|
|
, additionalTargets ? {}
|
|
}:
|
|
|
|
let
|
|
date = "20190318";
|
|
rev = "ebf2eaf515e46abd43bc798e7e4ba77bfe529218";
|
|
targets = additionalTargets // lib.optionalAttrs stdenv.isx86_64 {
|
|
"bin-x86_64-efi/ipxe.efi" = null;
|
|
"bin-x86_64-efi/ipxe.efirom" = null;
|
|
"bin-x86_64-efi/ipxe.usb" = "ipxe-efi.usb";
|
|
} // {
|
|
"bin/ipxe.dsk" = null;
|
|
"bin/ipxe.usb" = null;
|
|
"bin/ipxe.iso" = null;
|
|
"bin/ipxe.lkrn" = null;
|
|
"bin/undionly.kpxe" = null;
|
|
};
|
|
in
|
|
|
|
stdenv.mkDerivation {
|
|
name = "ipxe-${date}-${builtins.substring 0 7 rev}";
|
|
|
|
nativeBuildInputs = [ perl cdrkit syslinux xz openssl gnu-efi mtools ];
|
|
|
|
src = fetchgit {
|
|
url = https://git.ipxe.org/ipxe.git;
|
|
sha256 = "0if3m8h1nfxy4n37cwlfbc5kand52290v80m4zvjppc81im3nr5g";
|
|
inherit rev;
|
|
};
|
|
|
|
# not possible due to assembler code
|
|
hardeningDisable = [ "pic" "stackprotector" ];
|
|
|
|
NIX_CFLAGS_COMPILE = "-Wno-error";
|
|
|
|
makeFlags =
|
|
[ "ECHO_E_BIN_ECHO=echo" "ECHO_E_BIN_ECHO_E=echo" # No /bin/echo here.
|
|
"ISOLINUX_BIN_LIST=${syslinux}/share/syslinux/isolinux.bin"
|
|
"LDLINUX_C32=${syslinux}/share/syslinux/ldlinux.c32"
|
|
] ++ lib.optional (embedScript != null) "EMBED=${embedScript}";
|
|
|
|
|
|
enabledOptions = [
|
|
"PING_CMD"
|
|
"IMAGE_TRUST_CMD"
|
|
"DOWNLOAD_PROTO_HTTP"
|
|
"DOWNLOAD_PROTO_HTTPS"
|
|
];
|
|
|
|
configurePhase = ''
|
|
runHook preConfigure
|
|
for opt in $enabledOptions; do echo "#define $opt" >> src/config/general.h; done
|
|
sed -i '/cp \''${ISOLINUX_BIN}/s/$/ --no-preserve=mode/' src/util/geniso
|
|
substituteInPlace src/Makefile.housekeeping --replace '/bin/echo' echo
|
|
runHook postConfigure
|
|
'';
|
|
|
|
preBuild = "cd src";
|
|
|
|
buildFlags = lib.attrNames targets;
|
|
|
|
installPhase = ''
|
|
mkdir -p $out
|
|
${lib.concatStringsSep "\n" (lib.mapAttrsToList (from: to:
|
|
if to == null
|
|
then "cp -v ${from} $out"
|
|
else "cp -v ${from} $out/${to}") targets)}
|
|
|
|
# Some PXE constellations especially with dnsmasq are looking for the file with .0 ending
|
|
# let's provide it as a symlink to be compatible in this case.
|
|
ln -s undionly.kpxe $out/undionly.kpxe.0
|
|
'';
|
|
|
|
enableParallelBuilding = true;
|
|
|
|
meta = with stdenv.lib;
|
|
{ description = "Network boot firmware";
|
|
homepage = http://ipxe.org/;
|
|
license = licenses.gpl2;
|
|
maintainers = with maintainers; [ ehmry ];
|
|
platforms = [ "x86_64-linux" "i686-linux" ];
|
|
};
|
|
}
|