From 89ba6218540cbf58d56796f6bb70f6a9a3a20ac7 Mon Sep 17 00:00:00 2001 From: Chris Hofstaedtler Date: Sat, 23 Nov 2024 21:16:34 +0100 Subject: [PATCH] Skip iso/pxe/syslinux on arm64 iso/pxe/syslinux are x86-specific. The presence of the files and boot code is entirely useless on arm64. While at it, update netboot code for arm64-specific shim and grub filenames. --- etc/grml/fai/config/package_config/GRMLBASE | 6 +- grml-live | 306 +++++++++++--------- 2 files changed, 180 insertions(+), 132 deletions(-) diff --git a/etc/grml/fai/config/package_config/GRMLBASE b/etc/grml/fai/config/package_config/GRMLBASE index 48c68afb..3da7048e 100644 --- a/etc/grml/fai/config/package_config/GRMLBASE +++ b/etc/grml/fai/config/package_config/GRMLBASE @@ -29,7 +29,6 @@ grml-udev-config hdparm hwinfo initramfs-tools -isolinux kbd less live-boot-grml live-boot-grml-doc @@ -40,7 +39,6 @@ openssh-client openssh-server pciutils physlock -pxelinux resolvconf rsync rsyslog @@ -81,14 +79,18 @@ PACKAGES install I386 grub-pc grub-efi-amd64-bin grub-efi-ia32-bin +isolinux syslinux syslinux-common syslinux-utils +pxelinux grml2usb PACKAGES install AMD64 grub-pc grub-efi-amd64-bin grub-efi-ia32-bin +isolinux syslinux syslinux-common syslinux-utils +pxelinux grml2usb PACKAGES install ARM64 diff --git a/grml-live b/grml-live index 79a7b041..efbabe4e 100755 --- a/grml-live +++ b/grml-live @@ -30,7 +30,6 @@ GRML_LIVE_VERSION='***UNRELEASED***' # global variables PN="$(basename $0)" CMDLINE="$0 $@" -ADDONS_LIST_FILE='/boot/isolinux/addons_list.cfg' # }}} # usage information {{{ @@ -327,6 +326,24 @@ copy_addon_file() { return 1 } +# Usage: copy_optional_file_logged /path/to/destination/filename /sources /src1 ... +copy_optional_file_logged() { + local dest="$1" + shift + local source_root="$1" + shift + local source + + for source in "$@" ; do + if [ -r "${source_root}${source}" ] ; then + log "Installing ${source} as ${dest}" + cp "${source_root}${source}" "${dest}" + return 0 + fi + done + return 1 +} + # replace placeholders in template files with actual information adjust_boot_files() { if [ -z "$1" ] ; then @@ -1084,8 +1101,7 @@ if [ -n "$BOOTSTRAP_ONLY" ] ; then log "Skipping stage 'boot' as building with bootstrap only." ewarn "Skipping stage 'boot' as building with bootstrap only." ; eend 0 else - # booting stuff: - mkdir -p "$BUILD_OUTPUT"/boot/isolinux + # Install boot code mkdir -p "$BUILD_OUTPUT"/boot/"${SHORT_NAME}" # this is a variable we're using for adjusting boot templates, not only in @@ -1183,17 +1199,20 @@ else bailout 8 fi - # copy _required_ isolinux files - if [ -d "${CHROOT_OUTPUT}/usr/lib/ISOLINUX" ] ; then - copy_addon_file isolinux.bin /usr/lib/ISOLINUX isolinux - for file in ${CHROOT_OUTPUT}/usr/lib/syslinux/modules/bios/*.c32 ; do - copy_addon_file "$(basename "$file")" /usr/lib/syslinux/modules/bios/ isolinux - done - fi + if [ "$ARCH" != "arm64" ] ; then + # copy _required_ isolinux files + if [ -d "${CHROOT_OUTPUT}/usr/lib/ISOLINUX" ] ; then + copy_addon_file isolinux.bin /usr/lib/ISOLINUX isolinux + for file in ${CHROOT_OUTPUT}/usr/lib/syslinux/modules/bios/*.c32 ; do + copy_addon_file "$(basename "$file")" /usr/lib/syslinux/modules/bios/ isolinux + done + fi - # *always* copy files to output directory so the variables - # get adjusted according to the build. - cp ${TEMPLATE_DIRECTORY}/boot/isolinux/* "$BUILD_OUTPUT"/boot/isolinux/ + # *always* copy files to output directory so the variables + # get adjusted according to the build. + mkdir -p "$BUILD_OUTPUT"/boot/isolinux + cp ${TEMPLATE_DIRECTORY}/boot/isolinux/* "$BUILD_OUTPUT"/boot/isolinux/ + fi mkdir -p "${BUILD_OUTPUT}/boot/grub" cp -a ${TEMPLATE_DIRECTORY}/boot/grub/* "$BUILD_OUTPUT"/boot/grub/ @@ -1244,18 +1263,20 @@ else "${BUILD_OUTPUT}/boot/addons/memtest" fi - # since syslinux(-common) v3:6.03~pre1+dfsg-4 the files are in a - # different directory :( - if [ -d "${CHROOT_OUTPUT}/usr/lib/syslinux/modules/bios/" ] ; then - syslinux_modules_dir=/usr/lib/syslinux/modules/bios/ - else - syslinux_modules_dir=/usr/lib/syslinux - fi - for file in chain.c32 hdt.c32 mboot.c32 menu.c32; do - copy_addon_file "${file}" "${syslinux_modules_dir}" addons - done + if [ "$ARCH" != "arm64" ] ; then + # since syslinux(-common) v3:6.03~pre1+dfsg-4 the files are in a + # different directory :( + if [ -d "${CHROOT_OUTPUT}/usr/lib/syslinux/modules/bios/" ] ; then + syslinux_modules_dir=/usr/lib/syslinux/modules/bios/ + else + syslinux_modules_dir=/usr/lib/syslinux + fi + for file in chain.c32 hdt.c32 mboot.c32 menu.c32; do + copy_addon_file "${file}" "${syslinux_modules_dir}" addons + done - copy_addon_file memdisk /usr/lib/syslinux addons + copy_addon_file memdisk /usr/lib/syslinux addons + fi # copy only files so we can handle bsd4grml on its own for file in ${TEMPLATE_DIRECTORY}/boot/addons/* ; do @@ -1358,69 +1379,72 @@ else done done - # generate addon list - rm -f "${BUILD_OUTPUT}/${ADDONS_LIST_FILE}" - for name in "${BUILD_OUTPUT}"/boot/isolinux/addon_*.cfg ; do - include_name=$(basename "$name") - echo "include $include_name" >> "${BUILD_OUTPUT}/${ADDONS_LIST_FILE}" - done + if [ "${ARCH}" = "amd64" -o "${ARCH}" = "i386" ] ; then + # generate addon list + ADDONS_LIST_FILE='/boot/isolinux/addons_list.cfg' + rm -f "${BUILD_OUTPUT}/${ADDONS_LIST_FILE}" + for name in "${BUILD_OUTPUT}"/boot/isolinux/addon_*.cfg ; do + include_name=$(basename "$name") + echo "include $include_name" >> "${BUILD_OUTPUT}/${ADDONS_LIST_FILE}" + done - if ! [ -r "${BUILD_OUTPUT}/boot/isolinux/${DISTRI_NAME}.cfg" ] || [ "$DISTRI_NAME" = "grml" ] ; then - log "including grmlmain.cfg in ${BUILD_OUTPUT}/boot/isolinux/distri.cfg" - echo "include grmlmain.cfg" > "${BUILD_OUTPUT}/boot/isolinux/distri.cfg" - echo "include default.cfg" > "${BUILD_OUTPUT}/boot/isolinux/grmlmain.cfg" - echo "include menuoptions.cfg" >> "${BUILD_OUTPUT}/boot/isolinux/grmlmain.cfg" - echo "include grml.cfg" >> "${BUILD_OUTPUT}/boot/isolinux/grmlmain.cfg" + if ! [ -r "${BUILD_OUTPUT}/boot/isolinux/${DISTRI_NAME}.cfg" ] || [ "$DISTRI_NAME" = "grml" ] ; then + log "including grmlmain.cfg in ${BUILD_OUTPUT}/boot/isolinux/distri.cfg" + echo "include grmlmain.cfg" > "${BUILD_OUTPUT}/boot/isolinux/distri.cfg" + echo "include default.cfg" > "${BUILD_OUTPUT}/boot/isolinux/grmlmain.cfg" + echo "include menuoptions.cfg" >> "${BUILD_OUTPUT}/boot/isolinux/grmlmain.cfg" + echo "include grml.cfg" >> "${BUILD_OUTPUT}/boot/isolinux/grmlmain.cfg" - for f in "${BUILD_OUTPUT}"/boot/isolinux/submenu*.cfg ; do - echo "include $(basename $f)" >> "${BUILD_OUTPUT}/boot/isolinux/grmlmain.cfg" - done + for f in "${BUILD_OUTPUT}"/boot/isolinux/submenu*.cfg ; do + echo "include $(basename $f)" >> "${BUILD_OUTPUT}/boot/isolinux/grmlmain.cfg" + done - echo "include options.cfg" >> "${BUILD_OUTPUT}/boot/isolinux/grmlmain.cfg" - if [ -z "$NO_ADDONS" ] ; then - echo "include addons.cfg" >> "${BUILD_OUTPUT}/boot/isolinux/grmlmain.cfg" - fi - echo "include isoprompt.cfg" >> "${BUILD_OUTPUT}/boot/isolinux/grmlmain.cfg" - echo "include hd.cfg" >> "${BUILD_OUTPUT}/boot/isolinux/grmlmain.cfg" - echo "include hidden.cfg" >> "${BUILD_OUTPUT}/boot/isolinux/grmlmain.cfg" - else # assume we are building a custom distribution: - log "File ${BUILD_OUTPUT}/boot/isolinux/${DISTRI_NAME}.cfg found, using it." - einfo "File ${BUILD_OUTPUT}/boot/isolinux/${DISTRI_NAME}.cfg found, using it." - if grep -q "^include ${DISTRI_NAME}.cfg" "${BUILD_OUTPUT}/boot/isolinux/distri.cfg" ; then - log "include for ${DISTRI_NAME}.cfg already present, nothing to do." - eindent - einfo "include for ${DISTRI_NAME}.cfg already present, nothing to do." - eoutdent - eend $? - else - log "including ${DISTRI_NAME}.cfg in ${BUILD_OUTPUT}/boot/isolinux/distri.cfg" - echo "include ${DISTRI_NAME}.cfg" > "${BUILD_OUTPUT}/boot/isolinux/distri.cfg" + echo "include options.cfg" >> "${BUILD_OUTPUT}/boot/isolinux/grmlmain.cfg" if [ -z "$NO_ADDONS" ] ; then - echo "include addons.cfg" >> "${BUILD_OUTPUT}/boot/isolinux/distri.cfg" + echo "include addons.cfg" >> "${BUILD_OUTPUT}/boot/isolinux/grmlmain.cfg" + fi + echo "include isoprompt.cfg" >> "${BUILD_OUTPUT}/boot/isolinux/grmlmain.cfg" + echo "include hd.cfg" >> "${BUILD_OUTPUT}/boot/isolinux/grmlmain.cfg" + echo "include hidden.cfg" >> "${BUILD_OUTPUT}/boot/isolinux/grmlmain.cfg" + else # assume we are building a custom distribution: + log "File ${BUILD_OUTPUT}/boot/isolinux/${DISTRI_NAME}.cfg found, using it." + einfo "File ${BUILD_OUTPUT}/boot/isolinux/${DISTRI_NAME}.cfg found, using it." + if grep -q "^include ${DISTRI_NAME}.cfg" "${BUILD_OUTPUT}/boot/isolinux/distri.cfg" ; then + log "include for ${DISTRI_NAME}.cfg already present, nothing to do." + eindent + einfo "include for ${DISTRI_NAME}.cfg already present, nothing to do." + eoutdent + eend $? + else + log "including ${DISTRI_NAME}.cfg in ${BUILD_OUTPUT}/boot/isolinux/distri.cfg" + echo "include ${DISTRI_NAME}.cfg" > "${BUILD_OUTPUT}/boot/isolinux/distri.cfg" + if [ -z "$NO_ADDONS" ] ; then + echo "include addons.cfg" >> "${BUILD_OUTPUT}/boot/isolinux/distri.cfg" + fi fi fi - fi - # use old style console based isolinux method only if requested: - if [[ "${ISOLINUX_METHOD}" == "console" ]] ; then - log 'Using console based isolinux method as requested via $ISOLINUX_METHOD.' - einfo 'Using console based isolinux method as requested via $ISOLINUX_METHOD.' - if grep -q '^include console.cfg' "${BUILD_OUTPUT}/boot/isolinux/distri.cfg" ; then - einfo "include for console.cfg already found, nothing to do." - eend 0 - else - log "including console.cfg in ${BUILD_OUTPUT}/boot/isolinux/isolinux.cfg" - einfo "including console.cfg in ${BUILD_OUTPUT}/boot/isolinux/isolinux.cfg" - echo "include console.cfg" >> "${BUILD_OUTPUT}/boot/isolinux/isolinux.cfg" - eend $? - fi - else - log 'Using graphical boot menu.' - if grep -q '^include vesamenu.cfg' "${BUILD_OUTPUT}/boot/isolinux/isolinux.cfg" ; then - log "include for vesamenu.cfg already found, nothing to do." + # use old style console based isolinux method only if requested: + if [[ "${ISOLINUX_METHOD}" == "console" ]] ; then + log 'Using console based isolinux method as requested via $ISOLINUX_METHOD.' + einfo 'Using console based isolinux method as requested via $ISOLINUX_METHOD.' + if grep -q '^include console.cfg' "${BUILD_OUTPUT}/boot/isolinux/distri.cfg" ; then + einfo "include for console.cfg already found, nothing to do." + eend 0 + else + log "including console.cfg in ${BUILD_OUTPUT}/boot/isolinux/isolinux.cfg" + einfo "including console.cfg in ${BUILD_OUTPUT}/boot/isolinux/isolinux.cfg" + echo "include console.cfg" >> "${BUILD_OUTPUT}/boot/isolinux/isolinux.cfg" + eend $? + fi else - log "including vesamenu.cfg in ${BUILD_OUTPUT}/boot/isolinux/isolinux.cfg" - echo "include vesamenu.cfg" >> "${BUILD_OUTPUT}/boot/isolinux/isolinux.cfg" + log 'Using graphical boot menu.' + if grep -q '^include vesamenu.cfg' "${BUILD_OUTPUT}/boot/isolinux/isolinux.cfg" ; then + log "include for vesamenu.cfg already found, nothing to do." + else + log "including vesamenu.cfg in ${BUILD_OUTPUT}/boot/isolinux/isolinux.cfg" + echo "include vesamenu.cfg" >> "${BUILD_OUTPUT}/boot/isolinux/isolinux.cfg" + fi fi fi @@ -1604,6 +1628,11 @@ BOOT_ARGS="-no-emul-boot -boot-load-size 4 -boot-info-table -b boot/isolinux/iso if [ "$HYBRID_METHOD" = "isohybrid" ] ; then EFI_ARGS="-isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin -eltorito-alt-boot -e boot/efi.img -no-emul-boot -isohybrid-gpt-basdat" fi +if [ "$ARCH" = "arm64" ]; then + # No isolinux on arm64. + BOOT_ARGS="" + EFI_ARGS="-eltorito-alt-boot -e boot/efi.img -no-emul-boot -isohybrid-gpt-basdat" +fi if [ -f "${ISO_OUTPUT}/${ISO_NAME}" -a -z "$UPDATE" -a -z "$BUILD_ONLY" -a -z "$BUILD_DIRTY" -a "$FORCE_ISO_REBUILD" = "false" ] ; then log "Skipping stage 'iso build' as $ISO_OUTPUT/${ISO_NAME} exists already." @@ -1723,22 +1752,6 @@ create_netbootpackage() { mkdir -p "$NETBOOT" - # since syslinux v3:6.03~pre1+dfsg-4 the pxelinux.0 has been split into a - # separate pxelinux package - if [ -d "${CHROOT_OUTPUT}/usr/lib/PXELINUX/" ] ; then - local pxelinux_dir=/usr/lib/PXELINUX - else - local pxelinux_dir=/usr/lib/syslinux - fi - - if ! [ -r "${CHROOT_OUTPUT}/${pxelinux_dir}/pxelinux.0" ] ; then - ewarn "File ${pxelinux_dir}/pxelinux.0 not found in build chroot." ; eend 0 - eindent - einfo "Install syslinux[-common]/pxelinux package in chroot to get a netboot package." - eoutdent - return 0 - fi - local OUTPUTDIR="${NETBOOT}/build_tmp" local WORKING_DIR="${OUTPUTDIR}/grml_netboot_package_${GRML_NAME}_${VERSION}/tftpboot/" @@ -1746,58 +1759,91 @@ create_netbootpackage() { cp "${CHROOT_OUTPUT}"/boot/vmlinuz-* "$WORKING_DIR"/vmlinuz cp "${CHROOT_OUTPUT}"/boot/initrd.img-* "$WORKING_DIR"/initrd.img - cp "${CHROOT_OUTPUT}/${pxelinux_dir}/pxelinux.0" "${WORKING_DIR}/pxelinux.0" - if [ -r "${CHROOT_OUTPUT}"/usr/lib/syslinux/modules/bios/ldlinux.c32 ] ; then - cp "${CHROOT_OUTPUT}"/usr/lib/syslinux/modules/bios/ldlinux.c32 "${WORKING_DIR}"/ - fi + if [ "$ARCH" = "amd64" -o "$ARCH" = "i386" ] ; then + # since syslinux v3:6.03~pre1+dfsg-4 the pxelinux.0 has been split into a + # separate pxelinux package + if [ -d "${CHROOT_OUTPUT}/usr/lib/PXELINUX/" ] ; then + local pxelinux_dir=/usr/lib/PXELINUX + else + local pxelinux_dir=/usr/lib/syslinux + fi - mkdir -p "${WORKING_DIR}/pxelinux.cfg" - if [ -r "${BUILD_OUTPUT}/boot/isolinux/netboot.cfg" ] ; then - cp "${BUILD_OUTPUT}/boot/isolinux/netboot.cfg" "${WORKING_DIR}/pxelinux.cfg/default" - else - log "File ${BUILD_OUTPUT}/boot/isolinux/netboot.cfg not found." - ewarn "File ${BUILD_OUTPUT}/boot/isolinux/netboot.cfg not found." - eindent - log "Hint: Are you using custom templates which do not provide netboot.cfg?" - ewarn "Hint: Are you using custom templates which do not provide netboot.cfg?" ; eend 0 - eoutdent + if ! [ -r "${CHROOT_OUTPUT}/${pxelinux_dir}/pxelinux.0" ] ; then + ewarn "File ${pxelinux_dir}/pxelinux.0 not found in build chroot." ; eend 0 + eindent + einfo "Install syslinux[-common]/pxelinux package in chroot to get a netboot package." + eoutdent + return 0 + fi + + cp "${CHROOT_OUTPUT}/${pxelinux_dir}/pxelinux.0" "${WORKING_DIR}/pxelinux.0" + + if [ -r "${CHROOT_OUTPUT}"/usr/lib/syslinux/modules/bios/ldlinux.c32 ] ; then + cp "${CHROOT_OUTPUT}"/usr/lib/syslinux/modules/bios/ldlinux.c32 "${WORKING_DIR}"/ + fi + + mkdir -p "${WORKING_DIR}/pxelinux.cfg" + if [ -r "${BUILD_OUTPUT}/boot/isolinux/netboot.cfg" ] ; then + cp "${BUILD_OUTPUT}/boot/isolinux/netboot.cfg" "${WORKING_DIR}/pxelinux.cfg/default" + else + log "File ${BUILD_OUTPUT}/boot/isolinux/netboot.cfg not found." + ewarn "File ${BUILD_OUTPUT}/boot/isolinux/netboot.cfg not found." + eindent + log "Hint: Are you using custom templates which do not provide netboot.cfg?" + ewarn "Hint: Are you using custom templates which do not provide netboot.cfg?" ; eend 0 + eoutdent + fi fi # don't include shim + grubnetx64 + grub files in i386 netboot packages, # as those don't make much sense there - if [ "$ARCH" = amd64 ] ; then + if [ "$ARCH" = "amd64" -o "$ARCH" = "arm64" ] ; then if ! [ -r "${BUILD_OUTPUT}/boot/grub/netboot.cfg" ] ; then log "File ${BUILD_OUTPUT}/boot/grub/netboot.cfg not found." ewarn "File ${BUILD_OUTPUT}/boot/grub/netboot.cfg not found." eindent - log "Hint: Are you using custom templates which do not provide grub.cfg?" - ewarn "Hint: Are you using custom templates which do not provide grub.cfg?" ; eend 0 + log "Hint: Are you using custom templates which do not provide netboot.cfg?" + ewarn "Hint: Are you using custom templates which do not provide netboot.cfg?" ; eend 0 eoutdent else cp "${BUILD_OUTPUT}/boot/grub/netboot.cfg" "${WORKING_DIR}/grub.cfg" adjust_boot_files "${WORKING_DIR}/grub.cfg" - if [ -r "${CHROOT_OUTPUT}"/usr/lib/shim/shimx64.efi.signed ] ; then - log "Installing ${CHROOT_OUTPUT}/usr/lib/shim/shimx64.efi.signed as shim.efi in netboot package" - cp "${CHROOT_OUTPUT}"/usr/lib/shim/shimx64.efi.signed "${WORKING_DIR}"/shim.efi - elif [ -r "${CHROOT_OUTPUT}"/usr/lib/shim/shimx64.efi ] ; then - log "Installing ${CHROOT_OUTPUT}/usr/lib/shim/shimx64.efi as shim.efi in netboot package" - cp "${CHROOT_OUTPUT}"/usr/lib/shim/shimx64.efi "${WORKING_DIR}"/shim.efi - else - log "No shimx64.efi for usage with PXE boot found (shim-signed not present?)" - ewarn "No shimx64.efi for usage with PXE boot found (shim-signed not present?)" ; eend 0 + if [ "$ARCH" = "amd64" ] ; then + if ! copy_optional_file_logged "${WORKING_DIR}"/shim.efi "${CHROOT_OUTPUT}" \ + /usr/lib/shim/shimx64.efi.signed \ + /usr/lib/shim/shimx64.efi + then + log "No shim{x64,aa64}.efi for usage with PXE boot found (shim-signed not present?)" + ewarn "No shim{x64,aa64}.efi for usage with PXE boot found (shim-signed not present?)" ; eend 0 + fi + + if ! copy_optional_file_logged "${WORKING_DIR}"/grubx64.efi "${CHROOT_OUTPUT}" \ + /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed \ + /usr/lib/grub/x86_64-efi/monolithic/grubnetx64.efi + then + log "No grubnetx64.efi for usage with PXE boot found (grub-efi-amd64-signed not present?)" + ewarn "No grubnetx64.efi for usage with PXE boot found (grub-efi-amd64-signed not present?)." ; eend 0 + fi fi - if [ -r "${CHROOT_OUTPUT}"/usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed ] ; then - log "Installing /usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed as grubx64.efi in netboot package" - cp "${CHROOT_OUTPUT}"/usr/lib/grub/x86_64-efi-signed/grubnetx64.efi.signed "${WORKING_DIR}"/grubx64.efi - elif [ -r "${CHROOT_OUTPUT}"/usr/lib/grub/x86_64-efi/monolithic/grubnetx64.efi ] ; then - log "Installing /usr/lib/grub/x86_64-efi/monolithic/grubnetx64.efi as grubx64.efi in netboot package" - cp "${CHROOT_OUTPUT}"/usr/lib/grub/x86_64-efi/monolithic/grubnetx64.efi "${WORKING_DIR}"/grubx64.efi - else - log "No grubnetx64.efi for usage with PXE boot found (grub-efi-amd64-signed not present?)" - ewarn "No grubnetx64.efi for usage with PXE boot found (grub-efi-amd64-signed not present?)." ; eend 0 + if [ "$ARCH" = "arm64" ] ; then + if ! copy_optional_file_logged "${WORKING_DIR}"/shim.efi "${CHROOT_OUTPUT}" \ + /usr/lib/shim/shimaa64.efi.signed \ + /usr/lib/shim/shimaa64.efi + then + log "No shim{x64,aa64}.efi for usage with PXE boot found (shim-signed not present?)" + ewarn "No shim{x64,aa64}.efi for usage with PXE boot found (shim-signed not present?)" ; eend 0 + fi + + if ! copy_optional_file_logged "${WORKING_DIR}"/grubaa64.efi "${CHROOT_OUTPUT}" \ + /usr/lib/grub/arm64-efi-signed/grubnetaa64.efi.signed \ + /usr/lib/grub/arm64-efi/monolithic/grubnetaa64.efi + then + log "No grubnetaa64.efi for usage with PXE boot found (grub-efi-arm64-signed not present?)" + ewarn "No grubnetaa64.efi for usage with PXE boot found (grub-efi-arm64-signed not present?)." ; eend 0 + fi fi if [ -r "${CHROOT_OUTPUT}"/usr/share/grub/unicode.pf2 ] ; then