From f3e077a21cf87e3acbc692081a59f422f9d3ca9e Mon Sep 17 00:00:00 2001 From: David P Date: Mon, 28 Sep 2020 14:39:20 -0300 Subject: sync with archiso Imported changes: f34c957 (HEAD -> master, origin/master, origin/HEAD) Calculate required efiboot.img size instead of hardcoding it 8c04704 Split SYSLINUX configuration into per-kernel configuration files 8276616 archiso/mkarchiso: do not hardcode the kernel and initramfs file names 83e4cb9 Use the same file paths in both ISO 9660 and FAT 136152e Do not rename the initramfs image Signed-off-by: David P --- parabolaiso/mkparabolaiso | 100 +++++++++++++++++++++++++++++----------------- 1 file changed, 63 insertions(+), 37 deletions(-) (limited to 'parabolaiso/mkparabolaiso') diff --git a/parabolaiso/mkparabolaiso b/parabolaiso/mkparabolaiso index 5c294e9..285b250 100755 --- a/parabolaiso/mkparabolaiso +++ b/parabolaiso/mkparabolaiso @@ -421,8 +421,8 @@ _make_bootmodes() { _make_boot_on_iso() { _msg_info "Preparing ${arch} kernel and initramfs for the ISO 9660 file system..." install -d -m 0755 -- "${isofs_dir}/${install_dir}/boot/${arch}" - install -m 0644 -- "${airootfs_dir}/boot/parabolaiso.img" "${isofs_dir}/${install_dir}/boot/${arch}/" - install -m 0644 -- "${airootfs_dir}/boot/vmlinuz-linux-libre" "${isofs_dir}/${install_dir}/boot/${arch}/" + install -m 0644 -- "${airootfs_dir}/boot/initramfs-"*".img" "${isofs_dir}/${install_dir}/boot/${arch}/" + install -m 0644 -- "${airootfs_dir}/boot/vmlinuz-"* "${isofs_dir}/${install_dir}/boot/${arch}/" _msg_info "Done!" } @@ -451,13 +451,16 @@ _make_boot_bios.syslinux.mbr() { else _run_once _make_boot_on_iso fi - _uname_r=$(file -b "${isofs_dir}/${install_dir}/boot/${arch}/vmlinuz-linux-libre" | awk 'f{print;f=0} /version/{f=1}' RS=' ') - install -d -m 0755 -- "${isofs_dir}/${install_dir}/boot/syslinux/hdt" - gzip -c -9 "${airootfs_dir}/usr/share/hwdata/pci.ids" > \ - "${isofs_dir}/${install_dir}/boot/syslinux/hdt/pciids.gz" - gzip -c -9 "${airootfs_dir}/usr/lib/modules/${_uname_r}/modules.alias" > \ - "${isofs_dir}/${install_dir}/boot/syslinux/hdt/modalias.gz" + if [[ -e "${isofs_dir}/${install_dir}/boot/syslinux/hdt.c32" ]]; then + install -d -m 0755 -- "${isofs_dir}/${install_dir}/boot/syslinux/hdt" + if [[ -e "${airootfs_dir}/usr/share/hwdata/pci.ids" ]]; then + gzip -c -9 "${airootfs_dir}/usr/share/hwdata/pci.ids" > \ + "${isofs_dir}/${install_dir}/boot/syslinux/hdt/pciids.gz" + fi + find "${airootfs_dir}/usr/lib/modules" -name 'modules.alias' -print -exec gzip -c -9 '{}' ';' -quit > \ + "${isofs_dir}/${install_dir}/boot/syslinux/hdt/modalias.gz" + fi # Add other aditional/extra files to ${install_dir}/boot/ if [[ -e "${airootfs_dir}/boot/memtest86+/memtest.bin" ]]; then @@ -474,10 +477,12 @@ _make_boot_bios.syslinux.mbr() { _make_boot_bios.syslinux.eltorito() { _msg_info "Setting up SYSLINUX for BIOS booting from an optical disc..." install -d -m 0755 -- "${isofs_dir}/isolinux" - sed "s|%PARABOLAISO_LABEL%|${iso_label}|g; - s|%INSTALL_DIR%|${install_dir}|g; - s|%ARCH%|${arch}|g" \ - "${profile}/isolinux/isolinux.cfg" > "${isofs_dir}/isolinux/isolinux.cfg" + for _cfg in "${profile}/isolinux/"*".cfg"; do + sed "s|%PARABOLAISO_LABEL%|${iso_label}|g; + s|%INSTALL_DIR%|${install_dir}|g; + s|%ARCH%|${arch}|g" \ + "${_cfg}" > "${isofs_dir}/isolinux/${_cfg##*/}" + done install -m 0644 -- "${airootfs_dir}/usr/lib/syslinux/bios/isolinux.bin" "${isofs_dir}/isolinux/" install -m 0644 -- "${airootfs_dir}/usr/lib/syslinux/bios/isohdpfx.bin" "${isofs_dir}/isolinux/" install -m 0644 -- "${airootfs_dir}/usr/lib/syslinux/bios/ldlinux.c32" "${isofs_dir}/isolinux/" @@ -498,11 +503,12 @@ _make_efi() { install -d -m 0755 -- "${isofs_dir}/loader/entries" install -m 0644 -- "${profile}/efiboot/loader/loader.conf" "${isofs_dir}/loader/" - sed "s|%PARABOLAISO_LABEL%|${iso_label}|g; - s|%INSTALL_DIR%|${install_dir}|g; - s|%ARCH%|${arch}|g" \ - "${profile}/efiboot/loader/entries/parabolaiso-x86_64-usb.conf" > \ - "${isofs_dir}/loader/entries/parabolaiso-x86_64.conf" + for _conf in "${profile}/efiboot/loader/entries/"*".conf"; do + sed "s|%PARABOLAISO_LABEL%|${iso_label}|g; + s|%INSTALL_DIR%|${install_dir}|g; + s|%ARCH%|${arch}|g" \ + "${_conf}" > "${isofs_dir}/loader/entries/${_conf##*/}" + done # edk2-shell based UEFI shell # shellx64.efi is picked up automatically when on / @@ -519,11 +525,12 @@ _make_refind_efi() { install -m 0644 -- "${profile}/efiboot/EFI/BOOT/refind.conf" "${isofs_dir}/EFI/BOOT/" - sed "s|%PARABOLAISO_LABEL%|${iso_label}|g; - s|%INSTALL_DIR%|${install_dir}|g; - s|%ARCH%|${arch}|g" \ - "${profile}/efiboot/EFI/BOOT/entries/parabolaiso-x86_64-usb.conf" > \ - "${isofs_dir}/EFI/BOOT/entries/parabolaiso-x86_64.conf" + for _conf in "${profile}/efiboot/EFI/BOOT/entries/"*".conf"; do + sed "s|%PARABOLAISO_LABEL%|${iso_label}|g; + s|%INSTALL_DIR%|${install_dir}|g; + s|%ARCH%|${arch}|g" \ + "${_conf}" > "${isofs_dir}/EFI/BOOT/entries/${_conf##*/}" + done # edk2-shell based UEFI shell # shellx64.efi is picked up automatically when on / @@ -535,20 +542,29 @@ _make_refind_efi() { # Prepare kernel/initramfs on efiboot.img _make_boot_on_fat() { _msg_info "Preparing kernel and initramfs for the FAT file system..." - mmd -i "${isofs_dir}/EFI/parabolaiso/efiboot.img" ::/EFI/parabolaiso - mcopy -i "${isofs_dir}/EFI/parabolaiso/efiboot.img" \ - "${airootfs_dir}/boot/vmlinuz-linux-libre" "${airootfs_dir}/boot/parabolaiso.img" ::/EFI/parabolaiso/ + mmd -i "${isofs_dir}/EFI/parabolaiso/efiboot.img" \ + "::/${install_dir}" "::/${install_dir}/boot" "::/${install_dir}/boot/${arch}" + mcopy -i "${isofs_dir}/EFI/parabolaiso/efiboot.img" "${airootfs_dir}/boot/vmlinuz-"* \ + "${airootfs_dir}/boot/initramfs-"*".img" "::/${install_dir}/boot/${arch}/" _msg_info "Done!" } # Prepare efiboot.img::/EFI for EFI boot mode _make_boot_uefi-x64.systemd-boot.esp() { + local efiboot_imgsize="0" _msg_info "Setting up systemd-boot for UEFI booting..." install -d -m 0755 -- "${isofs_dir}/EFI/parabolaiso" + efiboot_imgsize="$(( (( (( $(du --apparent-size -bc \ + "${airootfs_dir}/usr/lib/systemd/boot/efi/systemd-bootx64.efi" \ + "${airootfs_dir}/usr/share/edk2-shell/x64/Shell_Full.efi" \ + "${profile}/efiboot/" \ + "${airootfs_dir}/boot/vmlinuz-"* \ + "${airootfs_dir}/boot/initramfs-"*".img" \ + 2>/dev/null | awk 'END {print $1}') / 1048576 )) +1 )) * 1024 ))" # The FAT image must be created with mkfs.fat not mformat, as some systems have issues with mformat made images: # https://lists.gnu.org/archive/html/grub-devel/2019-04/msg00099.html - mkfs.fat -C -n PARABOLAISO_EFI "${isofs_dir}/EFI/parabolaiso/efiboot.img" 65536 + mkfs.fat -C -n PARABOLAISO_EFI "${isofs_dir}/EFI/parabolaiso/efiboot.img" "$efiboot_imgsize" mmd -i "${isofs_dir}/EFI/parabolaiso/efiboot.img" ::/EFI ::/EFI/BOOT mcopy -i "${isofs_dir}/EFI/parabolaiso/efiboot.img" \ @@ -556,11 +572,12 @@ _make_boot_uefi-x64.systemd-boot.esp() { mmd -i "${isofs_dir}/EFI/parabolaiso/efiboot.img" ::/loader ::/loader/entries mcopy -i "${isofs_dir}/EFI/parabolaiso/efiboot.img" "${profile}/efiboot/loader/loader.conf" ::/loader/ - sed "s|%PARABOLAISO_LABEL%|${iso_label}|g; - s|%INSTALL_DIR%|${install_dir}|g; - s|%ARCH%|${arch}|g" \ - "${profile}/efiboot/loader/entries/parabolaiso-x86_64-cd.conf" \ - | mcopy -i "${isofs_dir}/EFI/parabolaiso/efiboot.img" - ::/loader/entries/parabolaiso-x86_64.conf + for _conf in "${profile}/efiboot/loader/entries/"*".conf"; do + sed "s|%PARABOLAISO_LABEL%|${iso_label}|g; + s|%INSTALL_DIR%|${install_dir}|g; + s|%ARCH%|${arch}|g" \ + "${_conf}" | mcopy -i "${isofs_dir}/EFI/parabolaiso/efiboot.img" - "::/loader/entries/${_conf##*/}" + done # shellx64.efi is picked up automatically when on / if [[ -e "${airootfs_dir}/usr/share/edk2-shell/x64/Shell_Full.efi" ]]; then @@ -575,12 +592,20 @@ _make_boot_uefi-x64.systemd-boot.esp() { } _make_boot_uefi-x64.refind.esp() { + local efiboot_imgsize="0" _msg_info "Setting up rEFInd for UEFI booting..." install -d -m 0755 -- "${isofs_dir}/EFI/parabolaiso" + efiboot_imgsize="$(( (( (( $(du --apparent-size -bc \ + "${airootfs_dir}/usr/share/refind/refind_x64.efi" \ + "${airootfs_dir}/usr/share/edk2-shell/x64/Shell_Full.efi" \ + "${profile}/efiboot/" \ + "${airootfs_dir}/boot/vmlinuz-"* \ + "${airootfs_dir}/boot/initramfs-"*".img" \ + 2>/dev/null | awk 'END {print $1}') / 1048576 )) +1 )) * 1024 ))" # The FAT image must be created with mkfs.fat not mformat, as some systems have issues with mformat made images: # https://lists.gnu.org/archive/html/grub-devel/2019-04/msg00099.html - mkfs.fat -C -n PARABOLAISO_EFI "${isofs_dir}/EFI/parabolaiso/efiboot.img" 65536 + mkfs.fat -C -n PARABOLAISO_EFI "${isofs_dir}/EFI/parabolaiso/efiboot.img" "$efiboot_imgsize" mmd -i "${isofs_dir}/EFI/parabolaiso/efiboot.img" ::/EFI ::/EFI/BOOT mcopy -i "${isofs_dir}/EFI/parabolaiso/efiboot.img" \ @@ -588,11 +613,12 @@ _make_boot_uefi-x64.refind.esp() { mmd -i "${isofs_dir}/EFI/parabolaiso/efiboot.img" ::/EFI/BOOT/entries mcopy -i "${isofs_dir}/EFI/parabolaiso/efiboot.img" "${profile}/efiboot/EFI/BOOT/refind.conf" ::/EFI/BOOT/ - sed "s|%PARABOLAISO_LABEL%|${iso_label}|g; - s|%INSTALL_DIR%|${install_dir}|g; - s|%ARCH%|${arch}|g" \ - "${profile}/efiboot/EFI/BOOT/entries/parabolaiso-x86_64-cd.conf" \ - | mcopy -i "${isofs_dir}/EFI/parabolaiso/efiboot.img" - ::/EFI/BOOT/entries/parabolaiso-x86_64.conf + for _conf in "${profile}/efiboot/EFI/BOOT/entries/"*".conf"; do + sed "s|%PARABOLAISO_LABEL%|${iso_label}|g; + s|%INSTALL_DIR%|${install_dir}|g; + s|%ARCH%|${arch}|g" \ + "${_conf}" | mcopy -i "${isofs_dir}/EFI/parabolaiso/efiboot.img" - "::/EFI/BOOT/entries/${_conf##*/}" + done # shellx64.efi is picked up automatically when on / if [[ -e "${airootfs_dir}/usr/share/edk2-shell/x64/Shell_Full.efi" ]]; then -- cgit v1.2.2