I have to google all of this this each time otherwise. Change-Id: Ib7df0882e4681bd061f77a00b678641a7f37c58c Reviewed-on: https://cl.tvl.fyi/c/depot/+/5546 Tested-by: BuildkiteCI Reviewed-by: tazjin <tazjin@tvl.su> Autosubmit: tazjin <tazjin@tvl.su>
		
			
				
	
	
		
			116 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			116 lines
		
	
	
	
		
			3.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
Current steps for my NixOS-on-ZFS installs with impermanence.
 | 
						|
 | 
						|
## Target layout (example from tverskoy):
 | 
						|
 | 
						|
Partitioning:
 | 
						|
 | 
						|
```
 | 
						|
nvme0n1     259:0    0 238.5G  0 disk
 | 
						|
├─nvme0n1p1 259:1    0   128M  0 part /boot (type: EFI system)
 | 
						|
└─nvme0n1p2 259:2    0 238.3G  0 part       (type: Solaris root)
 | 
						|
```
 | 
						|
 | 
						|
ZFS layout:
 | 
						|
 | 
						|
```
 | 
						|
NAME                   USED  AVAIL     REFER  MOUNTPOINT
 | 
						|
zpool                  212G  19.0G      248K  /zpool
 | 
						|
zpool/ephemeral        668M  19.0G      192K  /zpool/ephemeral
 | 
						|
zpool/ephemeral/home   667M  19.0G      667M  legacy
 | 
						|
zpool/local           71.3G  19.0G      192K  /zpool/local
 | 
						|
zpool/local/nix       71.3G  19.0G     71.3G  legacy
 | 
						|
zpool/safe             140G  19.0G      192K  /zpool/safe
 | 
						|
zpool/safe/depot       414M  19.0G      414M  legacy
 | 
						|
zpool/safe/persist     139G  19.0G      139G  legacy
 | 
						|
```
 | 
						|
 | 
						|
With reset-snapshots:
 | 
						|
 | 
						|
```
 | 
						|
NAME                                USED  AVAIL     REFER  MOUNTPOINT
 | 
						|
zpool/ephemeral/home@blank          144K      -      192K  -
 | 
						|
zpool/ephemeral/home@tazjin-clean   144K      -      200K  -
 | 
						|
```
 | 
						|
 | 
						|
Legacy mountpoints are used because the NixOS wiki advises that using
 | 
						|
ZFS own mountpoints might lead to issues with the mount order during
 | 
						|
boot.
 | 
						|
 | 
						|
## Install steps
 | 
						|
 | 
						|
1. First, get internet.
 | 
						|
 | 
						|
2. Use `fdisk` to set up the partition layout above (fwiw, EFI type
 | 
						|
   should be `1`, Solaris root should be `66`).
 | 
						|
 | 
						|
3. Format the first partition for EFI: `mkfs.fat -F32 -n EFI $part1`
 | 
						|
 | 
						|
4. Init ZFS stuff:
 | 
						|
 | 
						|
   ```
 | 
						|
   zpool create \
 | 
						|
     # 2 SSD only settings
 | 
						|
     -o ashift=12 \
 | 
						|
     -o autotrim=on \
 | 
						|
     -R /mnt \
 | 
						|
     -O canmount=off \
 | 
						|
     -O mountpoint=none \
 | 
						|
     -O acltype=posixacl \
 | 
						|
     -O compression=lz4 \
 | 
						|
     -O atime=off \
 | 
						|
     -O xattr=sa \
 | 
						|
     -O encryption=aes-256-gcm \
 | 
						|
     -O keylocation=prompt \
 | 
						|
     -O keyformat=passphrase \
 | 
						|
     zpool $part2
 | 
						|
   ```
 | 
						|
 | 
						|
   Reserve some space for deletions:
 | 
						|
 | 
						|
   ```
 | 
						|
   zfs create -o refreservation=1G -o mountpoint=none zpool/reserved
 | 
						|
   ```
 | 
						|
 | 
						|
   Create the datasets as per the target layout:
 | 
						|
 | 
						|
   ```
 | 
						|
   # Throwaway datasets
 | 
						|
   zfs create -o canmount=off -o mountpoint=none zpool/ephemeral
 | 
						|
   zfs create -o mountpoint=legacy zpool/ephemeral/root
 | 
						|
   zfs create -o mountpoint=legacy zpool/ephemeral/home
 | 
						|
 | 
						|
   # Persistent datasets
 | 
						|
   zfs create -o canmount=off -o mountpoint=none zpool/persistent
 | 
						|
   zfs create -o mountpoint=legacy zpool/persistent/nix
 | 
						|
   zfs create -o mountpoint=legacy zpool/persistent/depot
 | 
						|
   zfs create -o mountpoint=legacy zpool/persistent/data
 | 
						|
   ```
 | 
						|
 | 
						|
   Create completely blank snapshots of the ephemeral datasets:
 | 
						|
 | 
						|
   ```
 | 
						|
   zfs snapshot zpool/ephemeral/root@blank
 | 
						|
   zfs snapshot zpool/ephemeral/home@blank
 | 
						|
   ```
 | 
						|
 | 
						|
   The ephemeral home volume needs the user folder already set up with
 | 
						|
   permissions. Mount it and create the folder there:
 | 
						|
 | 
						|
   ```
 | 
						|
   mount -t zfs zpool/ephemeral/root /mnt
 | 
						|
   mkdir /mnt/home
 | 
						|
   mount -t zfs zpool/ephemeral/home /mnt/home
 | 
						|
   mkdir /mnt/home/tazjin
 | 
						|
   chmod 1000:100 /mnt/home/tazjin
 | 
						|
   zfs snapshot zpool/ephemeral/home@tazjin-clean
 | 
						|
   ```
 | 
						|
 | 
						|
   Now the persistent Nix store volume can be mounted and installation
 | 
						|
   can begin.
 | 
						|
 | 
						|
   ```
 | 
						|
   mkdir /mnt/nix
 | 
						|
   mount -t zfs zpool/persistent/nix /mnt/nix
 | 
						|
   ```
 | 
						|
 | 
						|
4. Configure & install NixOS as usual.
 |