From 0cb582356143ef69c9d04f8f24f0759c8d9c6ad9 Mon Sep 17 00:00:00 2001 From: Tobias Powalowski Date: Fri, 19 Jul 2024 10:48:32 +0200 Subject: [PATCH] add archboot-qemu helper script, fix bootloader script --- usr/bin/archboot-qemu.sh | 13 +++++++ usr/lib/archboot/bootloader.sh | 2 +- usr/lib/archboot/qemu.sh | 66 ++++++++++++++++++++++++++++++++++ 3 files changed, 80 insertions(+), 1 deletion(-) create mode 100755 usr/bin/archboot-qemu.sh create mode 100644 usr/lib/archboot/qemu.sh diff --git a/usr/bin/archboot-qemu.sh b/usr/bin/archboot-qemu.sh new file mode 100755 index 000000000..1eb619a1e --- /dev/null +++ b/usr/bin/archboot-qemu.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: GPL-3.0-or-later +# created by Tobias Powalowski +. /usr/lib/archboot/common.sh +. /usr/lib/archboot/qemu.sh +_UBOOT=$(mktemp -d uboot.XXX) +_OVMF32=$(mktemp -d ovmf32.XXX) +_OVMF=$(mktemp -d ovmf.XXX) +_root_check +_x86_64_check +_prepare_files || exit 1 +_upload_files qemu || exit 1 +_cleanup qemu || exit 1 diff --git a/usr/lib/archboot/bootloader.sh b/usr/lib/archboot/bootloader.sh index 0c7335188..5315ccb4b 100644 --- a/usr/lib/archboot/bootloader.sh +++ b/usr/lib/archboot/bootloader.sh @@ -100,7 +100,7 @@ _upload_efi_files() { fi done #shellcheck disable=SC2086 - run0 -u "${_USER}" -D "${1}" ${_RSYNC} ./* "${_SERVER}:.${_ARCH_SERVERDIR}/" || exit 1 + run0 -u "${_USER}" -D ./ ${_RSYNC} ./* "${_SERVER}:.${_ARCH_SERVERDIR}/" || exit 1 cd .. } diff --git a/usr/lib/archboot/qemu.sh b/usr/lib/archboot/qemu.sh new file mode 100644 index 000000000..bd370b4e3 --- /dev/null +++ b/usr/lib/archboot/qemu.sh @@ -0,0 +1,66 @@ +#!/usr/bin/env bash +# SPDX-License-Identifier: GPL-3.0-or-later +# created by Tobias Powalowski +. /etc/archboot/defaults +# fedora shim setup +_OVMF_VERSION="20240524" +_OVMF_RELEASE="5.fc41" +_OVMF_URL="https://kojipkgs.fedoraproject.org/packages/edk2/${_OVMF_VERSION}/${_OVMF_RELEASE}" +_OVMF_RPM="noarch/edk2-ovmf-${_OVMF_VERSION}-${_OVMF_RELEASE}.noarch.rpm" +_OVMF32_RPM="noarch/edk2-ovmf-ia32-${_OVMF_VERSION}-${_OVMF_RELEASE}.noarch.rpm" +_UBOOT_VERSION="2024.01" +_UBOOT_RELEASE="dfsg-5_all" +_UBOOT_URL="http://ftp.us.debian.org/debian/pool/main/u/u-boot" +_UBOOT_DEB="u-boot-qemu_${_UBOOT_VERSION}+${_UBOOT_RELEASE}.deb" +_ARCH_SERVERDIR="/${_PUB}/src/qemu" + +_prepare_files () { + # download packages from fedora server + echo "Downloading Fedora OVMF and Debian UBOOT..." + ${_DLPROG} --create-dirs -L -O --output-dir "${_OVMF}" ${_OVMF_URL}/${_OVMF_RPM} || exit 1 + ${_DLPROG} --create-dirs -L -O --output-dir "${_OVMF32}" ${_OVMF_URL}/${_OVMF32_RPM} || exit 1 + ${_DLPROG} --create-dirs -L -O --output-dir "${_UBOOT}" ${_UBOOT_URL}/${_UBOOT_DEB} || exit 1 + # unpack rpm + echo "Unpacking rpms/deb..." + bsdtar -C "${_OVMF}" -xf "${_OVMF}"/*.rpm + bsdtar -C "${_OVMF32}" -xf "${_OVMF32}"/*.rpm + bsdtar -C "${_UBOOT}" -xf "${_UBOOT}"/*.deb + bsdtar -C "${_UBOOT}" -xf "${_UBOOT}"/data.tar.xz + echo "Copying qemu files..." + mkdir -m 777 qemu + cp "${_OVMF}"/usr/share/edk2/ovmf/OVMF_CODE.secboot.fd qemu/OVMF_CODE.secboot_x64.fd + cp "${_OVMF}"/usr/share/edk2/ovmf/OVMF_VARS.secboot.fd qemu/OVMF_VARS.secboot_x64.fd + cp "${_OVMF32}"/usr/share/edk2/ovmf-ia32/OVMF_CODE.secboot.fd qemu/OVMF_CODE.secboot_ia32.fd + cp "${_OVMF32}"/usr/share/edk2/ovmf-ia32/OVMF_VARS.secboot.fd qemu/OVMF_VARS.secboot_ia32.fd + cp "${_UBOOT}"/usr/lib/u-boot/qemu-riscv64_smode/uboot.elf qemu/uboot.elf + # cleanup + echo "Cleanup directories ${_OVMF} ${_OVMF32} ${_UBOOT}..." + rm -r "${_OVMF}" "${_OVMF32}" "${_UBOOT}" +} + +_upload_files() { + # sign files + echo "Sign files and upload..." + #shellcheck disable=SC2086 + cd ${1}/ || exit 1 + chmod 644 ./* + chown "${_USER}:${_GROUP}" ./* + for i in *; do + #shellcheck disable=SC2086 + if [[ -f "${i}" ]]; then + #shellcheck disable=SC2046,SC2086,SC2116 + gpg --chuid "${_USER}" $(echo ${_GPG}) "${i}" || exit 1 + fi + done + chown "${_USER}:${_GROUP}" ./* + #shellcheck disable=SC2086 + run0 -u "${_USER}" -D ./ ${_RSYNC} ./* "${_SERVER}:.${_ARCH_SERVERDIR}/" || exit 1 + cd .. +} + +_cleanup() { +echo "Removing ${1} directory." +rm -r "${1}" +echo "Finished ${1}." +} +# vim: set ft=sh ts=4 sw=4 et: