summaryrefslogtreecommitdiff
path: root/mini/install.txt
blob: afd1c8af9a5819196156c71bafef59866cafb5f0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# build installer

{
  description = "Bcachefs enabled installation media";
  inputs.nixos.url = "nixpkgs/nixos-unstable";
  outputs = { self, nixos }: {
    nixosConfigurations = {
      exampleIso = nixos.lib.nixosSystem {
        system = "x86_64-linux";
        modules = [
          "${nixos}/nixos/modules/installer/cd-dvd/installation-cd-minimal-new-kernel-no-zfs.nix"
          ({ lib, pkgs, ... }: {
            boot.supportedFilesystems = [ "bcachefs" ];
            boot.kernelPackages = lib.mkOverride 0 pkgs.linuxPackages_latest;
          })
        ];
      };
    };
  };
}

git init
git add flake.nix
nix build .#nixosConfigurations.exampleIso.config.system.build.isoImage

sudo dd if=result/iso/nixos-24.05.20240108.317484b-x86_64-linux.iso of=/dev/sda bs=4M conv=fsync

#
# kill old efi boot stuff
#

efibootmgr
efibootmgr -b 0 -B
...

#
# install script below
#

# fix unlocking https://nixos.wiki/wiki/Bcachefs
nix-env -iA nixos.keyutils
keyctl link @u @s

# Defining some helper variables (these will be used in later code
# blocks as well, so make sure to use the same terminal session or
# redefine them later)
DISK=/dev/disk/by-id/nvme-CT4000P3PSSD8_2325E6E63746
HOST=mini

# ensure 4k sector size
nvme format --lbaf=1 --force $DISK
nvme id-ns -H $DISK

sleep 5

# kill old data
sgdisk --zap-all $DISK
blkdiscard -v $DISK
wipefs -a $DISK
gdisk -l $DISK

# create partitions
parted $DISK -- mklabel gpt
sgdisk -n 1:0:+1024M -c 1:"EFI System Partition" -t 1:EF00 $DISK
sgdisk -n 2:0:+256G -c 2:"nix" -t 2:8e00 $DISK
sgdisk -n 3:0:0 -c 3:"data" -t 3:8e00 $DISK
parted $DISK -- set 1 boot on

sleep 5

# take a look
cat /proc/partitions

# boot partition
mkfs.fat -F 32 -n EFIBOOT $DISK-part1

# create encrypted bcachefs
bcachefs format --block_size=4096 --errors=ro --metadata_checksum=xxhash --data_checksum=xxhash --compression=lz4 --wide_macs --acl --encrypted --fs_label=nix --discard -f $DISK-part2
bcachefs format --block_size=4096 --errors=ro --metadata_checksum=xxhash --data_checksum=xxhash --compression=lz4 --wide_macs --acl --encrypted --fs_label=data --discard -f $DISK-part3

# prepare install
mount -t tmpfs none /mnt

# Create directories to mount file systems on
mkdir -p /mnt/{data,nix,home,boot,root,etc/nixos}

# mount the ESP
mount $DISK-part1 /mnt/boot

# mount bcachefs stuff
mount -o noatime,nodiratime $DISK-part2 /mnt/nix
mount -o noatime,nodiratime $DISK-part3 /mnt/data

# bind mount persistent stuff to data
mkdir -p /mnt/{data/home,data/root,data/nixos/$HOST}
mount --bind /mnt/data/home /mnt/home
mount --bind /mnt/data/root /mnt/root
mount --bind /mnt/data/nixos/$HOST /mnt/etc/nixos

# take a look
mount

# configure
nixos-generate-config --root /mnt

# save /mnt/etc/nixos/hardware-configuration.nix /mnt/etc/nixos/configuration.nix

cp /mnt/etc/nixos/hardware-configuration.nix /tmp
cp /mnt/etc/nixos/configuration.nix /tmp

# copy data

rsync --checksum -vaR --delete /data /mnt

# install

nixos-install --no-root-passwd --root /mnt

# unmount all stuff

umount -Rl /mnt

#
# after install tasks for extra file systems
#

# create vms disk

DD=/dev/disk/by-id/ata-CT2000MX500SSD1_2138E5D5061F
sgdisk --zap-all $DD
blkdiscard -v $DD
wipefs -a $DD

sleep 5

# create encrypted bcachefs
bcachefs format --block_size=4096 --errors=ro --metadata_checksum=xxhash --data_checksum=xxhash --compression=lz4 --wide_macs --acl --encrypted --fs_label=vms --discard -f $DD