From 3b471f8e320245029e5975738743a2f0cebe90b0 Mon Sep 17 00:00:00 2001 From: coolneng Date: Thu, 27 Feb 2025 18:03:26 +0100 Subject: [PATCH] Add installation script --- scripts/install.sh | 66 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100755 scripts/install.sh diff --git a/scripts/install.sh b/scripts/install.sh new file mode 100755 index 0000000..5e4d715 --- /dev/null +++ b/scripts/install.sh @@ -0,0 +1,66 @@ +#!/bin/sh + +partition_disk() { + parted "$DISK" -- mklabel gpt + parted "$DISK" -- mkpart ESP fat32 1MiB 1025MiB + parted "$DISK" -- mkpart linux-swap 1025MiB 17409MiB + parted "$DISK" -- mkpart primary 17409MiB 100% + parted "$DISK" -- set 1 boot on + mkfs.fat -F32 -n BOOT "$DISK"p1 + mkswap "$DISK"p2 + swapon "$DISK"p2 +} + +zfs_setup() { + zpool import -f vault + zpool create -f -o ashift=12 -o autotrim=on -O acltype=posixacl -O relatime=on \ + -O xattr=sa -O dnodesize=legacy -O normalization=formD -O mountpoint=none \ + -O canmount=off -O devices=off -R /mnt -O compression=zstd "$POOL_NAME" "$DISK"p3 + zfs create -o mountpoint=legacy -o com.sun:auto-snapshot=false "$POOL_NAME"/ephemeral + zfs create -o mountpoint=legacy -o com.sun:auto-snapshot=false "$POOL_NAME"/ephemeral/nix + zfs create -o mountpoint=legacy -o com.sun:auto-snapshot=false -o sync=disabled -o setuid=off "$POOL_NAME"/ephemeral/tmp + zfs create -o mountpoint=legacy -o com.sun:auto-snapshot=false "$POOL_NAME"/stateful + zfs create -o mountpoint=legacy -o com.sun:auto-snapshot=true "$POOL_NAME"/stateful/home + zfs create -o mountpoint=legacy -o com.sun:auto-snapshot=false "$POOL_NAME"/stateful/root +} + +mount_datasets() { + mount -t zfs sysion/stateful/root /mnt + mkdir -p /mnt/boot + mount "$DISK"p1 /mnt/boot + mkdir -p /mnt/home/coolneng + mount -t zfs sysion/stateful/home /mnt/home/coolneng + mkdir -p /mnt/nix + mount -t zfs sysion/ephemeral/nix /mnt/nix + mkdir -p /mnt/tmp + mount -t zfs sysion/ephemeral/tmp /mnt/tmp +} + +install_system() { + nixos-generate-config --root /mnt + mv /mnt/etc/nixos/hardware-configuration.nix modules/hardware-configuration.nix + nix-shell -p git --command "nixos-install --root /mnt --flake .#zion" +} + +usage() { + echo "Usage: install.sh " + echo "disk: full path to the disk (e.g. /dev/sda)" + exit 1 +} + +if [ $# != 1 ]; then + usage +fi + +DISK="$1" +POOL_NAME="sysion" + +echo "Let's start by partitioning the disk" +partition_disk +echo "Starting up the ZFS machinery" +zfs_setup +echo "Mounting the horse" +mount_datasets +echo "Lift off to the NixOS planet" +install_system +echo "All ready, time to rejoice"