2024-02-06 18:40:07 +01:00

3.6 KiB

nixos-anywhere and disko

This is an example repository for nixos-anywhere and disko.

Inspiration:

Manuals:

Build installer ISO with password-less SSH

In ./iso.nix, replace ./nitrokey.pub with your SSH public key.

sudo nix-channel --update

nix-build '<nixpkgs/nixos>' -A config.system.build.isoImage -I nixos-config=iso.nix
# aarch64 ISO (requires emulation)
#nix-build '<nixpkgs/nixos>' -A config.system.build.isoImage -I nixos-config=iso.nix --argstr system aarch64-linux

ls result/iso/*.iso

Hardware Configuration

Boot the target machine into NixOS live ISO. Then execute the following, ideally while connected as root via SSH:

nixos-generate-config --no-filesystems --root /mnt
cat /mnt/etc/nixos/hardware-configuration.nix

Save the output to a new file in ./hardware-configs. In ./flake.nix replace ./hardware-configs/yodaHP.nix with it.

Note: The hardware configuration should not contain any fileSystems.<name> options as these are generated based on your disko configuration.


Furthermore, in ./flake.nix replace disko.devices.disk.disk1.device with the id of your target block device.


Additionally, adjust networking.hostName.


Lastly, in ./flake.nix replace pbkdf-memory with your amount of RAM - 500 MB.


Optionally, if ssh-fde-unlock.nix is imported in ./flake.nix, replace boot.initrd.availableKernelModules with the kernel network driver in use.

Installation

To run the interactive vm test run:

nix --extra-experimental-features nix-command --extra-experimental-features flakes \
  run github:numtide/nixos-anywhere -- -f '.#mysystem' --vm-test

To install on remote target machine (if fde is not configured):

nix --extra-experimental-features nix-command --extra-experimental-features flakes \
  run github:numtide/nixos-anywhere -- --flake '.#mysystem' -p 22 root@192.168.178.106

To install on remote target machine (with or without fde) and print the SSH fingerprint of the new system. If fde is not set up, then the disk password can be left empty when asked for it:

./install-helper.sh 22 root@192.168.178.106

Connect to installed system

fde unlock:

ssh root@192.168.178.106

Once unlocked, connect with SSH. If the connection fails, double check on your router if the system was assigned to another IP address.

ssh root@192.168.178.106

Updating dependencies

Recreate the lock file (i.e. update all inputs) and commit the new lock file:

nix --extra-experimental-features nix-command --extra-experimental-features flakes \
  flake update --commit-lock-file

TODOs

Appendix - LUKS Parameters

Warning: NixOS has a hardcoded timeout of 10 seconds when opening encrypted drives during boot. Please choose --iter-time <= 7500.