#!/bin/bash set -e function add_admin_user { username="$1" id -u $username || useradd -m -G wheel $username id $username } function install_paru_as { username="$1" if ! command -v paru 2>&1 >/dev/null; then sudo -u $username bash -c "cd ~; [ -d paru-bin ] || (git clone https://aur.archlinux.org/paru-bin.git && cd paru-bin && makepkg -si --noconfirm && paru -Sy)" sudo -u $username bash -c "rm -rf ~/paru-bin ~/.cache" fi } function install_archzfs_pacman_repository { if grep -q "[archzfs]" /etc/pacman.conf; then echo "need to install archzfs pacman" fi } function install_zfs_packages_as { username="$1" if ! pacman -Q zfs-dkms; then sudo -u $username -i bash -c "paru -Sy zfs-dkms --noconfirm" fi } function configure_hostid { [ -f /etc/hostid ] || zgenhostid -f -o /etc/hostid hostid } function install_zfsbootmenu { command -v wget || pacman -S --noconfirm wget if [ ! -f /boot/efi/EFI/zbm/zfsbootmenu.EFI ]; then mkdir -p /boot/efi/EFI/zbm/ wget https://get.zfsbootmenu.org/latest.EFI -O /boot/efi/EFI/zbm/zfsbootmenu.EFI efibootmgr --disk {{ base_root_disks | first }} --part 1 --create \ --label "ZFSBootMenu" \ --loader '\EFI\zbm\zfsbootmenu.EFI' \ --unicode "spl_hostid=$(hostid) zbm.timeout=3 zbm.prefer=zroot zbm.import_policy=hostid" \ --verbose else echo "skipping zfsbootmenu installation" fi zfs set org.zfsbootmenu:commandline="noresume init_on_alloc=0 rw spl.spl_hostid=$(hostid)" zroot/ROOT } function configure_zfs_initrd { # Add 'zfs' to HOOKS=() before 'filesystem' sed -i '/^HOOKS=(/!b;/zfs/!s/filesystem/zfs filesystem/' /etc/mkinitcpio.conf # Add 'zfs' to MODULES=() sed -i '/^MODULES=/!b;/zfs/!s/)/zfs)/' /etc/mkinitcpio.conf initrd=/boot/initramfs-linux-lts.img [[ ! -e "$initrd" || "$initrd" -ot /etc/mkinitcpio.conf ]] && mkinitcpio -P } function configure_dhcp_ethernet { cat <<- EOF > /etc/systemd/network/20-wired-dhcp.network [Match] Name=en* [Link] RequiredForOnline=routable [Network] DHCP=yes EOF systemctl enable systemd-networkd.service } function enable_systemd_services { systemctl enable sshd.service } # do the stuff add_admin_user mark install_paru_as mark install_zfs_packages_as mark configure_hostid install_zfsbootmenu configure_zfs_initrd configure_dhcp_ethernet enable_systemd_services