1. Potrzebujesz stację z kartą najlepiej 1GBit . Jeżeli ma być multipowielenie, to potrzebujesz switch GBit obsługujący multicast (teraz już chyba standard).
2. na stacji instalujesz Linuksa, polecałbym Debiana 6, łatwo się go później tnie.
3. Instalujesz DNSMASQ i konfigurujesz go jako serwer DHCP i TFTP. Dodatkowo instalujesz pakiet SYSLINUX, jest tam kod PXE, BUSYBOX (komendy zintegrowane w jednym) i UDPCAST
4. Określasz mniej-więcej konfigurację sprzętową stacji docelowych, w szczególności kontroler HDD i kartę sieciową.
5. Robisz kernela zawierającego wszystkie potrzebne sterowniki maszyn docelowych wkompilowane do środka. Możesz olać USB, dźwięk, itp a grafikę ustawić na VGA. Dodatkowo w konfiguracji sieci włączasz autokonfigurację IP przy starcie systemu (taki w sumie klient DHCP w kernelu).
6. Konfigurujesz źródłową stację Windowsową. Instalujesz wszystkie potrzebne rzeczy, defragmentujesz dyski i czyścisz resztki jakimś wiperem (im więcej sektorów z zerami tym lepiej)
7. Traktujesz stację programem "sysprep" (poszukaj w sieci, autorstwo: Microsoft). Sysprep ma opcję "seal" "reseal" czy coś takiego. Generalnie wywala użytkowników, czyści seriala, nazwę i ID stacji. Przy następnym uruchomieniu system zapyta o to, coś jak _dobrze_ zrobiona instalacja OEM. Oczywiście PO sysprepie nie uruchamiasz już komputera, ma zostać "zadziewiczony".
8. Z płyty odpalasz Linuksa i zrzucasz obraz dysku (całego) dd do pliku na maszynie Debianowej. Wipe z punktu 5 pozwoli rozsądnie spakować plik obrazu.
Tricky part
9. Kernel z p.5 kopiujesz do katalogu udostępnionego przez TFTP, dodatkowo wrzucasz tam plik pxelinux.0 z pakietu SYSLINUX.
10. DNSMASQ konfigurujesz na podstawie
http://syslinux.zytor.com/wiki/index.php/PXELINUX (w sumie wystarczy w DHCP przekazać ścieżkę do pxelinux.0).
11. Robisz pxelinux.cfg tak, aby zasysał kernela z TFTP. W efekcie pusta stacja docelowa powinna odpalić się z sieci, załadowac kernela i zatrzymać się z błędem o brakującym "root file system" lub "init". Jezeli nie, to sprawdź konfigurację kernela, DNSMASQ i pxelinux.xfg.
12. robisz sobie katalog WORKSET
13. tam kopiujesz binarkę busybox do zrobionego podkatalogu jako "WORKSET/bin/sh" i za pomocą programu "ldd busybox" sprawdzasz biblioteki, których potrzebuje do pracy. Wszystkie potrzebne biblioteki dokopiowujesz do "WORKSET/lib". Potem dogrywasz tak samo do katalogu "WORKSET/bin/" plik udp-receiver i uzupełniasz biblioteki
14. wchodzisz do WORKSET
15. wykonujesz
find . | cpio --create --format='newc' | gzip -9 > ../initrd
i kopiujesz powstały plik initrd do katalogu TFTP.
16. Modyfikujesz konfigurację z p. 11 dodając do kernela opcję 'init=/bin/sh' i dopisując linijke INITRD pokazującą plik z p. 15
17. Znowu bootujesz stację docelową z sieci - tym razem powinna zgłosić się linia komend busyboxa. Jeżeli nie, posprawdzaj konfiguracje.
18. W WORKSET robisz plik WORKSET/sbin/init o treści
#!/bin/sh
udp-receiver --nokbd | dd of=/dev/sda
19. przegenerowujesz initrd (p. 14-15)
20. kasujesz wpis 'init=/bin/sh' z pxelinux.cfg (teraz jest "poprawny" init)
21. Na stacji źródłowej w katalogu z obrazami dysku uruchamiasz
# Dla kompresowanych obrazów
udp-sender --file OBRAZ.DD --pipe gunzip
# Dla nie kompresowanych obrazów
udp-sender --file OBRAZ.DD
Program powinien się "zwiesić"
22. Następne bootujesz z sieci jedną lub więcej stacji docelowych. Każda powinna zgłosić się w programie z p. 21
23. Na koniec na stacji źródłowej klepiesz ENTER, powinno zacząć powielać się na stacje docelowe.
24. Ważne, dzięki UDPCAST nie ma znaczenia, czy generujesz 1 czy 20 stacji, czas jest ten sam.