Netboot: Difference between revisions
imported>Erikarvstedt Improve example: Move script definition to system build. Fix old `nix build` syntax. Add firewall commands. |
imported>Erikarvstedt Example: Allow differing boot and host systems |
||
Line 12: | Line 12: | ||
sys = nixpkgs.lib.nixosSystem { | sys = nixpkgs.lib.nixosSystem { | ||
system = "x86_64-linux"; | system = "x86_64-linux"; | ||
modules = [ | modules = [ | ||
({ config, pkgs, lib, modulesPath, ... }: { | |||
({ config, pkgs, lib, ... }: | imports = [ | ||
(modulesPath + "/installer/netboot/netboot-minimal.nix") | |||
]; | |||
config = { | config = { | ||
## Some useful options for setting up a new system | ## Some useful options for setting up a new system | ||
# services.getty.autologinUser = mkForce "root"; | # services.getty.autologinUser = lib.mkForce "root"; | ||
# users.users.root.openssh.authorizedKeys.keys = [ ... ]; | # users.users.root.openssh.authorizedKeys.keys = [ ... ]; | ||
# console.keyMap = "de"; | # console.keyMap = "de"; | ||
Line 29: | Line 30: | ||
}; | }; | ||
run-pixiecore = let | |||
hostPkgs = nixpkgs.legacyPackages.${builtins.currentSystem}; | |||
build = sys.config.system.build; | |||
in hostPkgs.writers.writeBash "run-pixiecore" '' | |||
exec ${hostPkgs.pixiecore}/bin/pixiecore \ | |||
boot ${build.kernel}/bzImage ${build.netbootRamdisk}/initrd \ | |||
--cmdline "init=${build.toplevel}/init loglevel=4" \ | |||
--debug --dhcp-no-bind \ | |||
--port 64172 --status-port 64172 "$@" | |||
''; | |||
in | |||
run-pixiecore | |||
</syntaxHighlight> | </syntaxHighlight> | ||
Revision as of 12:57, 12 January 2023
Building and serving a netboot image
Example
This example uses Pixiecore for hosting, which works in an ordinary network environment with an existing DHCP server.
Create file system.nix
:
let
# NixOS 22.11 as of 2023-01-12
nixpkgs = builtins.getFlake "github:nixos/nixpkgs/54644f409ab471e87014bb305eac8c50190bcf48";
sys = nixpkgs.lib.nixosSystem {
system = "x86_64-linux";
modules = [
({ config, pkgs, lib, modulesPath, ... }: {
imports = [
(modulesPath + "/installer/netboot/netboot-minimal.nix")
];
config = {
## Some useful options for setting up a new system
# services.getty.autologinUser = lib.mkForce "root";
# users.users.root.openssh.authorizedKeys.keys = [ ... ];
# console.keyMap = "de";
# hardware.video.hidpi.enable = true;
system.stateVersion = config.system.nixos.release;
};
})
];
};
run-pixiecore = let
hostPkgs = nixpkgs.legacyPackages.${builtins.currentSystem};
build = sys.config.system.build;
in hostPkgs.writers.writeBash "run-pixiecore" ''
exec ${hostPkgs.pixiecore}/bin/pixiecore \
boot ${build.kernel}/bzImage ${build.netbootRamdisk}/initrd \
--cmdline "init=${build.toplevel}/init loglevel=4" \
--debug --dhcp-no-bind \
--port 64172 --status-port 64172 "$@"
'';
in
run-pixiecore
Run pixiecore:
# Build pixiecore runner
nix build -f system.nix -o /tmp/run-pixiecore
# Open required firewall ports
sudo iptables -I nixos-fw -p udp -m multiport --dports 67,69,4011 -j ACCEPT
sudo iptables -I nixos-fw -p tcp -m tcp --dport 64172 -j ACCEPT
# Run pixiecore
sudo $(realpath /tmp/run-pixiecore)
# Close ports
sudo iptables -D nixos-fw -p udp -m multiport --dports 67,69,4011 -j ACCEPT
sudo iptables -D nixos-fw -p tcp -m tcp --dport 64172 -j ACCEPT
See also
NixOS: Pixiecore module.
NixOS manual: PXE booting.
netboot.xyz
There is now official netboot.xyz support. Just select NixOS from Linux installs and you should be ready to go.
Note: Your iPXE must be recent enough to support https:// links