archboot/usr/lib/archboot/bootloader.sh
2022-12-14 07:06:55 +01:00

95 lines
6.2 KiB
Bash

#!/usr/bin/env bash
# created by Tobias Powalowski <tpowa@archlinux.org>
. /etc/archboot/defaults
# fedora shim setup
_SHIM_VERSION="15.4"
_SHIM_RELEASE="5"
_SHIM_URL="https://kojipkgs.fedoraproject.org/packages/shim/${_SHIM_VERSION}/${_SHIM_RELEASE}"
_SHIM_RPM="x86_64/shim-x64-${_SHIM_VERSION}-${_SHIM_RELEASE}.x86_64.rpm"
_SHIM32_RPM="x86_64/shim-ia32-${_SHIM_VERSION}-${_SHIM_RELEASE}.x86_64.rpm"
_SHIM_AA64_RPM="aarch64/shim-aa64-${_SHIM_VERSION}-${_SHIM_RELEASE}.aarch64.rpm"
_ARCH_SERVERDIR="/home/tpowa/public_html/archboot/src/bootloader"
_GRUB_ISO="/usr/share/archboot/grub/archboot-iso-grub.cfg"
_prepare_shim_files () {
# download packages from fedora server
echo "Downloading fedora shim..."
curl -s --create-dirs -L -O --output-dir "${_SHIM}" ${_SHIM_URL}/${_SHIM_RPM} || exit 1
curl -s --create-dirs -L -O --output-dir "${_SHIM32}" ${_SHIM_URL}/${_SHIM32_RPM} || exit 1
curl -s --create-dirs -L -O --output-dir "${_SHIMAA64}" ${_SHIM_URL}/${_SHIM_AA64_RPM} || exit 1
# unpack rpm
echo "Unpacking rpms ..."
bsdtar -C "${_SHIM}" -xf "${_SHIM}"/*.rpm
bsdtar -C "${_SHIM32}" -xf "${_SHIM32}"/*.rpm
bsdtar -C "${_SHIMAA64}" -xf "${_SHIMAA64}"/*.rpm
echo "Copy shim files ..."
mkdir -m 777 shim-fedora
cp "${_SHIM}"/boot/efi/EFI/fedora/{mmx64.efi,shimx64.efi} shim-fedora/
cp "${_SHIM}/boot/efi/EFI/fedora/shimx64.efi" shim-fedora/BOOTX64.efi
cp "${_SHIM32}"/boot/efi/EFI/fedora/{mmia32.efi,shimia32.efi} shim-fedora/
cp "${_SHIM32}/boot/efi/EFI/fedora/shimia32.efi" shim-fedora/BOOTIA32.efi
cp "${_SHIMAA64}"/boot/efi/EFI/fedora/{mmaa64.efi,shimaa64.efi} shim-fedora/
cp "${_SHIMAA64}/boot/efi/EFI/fedora/shimaa64.efi" shim-fedora/BOOTAA64.efi
# cleanup
echo "Cleanup directories ${_SHIM} ${_SHIM32} ${_SHIMAA64} ..."
rm -r "${_SHIM}" "${_SHIM32}" "${_SHIMAA64}"
}
# build grubXXX with all modules: http://bugs.archlinux.org/task/71382
_prepare_uefi_X64() {
echo "Prepare X64 Grub ..."
### Hint: https://src.fedoraproject.org/rpms/grub2/blob/rawhide/f/grub.macros#_407
grub-mkstandalone -d /usr/lib/grub/x86_64-efi -O x86_64-efi --sbat=/usr/share/grub/sbat.csv --modules="all_video boot btrfs cat configfile cryptodisk echo efi_gop efi_uga efifwsetup efinet ext2 f2fs fat font gcry_rijndael gcry_rsa gcry_serpent gcry_sha256 gcry_twofish gcry_whirlpool gfxmenu gfxterm gzio halt hfsplus http iso9660 loadenv loopback linux lvm lsefi lsefimmap luks luks2 mdraid09 mdraid1x minicmd net normal part_apple part_msdos part_gpt password_pbkdf2 pgp png reboot regexp search search_fs_uuid search_fs_file search_label serial sleep syslinuxcfg test tftp video xfs zstd backtrace chain tpm usb usbserial_common usbserial_pl2303 usbserial_ftdi usbserial_usbdebug keylayouts at_keyboard" --fonts="unicode" --locales="" --themes="" -o grub-efi/grubx64.efi "boot/grub/grub.cfg=${_GRUB_ISO}"
}
_prepare_uefi_IA32() {
echo "Prepare IA32 Grub ..."
### Hint: https://src.fedoraproject.org/rpms/grub2/blob/rawhide/f/grub.macros#_407
grub-mkstandalone -d /usr/lib/grub/i386-efi -O i386-efi --sbat=/usr/share/grub/sbat.csv --modules="all_video boot btrfs cat configfile cryptodisk echo efi_gop efi_uga efifwsetup efinet ext2 f2fs fat font gcry_rijndael gcry_rsa gcry_serpent gcry_sha256 gcry_twofish gcry_whirlpool gfxmenu gfxterm gzio halt hfsplus http iso9660 loadenv loopback linux lvm lsefi lsefimmap luks luks2 mdraid09 mdraid1x minicmd net normal part_apple part_msdos part_gpt password_pbkdf2 pgp png reboot regexp search search_fs_uuid search_fs_file search_label serial sleep syslinuxcfg test tftp video xfs zstd backtrace chain tpm usb usbserial_common usbserial_pl2303 usbserial_ftdi usbserial_usbdebug keylayouts at_keyboard" --fonts="unicode" --locales="" --themes="" -o grub-efi/grubia32.efi "boot/grub/grub.cfg=${_GRUB_ISO}"
}
# build grubXXX with all modules: http://bugs.archlinux.org/task/71382
_prepare_uefi_AA64() {
echo "Installing grub package ..."
${_NSPAWN} "${1}" pacman -Sy grub --noconfirm
cp ${_GRUB_ISO} "${1}"/archboot-iso-grub.cfg
echo "Prepare AA64 Grub ..."
### Hint: https://src.fedoraproject.org/rpms/grub2/blob/rawhide/f/grub.macros#_407
${_NSPAWN} "${1}" grub-mkstandalone -d /usr/lib/grub/arm64-efi -O arm64-efi --sbat=/usr/share/grub/sbat.csv --modules="all_video boot btrfs cat configfile cryptodisk echo efi_gop efifwsetup efinet ext2 f2fs fat font gcry_rijndael gcry_rsa gcry_serpent gcry_sha256 gcry_twofish gcry_whirlpool gfxmenu gfxterm gzio halt hfsplus http iso9660 loadenv loopback linux lvm lsefi lsefimmap luks luks2 mdraid09 mdraid1x minicmd net normal part_apple part_msdos part_gpt password_pbkdf2 pgp png reboot regexp search search_fs_uuid search_fs_file search_label serial sleep syslinuxcfg test tftp video xfs zstd chain tpm" --fonts="unicode" --locales="" --themes="" -o /grubaa64.efi "boot/grub/grub.cfg=/archboot-iso-grub.cfg"
mv "${1}"/grubaa64.efi grub-efi/
}
# build grubXXX with all modules: http://bugs.archlinux.org/task/71382
_prepare_uefi_RISCV64() {
echo "Installing grub package ..."
${_NSPAWN} "${1}" pacman -Sy grub --noconfirm
cp ${_GRUB_ISO} "${1}"/archboot-iso-grub.cfg
echo "Prepare RISCV64 Grub ..."
# https://fedoraproject.org/wiki/Architectures/RISC-V/GRUB2
${_NSPAWN} "${1}" grub-mkstandalone -d /usr/lib/grub/riscv64-efi -O riscv64-efi --sbat=/usr/share/grub/sbat.csv --compress=xz --modules="boot cat configfile echo f2fs fat font iso9660 linux loadenv loopback minicmd normal part_apple part_gpt part_msdos regexp search search_fs_file search_fs_uuid search_label serial sleep" --fonts="unicode" --locales="" --themes="" -o /BOOTRISCV64.efi "boot/grub/grub.cfg=/archboot-iso-grub.cfg"
mv "${1}"/BOOTRISCV64.efi grub-efi/
cp grub-efi/BOOTRISCV64.efi grub-efi/grubriscv64.efi
}
_upload_efi_files() {
# sign files
echo "Sign files and upload ..."
#shellcheck disable=SC2086
cd ${1}/ || exit 1
chmod 644 ./*
chown "${_USER}:${_GROUP}" ./*
for i in *.efi; do
#shellcheck disable=SC2086
if [[ -f "${i}" ]]; then
sudo -u "${_USER}" gpg ${_GPG} "${i}" || exit 1
fi
done
sudo -u "${_USER}" scp ./* "${_SERVER}:${_ARCH_SERVERDIR}" || exit 1
cd ..
}
_cleanup() {
echo "Remove ${1} directory."
rm -r "${1}"
echo "Finished ${1}."
}