Could not boot: No such device

  • Server
    • FOG Version: 1.3.1
    • OS: Debian
    • OS: Windows 10

    Booting an ASUS H101H doesn’t work; I receive a ‘Could not boot: no such device (2c049087)’ error.
    Other devices are able to boot.

    the boot command is:

    set fog-ip || goto ERROR
    set fog-webroot fog || goto ERROR
    set boot-url || goto ERROR
    kernel loglevel=4 initrd=init.xz root=/dev/ram0 rw ramdisk_size=127000 web= consoleblank=0 rootfstype=ext4 mac=00:b5:6d:06:8f:bb ftp= storage= storageip= osid=9 irqpoll hostname=00b56d068fbb chkdsk=0 img=colorite_ASUS_H101H imgType=mps imgPartitionType=all imgid=18 imgFormat= PIGZ_COMP=-6 hostearly=1 pct=5 ignorepg=1 type=up || goto ERROR
    initrd || goto ERROR
    boot || goto ERROR

    the bzImage and init.xz are loaded correctly
    imgstat neatly lists both bzImage (with options) as the kernel, and init.xz as being downloaded.

    This device is a Tablet/Laptop; the Network controller is a Lenovo USB-Network device.
    The MAC is not being detected by ipxe (displays as 00:00:00:00:00:00)

    The FOG Default menu also errors with the same reply; I just changed it to be able to see the error.

  • @george1421 Bookmarked!

  • Moderator

  • @george1421 Thnx! I was waiting to crash on a x32 device to check what that arch would be, this helps :)

  • Moderator

    @abos_systemax That is correct that uuid field is / should be unique to the device (assuming the vendor uses it. its use is optional and up to the vendor to fix the formatting of that field). If what you have works, then no need to go deeper. Just remember this is an option.

    Also be aware there are other uefi systems you need to take into account. Arch 7 is EFI BC there is also, Arch 6 EFI x32 and Arch 9 EFI x64 (recited from a very old brain so your YMMV). But there are more archs you need to take into account or they will not boot with the bios firmware.

  • @george1421 That is ‘just’ the UUID of the device itself, not of the vendor/all other devices of this type?
    I could indeed use the UUID to push a certain ipxe.efi to this device; but the method I use now pushes that efi file to all devices with arch:0007, which also isn’t the real solution, but a working one for now. (the ‘rest’) will receive the normal ipxe.efi

  • Moderator

    @abos_systemax No that is option 60 (off the top of my head). If you look at your pcap of a dhcp boot in wireshark. The first dhcp discover from the client, contains dhcp option 97 .

    <edit> dang, I just found a pcap graphic on my system that will help explain. The one we are interested in is the UUID dhcp option 97. It would be interesting to know what your system has here.
    0_1485354360753_2016-11-16 13_46_52-1479321004414-output-1.pcap.png

  • @george1421 I take that you mean the ‘UNDI:003000’ part?

  • Moderator

    @abos_systemax FWIW, what you created was the detection between legacy (bios) mode and uefi BC mode. This will work, if you want you should be able to refine it a bit more if you look at dhcp option 97. The left part should be the machine hardware identifier. Not all hardware vendors use this field, but if they do then you can uniquely identify the hardware.

  • 0170  50 58 45 43 6c 69 65 6e 74 3a 41 72 63 68 3a 30   PXEClient:Arch:0
    0180  30 30 30 37 3a 55 4e 44 49 3a 30 30 33 30 30 30   0007:UNDI:003000
    0190  ff         

    this appears to work (Excerpt from dhcp config)

        filename "ipxe.efi";
        class "Legacy" {
        	### This is a BIOS client; do not sent en EFI file, that is silly!
        	match if substring(option vendor-class-identifier, 0, 20) = "PXEClient:Arch:00000";
        	filename "undionly.kpxe";
        class "Crappy_UEFI_Firmware" {
        	### This device uses crappy UEFI firmware, send the older ipxe7156.efi that apparently does work.
        	match if substring(option vendor-class-identifier,0,20) = "PXEClient:Arch:00007";
            filename "ipxe7156.efi";

  • Moderator

    @abos_systemax Chaining is possible.

    ISC gives you options. What you will need is a tcpdump capture of the target computer’s dhcp request. You can capture with tcpdump or wireshark as long as the target computer and the capture device are on the same subnet. You can use the filter port 67 or port 68 to capture the necessary discussion.

    It would be interesting to know the mac address, the values of dhcp option 60, 93, and what ever UUID is. Or just post the dhcp packet capture here and I can look at it.

  • @george1421 We are using ISC.

    Other Question; can you chain another efi file after the first one is loaded? (Will test but right now the image is creating :))

  • Moderator

    @abos_systemax The older version should work for all. Understand I’m saying this without first hand experience since we only have Dells and use the ipxe.efi kernel. But the older configuration should work, it may not support the latest firmware network drivers.

    What are you using to issue the boot file information to your devices MS DHCP, dnsmasq, or ISC DHCP? If its the two latter ones you can do thing based on the mac address or uuid of the device to send the specific files based on the hardware type.

  • @george1421 I.C… is there a way I can determine beforehand which ipxe.efi goes to what device? or can I use 7156 for all other devices as well?

  • Moderator

    @abos_systemax The iPXE kernel changed something (I don’t have the technical information what actually changed) a while back and the developers discovered that an older configuration of the iPXE kernel still worked. So they released both the new and older configurations. The ipxe7156.efi is the older configuration that works with some broken firmware (including the Surface Pros).

  • @george1421
    oh… that is intresting; the ipxe7156.efi appears to function.

    what do those numbers mean?

  • I am chaining ipxe.efi, which in turn loads default.ipxe (this functions)
    Then, boot.php detects the right MAC (it tries to boot to FOG).
    It loads bzImage, init.xz (both OK)
    then: Could not boot: No such device (2x)

    I also tried to chain bzImage32 and init32.xz manually, but they fail with an exec error.

    I do not get into the FOG client.

  • Moderator

    @abos_systemax said in Could not boot: No such device:

    FOG iPXE menu loads; but all the options are not working

    What iPXE kernel as you sending to the target computer (dhcp option 67)?

    Just to be clear, the iPXE menu is detecting an IP address and the part that is failing to get an IP address/detect the MAC address is the FOS Engine (the customized linux OS that captures and deploys images on the target)?

    Have you tested the ipxe7156.efi ipxe kernel to see if you have better success with that boot image.

    We have see similar issues with lenovos with faulty uefi firmware. It will load bzImage and the init.xz but fail to launch the bzImage kernel. This was traced to fault firmware. You might want to check to see if you have the latest firmware on this asus.

    Sorry about being all over the place on this, but its not clear why its failing yet. A clear image taken with a mobile may give better clues too.

  • This is a UEFI system
    SecureBoot is disabled
    FOG iPXE menu loads; but all the options are not working
    I manually added the host to FOG because I was unable to boot the device to Quick Registration (everything ends up with an exec error)

  • Moderator

    Is this a uefi for bios (legacy) system?

    If uefi did secure boot get disabled?

    Its not clear if the FOG iPXE menu is loading. The error might indicate that iPXE is loading, but it doesn’t have the driver for the usb nic adapter.

    From your iPXE kernel command you posted, it appears you are trying to capture an image with the fog server. Were you able to register the client successfully from the iPXE menu?

Log in to reply