forked from Deuxfleurs/nixcfg
write some minimal documentation to get nodes up and running
This commit is contained in:
parent
07b2e93014
commit
f5f0927b9e
1 changed files with 176 additions and 0 deletions
176
doc/nixos-install.md
Normal file
176
doc/nixos-install.md
Normal file
|
@ -0,0 +1,176 @@
|
|||
## Preparation
|
||||
|
||||
Download NixOS 21.11 ISO. Burn to USB.
|
||||
|
||||
## Booting into install environment
|
||||
|
||||
Boot the ISO on PC to install.
|
||||
|
||||
Become root with `sudo su`
|
||||
|
||||
```bash
|
||||
loadkeys fr
|
||||
setfont sun12x22
|
||||
```
|
||||
|
||||
Do network config if necessary, see [install guide](https://nixos.org/manual/nixos/stable/index.html#sec-installation-booting-networking)
|
||||
|
||||
## Make partitions
|
||||
|
||||
```bash
|
||||
cgdisk /dev/sda
|
||||
```
|
||||
|
||||
Recommended layout:
|
||||
|
||||
```
|
||||
/dev/sda1 512M ef00 EFI System partition
|
||||
/dev/sda2 100% 8309 Linux LUKS
|
||||
```
|
||||
|
||||
## Setup cryptography
|
||||
|
||||
```bash
|
||||
cryptsetup luksFormat /dev/sda2
|
||||
cryptsetup open /dev/sda2 cryptlvm
|
||||
```
|
||||
|
||||
## Create PV, VG and LVs
|
||||
|
||||
```bash
|
||||
pvcreate /dev/mapper/cryptlvm
|
||||
vgcreate NixosVG /dev/mapper/cryptlvm
|
||||
lvcreate -L 8G NixosVG -n swap
|
||||
lvcreate -l 100%FREE NixosVG -n root
|
||||
```
|
||||
|
||||
## Format partitions
|
||||
|
||||
```bash
|
||||
mkfs.fat -F 32 -n boot /dev/sda1
|
||||
mkswap /dev/NixosVG/swap
|
||||
mkfs.ext4 /dev/NixosVG/root
|
||||
```
|
||||
|
||||
## Mount partitions
|
||||
|
||||
```bash
|
||||
swapon /dev/NixosVG/swap
|
||||
mount /dev/NixosVG/root /mnt
|
||||
mkdir /mnt/boot
|
||||
mount /dev/sda1 /mnt/boot
|
||||
```
|
||||
|
||||
## Generate base NixOS configuration
|
||||
|
||||
```bash
|
||||
nixos-generate-config --root /mnt
|
||||
```
|
||||
|
||||
## Update `hardware-configuration.nix`
|
||||
|
||||
This section is needed:
|
||||
|
||||
```nix
|
||||
boot.initrd.luks.devices."cryptlvm" = {
|
||||
device = "/dev/disk/by-uuid/<uuid of sda2>";
|
||||
allowDiscards = true;
|
||||
};
|
||||
```
|
||||
|
||||
And for the root filesystem, remember to add the `relatime` and `discard` options so that it looks like this:
|
||||
|
||||
```nix
|
||||
fileSystems."/" =
|
||||
{ device = "/dev/disk/by-uuid/<...>";
|
||||
fsType = "ext4";
|
||||
options = [ "relatime" "discard" ];
|
||||
};
|
||||
```
|
||||
|
||||
## Update `configuration.nix`
|
||||
|
||||
Just enough so that basic tasks can be done from keyboard and remotely:
|
||||
|
||||
- timezone
|
||||
- keyboard layout
|
||||
- font `sun12x22`
|
||||
- vim
|
||||
- user
|
||||
- ssh
|
||||
- ssh port in firewall
|
||||
|
||||
## Do the installation
|
||||
|
||||
```bash
|
||||
nixos-install
|
||||
```
|
||||
|
||||
## First boot
|
||||
|
||||
Reboot machine. Login as `root`
|
||||
|
||||
```bash
|
||||
passwd <user>
|
||||
```
|
||||
|
||||
If necessary, assign static IP: `ip addr add 192.168.1.40/24 dev eno1` or sth (replace ip and device appropriately)
|
||||
|
||||
Remotely: `ssh-copy-id <user>@<ip>`. Check SSH access is good.
|
||||
|
||||
## Deploy from this repo
|
||||
|
||||
It's time!
|
||||
|
||||
**Changes in this repo:**
|
||||
|
||||
- create node `.nix` file, site `.nix` file if neccessary, and symlink for node `.site.nix`
|
||||
(create site and cluster files if necessary; use existing files of e.g.
|
||||
the staging cluster as examples/templates)
|
||||
- make sure values are filled in correctly
|
||||
- add node to `ssh_config` with it's LAN IP, we don't have VPN at this stage
|
||||
|
||||
**Configuration steps on the node:**
|
||||
|
||||
```bash
|
||||
# On node being installed
|
||||
mkdir -p /var/lib/deuxfleurs/remote-unlock
|
||||
cd /var/lib/deuxfleurs/remote-unlock
|
||||
ssh-keygen -t ed25519 -N "" -f ./ssh_host_ed25519_key
|
||||
```
|
||||
|
||||
**Try to deploy:**
|
||||
|
||||
```bash
|
||||
# In nixcfg repository from your PC
|
||||
./deploy.sh <cluster> <nodename>
|
||||
```
|
||||
|
||||
Reboot.
|
||||
|
||||
Check remote unlocking works: `ssh -p 222 root@<ip>`
|
||||
|
||||
## Configure wireguard
|
||||
|
||||
**Create wireguard keys:**
|
||||
|
||||
On the node:
|
||||
|
||||
```bash
|
||||
# On node being installed
|
||||
mkdir -p /var/lib/deuxfleurs/wireguard-keys
|
||||
cd /var/lib/deuxfleurs/wireguard-keys
|
||||
wg genkey | tee private | wg pubkey > public
|
||||
```
|
||||
|
||||
Get the public key, make sure it is in `cluster.nix` so that nodes know one
|
||||
another. Also put it anywhere else like in your local wireguard config for
|
||||
instance so that you can access the node from your PC by its wireguard address
|
||||
and not only its LAN address.
|
||||
|
||||
Redo a deploy (`./deploy.sh <cluster> <nodename>`)
|
||||
|
||||
## Configure Nomad and Consul TLS
|
||||
|
||||
If you are bootstraping a new cluster, you need to `./genpki.sh <cluster>` to
|
||||
make a TLS PKI for the Nomad+Consul cluster to work. Then redo a deploy.
|
Loading…
Reference in a new issue