From 6652a1c1ae39542d646e4251c9aaee231f6fc2e5 Mon Sep 17 00:00:00 2001 From: udeved Date: Sun, 9 Oct 2016 18:04:22 +0200 Subject: [PATCH] util-iso-boot: clean up efi loader code --- lib/util-iso-boot.sh | 87 +++++++++++++++++--------------------------- lib/util-iso.sh | 40 +++++++------------- 2 files changed, 46 insertions(+), 81 deletions(-) diff --git a/lib/util-iso-boot.sh b/lib/util-iso-boot.sh index c698b37..1620434 100644 --- a/lib/util-iso-boot.sh +++ b/lib/util-iso-boot.sh @@ -24,6 +24,14 @@ set_mkinicpio_hooks(){ fi } +gen_boot_args(){ + local args=(quiet) + if ${plymouth_boot};then + args+=(splash) + fi + echo ${args[@]} +} + set_silent_switch_root(){ sed -e 's|"$@"|"$@" >/dev/null 2>&1|' -i $1/usr/lib/initcpio/init } @@ -46,38 +54,6 @@ gen_boot_image(){ -g /boot/initramfs.img } -copy_preloader_efi(){ - msg2 "Copying efi loaders ..." - cp $1/usr/share/efitools/efi/PreLoader.efi $2/bootx64.efi - cp $1/usr/share/efitools/efi/HashTool.efi $2/ -} - -copy_loader_efi(){ - cp $1/usr/lib/systemd/boot/efi/systemd-bootx64.efi $2/loader.efi -} - -is_intel_ucode(){ - if [[ -f $1/iso/${iso_name}/boot/intel_ucode.img ]] ; then - return 0 - else - return 1 - fi -} - -copy_efi_shell(){ - for f in $1${DATADIR}/efi_shell/*.efi;do - msg2 "Copying efi shell ..." - [[ -f $f ]] && cp $f $2/ - done -} - -copy_efi_shell_conf(){ - for f in cp $1${DATADIR}/efi_shell/*.conf;do - msg2 "Copying efi shell loader entries ..." - [[ -f $f ]] && cp $f $2/ - done -} - copy_ucode(){ cp $1/boot/intel-ucode.img $2/intel_ucode.img cp $1/usr/share/licenses/intel-ucode/LICENSE $2/intel_ucode.LICENSE @@ -85,24 +61,14 @@ copy_ucode(){ copy_boot_images(){ msg2 "Copying boot images ..." - cp $1/iso/${iso_name}/boot/x86_64/vmlinuz $1/efiboot/EFI/miso/vmlinuz.efi - cp $1/iso/${iso_name}/boot/x86_64/initramfs.img $1/efiboot/EFI/miso/initramfs.img - if $(is_intel_ucode "$1"); then - cp $1/iso/${iso_name}/boot/intel_ucode.img $1/efiboot/EFI/miso/intel_ucode.img - fi -} + prepare_dir "$1/efiboot/EFI/miso" + local miso_efi=$1/efiboot/EFI/miso boot=$1/iso/${iso_name}/boot + cp ${boot}/x86_64/vmlinuz $1/efiboot/EFI/miso/vmlinuz.efi + cp ${boot}/x86_64/initramfs.img $1/efiboot/EFI/miso/initramfs.img -prepare_efi_loader_conf(){ - prepare_dir "$1" - sed "s|%ISO_NAME%|${iso_name}|g" ${DATADIR}/efiboot/loader.conf > $1/loader.conf -} - -gen_boot_args(){ - local args=(quiet) - if ${plymouth_boot};then - args+=(splash) + if [[ -f ${boot}/intel_ucode.img ]] ; then + cp ${boot}/intel_ucode.img $1/efiboot/EFI/miso/intel_ucode.img fi - echo ${args[@]} } vars_to_boot_conf(){ @@ -116,15 +82,28 @@ vars_to_boot_conf(){ -i $1 } -prepare_loader_entry(){ +prepare_efi_loader(){ + prepare_dir "$2/EFI/boot" + + msg2 "Copying efi loaders ..." + cp $1/usr/share/efitools/efi/PreLoader.efi $2/EFI/boot/bootx64.efi + cp $1/usr/share/efitools/efi/HashTool.efi $2/EFI/boot + cp $1${DATADIR}/efiboot/gummibootx64.efi $2/EFI/boot/loader.efi + cp $1${DATADIR}/efiboot/shellx64_v{1,2}.efi $2/EFI + + prepare_dir "$2/loader/entries" + + cp $1${DATADIR}/efiboot/loader.conf $2/loader/loader.conf + vars_to_boot_conf $2/loader/loader.conf + cp $1${DATADIR}/efiboot/uefi-shell-v{1,2}-x86_64.conf $2/loader/entries + local drv='free' switch="no" - prepare_dir "$1/loader/entries" - cp ${DATADIR}/efiboot/miso-$2.conf $1/loader/entries/${iso_name}-x86_64.conf - vars_to_boot_conf "$1/loader/entries/${iso_name}-x86_64.conf" "$drv" "$switch" + cp $1${DATADIR}/efiboot/entry-x86_64-$3.conf $2/loader/entries/${iso_name}-x86_64.conf + vars_to_boot_conf "$2/loader/entries/${iso_name}-x86_64.conf" "$drv" "$switch" if ${nonfree_mhwd};then drv='nonfree' switch="yes" - cp ${DATADIR}/efiboot/miso-$2.conf $1/loader/entries/${iso_name}-x86_64-nonfree.conf - vars_to_boot_conf "$1/loader/entries/${iso_name}-x86_64-nonfree.conf" "$drv" "$switch" + cp $1${DATADIR}/efiboot/entry-x86_64-$3.conf $2/loader/entries/${iso_name}-x86_64-nonfree.conf + vars_to_boot_conf "$2/loader/entries/${iso_name}-x86_64-nonfree.conf" "$drv" "$switch" fi } diff --git a/lib/util-iso.sh b/lib/util-iso.sh index 9255612..fe80fdf 100644 --- a/lib/util-iso.sh +++ b/lib/util-iso.sh @@ -298,7 +298,7 @@ make_image_mhwd() { make_image_boot() { if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then - msg "Prepare [%s/boot]" "${iso_name}" + msg "Prepare [/iso/%s/boot]" "${iso_name}" local path_iso="${work_dir}/iso/${iso_name}/boot" mkdir -p ${path_iso}/${target_arch} cp ${work_dir}/root-image/boot/memtest86+/memtest.bin ${path_iso}/${target_arch}/memtest @@ -320,55 +320,41 @@ make_image_boot() { rm -R ${path} : > ${work_dir}/build.${FUNCNAME} - msg "Done [%s/boot]" "${iso_name}" + msg "Done [/iso/%s/boot]" "${iso_name}" fi } # Prepare /EFI make_efi_usb() { if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then - msg "Prepare [%s/boot/EFI]" "${iso_name}" - local boot=${work_dir}/iso/EFI/boot - mkdir -p ${boot} - copy_preloader_efi "${work_dir}/live-image" "${boot}" - copy_loader_efi "${work_dir}/root-image" "${boot}" - prepare_efi_loader_conf "${work_dir}/iso/loader" - prepare_loader_entry "${work_dir}/iso" "usb" - copy_efi_shell "${work_dir}/live-image" "${work_dir}/iso/EFI" - copy_efi_shell_conf "${work_dir}/live-image" "${work_dir}/iso/loader/entries" + msg "Prepare [/iso/EFI]" + prepare_efi_loader "${work_dir}/live-image" "${work_dir}/iso" "usb" : > ${work_dir}/build.${FUNCNAME} - msg "Done [%s/boot/EFI]" "${iso_name}" + msg "Done [/iso/EFI]" fi } # Prepare kernel.img::/EFI for "El Torito" EFI boot mode make_efi_dvd() { if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then - msg "Prepare [%s/iso/EFI]" "${iso_name}" + msg "Prepare [/efiboot/EFI]" local miso=${work_dir}/iso/EFI/miso mkdir -p ${miso} truncate -s 31M ${miso}/efiboot.img mkfs.fat -n MISO_EFI ${miso}/efiboot.img mkdir -p ${work_dir}/efiboot mount ${miso}/efiboot.img ${work_dir}/efiboot - mkdir -p ${work_dir}/efiboot/EFI/{miso,boot} copy_boot_images "${work_dir}" - local boot=${work_dir}/efiboot/EFI/boot - copy_preloader_efi "${work_dir}/live-image" "${boot}" - copy_loader_efi "${work_dir}/root-image" "${boot}" - prepare_efi_loader_conf "${work_dir}/efiboot/loader" - prepare_loader_entry "${work_dir}/efiboot" "dvd" - copy_efi_shell "${work_dir}/live-image" "${work_dir}/efiboot/EFI" - copy_efi_shell_conf "${work_dir}/live-image" "${work_dir}/efiboot/loader/entries" + prepare_efi_loader "${work_dir}/live-image" "${work_dir}/efiboot" "dvd" umount -d ${work_dir}/efiboot : > ${work_dir}/build.${FUNCNAME} - msg "Done [%s/iso/EFI]" "${iso_name}" + msg "Done [/efiboot/EFI]" fi } make_syslinux() { if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then - msg "Prepare [%s/iso/syslinux]" "${iso_name}" + msg "Prepare [/iso/syslinux]" local syslinux=${work_dir}/iso/syslinux mkdir -p ${syslinux} prepare_syslinux "${syslinux}" @@ -376,16 +362,16 @@ make_syslinux() { gzip -c -9 ${work_dir}/root-image/usr/share/hwdata/pci.ids > ${syslinux}/hdt/pciids.gz gzip -c -9 ${work_dir}/live-image/usr/lib/modules/*-MANJARO/modules.alias > ${syslinux}/hdt/modalias.gz : > ${work_dir}/build.${FUNCNAME} - msg "Done [%s/iso/syslinux]" "${iso_name}" + msg "Done [/iso/syslinux]" fi } make_isomounts() { if [[ ! -e ${work_dir}/build.${FUNCNAME} ]]; then - msg "Prepare [isomounts]" + msg "Prepare [/iso/%s/isomounts]" "${iso_name}" write_isomounts "${work_dir}/iso/${iso_name}" : > ${work_dir}/build.${FUNCNAME} - msg "Done [isomounts]" + msg "Done [/iso/%s/isomounts]" "${iso_name}" fi } @@ -464,11 +450,11 @@ prepare_images(){ run_safe "make_image_mhwd" fi run_safe "make_image_boot" + run_safe "make_syslinux" if [[ "${target_arch}" == "x86_64" ]]; then run_safe "make_efi_usb" run_safe "make_efi_dvd" fi - run_safe "make_syslinux" run_safe "make_isomounts" show_elapsed_time "${FUNCNAME}" "${timer}" }