[syslinux] isohybrid: slint64-14.1.iso: unable to find mac efi image

Thomas Schmitt scdbackup at gmx.net
Tue Jul 29 07:45:14 PDT 2014


Hi,

> Unfortunately I get the error message:
> isohybrid: slint64-14.1.iso: unable to find mac efi image

This is probably due to El Torito Platform id "Mac" in

  -eltorito-alt-boot -no-emul-boot -eltorito-platform Mac \
    -eltorito-boot isolinux/macboot.img \

This caused in the image
  http://slint.fr/misc/MacBoot/slint64-14.1.iso
platform id 1 with the third image. (I would have expected 2
from reading El Torito specs: 0=x86 , 1=PowerPC , 2=Mac. Shrug.)

Regardless whether this is the right number for the purpose of
booting some Mac from CD/DVD, it is not what isohybrid.c
expects.
This program expects to find the UEFI image as second boot image
and the Mac image as third boot image. Both with Platform Id 0xef.

This composition would be achieved by mkisofs options:

  -no-emul-boot -boot-load-size 4 -boot-info-table \
  -b isolinux/isolinux.bin \
  -c isolinux/isolinux.boot \
  -eltorito-alt-boot -no-emul-boot -eltorito-platform 0xEF \
    -eltorito-boot isolinux/efiboot.img  \
  -eltorito-alt-boot -no-emul-boot -eltorito-platform 0xEF \
    -eltorito-boot isolinux/macboot.img \


>From util/isohybrid.c :
----------------------------------------------------------------
int
read_efi_section(const uint8_t *buf)
{
        ...
        if (platform_id == 0xef)
                return 0;

        return 1;
}
...
main(int argc, char *argv[])
{
    ...
    if (mode & EFI)
    {
        if (!read_efi_section(buf)) {
            ...
    }

    buf += 32;

    if (mode & MAC)
    {
        if (!read_efi_section(buf)) {
           ...
        } else {
            errx(1, "%s: unable to find mac efi image", argv[0]);
        }
    }

----------------------------------------------------------------

> _Could my problem be related to a badly blessed file/directory?

Any mis-composition of isolinux/macboot.img would only show
up at boot time.
Also any negative effect from platform id 0xef with the Mac
image should only show up at boot time.

I would be interested to learn more about HFS+ and Blessing. But
> https://developer.apple.com/library/mac/technotes/tn/tn1150.html
says "Sorry, that page cannot be found".

I only know that grub-mkrescue blesses 
  /System/Library/CoreServices/boot.efi  with  "intel_bootfile"
and
  /System/Library/CoreServices           with  "ppc_bootdir"


> _Is there a chance that I'd succeed in using xorriso instead of mkisofs?

Yes. :))

You will not have to use isohybrid.pl or isohybrid.c afterwards: 

( cd $SLINT
  xorriso -as mkisofs -o /tmp/slint${SFX}-${VERSION}.iso \
  -rational-rock -J -A 'Slint Install' \
  -hide-rr-moved \
  -v -v -d -N \
  -isohybrid-mbr /usr/lib/syslinux/isohdpfx.bin \
  -no-emul-boot -boot-load-size 4 -boot-info-table \
  -b isolinux/isolinux.bin \
  -c isolinux/isolinux.boot \
  -eltorito-alt-boot -no-emul-boot \
    -e isolinux/efiboot.img  \
    -isohybrid-gpt-basdat \
  -eltorito-alt-boot -no-emul-boot \
    -e isolinux/macboot.img \
    -isohybrid-gpt-hfsplus -isohybrid-apm-hfsplus \
  -V 'SlintISO' . 2>>${TMP}/log.txt
)

If you cannot locate isohdpfx.bin in your SYSLINUX installation,
you may take the first 512 bytes of your existing slint64-14.1.iso
that was treated by isohybrid:
  dd if=slint64-14.1.iso bs=512 count=1 of=isohdpfx.bin

xorrisofs does not know option -eltorito-platform but expresses
the Platform Id 0xef by option -e instead of option -eltorito-boot.

-isohybrid-gpt-basdat and -isohybrid-gpt-hfsplus -isohybrid-apm-hfsplus
mark the current boot images in GPT resp. in GPT and Apple Partition
Map.


> the length of the man page is scaring me.

Too many options, i know.
(Nevertheless, if you are interested in the meaning of above
 options, look them up in man xorrisofs.)


Have a nice day :)

Thomas



More information about the Syslinux mailing list