#!/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} o # create new DOS partition table n # new p # primary partition 1 # part number # default start # default to full disk p # print, for debugging w # write the partition table and exit EOF #t # set partition type #1 # on partition 1 #4 # BIOS boot # Format and mount partitions mkfs.ext4 -L root "${disk}1" mount "${disk}1" /mnt # Bootstrap system nixos-generate-config --root /mnt curl -o /mnt/etc/nixos/configuration.nix "http://${host}:${port}/configuration.nix" sed -i -E -e "s,@BOOT_DEVICE@,${disk}," /mnt/etc/nixos/configuration.nix sed -i -E -e 's,(.*device = "/dev/disk/).*(".*),\1by-label/root\2,' /mnt/etc/nixos/hardware-configuration.nix nixos-install --no-root-password # 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 reboot