nixos-anywhere/README.md

122 lines
4.4 KiB
Markdown
Raw Normal View History

2023-02-01 21:49:46 +03:00
# nixos-anywhere - install nixos everywhere via ssh
2022-11-10 18:49:56 +03:00
2023-02-02 12:16:07 +03:00
<img src="https://raw.githubusercontent.com/numtide/nixos-anywhere/main/docs/logo.png" width="256" height="256">
2023-02-01 22:33:08 +03:00
2023-02-02 10:23:12 +03:00
nixos-anywhere (formally known as nixos-remote) makes it possible to install
nixos from Linux machines reachable via ssh. Under the hood uses a
[kexec image](https://github.com/nix-community/nixos-images#kexec-tarballs) to
boot into a NixOS installer from a running Linux system. It then uses
[disko](https://github.com/nix-community/disko) to partition and format the
disks on the target system before it installs the user provided nixos
2022-11-22 23:46:43 +03:00
configuration.
## Requirements
2023-02-06 23:50:32 +03:00
`nixos-anywhere` can detect nixos installer if those contain the identifier
2023-02-02 10:22:40 +03:00
`VARIANT=installer` in their `/etc/os-release` file. This is the case for the
nixos-unstable installer and will be also part of nixos 23.05. If installer is
2023-02-06 23:50:32 +03:00
detected `nixos-anywhere` will not try to kexec into its own image.
2023-02-02 10:22:40 +03:00
If your system is not booted into a nixos installer than the following
requirements apply for kexec to succeed:
- x86_64 Linux system with kexec support (most x86_64 machine do have kexec
2023-02-02 10:23:12 +03:00
support) or you have to provide your own
[image](https://github.com/numtide/nixos-anywhere#using-your-own-kexec-image)
2022-11-22 23:46:43 +03:00
- At least 2.5GB RAM (swap does not count). If you do not have enough RAM you
will see failures unpacking the initrd), this is because kexec needs to load
the whole nixos into memory.
2022-11-10 18:49:56 +03:00
## Usage
2022-11-22 23:38:11 +03:00
2023-02-02 10:23:12 +03:00
Needs a repo with your configurations with flakes. For a minimal example
checkout https://github.com/numtide/nixos-anywhere-examples.
Your NixOS configuration will also need a
[disko](https://github.com/nix-community/disko) configuration as we can see in
our
[example](https://github.com/numtide/nixos-anywhere-examples/blob/9768e438b1467ec55d42e096860e7199bd1ef43d/flake.nix#L15-L19)
2022-11-22 23:38:11 +03:00
Afterwards you can just run:
2022-11-10 18:49:56 +03:00
```
2023-02-01 21:49:46 +03:00
nix run github:numtide/nixos-anywhere -- root@yourip --flake github:your-user/your-repo#your-system
2022-11-10 18:49:56 +03:00
```
2022-11-22 23:38:11 +03:00
The parameter passed to `--flake` should point to your nixos configuration
exposed in your flake (`nixosConfigurations.your-system` in the example above).
2022-12-31 14:55:20 +03:00
2023-02-01 21:49:46 +03:00
`nixos-anywhere --help`
2023-02-02 10:23:12 +03:00
```shell
2023-02-01 21:49:46 +03:00
Usage: nixos-anywhere [options] ssh-host
2022-12-31 14:55:20 +03:00
Options:
* -f, --flake flake
set the flake to install the system from
2023-01-12 02:25:14 +03:00
* -L, --print-build-logs
print full build logs
2022-12-31 14:55:20 +03:00
* -s, --store-paths
set the store paths to the disko-script and nixos-system directly
if this is give, flake is not needed
2023-01-12 02:25:14 +03:00
* --no-reboot
do not reboot after installation, allowing further customization of the target installation.
2022-12-31 14:55:20 +03:00
* --kexec url
use another kexec tarball to bootstrap NixOS
* --stop-after-disko
exit after disko formating, you can then proceed to install manually or some other way
* --extra-files files
files to copy into the new nixos installation
2023-01-12 02:25:14 +03:00
* --disk-encryption-keys remote_path local_path
copy the contents of the file or pipe in local_path to remote_path in the installer environment,
after kexec but before installation. Can be repeated.
2023-01-17 18:28:44 +03:00
* --no-substitute-on-destination
disable passing --substitute-on-destination to nix-copy
2022-12-31 14:55:20 +03:00
* --debug
enable debug output
2023-01-17 18:28:44 +03:00
* --option KEY VALUE
nix option to pass to every nix related command
* --from store-uri
URL of the source Nix store to copy the nixos and disko closure from
2022-12-31 14:55:20 +03:00
```
## Using your own kexec image
2023-02-02 10:23:12 +03:00
By default `nixos-anywhere` will download the kexec image from
[here](https://github.com/nix-community/nixos-images#kexec-tarballs). It is also
possible to provide your own by providing a file to `--kexec`. The image will
than uploaded prior to executing.
2022-12-31 14:55:20 +03:00
2023-02-02 10:23:12 +03:00
```shell
2023-02-01 21:49:46 +03:00
nixos-anywhere \
2022-12-31 14:55:20 +03:00
--kexec "$(nix build --print-out-paths github:nix-community/nixos-images#packages.x86_64-linux.kexec-installer-nixos-unstable)/nixos-kexec-installer-x86_64-linux.tar.gz" \
--flake 'github:your-user/your-repo#your-system' \
root@yourip
```
`--kexec` can be useful for example for aarch64-linux, where there is no
2023-02-02 10:23:12 +03:00
pre-build image. The following example assumes that your local machine can build
for aarch64-linux either natively or through a remote builder
2022-12-31 14:55:20 +03:00
2023-02-02 10:23:12 +03:00
```shell
2023-02-01 21:49:46 +03:00
nixos-anywhere \
2022-12-31 14:55:20 +03:00
--kexec "$(nix build --print-out-paths github:nix-community/nixos-images#packages.aarch64-linux.kexec-installer-nixos-unstable)/nixos-kexec-installer-aarch64-linux.tar.gz" \
--flake 'your-flake#your-system' \
root@yourip
```
2023-01-12 17:26:01 +03:00
## Developer guide
2023-02-01 21:49:46 +03:00
To run `nixos-anywhere` from the repo:
2023-01-12 17:26:01 +03:00
```console
nix run . -- --help
```
To format the code
```console
nix fmt
```