From 646206816cbdd0b401c847fe0e21549d00fd7a87 Mon Sep 17 00:00:00 2001 From: Nathan Reiner Date: Sat, 25 Mar 2023 14:51:02 +0100 Subject: add grub config generation --- nais | 40 ++++++++++++++++++++++++++++++++++------ 1 file changed, 34 insertions(+), 6 deletions(-) diff --git a/nais b/nais index 5c86bc5..47f933e 100755 --- a/nais +++ b/nais @@ -10,7 +10,9 @@ export BOOT_MODE=bios set_system_disk() { disk=$(lsblk --raw -o TYPE,NAME,SIZE,MODEL | grep disk | sed 's/disk//g' | column -s ' ' -t | sed 's/\\x20/ /g' | bemenu -p "Select Disk" | awk '{ print $1 }') + uuid=$(lsblk --raw -o NAME,UUID | grep "$disk" | awk '{ print $2 }') export DISK="$disk" + export ROOTUUID="$uuid" } set_username_and_password() { @@ -25,6 +27,7 @@ set_root_keyfile() { [ -z "$usb" ] && return + keyuuid=$(lsblk --raw -o NAME,UUID | grep "$usb" | awk '{ print $2 }') mount --mkdir "/dev/$usb" /key [ ! -d "/key/.keys/" ] && mkdir /key/.keys @@ -35,6 +38,7 @@ set_root_keyfile() { [ ! -e "$keyfile" ] && dd if=/dev/random of="/key/.key/$keyfile" bs=1024 count=4 export KEYFILE="$keyfile" + export KEYUUID="$keyuuid" } set_timezone() { @@ -55,14 +59,25 @@ set_hostname() { install_arch() { if [ "$BOOT_MODE" = "bios" ]; then sfdisk -X dos "/dev/$DISK" - boot="/dev/${DISK}1" - root="/dev/${DISK}2" + if echo "$DISK" | grep -E "[0-9]$"; then + boot="/dev/${DISK}p1" + root="/dev/${DISK}p2" + else + boot="/dev/${DISK}1" + root="/dev/${DISK}2" + fi printf ",4G,L\n,,L\nwrite\n" | sfdisk "/dev/$DISK" else sfdisk -X gpt "$DISK" - efi="/dev/${DISK}1" - boot="/dev/${DISK}2" - root="/dev/${DISK}3" + if echo "$DISK" | grep -E "[0-9]$"; then + efi="/dev/${DISK}p1" + boot="/dev/${DISK}p2" + root="/dev/${DISK}p3" + else + efi="/dev/${DISK}1" + boot="/dev/${DISK}2" + root="/dev/${DISK}3" + fi printf ",1G,U\n,4G,L\n,,L\nwrite\n" | sfdisk "/dev/$DISK" mkfs.fat -F 32 "$efi" fi @@ -78,7 +93,9 @@ install_arch() { mkfs.vfat /dev/mapper/boot || exit mount --mkdir "$boot" /mnt/boot || exit - pacstrap -K /mnt base linux linux-firmware neovim neomutt wayland wayland-protocols wlroots xorg-xwayland git base-devel networkmanager btrfs-progs sudo + [ "$BOOT_MODE" = "uefi" ] && mount --mkdir "$efi" /mnt/boot/EFI + + pacstrap -K /mnt base linux linux-firmware neovim neomutt wayland wayland-protocols wlroots xorg-xwayland git base-devel networkmanager btrfs-progs sudo grub dd if=/dev/random of=/mnt/etc/.bootkey bs=1024 count=4 echo "$PASSWORD" | cryptsetup luksAddKey --key-file - /dev/mapper/boot /mnt/etc/.bootkey || exit @@ -103,6 +120,17 @@ install_arch() { sed -i 's/# \(%wheel ALL=(ALL:ALL) NOPASSWD: ALL\)/\1/g' /mnt/etc/sudoers arch-chroot /mnt useradd -G wheel "$USERNAME" -p "$PASSWORD" || exit + echo "GRUB_ENABLE_CRYPTODISK=y" >> /mnt/etc/default/grub + sed -i "s/\(GRUB_CMDLINE_LINUX=\".*\)\"/\1 cryptdevice=UUID=$ROOTUUID:root cryptkey=UUID=$KEYUUID:btrfs:/.keys/$KEYFILE\"/g" + + if [ "$BOOT_MODE" = "bios" ]; then + arch-chroot /mnt grub-install --target=i386-pc --recheck "/dev/$DISK" + else + arch-chroot /mnt grub-install --target=x86_64-efi --efi-direcotry=/boot/EFI --bootloader-id=GRUB --recheck + fi + + grub-mkconfig -o /boot/grub/grub.cfg + echo Finished. exit } -- cgit v1.2.3-70-g09d2