#!/usr/bin/env bash #vim: set ft=bash: set -ex port="${1}" # HTTP port that packer is running on host="${2}" if [ -e /dev/vda ]; then disk="/dev/vda" elif [ -e /dev/sda ]; then disk="/dev/sda" else exit 1 # Need to teach the script which device to use in this case fi # The sed bit is just to strip out the extra fluff, like comments sed -e 's/\s*\([\+0-9a-zA-Z]*\).*/\1/' << EOF | fdisk ${disk} g # create new GPT partition table n # new # default partition number # default start +512M # size t # set type 1 # EFI system partition n # second partition # default partition number # start at first free sector # default to full disk p # print, for debugging w # write the partition table and exit EOF sleep 10 # Let me at least read it! #t # set partition type #1 # on partition 1 #4 # BIOS boot # Format and mount partitions mkfs.vfat "${disk}1" mkfs.ext4 "${disk}2" mount "${disk}2" /mnt mkdir -p /mnt/boot mount "${disk}1" /mnt/boot # Bootstrap system virt="$(systemd-detect-virt)" nixos-generate-config --root /mnt curl -o /mnt/etc/nixos/configuration.nix "http://${host}:${port}/configuration.nix" curl -o /mnt/etc/nixos/flake.nix "http://${host}:${port}/flake.nix" curl -o /mnt/etc/nixos/guest-agent.nix "http://${host}:${port}/ga-${virt}.nix" sed -i -E -e "s,@BOOT_DEVICE@,${disk}," /mnt/etc/nixos/configuration.nix nixos-install --no-root-password --flake "/mnt/etc/nixos/#vagrant" # Run stuff in the chroot curl -o /mnt/root/in-chroot.sh "http://${host}:${port}/in-chroot.sh" nixos-enter --root /mnt -c 'bash /root/in-chroot.sh' rm /mnt/root/in-chroot.sh umount /mnt/boot umount /mnt efibootmgr --bootnext "$(efibootmgr | grep Linux | awk '{print $1}' | sed -E 's/[^0-9]//g')" reboot