Booting Haiku remotely over a local network.

The root Haiku disk image (raw variant) can be booted remotely over the local network as of recent versions. This is especially useful when an architectures boot and kernel issues need to be troubleshot.

In the example below we will cover remote booting Haiku on various architectures. At the moment this is mostly geared toward developers.

Pre-requirements

  • Required: Linux build tools
  • Required: Haiku source code and build environment
  • Required: Enough memory on the test system. (Size of haiku.image + 256MB should work)
  • Required: haiku.image file generated by ` jam -q haiku-image `
  • Optional: TFTP Server (for pushing out boot loader on some architectures)

The remote disk server

The Haiku sources include a remote disk server which listens for UDP requests from the Haiku boot loader. When a network UDP request for the disk image is received from the boot loader, it is provided over the network to the test system.
  • Spawning the remote disk server

    Starting the remote disk server is fairly straight forward using the Jam tool. Starting the remote disk server should be performed prior to starting the boot loader on the test system.
    $ jam -q run ':remote_disk_server' ./generated/haiku.image
    ...found 109 target(s)...
    ...updating 1 target(s)...
    RunCommandLine1 run_0
    
    The remote disk server will need to be killed via CTL+c and re-spawned each time the haiku disk image changes.
  • Remote disk server request

    After the remote disk server receives a request, it will begin to push the provided disk image out to the Haiku boot loader running on the test system...
    HELLO request
    READ request: offset: 0, 512 bytes
    READ request: offset: 1024, 512 bytes
    READ request: offset: 2048, 512 bytes
    READ request: offset: 3072, 512 bytes
    READ request: offset: 4096, 512 bytes
    READ request: offset: 5120, 512 bytes
    READ request: offset: 6144, 512 bytes
    READ request: offset: 7168, 512 bytes
    READ request: offset: 0, 512 bytes
    READ request: offset: 67108864, 232 bytes
    READ request: offset: 67110912, 1024 bytes
    READ request: offset: 67111936, 1024 bytes
    READ request: offset: 67110912, 1024 bytes
    READ request: offset: 67111936, 1024 bytes
    .
    .
    

Booting the system

Booting methods vary from architecture to architecture. Generally the platform's boot loader should perform the search for remote disk images prior to the Haiku menu.
The completeness of remote disk booting may vary based on architecture. The architectures below are known working at the time of this guide's writing, your mileage may vary.
  • x86
    The x86 version of the Haiku boot loader can be booted via a PXE server.
    • PXE Boot
      Generate the x86 PXE bootloader via...
      TARGET_BOOT_PLATFORM=pxe_ia32 jam -q pxehaiku-loader haiku-netboot-archive
      The image generated can be booted via a DHCP by placing both files generated above on a TFTP server and pointing to the loader via the DHCP 'next-server/filename' options.
  • PowerPC
    The PowerPC version of Haiku can be started headless via TFTP or CD.
    • TFTP boot
      Copy the boot_loader_openfirmware boot binary to your build system's TFTP share.

      At the OpenFirmware prompt, execute the following OpenFirmware command replacing TFTP_SERVER_IP with the IP of the tftp server. Optionally you can specify the test systems client address via MY_IP_ADDRESS.
      boot enet:TFTP_SERVER_IP,boot_loader_openfirmware<,MY_IP_ADDRESS>