Skip to content

Commit

Permalink
grml2iso: switch from isohybrid to xorriso/isohybrid to properly supp…
Browse files Browse the repository at this point in the history
…ort EFI boot

This is the related change for grml-live's commit 6725bfa1ffc4, where we
introduced EFI support on 32bit systems and switched from isohybrid to
xorriso/isohybrid combination.

The isohybrid binary doesn't support 32-bit FI systems and fails hard
when using `--uefi` on a 32-bit ISO.  But xorriso with appropriate
options for EFI usage (see $BOOT_ARGS) and
/usr/lib/ISOLINUX/isohdpfx.bin from the isolinux package seems to
provide everything we need.

JFTR: To properly support 64bit EFI boot with our grml96 ISOs, we also
had to adjust the order of the provided ISOs in the grml2iso command
line in our release process.

Closes: grml/grml#149
  • Loading branch information
mika committed Jun 24, 2020
1 parent b1798d1 commit f052436
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 35 deletions.
1 change: 1 addition & 0 deletions debian/control
Expand Up @@ -33,6 +33,7 @@ Depends:
${misc:Depends},
${shlibs:Depends},
Recommends:
isolinux (>= 3:6.03+dfsg-5+deb8u1~),
syslinux,
syslinux-utils,
xorriso | genisoimage,
Expand Down
45 changes: 10 additions & 35 deletions grml2iso
@@ -1,23 +1,14 @@
#!/usr/bin/env bash
# Filename: grml2iso
# Purpose: create a multiboot grml ISO using grml2usb
# Authors: Michael Prokop <mika@grml.org>,
# Thorsten Glaser <tg@mirbsd.org>
# Authors: Michael Prokop <mika@grml.org>
# Bug-Reports: see http://grml.org/bugs/
# License: This file is licensed under the GPL v2 or any later version.
################################################################################

# make sure we have the sbin directories in our PATH to find grml2usb ootb
PATH="${PATH}:/sbin:/usr/local/sbin:/usr/sbin"

# define function getfilesize before "set -e" {{{
if stat --help >/dev/null 2>&1; then
getfilesize='stat -c %s' # GNU stat
else
getfilesize='stat -f %z' # BSD stat
fi
# }}}

# adjust variables if necessary through environment {{{
# path to the grml2usb script you'd like to use
[ -n "$GRML2USB" ] || GRML2USB='grml2usb'
Expand Down Expand Up @@ -198,7 +189,14 @@ Options:
UEFI_ENABLE=false
else
echo "/boot/efi.img found, extending boot arguments for (U)EFI boot."
BOOT_ARGS="$BOOT_ARGS -boot-info-table -eltorito-alt-boot -e boot/efi.img -no-emul-boot"
if ! [ -r /usr/lib/ISOLINUX/isohdpfx.bin ] ; then
echo "Error: /usr/lib/ISOLINUX/isohdpfx.bin not available, required for xorriso/isohybrid though." >&2
echo "Hint: make sure isolinux is installed." >&2
exit 1
else
BOOT_ARGS+=" -boot-info-table -eltorito-alt-boot -e boot/efi.img -no-emul-boot"
BOOT_ARGS+=" -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin -eltorito-alt-boot -e boot/efi.img -no-emul-boot -isohybrid-gpt-basdat -no-pad"
fi
fi
fi
;;
Expand Down Expand Up @@ -272,33 +270,10 @@ Options:
# }}}

# generate the CD/DVD ISO {{{
$MKISOFS -V 'grml-multiboot' -l -r -J -no-pad $BOOT_ARGS \
$MKISOFS -V 'grml-multiboot' -l -r -J $BOOT_ARGS \
-o "$ISOFILE" .
# }}}

# pad the output ISO to multiples of 256 KiB for partition table support {{{
siz=$($getfilesize "$ISOFILE")
cyls=$(($siz / 512 / 32 / 16 + 1)) # C=$cyls H=16 S=32
ofs=$(($cyls * 16 * 32 * 512 - 1)) # padding offset (size - 1)
dd if=/dev/zero bs=1 count=1 seek=$ofs of="$ISOFILE" 2>/dev/null
# }}}

# make ISO dd-able {{{
if ! $UEFI_ENABLE ; then
echo "Skipping check for --uefi option in isohybrid since prerequisites are not fulfilled."
else
if ! isohybrid --help | grep -q -- --uefi ; then
echo "isohybrid version does NOT support --uefi option, disabling"
else
echo "isohybrid version supports --uefi option"
ISOHYBRID_OPTIONS=--uefi
fi
fi

echo "Creating dd-able ISO using isohybrid"
isohybrid $ISOHYBRID_OPTIONS "$ISOFILE"
# }}}

# cleanup {{{
cd "$ORIG_DIR"
sync
Expand Down

0 comments on commit f052436

Please sign in to comment.