diff options
Diffstat (limited to 'docs/install.org')
-rw-r--r-- | docs/install.org | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/docs/install.org b/docs/install.org new file mode 100644 index 0000000..40ba5a8 --- /dev/null +++ b/docs/install.org @@ -0,0 +1,153 @@ +#+TITLE: Installation +#+AUTHOR: Franck Cuny +#+EMAIL: franck@fcuny.net + +* Prepare the USB stick +Download the most recent image from https://nixos.org/download.html then put it on a stick: +#+begin_src sh +sudo cp ~/downloads/nixos-minimal-21.11.336020.2128d0aa28e-x86_64-linux.iso /dev/sda +#+end_src +* Partitioning +** For the workstation (desktop/laptop) +All hosts have the same partitioning for the boot drive: +- /boot partition for UEFI +- / encrypted with btrfs +- a 8GB swap + +If we assume the boot drive to be =nvme0n1=, we will do the following: +#+begin_src sh +parted /dev/nvme0n1 -- mklabel gpt +parted /dev/nvme0n1 -- mkpart primary 512MiB -8GiB +parted /dev/nvme0n1 -- mkpart primary linux-swap -8GiB 100% +parted /dev/nvme0n1 -- mkpart ESP fat32 1MiB 512MiB +parted /dev/nvme0n1 -- set 3 esp on +#+end_src + +Running =lsbkl= should give the following output: +#+begin_src sh +[root@nixos:~]# lsblk +NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS +loop0 7:0 0 709M 1 loop /nix/.ro-store +sda 8:0 1 29.9G 0 disk +├─sda1 8:1 1 784M 0 part /iso +└─sda2 8:2 1 37M 0 part +nvme0n1 259:0 0 465.8G 0 disk +├─nvme0n1p1 259:1 0 457.3G 0 part +├─nvme0n1p2 259:2 0 8G 0 part +└─nvme0n1p3 259:3 0 511M 0 part +#+end_src + +Then we create the LUKS device: +#+begin_src sh +cryptsetup --verify-passphrase -v luksFormat /dev/nvme0n1p1 +cryptsetup open /dev/nvme0n1p1 system +#+end_src + +We can create the partition for the boot drive and activate the swap: +#+begin_src sh +mkswap -L swap /dev/nvme0n1p2 +swapon /dev/nvme0n1p2 +mkfs.fat -F 32 -n nixos-boot /dev/nvme0n1p3 +#+end_src +#+begin_src sh +mkfs.btrfs /dev/mapper/system + +mount -t btrfs /dev/mapper/system /mnt + +btrfs subvolume create /mnt/nixos +btrfs subvolume create /mnt/home +btrfs subvolume create /mnt/snapshots + +umount /mnt +#+end_src + +Now we can re-mount the partitions with the proper options: +#+begin_src sh +mount -o subvol=nixos,compress=zstd,noatime,autodefrag /dev/mapper/system /mnt + +mkdir /mnt/{home,boot,.snapshots} + +mount -o subvol=home,compress=zstd,noatime,autodefrag /dev/mapper/system /mnt/home +mount -o subvol=snapshots,compress=zstd,noatime /dev/mapper/system /mnt/.snapshots +mount /dev/nvme0n1p3 /mnt/boot +#+end_src + +Once the installation is completed: +#+begin_src sh +CUSTOMIZE_TIMESTAMP=$(date -u +%Y%m%dT%H%M%S) +btrfs subvolume snapshot /mnt /mnt/.snapshots/$CUSTOMIZE_TIMESTAMP +#+end_src +** Partitions for the NAS +Create the RAIDs: +#+begin_src sh +mdadm --create /dev/md/fast --level=mirror --raid-devices=2 /dev/sda /dev/sdb +mdadm --create /dev/md/slow --level=mirror --raid-devices=2 /dev/sdc /dev/sde +#+end_src + +Encrypt the RAIDs: +#+begin_src sh +cryptsetup --verify-passphrase -v luksFormat /dev/md/slow +cryptsetup --verify-passphrase -v luksFormat /dev/md/fast +#+end_src + +Then open them: +#+begin_src sh +cryptsetup open /dev/md/fast raid-fast +cryptsetup open /dev/md/slow raid-slow +#+end_src + +Create the filesystem: +#+begin_src sh +mkfs.btrfs /dev/mapper/raid-fast +mkfs.btrfs /dev/mapper/raid-slow +#+end_src + +Then we can mount them to generate the host configuration +#+begin_src sh +btrfs subvolume create /mnt/media +btrfs subvolume create /mnt/containers +umount /mnt + +mount -t btrfs /dev/mapper/raid-slow /mnt/ +btrfs subvolume create /mnt/backups +mkdir /mnt/data/{backups,containers,media} +mount -o subvol=media,compress=zstd,noatime,autodefrag /dev/mapper/raid-fast /mnt/data/media +mount -o subvol=media,compress=zstd,noatime,autodefrag /dev/mapper/raid-fast /mnt/data/media +mount -o subvol=containers,compress=zstd,noatime,autodefrag /dev/mapper/raid-fast /mnt/data/containers +mount -o subvol=backups,compress=zstd,noatime,autodefrag /dev/mapper/raid-slow /mnt/data/backups +#+end_src +* Installing the system +Let's add git and nixFlakes: +#+begin_src sh +nix-shell -p git nixFlakes +#+end_src + +#+begin_src sh +nixos-generate-config --root /mnt +mkdir /mnt/root +git clone https://git.fcuny.net/fcuny/world.git /mnt/root/world +mkdir /mnt/root/world/hosts/<host name> +cp /mnt/etc/nixos/hardware-configuration.nix /mnt/root/world/hosts/<host name>/ +cp /mnt/root/world/hosts/aptos/default.nix /mnt/root/world/hosts/<host name>/ +vim /mnt/root/world/hosts/<host name>/default.nix +cd /mnt/root/world +git add hosts/tahoe +cd / +nixos-install --root /mnt --flake /mnt/root/world#<host name> +#+end_src + +Create another snapshot +#+begin_src sh +CUSTOMIZE_TIMESTAMP=$(date -u +%Y%m%dT%H%M%S) +btrfs subvolume snapshot /mnt /mnt/.snapshots/$CUSTOMIZE_TIMESTAMP +#+end_src + +And a =reboot= should be enough. +* home-manager initial install +After a reboot, as root: +#+begin_src sh +nix-channel --add https://github.com/nix-community/home-manager/archive/release-21.11.tar.gz home-manager +nix-channel --update +nix-shell '<home-manager>' -A install +home-manager build --flake .#fcuny@<host name> +#+end_src |