Netboot: Difference between revisions

No edit summary
m Format the recently-added example with `nixfmt-rfc-style`.
Line 65: Line 65:


=== Another example ===
=== Another example ===
File <code>netboot.nix</code>:
{{file|netboot.nix|nix|
<syntaxHighlight lang=nix copy>
<nowiki>
{ name ? "netboot", arch ? "x86_64-linux"
{
, configuration ? _: {} # --arg configuration 'import ./netboot-config.nix'
  name ? "netboot",
, legacy ? false # variation with pxelinux and dnsmasq for older systems
  arch ? "x86_64-linux",
, cmdline ? []
  configuration ? _: { }, # --arg configuration 'import ./netboot-config.nix'
, loglevel ? 4
  legacy ? false, # variation with pxelinux and dnsmasq for older systems
, pixiecoreport ? 64172
  cmdline ? [ ],
, proxynets ? [ "192.168.0.0" ]
  loglevel ? 4,
, serialconsole ? false
  pixiecoreport ? 64172,
, serialport ? 0
  proxynets ? [ "192.168.0.0" ],
, serialspeed ? 9600
  serialconsole ? false,
, nixpkgs ? import <nixpkgs> {}, ... }:
  serialport ? 0,
with nixpkgs; with lib; let
  serialspeed ? 9600,
  nixpkgs ? import <nixpkgs> { },
  ...
}:
with nixpkgs;
with lib;
let


   example-configuration = {pkgs, config, ...}: with pkgs; {
   example-configuration =
    config = {
    { pkgs, config, ... }:
      environment.systemPackages = [
    with pkgs;
        mtr bridge-utils vlan ethtool jwhois sipcalc
    {
        netcat-openbsd tsocks psmisc pciutils usbutils
      config = {
        lm_sensors dmidecode microcom unar mkpasswd ripgrep
        environment.systemPackages = [
        wget rsync sshfs-fuse iperf3 mc mutt borgbackup
          mtr
        rxvt_unicode.terminfo
          bridge-utils
      ];
          vlan
      # users.users.nixos.openssh.authorizedKeys.keys = [ … ];
          ethtool
      # services.openssh = { ports = [2]; settings.PasswordAuthentication = false; };
          jwhois
      # virtualisation.lxc.enable = true;
          sipcalc
          netcat-openbsd
          tsocks
          psmisc
          pciutils
          usbutils
          lm_sensors
          dmidecode
          microcom
          unar
          mkpasswd
          ripgrep
          wget
          rsync
          sshfs-fuse
          iperf3
          mc
          mutt
          borgbackup
          rxvt_unicode.terminfo
        ];
        # users.users.nixos.openssh.authorizedKeys.keys = [ … ];
        # services.openssh = { ports = [2]; settings.PasswordAuthentication = false; };
        # virtualisation.lxc.enable = true;
      };
     };
     };
  };


   config = import <nixpkgs/nixos/lib/eval-config.nix> {
   config = import <nixpkgs/nixos/lib/eval-config.nix> {
Line 106: Line 135:
   };
   };


   version-module = { config, ... }: {
   version-module =
    system.stateVersion = config.system.nixos.version; # be quiet
    { config, ... }:
    system.nixos.tags = [ name ];
    {
  };
      system.stateVersion = config.system.nixos.version; # be quiet
      system.nixos.tags = [ name ];
    };


   run-pixiecore = writeShellScript "${name}-run-pixiecore" ''
   run-pixiecore = writeShellScript "${name}-run-pixiecore" ''
Line 125: Line 156:
   '';
   '';


   tftp-root = linkFarm "${name}-tftp-root"  
   tftp-root = linkFarm "${name}-tftp-root" (
     ( mapAttrsToList (name: path: { inherit name path; }) {
     mapAttrsToList (name: path: { inherit name path; }) {
       "pxelinux.cfg/default" = pxelinux-cfg;
       "pxelinux.cfg/default" = pxelinux-cfg;
       "pxelinux.0"           = "syslinux/pxelinux.0";
       "pxelinux.0" = "syslinux/pxelinux.0";
       "syslinux"             = "${syslinux}/share/syslinux";
       "syslinux" = "${syslinux}/share/syslinux";
       "bzImage"             = kernel;
       "bzImage" = kernel;
       "initrd"               = initrd;
       "initrd" = initrd;
     } );
     }
  );


   dnsmasq-conf = writeText "${name}-dnsmasq-conf" ''
   dnsmasq-conf = writeText "${name}-dnsmasq-conf" ''
Line 138: Line 170:
     local-service=net
     local-service=net
     dhcp-boot=pxelinux.0
     dhcp-boot=pxelinux.0
     ${ flip concatMapStrings proxynets (net: ''
     ${flip concatMapStrings proxynets (net: ''
       dhcp-range=${net},proxy
       dhcp-range=${net},proxy
     '')}
     '')}
Line 149: Line 181:
   '';
   '';


   cmd-line = concatStringsSep " "
   cmd-line = concatStringsSep " " (
     ([ "init=${build.toplevel}/init" "loglevel=${toString loglevel}" ]
     [
     ++ optional serialconsole
      "init=${build.toplevel}/init"
      "console=ttyS${toString serialport},${toString serialspeed}"
      "loglevel=${toString loglevel}"
     ++ cmdline );
    ]
     ++ optional serialconsole "console=ttyS${toString serialport},${toString serialspeed}"
     ++ cmdline
  );


   pxelinux-cfg = writeText "${name}-pxelinux.cfg" ''
   pxelinux-cfg = writeText "${name}-pxelinux.cfg" ''
     ${ optionalString serialconsole
     ${optionalString serialconsole "serial ${toString serialport} ${toString serialspeed}"}
      "serial ${toString serialport} ${toString serialspeed}" }
     console 1
     console 1
     prompt 1
     prompt 1
Line 172: Line 206:
   initrd = "${build.netbootRamdisk}/initrd";
   initrd = "${build.netbootRamdisk}/initrd";


in if legacy then run-dnsmasq else run-pixiecore
in
</syntaxHighlight>
if legacy then run-dnsmasq else run-pixiecore
 
</nowiki>
}}


Usage example:
Usage example: