From bf8e7fa9f07884a9259cf1883801f2fb35ee69e7 Mon Sep 17 00:00:00 2001 From: BlueTufa Date: Thu, 22 May 2025 07:24:45 -0600 Subject: [PATCH 1/9] arch efi mode --- cloud-init/arch/build-raw.sh | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/cloud-init/arch/build-raw.sh b/cloud-init/arch/build-raw.sh index c3f608b..3f27caf 100755 --- a/cloud-init/arch/build-raw.sh +++ b/cloud-init/arch/build-raw.sh @@ -1,6 +1,6 @@ #! /bin/bash -INSTANCE_ID=${1:-"vm-arch-01"} +INSTANCE_ID=${1:-"arch-recovery"} SSH_KEY="ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMwt/pVQKCQHHqxEOdh1/JKqJzIyTPLQpqz/Wno0ECqG badger@catamaran" set -euxo pipefail @@ -35,20 +35,23 @@ fi truncate -s ${SIZE_MB}M "$DISK" # BIOS-based boot -parted -s "$DISK" mklabel msdos -parted -s "$DISK" mkpart primary ext4 2MiB 100% -parted -s "$DISK" set 1 boot on +parted -s "$DISK" mklabel gpt +parted -s "$DISK" mkpart ESP fat32 2MiB 600MiB +parted -s "$DISK" set 1 esp on +parted -s "$DISK" mkpart primary ext4 602MiB 100% # Setup loop device LOOPDEV=$(losetup --show -fP "$DISK") # Maps /dev/loopXp1 sleep 1 # Allow time for partition probing # Format partition -mkfs.ext4 "${LOOPDEV}p1" +mkfs.fat -F32 -n ARCH_EFI "${LOOPDEV}p1" +mkfs.ext4 -L ARCH_ROOT "${LOOPDEV}p2" # loopback the raw partition on mount point -mkdir -p "$MNT" -mount "${LOOPDEV}p1" "$MNT" +mkdir -p "$MNT/boot/efi" +mount "${LOOPDEV}p1" "$MNT/boot/efi" +mount "${LOOPDEV}p2" "$MNT" # download and verify [[ -f archlinux-bootstrap-x86_64.tar.zst ]] || wget https://geo.mirror.pkgbuild.com/iso/latest/archlinux-bootstrap-x86_64.tar.zst @@ -62,6 +65,7 @@ else exit 1 fi +[[ -d root.x86_64/ ]] && rm -r root.x86_64/ tar --use-compress-program=unzstd -xvf archlinux-bootstrap-x86_64.tar.zst # update mirrors, not rerunnable @@ -111,11 +115,11 @@ chroot "$MNT" /bin/bash -c " echo LANG=en_US.UTF-8 > /etc/locale.conf # install base system - pacman -Sy --noconfirm base linux terminus-font linux-firmware openssh avahi grub dhcpcd + pacman -Sy --noconfirm base linux terminus-font linux-firmware openssh avahi grub dhcpcd grub-efi-amd64 efibootmgr mkinitcpio -p linux genfstab -U / > /etc/fstab - grub-install --target=i386-pc --recheck $LOOPDEV + grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch-recovery grub-mkconfig -o /boot/grub/grub.cfg echo \"root:root\" | chpasswd From 6372798981d075abea2c32681027941e7aa671c9 Mon Sep 17 00:00:00 2001 From: BlueTufa Date: Thu, 22 May 2025 07:35:24 -0600 Subject: [PATCH 2/9] bugs --- cloud-init/arch/build-raw.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/cloud-init/arch/build-raw.sh b/cloud-init/arch/build-raw.sh index 3f27caf..2a63fe9 100755 --- a/cloud-init/arch/build-raw.sh +++ b/cloud-init/arch/build-raw.sh @@ -115,12 +115,14 @@ chroot "$MNT" /bin/bash -c " echo LANG=en_US.UTF-8 > /etc/locale.conf # install base system - pacman -Sy --noconfirm base linux terminus-font linux-firmware openssh avahi grub dhcpcd grub-efi-amd64 efibootmgr + pacman -Sy --noconfirm base linux terminus-font linux-firmware openssh avahi grub dhcpcd dosfstools efibootmgr mkinitcpio -p linux - genfstab -U / > /etc/fstab + mkdir -p /boot/efi + mount ${LOOPDEV}p1 /boot/efi grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch-recovery grub-mkconfig -o /boot/grub/grub.cfg + genfstab -U / > /etc/fstab echo \"root:root\" | chpasswd From 22853412ab26fb770ff7ce910a1b653fd04eda72 Mon Sep 17 00:00:00 2001 From: BlueTufa Date: Thu, 22 May 2025 07:49:46 -0600 Subject: [PATCH 3/9] another bug --- cloud-init/arch/build-raw.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/cloud-init/arch/build-raw.sh b/cloud-init/arch/build-raw.sh index 2a63fe9..873373e 100755 --- a/cloud-init/arch/build-raw.sh +++ b/cloud-init/arch/build-raw.sh @@ -120,6 +120,7 @@ chroot "$MNT" /bin/bash -c " mkinitcpio -p linux mkdir -p /boot/efi mount ${LOOPDEV}p1 /boot/efi + mount -t efivarfs efivarfs /sys/firmware/efi/efivars grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch-recovery grub-mkconfig -o /boot/grub/grub.cfg genfstab -U / > /etc/fstab From fba4cd1c927297f8c09cd2ea7000fa7d4cd42766 Mon Sep 17 00:00:00 2001 From: BlueTufa Date: Thu, 22 May 2025 08:44:44 -0600 Subject: [PATCH 4/9] bugs --- cloud-init/arch/build-raw.sh | 4 ++-- cloud-init/arch/startup.sh | 7 +++++-- installer.sh | 2 +- 3 files changed, 8 insertions(+), 5 deletions(-) diff --git a/cloud-init/arch/build-raw.sh b/cloud-init/arch/build-raw.sh index 873373e..72a6f07 100755 --- a/cloud-init/arch/build-raw.sh +++ b/cloud-init/arch/build-raw.sh @@ -115,13 +115,13 @@ chroot "$MNT" /bin/bash -c " echo LANG=en_US.UTF-8 > /etc/locale.conf # install base system - pacman -Sy --noconfirm base linux terminus-font linux-firmware openssh avahi grub dhcpcd dosfstools efibootmgr + pacman -Sy --noconfirm base linux terminus-font linux-firmware openssh avahi grub dhcpcd dosfstools efibootmgr os-prober mkinitcpio -p linux mkdir -p /boot/efi mount ${LOOPDEV}p1 /boot/efi mount -t efivarfs efivarfs /sys/firmware/efi/efivars - grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch-recovery + grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch grub-mkconfig -o /boot/grub/grub.cfg genfstab -U / > /etc/fstab diff --git a/cloud-init/arch/startup.sh b/cloud-init/arch/startup.sh index 5fb24b0..959ef20 100644 --- a/cloud-init/arch/startup.sh +++ b/cloud-init/arch/startup.sh @@ -27,9 +27,12 @@ cp $SOURCE_PATH $TARGET_PATH virt-install --name ${INSTANCE_ID} --memory ${MEMORY} --vcpus ${VCPUS} \ --disk path="${TARGET_PATH},format=raw,bus=virtio" \ --os-variant archlinux \ - --graphics none \ --console pty,target_type=serial \ --import \ - --noautoconsole + --noautoconsole \ + --network bridge=br0 \ + --graphics spice \ + --boot loader=/usr/share/edk2-ovmf/x64/OVMF_CODE.4m.fd,loader.readonly=yes,loader.type=pflash \ + --boot uefi virsh autostart ${INSTANCE_ID} diff --git a/installer.sh b/installer.sh index 4788858..d92cd8a 100755 --- a/installer.sh +++ b/installer.sh @@ -24,7 +24,7 @@ install-nvim () { ln -sf $(pwd)/nvim/init.lua ~/.config/nvim/init.lua ln -sf $(pwd)/nvim/lua/plugins.lua ~/.config/nvim/lua/plugins.lua - nvim -c ':PlugInstall' +qa + nvim -c ':PlugInstall' +qa || true } install-oh-my-zsh () { From 9195163dc0caccd3df663d52a156e8ae96e07413 Mon Sep 17 00:00:00 2001 From: BlueTufa Date: Thu, 22 May 2025 12:43:51 -0600 Subject: [PATCH 5/9] scripts --- cloud-init/arch/build-raw.sh | 5 ++--- cloud-init/arch/startup.sh | 1 - 2 files changed, 2 insertions(+), 4 deletions(-) mode change 100644 => 100755 cloud-init/arch/startup.sh diff --git a/cloud-init/arch/build-raw.sh b/cloud-init/arch/build-raw.sh index 72a6f07..80861fe 100755 --- a/cloud-init/arch/build-raw.sh +++ b/cloud-init/arch/build-raw.sh @@ -103,8 +103,8 @@ do echo "Mounting $i" mount --make-rslave "$MNT/$i" done -# FIXME: -# pacman -Sy efibootmgr cloud-init +grub-install --target=x86_64-efi --efi-directory=$MNT/boot/efi --bootloader-id=arch --removable + chroot "$MNT" /bin/bash -c " swapoff -a ln -sf /usr/share/zoneinfo/America/Denver /etc/localtime @@ -121,7 +121,6 @@ chroot "$MNT" /bin/bash -c " mkdir -p /boot/efi mount ${LOOPDEV}p1 /boot/efi mount -t efivarfs efivarfs /sys/firmware/efi/efivars - grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader-id=arch grub-mkconfig -o /boot/grub/grub.cfg genfstab -U / > /etc/fstab diff --git a/cloud-init/arch/startup.sh b/cloud-init/arch/startup.sh old mode 100644 new mode 100755 index 959ef20..6ae7d65 --- a/cloud-init/arch/startup.sh +++ b/cloud-init/arch/startup.sh @@ -32,7 +32,6 @@ virt-install --name ${INSTANCE_ID} --memory ${MEMORY} --vcpus ${VCPUS} \ --noautoconsole \ --network bridge=br0 \ --graphics spice \ - --boot loader=/usr/share/edk2-ovmf/x64/OVMF_CODE.4m.fd,loader.readonly=yes,loader.type=pflash \ --boot uefi virsh autostart ${INSTANCE_ID} From 80e7d3945f599e29335eae1c011a8d5be2c18f1d Mon Sep 17 00:00:00 2001 From: BlueTufa Date: Thu, 22 May 2025 12:49:44 -0600 Subject: [PATCH 6/9] merge conflicts --- .gitignore | 1 + cloud-init/arch/build-raw.sh | 12 +++++------- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index 80ec509..894c008 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,4 @@ Brewfile.lock.json ipython/00-startup.py full_backup.log +arch-mini.raw diff --git a/cloud-init/arch/build-raw.sh b/cloud-init/arch/build-raw.sh index 80861fe..57c37a4 100755 --- a/cloud-init/arch/build-raw.sh +++ b/cloud-init/arch/build-raw.sh @@ -10,7 +10,7 @@ if [[ $EUID -ne 0 ]]; then exit 1 fi -for cmd in parted rsync killall readlink +for cmd in parted rsync killall readlink mkfs.fat do if ! command -v $cmd >/dev/null 2>&1; then echo "Error: Command $cmd not installed. Exiting." >&2 @@ -120,8 +120,6 @@ chroot "$MNT" /bin/bash -c " mkinitcpio -p linux mkdir -p /boot/efi mount ${LOOPDEV}p1 /boot/efi - mount -t efivarfs efivarfs /sys/firmware/efi/efivars - grub-mkconfig -o /boot/grub/grub.cfg genfstab -U / > /etc/fstab echo \"root:root\" | chpasswd @@ -175,8 +173,8 @@ chroot "$MNT" /bin/bash -c " chsh -s $(which zsh) badger " -sleep 10 -killall gpg-agent +# sleep 10 +# killall gpg-agent -umount -R "$MNT" -losetup -d "$LOOPDEV" +# umount -R "$MNT" +# losetup -d "$LOOPDEV" From 3bf2323dcb9619f03379cdbbc587626682d642fc Mon Sep 17 00:00:00 2001 From: BlueTufa Date: Thu, 22 May 2025 12:53:15 -0600 Subject: [PATCH 7/9] bugs? --- cloud-init/arch/build-raw.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/cloud-init/arch/build-raw.sh b/cloud-init/arch/build-raw.sh index 57c37a4..2e04658 100755 --- a/cloud-init/arch/build-raw.sh +++ b/cloud-init/arch/build-raw.sh @@ -50,8 +50,8 @@ mkfs.ext4 -L ARCH_ROOT "${LOOPDEV}p2" # loopback the raw partition on mount point mkdir -p "$MNT/boot/efi" -mount "${LOOPDEV}p1" "$MNT/boot/efi" mount "${LOOPDEV}p2" "$MNT" +mount "${LOOPDEV}p1" "$MNT/boot/efi" # download and verify [[ -f archlinux-bootstrap-x86_64.tar.zst ]] || wget https://geo.mirror.pkgbuild.com/iso/latest/archlinux-bootstrap-x86_64.tar.zst @@ -103,8 +103,6 @@ do echo "Mounting $i" mount --make-rslave "$MNT/$i" done -grub-install --target=x86_64-efi --efi-directory=$MNT/boot/efi --bootloader-id=arch --removable - chroot "$MNT" /bin/bash -c " swapoff -a ln -sf /usr/share/zoneinfo/America/Denver /etc/localtime @@ -120,6 +118,8 @@ chroot "$MNT" /bin/bash -c " mkinitcpio -p linux mkdir -p /boot/efi mount ${LOOPDEV}p1 /boot/efi + grub-install --target=x86_64-efi --efi-directory=$MNT/boot/efi --bootloader-id=arch --removable + grub-mkconfig -o /boot/grub/grub.cfg genfstab -U / > /etc/fstab echo \"root:root\" | chpasswd From b7e72c8ba540813a0e45f568c2ac97c745cd4667 Mon Sep 17 00:00:00 2001 From: BlueTufa Date: Mon, 9 Jun 2025 13:59:01 -0700 Subject: [PATCH 8/9] work in progress --- cloud-init/arch/build-raw.sh | 2 +- cloud-init/arch/build-raw2.sh | 82 +++++++++++++++++++++++++++++++++++ 2 files changed, 83 insertions(+), 1 deletion(-) create mode 100644 cloud-init/arch/build-raw2.sh diff --git a/cloud-init/arch/build-raw.sh b/cloud-init/arch/build-raw.sh index 2e04658..018c435 100755 --- a/cloud-init/arch/build-raw.sh +++ b/cloud-init/arch/build-raw.sh @@ -37,7 +37,7 @@ truncate -s ${SIZE_MB}M "$DISK" # BIOS-based boot parted -s "$DISK" mklabel gpt parted -s "$DISK" mkpart ESP fat32 2MiB 600MiB -parted -s "$DISK" set 1 esp on +parted -s "$DISK" set 1 boot on parted -s "$DISK" mkpart primary ext4 602MiB 100% # Setup loop device diff --git a/cloud-init/arch/build-raw2.sh b/cloud-init/arch/build-raw2.sh new file mode 100644 index 0000000..ab810ef --- /dev/null +++ b/cloud-init/arch/build-raw2.sh @@ -0,0 +1,82 @@ +#!/bin/bash +set -euo pipefail + +IMG="arch-efi-luks.img" +SIZE=3G +MNT=/mnt/arch +LOOP= + +echo "==> Creating raw image" +truncate -s $SIZE $IMG + +echo "==> Partitioning (GPT + EFI + LUKS)" +parted $IMG --script mklabel gpt +parted $IMG --script mkpart ESP fat32 1MiB 513MiB +parted $IMG --script set 1 boot on +parted $IMG --script mkpart primary ext4 513MiB 100% + +LOOP=$(losetup --find --show --partscan "$IMG") +mkfs.vfat -F32 "${LOOP}p1" + +echo "==> Encrypting root partition" +echo -n "testpass" | cryptsetup luksFormat "${LOOP}p2" - +echo -n "testpass" | cryptsetup open "${LOOP}p2" cryptroot - + +mkfs.ext4 /dev/mapper/cryptroot + +echo "==> Mounting filesystems" +mount /dev/mapper/cryptroot $MNT +mkdir -p $MNT/boot +mount "${LOOP}p1" $MNT/boot + +echo "==> Installing Arch base system" +pacstrap -K $MNT base linux linux-firmware systemd-boot vim mkinitcpio + +echo "==> Generating fstab" +genfstab -U $MNT >> $MNT/etc/fstab + +echo "==> Configuring system" +arch-chroot $MNT bash -c " + ln -sf /usr/share/zoneinfo/UTC /etc/localtime + hwclock --systohc + echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen + locale-gen + echo 'LANG=en_US.UTF-8' > /etc/locale.conf + echo 'archluks' > /etc/hostname + echo 'root:testpass' | chpasswd +" + +echo "==> Setting up crypttab" +UUID=$(blkid -s UUID -o value "${LOOP}p2") +echo "cryptroot UUID=$UUID none luks" > $MNT/etc/crypttab + +echo "==> Configuring mkinitcpio for LUKS" +sed -i 's/^HOOKS=.*/HOOKS=(base udev autodetect modconf block encrypt filesystems keyboard fsck)/' $MNT/etc/mkinitcpio.conf +arch-chroot $MNT mkinitcpio -P + +echo "==> Installing systemd-boot" +arch-chroot $MNT bootctl install + +echo "==> Creating boot entry" +cat > $MNT/boot/loader/loader.conf < $MNT/boot/loader/entries/arch.conf < Cleanup" +umount -R $MNT +cryptsetup close cryptroot +losetup -d $LOOP + +echo "✅ Done! Image ready: $IMG" + +echo "==> Test with:" +echo "qemu-system-x86_64 -drive file=$IMG,format=raw -enable-kvm -m 2048 -cpu host -bios /usr/share/ovmf/x64/OVMF_CODE.fd" From 11e2f07350a79ad60559a8ad4996f3609e333bcc Mon Sep 17 00:00:00 2001 From: BlueTufa Date: Thu, 18 Jun 2026 07:45:58 -0600 Subject: [PATCH 9/9] server side cleanups --- bin/full_backup.sh | 7 ++++--- cloud-init/arch/build-raw.sh | 4 ++-- zsh/.exports | 2 ++ 3 files changed, 8 insertions(+), 5 deletions(-) mode change 100644 => 100755 bin/full_backup.sh diff --git a/bin/full_backup.sh b/bin/full_backup.sh old mode 100644 new mode 100755 index 737e6e6..1adce83 --- a/bin/full_backup.sh +++ b/bin/full_backup.sh @@ -10,6 +10,7 @@ if [[ -z "$1" ]]; then exit 1 fi -nohup rsync -aAXHv --numeric-ids / \ - --exclude={"/var/*","/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/lost+found"} \ - "$1" 2>&1 | tee -a full_backup.log > /dev/null & +nohup rsync -aAXHv --numeric-ids \ + --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/lost+found"} \ + --exclude={"/var/cache/pacman/pkg/*","/var/tmp/*","/var/log/*"} \ + / "$1" 2>&1 | tee -a full_backup.log > /dev/null & diff --git a/cloud-init/arch/build-raw.sh b/cloud-init/arch/build-raw.sh index 018c435..654fef0 100755 --- a/cloud-init/arch/build-raw.sh +++ b/cloud-init/arch/build-raw.sh @@ -49,8 +49,8 @@ mkfs.fat -F32 -n ARCH_EFI "${LOOPDEV}p1" mkfs.ext4 -L ARCH_ROOT "${LOOPDEV}p2" # loopback the raw partition on mount point -mkdir -p "$MNT/boot/efi" mount "${LOOPDEV}p2" "$MNT" +mkdir -p "$MNT/boot/efi" mount "${LOOPDEV}p1" "$MNT/boot/efi" # download and verify @@ -118,7 +118,7 @@ chroot "$MNT" /bin/bash -c " mkinitcpio -p linux mkdir -p /boot/efi mount ${LOOPDEV}p1 /boot/efi - grub-install --target=x86_64-efi --efi-directory=$MNT/boot/efi --bootloader-id=arch --removable + grub-install --target=x86_64-efi --efi-directory=/boot/efi --boot-directory=/boot/efi --no-nvram --bootloader-id=arch --removable grub-mkconfig -o /boot/grub/grub.cfg genfstab -U / > /etc/fstab diff --git a/zsh/.exports b/zsh/.exports index 187e5f3..a097b7b 100644 --- a/zsh/.exports +++ b/zsh/.exports @@ -7,3 +7,5 @@ export NVM_DIR="$HOME/.nvm" export COMPOSE_DOCKER_CLI_BUILD=1 export DOCKER_BUILDKIT=1 export COMPOSE_BAKE=True +export OLLAMA_MODELS=/kvmpool/models +export PATH=$PATH:~/src/bin