48 lines
1.3 KiB
Bash
48 lines
1.3 KiB
Bash
#!/usr/bin/env bash
|
|
#vim: set ft=bash:
|
|
set -ex
|
|
|
|
port="${1}" # HTTP port that packer is running on
|
|
|
|
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://10.0.2.2:"${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://10.0.2.2:"${port}"/in-chroot.sh
|
|
nixos-enter --root /mnt -c 'bash /root/in-chroot.sh'
|
|
rm /mnt/root/in-chroot.sh
|
|
|
|
reboot
|