Difference between revisions of "Building PXE-ready ReactOS"

From ReactOS Wiki
Jump to: navigation, search
(Categories)
(Describe contents of TFTP server)
Line 1: Line 1:
Development goes on in 2011 :-)<br />
+
Development goes on in 2012 :-)<br />
 
<br />
 
<br />
 
ReactOS PXE Project Team:<br />
 
ReactOS PXE Project Team:<br />
 
[[User:Xpert|Xpert]]<br />
 
[[User:Xpert|Xpert]]<br />
Shao of [http://www.etherboot.org/wiki/ Etherboot-project]
+
Shao of [http://www.etherboot.org/wiki/ Etherboot-project]<br />
 +
[[User:Hpoussin|hpoussin]]
 
<br />
 
<br />
  
 +
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.
  
== Prepare LAN ==
+
== Preparing the LAN ==
  
For this scenario we need two computer. One client (may be diskless or empty HDD), one server (Windows or better Linux).
+
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.
Both have to be connected to the local network.
 
  
The server must running a DHCP-server and a TFTP-server. Additionally we need a pxe-client: pxelinux.
+
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.
The client need a pxe-ready network card. Most onboard network card are capable.
 
  
Pxelinux config in /srv/tftp/pxelinux.0
+
== 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
  
DEFAULT vesamenu.c32
+
=== The Linux way ===
MENU BACKGROUND bootscreen.png
 
 
PROMPT 0
 
NOESCAPE 1
 
TIMEOUT 200
 
MENU WIDTH 45
 
MENU MARGIN 9
 
MENU PASSWORDMARGIN 9
 
MENU ROWS 14
 
MENU TABMSGROW 25
 
MENU CMDLINEROW 18
 
MENU ENDROW 25
 
MENU PASSWORDROW 18
 
MENU TIMEOUTROW 24
 
MENU HSHIFT 1
 
MENU VSHIFT 5
 
 
menu color screen 37;40 #80ffffff #00000000 std
 
menu color border 37;40 #40000000 #ff8093a1 std
 
menu color title 1;37;40 #ffff8b00 #ff8093a1 std
 
menu color unsel 37;40 #fff0f0f0 #ff8093a1 std
 
menu color hotkey 1;37;40 #ffff8b00 #ff8093a1 std
 
menu color sel 7;37;40 #ff1c2a33 #667799bb all
 
menu color hotsel 1;7;37;40 #ffff8b00 #667799bb all
 
menu color scrollbar 37;40 #40000000 #ee000000 std
 
menu color tabmsg 37;40 #ffff8b00 #ff8093a1 std
 
menu color cmdmark 1;37;40 #ffff8b00 #ff8093a1 std
 
menu color cmdline 37;40 #fff0f0f0 #ff8093a1 std
 
menu color pwdborder 37;40 #40000000 #ff8093a1 std
 
menu color pwdheader 37;40 #ffff8b00 #ff8093a1 std
 
menu color pwdentry 37;40 #ffff8b00 #ff8093a1 std
 
menu color timeout_msg 37;40 #afac2a33 #00000000 none
 
menu color timeout 1;37;40 #ffff8b00 #00000000 std
 
menu color help 37;40 #ff1c2a33 #00000000 none
 
menu color msg07 37;40 #90ffffff #00000000 std
 
 
MENU AUTOBOOT Selection starts in # seconds
 
 
MENU TITLE Menu
 
 
label harddisk
 
        localboot 0x80
 
        MENU DEFAULT
 
 
label ReactOS live
 
 
(new options here)
 
 
label pxelinux
 
        kernel 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.
 
I used dhcp3 and tftpd-hpa. Use your favorite Linux and install them. I used Bind at home, but you can leave that out.
Line 118: Line 67:
 
         user            = root
 
         user            = root
 
         server          = /usr/sbin/in.tftpd
 
         server          = /usr/sbin/in.tftpd
         server_args    = -vv -s /srv/tftp/
+
         server_args    = -vv -s /path/to/tftpboot/
 
         bind            = IPofYourServer
 
         bind            = IPofYourServer
 
  }
 
  }
  
===The Windows way===
+
=== The Windows way ===
 +
 
 
On the Windows server, a combination of the free tools [http://tftpd32.jounin.net TFTPD32] (you'll only need the DHCP server!) and the [http://www.solarwinds.com/products/freetools/free_tftp_server.aspx SolarWinds TFTP server] (because the built-in server of TFTPD32 does not work well with its DHCPD) has been proven working.
 
On the Windows server, a combination of the free tools [http://tftpd32.jounin.net TFTPD32] (you'll only need the DHCP server!) and the [http://www.solarwinds.com/products/freetools/free_tftp_server.aspx SolarWinds TFTP server] (because the built-in server of TFTPD32 does not work well with its DHCPD) has been proven working.
  
In your TFTP working directory, you'll need a config file ''pxelinux.cfg/default'' (no extension) with these contents:
+
Remember that both DHCP and TFTP servers should be running and there should not be another DHCP server in the same network.
  
  DEFAULT menu.c32
+
== Creating contents on TFTP server ==
 +
 
 +
You need to download some ReactOS ISO file, for example [http://downloads.sourceforge.net/reactos/ReactOS-0.3.14-REL-live.zip 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 [https://www.kernel.org/pub/linux/utils/boot/syslinux/syslinux-4.05.tar.gz 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)"
 
   
 
   
  PROMPT 0
+
  [LiveCD]
  NOESCAPE 1
+
  BootType=Windows2003
  TIMEOUT 200
+
  SystemPath=ramdisk(0)\reactos
 +
Options=/MININT /RDPATH=net(0)\ReactOS-LiveCD.iso /RDEXPORTASCD
 
   
 
   
  label ReactOS
+
  [LiveCD_Debug]
  (new options here)
+
BootType=Windows2003
 +
SystemPath=ramdisk(0)\reactos
 +
  Options=/DEBUG /DEBUGPORT=COM1 /BAUDRATE=115200 /SOS /MININT /RDPATH=net(0)\ReactOS-LiveCD.iso /RDEXPORTASCD
 
   
 
   
  label pxelinux
+
  [LiveCD_Screen]
        kernel pxelinux.0
+
BootType=Windows2003
 +
SystemPath=ramdisk(0)\reactos
 +
Options=/DEBUG /DEBUGPORT=SCREEN /SOS /MININT /RDPATH=net(0)\ReactOS-LiveCD.iso /RDEXPORTASCD
  
This config file provides a simple boot menu which allows you to boot the ReactOS live image. Remember that both DHCP and TFTP servers should be running and there should not be another DHCP server in the same network.
+
== Booting ==
  
== 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.
  
something changed at the ReactOs boot loader, so we try a new way to boot with PXE.
 
 
[[Category:Building]]
 
[[Category:Building]]
 
[[Category:Tutorial]]
 
[[Category:Tutorial]]

Revision as of 18:02, 4 March 2012

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.