dots/scripts/Documents/Scripts/aufii.sh

132 lines
3.7 KiB
Bash
Raw Permalink Normal View History

2024-04-29 19:05:39 +02:00
#!/bin/bash
### Automatically generate UEFI-boot entries
usage() { printf "Usage:\t aufii \naufii is a simple interactive tool to automatically generate UEFI boot entries. It generates efibootmgr commands and exports them to a small executable. You can safely run the script as it does write nothing without further confirmation. \n [-h]\t<display help>\n "; 1>&2; exit 1; }
# Compose [and execute] efibootmgr commands
while getopts :h OPT; do
case ${OPT} in
h)
usage;;
esac
done
shift $((OPTIND-1))
read -r -p "Simple interactive tool to create UEFI-boot entries. No changes will be written to disk before confirmation. Start now (y/n)? " CHOICE
case ${CHOICE} in
y)
echo ...
echo ...
read -r -p "Please specify EFI partition: " str
# Detect partitions
#EFI=$(blkid | grep EFI | awk -F ':' '{print $1}')
EFI=${str}
EFIU=$(blkid | grep "${EFI}" | awk -F '"' '{print $2}')
DISK=$(echo "${EFI}" | awk -F 'p' '{print $1}')
PART=$(echo "${EFI}" | awk -F 'p' '{print $2}')
AROT=$(lsblk| grep -w "/"|awk -F ' ' '{print $1}'|tail -c4)
ROOT=$(blkid | grep "${AROT}"| awk -F '"' '{print $2}')
SWAP=$(blkid | grep swap | awk -F '"' '{print $2}')
P_S=$(blkid | grep "${SWAP}" | awk -F ':' '{print $1}')
P_E=$(blkid | grep "${EFI}" | awk -F ':' '{print $1}')
P_R=$(blkid | grep "${ROOT}"| awk -F ':' '{print $1}')
echo ...
echo ...
read -r -p "Include microcode (amd/intel/no)? (a/i/n) " CHOICE
case ${CHOICE} in
a)
echo "Including amd-ucode"
UCODE="initrd=\amd-ucode.img"
echo ...
echo ...;;
i)
echo "Including intel-ucode"
UCODE="initrd=\intel-ucode.img"
echo ...
echo ...;;
n)
echo "Not using microcode"
echo ...
echo ...;;
esac;;
n)
echo "Aborted by user"
exit 1;;
esac
shift $((OPTIND-1))
# Choose kernel
read -r -p "Choose your kernel: linux, linux-hardened, linux-lts, linux-zen (l/h/s/z) " CHOICE
case ${CHOICE} in
l)
echo "kernel is linux"
echo ...
echo ...
KERN="";;
h)
echo "kernel is linux-hardened"
echo ...
echo ...
KERN="-hardened";;
p)
echo "kernel is linux-lts"
echo ...
echo ...
KERN="-lts";;
z)
echo "kernel is linux-zen"
echo ...
echo ...
KERN="-zen";;
esac
shift $((OPTIND-1))
# Name
read -r -p "Please label the boot entry (e.g. Arch-Linux): " str
NAME=${str}
shift $((OPTIND-1))
# Compose commands
FLBK=$(echo "efibootmgr --disk ${DISK} --part ${PART} --create --label \"${NAME}-Fallback\" --loader /vmlinuz-linux${KERN} --unicode 'root=UUID=${ROOT} resume=UUID=${SWAP} rw ${UCODE} initrd=\initramfs-linux${KERN}-fallback.img'")
LINX=$(echo "efibootmgr --disk ${DISK} --part ${PART} --create --label \"${NAME}\" --loader /vmlinuz-linux${KERN} --unicode 'root=UUID=${ROOT} resume=UUID=${SWAP} rw ${UCODE} initrd=\initramfs-linux${KERN}.img'")
# Prompt detected partitions and composed commands
printf "Partitions detected:\nEFI:\t${P_E}\t${EFIU}\nRoot:\t${P_R}\t${ROOT}\nSwap:\t${P_S}\t${SWAP}\n"
echo ...
echo ...
echo "Composed commands:"
echo ...
echo "${FLBK}"
echo ...
echo "${LINX}"
echo ...
echo "To add additional kernel parameters just choose the first option in the next step and edit the file before executing it."
echo ...
echo ...
# Write to disk and execute or abort
write_exec (){
echo "#!/bin/bash" > UEFI_gen${KERN}
echo "${FLBK}" >> UEFI_gen${KERN}
echo "${LINX}" >> UEFI_gen${KERN}
echo "exit 0" >> UEFI_gen${KERN}
echo "# See man efibootmgr" >> UEFI_gen${KERN}
chmod +x UEFI_gen${KERN}
printf "Commands written to file UEFI_gen${KERN}"
}
read -r -p "Create executable, create and execute (sets UEFI boot entries) or abort (c/ce/a)? " CHOICE
case ${CHOICE} in
c) # write to file
write_exec;;
ce) # write to file and execute it
write_exec
./UEFI_gen${KERN}
printf "Changes written, poweroff and restart, don't reboot.";;
a) # abort
printf "Aborted, no changes written to disk.\n";;
esac
shift $((OPTIND-1))
exit 0