Building PXE-ready ReactOS

From ReactOS Wiki
Revision as of 18:02, 4 March 2012 by Hpoussin (talk | contribs) (Describe contents of TFTP server)
Jump to: navigation, search

Development goes on in 2012 :-)

ReactOS PXE Project Team:
Xpert
Shao of Etherboot-project
hpoussin

In revision 51517 in ReactOS was introduced support for PXE boot. It is still not possible to completly load the OS from a client computer.

Preparing the LAN

For this scenario, we need two computers. One client (may be diskless or empty HDD) and one server (Windows, or better, Linux). Both have to be connected to the local network.

The server must run a DHCP-server and a TFTP-server. The client needs a PXE-ready network card. Most onboard network cards support it.

Preparing the server

You first need to install a TFTP server and a DHCP server on the remote computer. These steps will be only lightly covered here. Let's assume now that your TFTP server root is in /path/to/tftpboot, and that pxe boot filename is pxelinux.0

The Linux way

I used dhcp3 and tftpd-hpa. Use your favorite Linux and install them. I used Bind at home, but you can leave that out.

# Sample configuration file for ISC dhcpd for Debian
# $Id: dhcpd.conf,v 1.1.1.1 2002/05/21 00:07:44 peloy Exp $
ddns-update-style none;
# option definitions common to all supported networks...
option domain-name "home.local";
option domain-name-servers 10.0.0.254;
# If this DHCP server is the official DHCP server for the local
# network, the authoritative directive should be uncommented.
authoritative;
# Use this to send dhcp log messages to a different log file (you also
# have to hack syslog.conf to complete the redirection).
log-facility local7;
subnet 10.0.0.0 netmask 255.255.255.0
{
        range 10.0.0.10 10.0.0.19;
        option domain-name-servers myserver.home.local;
        option domain-name "home.local";
        option routers IPofYourServer;
        option broadcast-address 10.0.0.255;
        default-lease-time 28800; # 8 hrs
        max-lease-time 86400; # 1 day
        allow bootp;

        host myclient
        {
                hardware ethernet 00:0F:EA:66:07:48;
                fixed-address myclient.home.local;
                filename "pxelinux.0";
                server-name "myserver.home.local";
        }
}

Check if present, xinetd/inetd config for tftpd.

service tftp
{
        disable         = no
        log_type        = SYSLOG daemon info
        log_on_access   = PID HOST USERID EXIT DURATION
        socket_type     = dgram
        protocol        = udp
        wait            = yes
        user            = root
        server          = /usr/sbin/in.tftpd
        server_args     = -vv -s /path/to/tftpboot/
        bind            = IPofYourServer
}

The Windows way

On the Windows server, a combination of the free tools TFTPD32 (you'll only need the DHCP server!) and the SolarWinds TFTP server (because the built-in server of TFTPD32 does not work well with its DHCPD) has been proven working.

Remember that both DHCP and TFTP servers should be running and there should not be another DHCP server in the same network.

Creating contents on TFTP server

You need to download some ReactOS ISO file, for example here

Put the ISO file in /path/to/tftpboot with the name ReactOS-LiveCD.iso

Extract loader/setupldr.sys to /path/to/tftpboot, and rename it to freeldr.sys


You need to download SysLinux 4.05, or a more recent version, for example here

Extract core/pxelinux.0 and com32/modules/chain.c32 to /path/to/tftpboot


Create /path/to/tftpboot/pxelinux.cfg directory and put in it a file named default (no extension) with the following contents:

DEFAULT chain.c32
APPEND file=freeldr.sys seg=0x0F80 keeppxe

Create /path/to/tftpboot/freeldr.ini with the following contents:

[FREELOADER]
DefaultOS=LiveCD_Debug
TimeOut=3

[Display]
TitleText=ReactOS LiveCD
StatusBarColor=Cyan
StatusBarTextColor=Black
BackdropTextColor=White
BackdropColor=Blue
BackdropFillStyle=Medium
TitleBoxTextColor=White
TitleBoxColor=Red
MessageBoxTextColor=White
MessageBoxColor=Blue
MenuTextColor=Gray
MenuColor=Black
TextColor=Gray
SelectedTextColor=Black
SelectedColor=Gray
ShowTime=No
MenuBox=No
CenterMenu=No
MinimalUI=Yes
TimeText=Seconds until highlighted choice will be started automatically:   

[Operating Systems]
LiveCD="LiveCD"
LiveCD_Debug="LiveCD (Debug)"
LiveCD_Screen="LiveCD (Screen)"

[LiveCD]
BootType=Windows2003
SystemPath=ramdisk(0)\reactos
Options=/MININT /RDPATH=net(0)\ReactOS-LiveCD.iso /RDEXPORTASCD

[LiveCD_Debug]
BootType=Windows2003
SystemPath=ramdisk(0)\reactos
Options=/DEBUG /DEBUGPORT=COM1 /BAUDRATE=115200 /SOS /MININT /RDPATH=net(0)\ReactOS-LiveCD.iso /RDEXPORTASCD

[LiveCD_Screen]
BootType=Windows2003
SystemPath=ramdisk(0)\reactos
Options=/DEBUG /DEBUGPORT=SCREEN /SOS /MININT /RDPATH=net(0)\ReactOS-LiveCD.iso /RDEXPORTASCD

Booting

Try to boot your client computer via PXE. After some seconds, a ramdisk is loaded and ReactOS starts. Don't expect it to boot fully. You'll probably be welcomed with a INACCESSIBLE_BOOT_DEVICE or IO1_INITIALIZATION_FAILED BugCheck.