Files
disko/docs/reference.md
2023-11-11 20:23:15 +00:00

4.4 KiB

Reference Manual: disko

Module Options

We are currently having issues being able to generate proper module option documentation for our recursive disko types. However you can read the available options here. Combined wit the examples this hopefully gives you an overview.

# Reference Manual: disko

Command Line Options

Usage: ./disko [options] disk-config.nix
or ./disko [options] --flake github:somebody/somewhere#disk-config

With flakes, disk-config is discovered first under the .diskoConfigurations top level attribute
or else from the disko module of a NixOS configuration of that name under .nixosConfigurations.

Options:

* -m, --mode mode
  set the mode, either format, mount or disko
    format: create partition tables, zpools, lvms, raids and filesystems
    mount: mount the partition at the specified root-mountpoint
    disko: first unmount and destroy all filesystems on the disks we want to format, then run the create and mount mode
* -f, --flake uri
  fetch the disko config relative to this flake's root
* --arg name value
  pass value to nix-build. can be used to set disk-names for example
* --argstr name value
  pass value to nix-build as string
* --root-mountpoint /some/other/mnt
  where to mount the device tree (default: /mnt)
* --dry-run
  just show the path to the script instead of running it
* --no-deps
  avoid adding another dependency closure to an in-memory installer
    requires all necessary dependencies to be available in the environment
* --debug
  run with set -x

Generating Disk Images with secrets included

If you have a system config that uses disko then you can run a script that generates a .raw VM image. This image can be used as a VM image, but you can also dd the .raw image on to a physical drive and just boot it. To execute the script replace the mySystem part in the snippet below and run it.

nix build .#nixosConfigurations.mySystem.config.system.build.diskoImagesScript

Now you will have a result file which will output something like this:

./result --help
Usage: $script [options]

Options:
* --pre-format-files <src> <dst>
  copies the src to the dst on the VM, before disko is run
  This is useful to provide secrets like LUKS keys, or other files you need for formating
* --post-format-files <src> <dst>
  copies the src to the dst on the finished image
  These end up in the images later and is useful if you want to add some extra stateful files
  They will have the same permissions but will be owned by root:root
* --build-memory
  specify the ammount of memory that gets allocated to the build vm (in mb)
  This can be usefull if you want to build images with a more involed NixOS config
  By default the vm will get 1024M/1GB
* --write-to-disk </dev/disk>
  use an actuall disk instead of writing to a file
  This only works if your conifg has only one disk specified
  There is no check if the specified path is actually a disk so you can also write to another file

If you intend to use it with a virtual drive you have to set disko.devices.disk.<drive>.imageSize = "32G"; #set your own size here in your disko config. If you just run the result script it will generate a file per drive specified in disko.devices.disk.<drive> called <dirve>.raw There is a small problem with this approach because the .raw file will have the size that's specified in imageSize+padding. So with a imageSize of 64G you end up with a 69G image and if you copy/move that file you end up reading and writing a lot of zeros. At this point it's probably note worth that there is no auto resizing in disko and it's not planed (but open for contributions). One way to circumvent that is to use the --write-to-disk option and just directly write to a drive, this only works with one drive but can be useful for simple setups like a laptop configuration.

The way images are generated is basically: Every file specified in --pre-format-files and --post-format-files will be copied to a buffer in /tmp. And then copied to the specified locations in the VM before and after the disko partitioning script ran. After that the NixOS installer will be run which will have access to every file in --post-format-files but not --pre-format-files because they will already be discarded. The VM will be shutdown once the installer finishes and then move the .raw disk files to the local directory.