summaryrefslogtreecommitdiff
path: root/parabolaiso/mkparabolaiso
diff options
context:
space:
mode:
Diffstat (limited to 'parabolaiso/mkparabolaiso')
-rwxr-xr-xparabolaiso/mkparabolaiso100
1 files changed, 63 insertions, 37 deletions
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