Difference between revisions of "Building PXE-ready ReactOS"
Jedi-to-be (talk | contribs) (fixed iso link and changed order a bit) |
|||
Line 20: | Line 20: | ||
Install a TFTP server and a DHCP server on the remote computer. These steps will be only lightly covered here. | 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 | Let's assume now that your TFTP server root is in /path/to/tftpboot, and that PXE boot filename is pxelinux.0 | ||
+ | |||
+ | == Creating contents on TFTP server == | ||
+ | |||
+ | Download a ReactOS ISO file, for example [https://sourceforge.net/projects/reactos/files/ReactOS/0.4.5/ReactOS-0.4.5-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 must download SysLinux 4.05, or a more recent version (but at the moment all newer versions than 4.X have the regression in 'keeppxe' option and do not work with ReactOS), for example [https://www.kernel.org/pub/linux/utils/boot/syslinux/ 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 | ||
+ | |||
+ | NOTE: Since revision {{rev|65982}} you can specify the file for /RDPATH the "usual" (i.e. Windows') way, i.e. without the "net(0)\" part (that was here just because we couldn't load the file relative to the "current boot device" before...). | ||
+ | |||
=== The Linux way === | === The Linux way === | ||
Line 106: | Line 173: | ||
chain.c32 freeldr.ini freeldr.sys pxelinux.cfg/default ReactOS-LiveCD.iso ROSPXE.pxe | chain.c32 freeldr.ini freeldr.sys pxelinux.cfg/default ReactOS-LiveCD.iso ROSPXE.pxe | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== Booting == | == Booting == |
Revision as of 20:24, 21 June 2017
This sub-project has been suspended because of poor support for PXE and UEFI.
You can use a Linux-Live-CD as a substitute.
ReactOS PXE Project Team:
- Xpert
- Shao of Etherboot-project
- hpoussin
- Heis Spiter
Revision r51517 of ReactOS introduced support for PXE boot. It is now (r65903) possible to completely load the OS from a client computer. Freeldr must be compiled with GCC (MSVC builds present a bug at the moment), the rest can be compiled either by GCC or MSVC.
Contents
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 must be connected to the local network.
The server must run a DHCP-server and a TFTP-server. The client must have a PXE-ready network card. Most onboard network cards support it.
Preparing the server
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
Creating contents on TFTP server
Download a 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 must download SysLinux 4.05, or a more recent version (but at the moment all newer versions than 4.X have the regression in 'keeppxe' option and do not work with ReactOS), 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
NOTE: Since revision r65982 you can specify the file for /RDPATH the "usual" (i.e. Windows') way, i.e. without the "net(0)\" part (that was here just because we couldn't load the file relative to the "current boot device" before...).
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 to work.
Remember that both DHCP and TFTP servers should be running and there should not be another DHCP server in the same network.
Jedi-to-be has discovered that the TFTPD32-only setup works well too. See screenshots for details.
See this video for demonstration https://www.youtube.com/watch?v=5ycbPb4KgY8 by Jedi-to-be
The QEMU way
Add "-net nic -net user,bootfile=pxelinux.0,tftp=/path/to/tftpboot" to your usual QEMU command line.
The VirtualBox way
Note that to have it working, you must use NAT network configuration for your VM (virtual machine), and only one of the PCnet network cards. Otherwise, it won't work.
You must move your TFTP root directory into your personnal VBox directory using the name TFTP. For instance, in Linux, it would be in ~/.VirtualBox/TFTP For instance, in Windows 7, it would be in С:\Users\UserName\.VirtualBox\TFTP
You then must rename the pxelinux.0 file to VMName.pxe where VMName is the name of your VM in VBox. Then, in this TFTP directory, proceed as with any other TFTP configuration described upper.
For instance, if your VM is named "ROSPXE", your ~/.VirtualBox/TFTP will contain:
chain.c32 freeldr.ini freeldr.sys pxelinux.cfg/default ReactOS-LiveCD.iso ROSPXE.pxe
Booting
Try to boot your client computer via PXE. After some seconds, a RAM disk is loaded and ReactOS starts.