diff --git a/beta/configuration.nix b/beta/configuration.nix new file mode 100644 index 0000000..2f139e9 --- /dev/null +++ b/beta/configuration.nix @@ -0,0 +1,26 @@ +# Edit this configuration file to define what should be installed on +# your system. Help is available in the configuration.nix(5) man page +# and in the NixOS manual (accessible by running `nixos-help`). + +{ config, pkgs, ... }: + +{ + imports = + [ + # Include the results of the hardware scan. + ./hardware-configuration.nix + + # Shared config of all machines + /data/nixos/common.nix + ]; + + # amd graphics + hardware.graphics.extraPackages = with pkgs; [ amdvlk rocm-opencl-icd rocm-opencl-runtime ]; + + # our hostname and an ID for ZFS + networking.hostName = "mini"; + networking.hostId = "e925ccfb"; + + # classic dhcpcd + networking.networkmanager.enable = false; +} diff --git a/beta/hardware-configuration.nix b/beta/hardware-configuration.nix new file mode 100644 index 0000000..8472002 --- /dev/null +++ b/beta/hardware-configuration.nix @@ -0,0 +1,29 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ config, lib, pkgs, modulesPath, ... }: + +{ + imports = [ (modulesPath + "/installer/scan/not-detected.nix") ]; + + boot.initrd.availableKernelModules = [ "nvme" "xhci_pci" "ahci" "usbhid" "sd_mod" ]; + boot.initrd.kernelModules = [ "amdgpu" ]; + boot.kernelModules = [ "kvm-amd" ]; + + # efi partition + fileSystems."/boot" = + { device = "/dev/disk/by-id/nvme-CT4000P3PSSD8_2325E6E63746-part1"; + fsType = "vfat"; + neededForBoot = true; + }; + + # vms + fileSystems."/home/cullmann/vms" = + { device = "vpool/vms"; + fsType = "zfs"; + depends = [ "/home" ]; + }; + + nixpkgs.hostPlatform = lib.mkDefault "x86_64-linux"; + hardware.cpu.amd.updateMicrocode = lib.mkDefault config.hardware.enableRedistributableFirmware; +} diff --git a/beta/install.txt b/beta/install.txt new file mode 100644 index 0000000..8e59841 --- /dev/null +++ b/beta/install.txt @@ -0,0 +1,171 @@ +# +# enable ssh for root +# + +systemctl start sshd +sudo bash +passwd + +# +# kill old efi boot stuff +# + +efibootmgr +efibootmgr -b 0 -B +efibootmgr -b 1 -B +efibootmgr -b 2 -B +efibootmgr -b 3 -B +efibootmgr -b 4 -B +efibootmgr + +# +# install script below +# + +# 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:0 -c 2:"Linux" -t 2: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 + +sleep 5 + +# ZFS zpool creation with encryption +zpool create \ + -o ashift=12 \ + -o autotrim=on \ + -O acltype=posixacl \ + -O atime=off \ + -O canmount=off \ + -O compression=on \ + -O dnodesize=auto \ + -O normalization=formD \ + -O xattr=sa \ + -O mountpoint=none \ + -O encryption=on \ + -O keylocation=prompt \ + -O keyformat=passphrase \ + zpool $DISK-part2 + +sleep 5 + +# create all the volumes +zfs create -o mountpoint=legacy zpool/data +zfs create -o mountpoint=legacy zpool/nix + +sleep 5 + +# prepare install, tmpfs root +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 volumes +mount -t zfs zpool/data /mnt/data +mount -t zfs zpool/nix /mnt/nix + +# 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 + +# create fake /data to have the right paths +mkdir -p /data +mount --bind /mnt/data /data + +# 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 config data + +sudo scp -r /data/nixos root@192.168.13.100:/mnt/data + +# install + +nixos-install --option experimental-features 'nix-command flakes' --no-root-passwd --root /mnt + +# unmount all stuff + +umount -Rl /data /mnt +zpool export -a + +# sync all /data after the install + +sudo -E rsync -va --delete --one-file-system /data root@192.168.13.100:/ + +# +# 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 + +# ZFS zpool creation with encryption +zpool create \ + -o ashift=12 \ + -o autotrim=on \ + -O acltype=posixacl \ + -O atime=off \ + -O canmount=off \ + -O compression=on \ + -O dnodesize=auto \ + -O normalization=formD \ + -O xattr=sa \ + -O mountpoint=none \ + -O encryption=on \ + -O keylocation=file:///data/nixos/key-vms.secret \ + -O keyformat=passphrase \ + vpool $DD + +sleep 5 + +# create all the volumes +zfs create -o mountpoint=legacy vpool/vms + +# update passphrase later +# zfs change-key -o keylocation=file:///data/nixos/key-vms.secret vpool