Żeby zabootować komputer po sieci przy użyciu protokołu PXE, należy posiadać:
1) boot-(e)(p)rom w karcie sieciowej
2) tzw. bootstrap
3) serwer DHCP przekazujący rozszerzone informacje PXE (nie ujęte chyba w żadnym RFC)
4) serwer TFTP
ad. 1) Przypuszczam, że większość współczesnych kart sieciowych zintegrowanych bądź na PCI posiada boot-rom - moje 2 najtańsze sieciówki na PCI, wybierane losowo, mają boot-rom. Jeżeli mamy kartę ISA/PCI bez boot-romu, za to z podstawką do jego instalacji i nie mamy widoków na zdobycie kości bądź innej karty, to na stronie
http://rom-o-matic.net/ możemy sobie wygenerować obraz dla posiadanej karty sieciowej i wgrać sobie do (e)epromu. Można też wygenerować sobie obraz na dyskietce celem sprawdzenia czy się nada, i - być może - uniknięcia traktowania ultrafioletem pamięci EPROM.
ad. 2) znalazłem tylko jeden, ale dość sensowny:
http://syslinux.zytor.com/pxe.php. Bezpośrednio umożliwia on zabootowanie jądra Linuksa (zakładając że mamy wkompilowaną obsługę NFS i serwer NFS w sieci), ponadto dzięki modułowi memdisk można wgrać obraz dyskietki do wirtualnego ram-dysku.
ad. 3) dhcpd autorstwa isc może przekazywać co trzeba (tzn. m. in. nazwę pliku) - obawiam się jednak że nie ma portu pod windows ani pod cygwina. Pod windows można użyć np.
http://tftpd32.jounin.net. Przypuszczam że microsoftowy serwer dhcp w serwerowych odmianach Windows też by działał.
ad. 4) serwer tftp jest w serwerowych edycjach windowsów; poza tym wspomniany program
http://tftpd32.jounin.net może spełniać podobną rolę. (szkoda tylko że nie umożliwia konfiguracji na stałe adresu IP bez bramy i nie działa jako usługa).
Gdy zdobędziemy wszystkie elementy to:
1) w tftpd32 na karcie Boot File wskazujemy plik z bootstrapem
2) w katalogu z bootstrapem możemy sobie utworzyć podkatalog pxelinux.cfg w którym możemy umieścić plik o nazwie takiej jak adres fizyczny interfejsu sieciowego (np. 01-00-06-12-47-52-31) o składni podobnej do lilo, dzięki czemu określony plik może się ładować automatycznie. Przykładowa zawartość:
DEFAULT MS-DOS
TIMEOUT 1
label knoppix
kernel memdisk
append initrd=k.img
label MS-DOS
kernel memdisk
append initrd=msdos.img
label netware
kernel memdisk
append initrd=moj.img
pierwszy wiersz określa domyślny obraz do załadowania, drugi - czas w jakim możemy zrezygnować z ładowania domyślnego obrazu w sekundach, dalej następują definicje kolejnych pozycji - label to nazwa danej pozycji, kernel - nazwa pliku do załadowania, append - parametry przekazywane do ładowanego pliku.
Na protokole RPL niestety nie znam się (filozofia w każdym razie wygląda podobnie).