util-iso-boot: clean up efi loader code

This commit is contained in:
udeved 2016-10-09 18:04:22 +02:00
parent a2e170c194
commit 6652a1c1ae
2 changed files with 46 additions and 81 deletions

View file

@ -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
}

View file

@ -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}"
}