[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Installing Debian on a Minnowboard Turbot with installer on USB stick?



Hi,

Rick Thomas reported that the boot process of
  firmware-buster-DI-alpha2-amd64-DVD-1.iso
fails with
  Incorrect CD-ROM detected
after it was re-partitioned to GPT.

It seems that the software in the initrd of a Debian isohybrid wants a
mountable partition with the ISO 9660 filesystem and file /.disk/info,
if the ISO is presented on USB stick.

But after replacing the MBR partition table by the GPT, we do not have a
mountable ISO 9660 partition.
And we cannot make one that fits, because no GPT partition may start
at block 0. And even if we force this start, the ISO partition would
overlap with the EFI partition. This is explicitely forbidden in UEFI
specs.

I will think about possibilities to repack the ISO image so that it is
representable as GPT partition and that the EFI partition sits outside
the ISO partition.


Rick, did you already try whether you can force your EFI to start with
the unchanged, MBR partitioned  firmware-buster-DI-alpha2-amd64-DVD-1.iso ?
Currently it seems that only this partition table has hope for success
with the later stages of booting in that ISO.


-----------------------------------------------------------------------
Reasoning:

The initrd works with isohybrid USB stick more or less by accident.
Not the isohybrid device is enumerated and inspected, but its partitions.
This does not really match the idea of the device on which the isohybrid
is to be presented to the computer. (It should look in partitions for FAT
and on base devices for ISO 9660.)

Confused by this, i wrote about the software in the initrd of
firmware-buster-DI-alpha2-amd64-DVD-1.iso:

>  var/lib/dpkg/info/cdrom-detect.postinst :
>           devices="$(list-devices cd; list-devices maybe-usb-floppy)"
> [...]
> either i misunderstand the scripts or script execution should not get
> there under normal circumstances.

Script bin/list-devices on my running system yields device paths of
the USB stick with the unchanged, MBR based firmware-*-DVD-1.iso

  $ bin/list-devices usb-partition
  /dev/sdc1
  /dev/sdc2

In cdrom-detect.postinst i read:

        devices="$(list-devices usb-partition)"
        for device in $devices; do
                if try_mount $device $CDFS; then
                        db_set cdrom-detect/hybrid true
                        break 2
                fi
                if try_mount $device $FATFS; then
                        db_set cdrom-detect/usb-hdd true
                        break 2
                fi
        done

In function try_mount() of cdrom-detect.postinst :

  try_mount() {
        local device=$1
        local type=$2

        local ret=1
        if mount -t $type -o $OPTIONS $device /cdrom; then

which i replay successfully by

  # mount -t iso9660 -o ro,exec /dev/sdc1 /cdrom
  #

(Directory /cdrom gets created by cdrom-detect.postinst in line 96
  mkdir /cdrom 2>/dev/null || true
)

Now there should be log messages. Either
  CD-ROM mount succeeded: device=/dev/sdc1 fstype=iso9660
or
  CD-ROM mount failed: device=/dev/sdc1 fstype=iso9660

In case of success, the /cdrom/.disk/info decides whether Debian ISO
or not:

               if [ -e /cdrom/.disk/info ]; then
                        CDNAME=$(cat /cdrom/.disk/info)
                        log "Detected CD '$CDNAME'"

In my test it exists and the log should say

  Detected CD 'Debian GNU/Linux buster-DI-alpha2 "Buster" - Official Snapshot amd64 DVD Binary-1 20171205-15:32'

In case of failure there would be:

  The CD in /dev/sdc1 is not a Debian CD!

But because the GPT does not have a mountable partition with the ISO,
and the EFI partition was mountable as FAT, we get the slightly misleading
message about an unsuitable CDROM.

This message can be emitted with isohybrid USB sticks and with "usb-hdd"
sticks (which i assume are the ones with the interesting FAT filesystems).

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

Have a nice day :)

Thomas


Reply to: