diff options
| -rw-r--r-- | pkgs/default.nix | 1 | ||||
| -rw-r--r-- | pkgs/ipxe/default.nix | 57 |
2 files changed, 58 insertions, 0 deletions
diff --git a/pkgs/default.nix b/pkgs/default.nix index 6d36ce0..8bd9e2c 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -12,6 +12,7 @@ in { gem5 = callPackage ./gem5.nix {gem5ISA = "x86";}; git-aliases = callPackage ./git-aliases.nix {}; increment-zone-serials = callPackage ./increment-zone-serials {}; + ipxe = callPackage ./ipxe/default.nix {}; kbuild-standalone = callPackage ./kbuild-standalone.nix {}; mssql-tools = callPackage ./mssql-tools.nix {}; oregano = callPackage ./oregano {}; diff --git a/pkgs/ipxe/default.nix b/pkgs/ipxe/default.nix new file mode 100644 index 0000000..390a271 --- /dev/null +++ b/pkgs/ipxe/default.nix @@ -0,0 +1,57 @@ +{ + ipxe, + lib, + writeText, + stage2-url ? "http://[fe80::b007:b007]/\${netX/mac}/stage2.ipxe", +}: { + minimal = ipxe.override { + embedScript = "..."; # TODO + pname = "ipxe-minimal"; + enabledOptions = []; + + preConfigure = '' + sed -i \ + '/^#define\s\+\<[A-Z0-9_]\+\>\s*\(\/\*.*\*\/\)\?$/ { /CONFIG_GENERAL_H/! { s/^/\/\// } }' \ + src/config/general.h + ''; + }; + + with-script = + (ipxe.override { + embedScript = writeText "ipxe-shim-script" '' + #!ipxe + echo stage1: chainloading from ${stage2-url}... + ifconf --configurator ipv6 --timeout 1000 || goto try-v4 + goto try-boot + :try-v4 + echo stage1: failed to bring IPv6 up, trying DHCP... + ifconf --configurator dhcp --timeout 1000 || goto fail + :try-boot + isset ''${netX/gateway} && isset ''${syslog} || set syslog ''${netX/gateway} + isset ''${netX/gateway6} && isset ''${syslog6} || set syslog6 ''${netX/gateway6} + show syslog + show syslog6 + echo stage1: network up + route || + chain --timeout 10000 --replace ${stage2-url} || + :fail + echo stage1: failed, rebooting in 5s... + sleep 5 + reboot --warm + ''; + }).overrideAttrs (finalAtrs: prevAttrs: { + pname = "ipxe-with-embedded-script"; + enabledOptions = [ + "DOWNLOAD_PROTO_HTTP" + "NET_PROTO_IPV4" + "NET_PROTO_IPV6" + "REBOOT_CMD" + ]; + + preConfigure = '' + sed -i \ + 's/^\s*#define\s\+LOG_LEVEL\>.*$/#define LOG_LEVEL LOG_ALL/; /#define\s\+CONSOLE_SYSLOG\>/ { s/\/\/#/#/; }' \ + src/config/console.h + ''; + }); +} |
