my assembler reading skills are obviously insufficient. It turns out that
the bytes in the MBR partition table range are not significant for booting
the ISO from qemu -hda.

I boldly zeroed them in a copy of the GNU/Hurd ISO and it still boots.
(To make sure that it does not boot by El Torito i copied the
 terminating volume descriptor from block 19 to block 17.)

Encouraged by this outcome, i repacked the ISO by these commands:

  # Obtain GRUB image file from start of original ISO
  dd if=debian-hurd-2017-i386-NETINST-1.iso bs=2048 count=16 of=grub_embed

  mount debian-hurd-2017-i386-NETINST-1.iso /mnt/iso

  # Most options as learned from file /mnt/iso/.disk/mkisofs
  # but adding option --protective-msdos-label to create a partition table.
  xorriso  -as mkisofs \
    -o test.iso \
    -J -joliet-long -r \
    -V 'Debian 9.0 h-i386 n' \
    --embedded-boot grub_embed \
    --protective-msdos-label \
    -cache-inodes \
    -c boot/boot.cat \
    -b boot/grub/grub_eltorito \
       -no-emul-boot -boot-load-size 4 -boot-info-table -no-pad \

The resulting test.iso boots as qemu -hda to the same GRUB menu as
the original ISO.

The partition table is what grub-mkrescue would ask for in case of
i386-pc without any efi platform:

  $ sbin/fdisk -lu test.iso
  Disklabel type: dos
  Device     Boot Start    End Sectors   Size Id Type
  test.iso1  *        1 311555  311555 152.1M cd unknown

This partition is not mountable because of its start offset 1.
But that's how Vladimir wanted it for grub-mkrescue.

Udate after receiving reply on grub-devel:

Vladimir 'phcoder' Serbinenko wrote:
> Those are only for floppies with old BIOS. If your image is over 2.88 MiB
> and thus never useful on floppies, it's safe to overwrite.

This explains why it looks like somewhat plausible executable code
and why i386-pc/boot.img of Debian 8 is in the state it is in.


So my proposal to Debian GNU/Hurd is to boldly add option 
to the debian-installer run of xorriso -as mkisofs for hurd.

If an empty partition table is desired instead, then at least zeroize
the 64 bytes beginning at offset 446 of file "grub_embed" before it
gets handed over to xorriso.

Have a nice day :)


Reply via email to