bezdyskowy, bootowalny z netu linux - bardzo dobre rozwiązanie na printserwera i bardzo pouczająca zabawa ;-)

Jeśli jesteś szczęśliwym posiadaczem sieciówki z BOOT-ROM'em (jak ja ;-) to nawet stacji dyskietek nie potrzebujesz !
Potrzebujesz serwera DHCP/BOOTP i serwera NFS z wyeksportowanym katalogiem - jako root file system dla klienta.

jak to działa ?

Komputer bezdyskowy - dalej nazywany klientem - w momencie startu (w tej chwili nieważne czy z dyskietki czy z BOOT-ROM-u) wysyła żądanie DHCP o przydzielenie adresu IP oraz pliku jądra systemu operacujnego (u mnie akurat linux, ale może być każdy unix). Serwer DHCP może przydzielać adres IP na podstawie adresu sprzętowego karty sieciowej (MAC) klienta - dlatego dla różnych klientów możesz przesyłać różne jądra (różnych systemów). Przesyłanie kernela odbywa się po TFTP, dlatego na serwerze musi działać ta usługa.

Po przesłaniu pliku (kilka sekund) startuje właściwy system - wizualnie startuje jądro linuxa. Teraz przychodzi kolej na montowanie głównego systemu plików (/), którego kernel podmontowuje sobie przez NFS. Później już tylko wykonywanie skryptów startowych z /etc/rc.d i mamy normalnego linuxa.

proste co ? - ale nie aż tak ;-)

postaram się teraz opisać w punktach co trzeba po kolei robić

Teraz ważny moment - musisz określić, czy serwerem NFS - czyli tym, który "udostępnia" cały RootFileSystem linuxa będzie ten sam komputer, który jest też DHCP, albo to inna maszyna. Większość przykładów w sieci zakłada, że wszystko robi jeden serwer - wtedy jest prościej. Uruchamiasz tylko usługi DHCP, TFTP (opis wyżej) i eksportujesz RootFileSystem.

W moim przypadku było jednak inaczej. U mnie istniał już serwer DHCP na FreeBSD, ale to bardzo wolny komputer z malutkim dyskiem, dlatego eksportować musiał inny serwer. Problem można rozwiązać na dwa sposoby:

W pierwszym przypadku wszystko jest raczej jasne.
W drugiej metodzie przekażemy kernelowi na stałe adres IP serwera NFS:

Użyjemy ściągniętego wcześniej narzędzia mknbi. Zalecam szybkie przeglądnięcie manuala - nie jest długi i dośc konkretny. Ja użyłem takich opcji:
mknbi-linux -a 'root=/dev/nfs nfsroot=192.168.1.2:/export' --ip=dhcp --output=nowe_jajko bzImage
które ozaczają

Masz już gotowego dhcpd i przygotowanego kernela. Teraz musisz wyeksportować RFS. Nie będę się tu dużo rozpisywał bo są gotowe HOW-TO na ten temat. Stwórz sobie jakiś katalog na serwerze (tym który ma udostępniać) - ja zrobiłem /export. Nadałem mu prawa 700 root.root i dopisałem do /etc/exports (man nfsd !)    `cat /etc/exports` :

	    /export            192.168.1.39(rw,no_root_squash)
	
oczywiście musisz podać tu właściwy IP klienta i przeładować rpc.nfsd - tailując jednocześnie /var/log/messages ;-)
W eksportowanym katalogu ma być nic innego jak właśnie system plików linuxa - czyli :

Mamy dhcp + gotowego kernela, mamy wyeksportowanego NFS'a - kolej na ostatnią fazę - bootowanie z sieci.

Zacznę jednak od bootowania z dyskietki, która zawiera ROM sieciówki. Wraz z pakietem etherboot są dołączone obrazy pamięci ROM dla większości popularnych kart. Odszukaj pliki o rozszerzeniach lzrom (find / -name '*.lzrom') i znajdź model swojej karty. Jeśli nie ma akurat tego modelu (wątpliwe - tego jest tam mnóstwo) - możesz spróbować ściągnąć ROM karty ze strony http://rom-o-matic.net - zapisuj go jakąś pewną przegladarką, gdzieś pisało że IE psuje pliki.Pod lynxem działa napewno.

Mając już zlokalizowanego lzorma - dla przykładu rtl8029.lzrom (bardzo popularna karta) - przygotuj sobie dyskietkę (nie musi byc pusta, byle sprawna) i wpisz coś takiego : cat boot1a.bin compressed/rtl8029.lzrom > /dev/fd0
plik boot1a.bin jest także dołączony do pakietu etherboot - będzie mniej więcej tam gdzie lzromy (u mnie lzromy były w podkatalogu compressed)

To polecenie błędu napewno nie zwróci, chyba że nie masz flopa na /dev/fd0 albo dyskietkę zabezpieczyłeś przez zapisaem. Jeśli wszystko poszło OK to możesz spróbować uruchomić komputer z tej właśnie dyskietki

Wizualnie wygląda to tak - komputer tylko moment czyta z dyskietki - ROM karty ma przecież kilkanaście KB. Na ekranie zobaczysz info o autorach softu oraz parametry sieciówki (o ile ją wykrył) - numer MAC, przerwanie, pełna nazwa itp. Jest też pytanie czy bootować lokalnie (L) czy z sieci (N) - po 5-ciu sekundach domyślnie wybierane jest bootowanie z sieci

W pierwszej fazie zobaczysz żądanie DHCP (DHCP REQUEST) oraz po chwili serię "kropek" -- wtedy przesyłany jest kernel po TFTP. Jeśli do tego momenu się zgadza to po chwili zobaczysz start jądra linuxa, który powinien też wykryć kartę sieciową - jeśli nie wykryje - to możesz od razu wrócić do punktu kompilacji kernela i skompilować od nowa...

W pewnym momencie na ekranie widać (już po rozkompresowaniu jądra) napis :
bootserver=adres_IP     rootserver=adres_IP    - sprawdź czy się zgadzają

Powodów dlaczego system się nie załadował jest całe mnóstwo i trudno cokolwiek poradzić nie znając szczegółów, dlatego trzymaj się takiej kolejności:

Bootowanie bez dyskietki

Opiszę na modelu karty 3Com 905C TX-M. Karta dość droga, ale dobra - bo ma wbudowanego BOOT-ROM'a - nie trzeba nic dokupywać. Dalej będę używał określenia "ROM karty", ale tak naprawdę nie jest to pamięć EPROM. Można ją programowo (czyli elektrycznie) kasować i programować bez użycia spacjalnego programatora. Jest to jakiś układ podobny do nowych BIOS-ów płyt głównych. Mniejsza z tym, ważne że jest i działa.

Teoretycznie "ROM" tej karty może pobrać plik po TFTP, ale jak się okazało po 4h walki, jądro linuxa (choćby miało 300KB) jest za duże i chcąc zachować oryginalnego "ROM-a" trzeba by najpierw pobrać po TFTP obraz lzrom (ten z pakietu etherboot), następnie podmienić MAC-a sieciówki (żeby DHCP "widział" nas jako inną kartę i przydzielił inny plik - jądro linuxa). Ja zdecydowałem się na wymazanie firmowego "BOOT-ROM'a" i zastąpienie go po prostu lzromem z pakietu etherboot.

Kolejnym składnikiem pakietu ethreboot jest program cromutil - dostarczony w postaci źródła gdzieś w podkatalogu etherboot-5.0.8/contrib/3c90xutil/ - przejrzyj plik README - jest tam napisane jak należy go skompilować i jak UŻYWAĆ. Zwróć uwagę, że dla modeli 3C905B jest inny program niż dla 3C905C !

nie zapomnij zbackupować firmowego ROM-a i pamiętaj żeby w miejsce przykładowego adresu IO podać adres swojej karty - odczytasz go poleceniem lspci -v

składnia polecenia cromutil jest taka :

	    ./cromutil TWOJ_ADRES_IO read > 905cbackup.bin
	    ./cromutil TWOJ_ADRES_IO erase
	    ./cromutil TWOJ_ADRES_IO prog < 3c90x.lzrom
	

Zapisanie nowego programu trwa moment, jeśli czekasz już ponad 10 sekund to chyba nie wybrałeś właściwego adresu IO (skąd ja to znam ;-) Jeśli wszystko poszło OK to od teraz mozesz bootować komputer z samej karty sieciowej - flopa i dyski możesz wyciągnąć !

W przypadku kart, które mają tylko podstawkę pod pamięć EPROM musisz wybrać się do sklepu elektronicznego i kupić kostkę:

Najlepiej kup 27c256 (32KB) i będzie pasowało do wszystkich kart. Obie kości mają 28 nóżek i pasują do podstawek na kartach. Cena tych układów to około 5 zł. Mając już kość musisz ją tylko zaprogramować na programatorze EPROM-ów. Jeśli masz programator to pewnie wiesz jak się to robi, a jeśli nie masz to przekaż komuś kto ma i podaj mu tylko plik lzrom swojej karty - więcej mu info nie trzeba.
Po zaprogramowaniu EPROM-a i włożeniu do podstawki musisz w BIOS-ie karty go "uaktywnić", bo karta go chyba sama nie wykryje - przynajmniej tak musiałem robić w modelach Realteków na chipach 8029/8139 oraz 3COM 509. Razem z driverami do kart jest DOS-owy setup.exe (w Realtekach) i tam to można załączyć (podać mu trzeba ile kość ma KB - 32 albo 16). Dla 3COM-a plik ten się nazywa 3c5x9cfg - znajdziesz go na sieci.

no to byłoby na tyle, już mi się nie chce. W razie problemów mogę spróbować pomóc

powiem tylko że bardzo podoba mi się czas uruchamiania całego systemu - mocno skrojony Slackware startuje ~25 sekund ;-)


Ważne jest to, że płyta główna wcale nie musi mieć opcji bootowania z sieci ! Spokojnie działa na 386, które miały tylko A i C do wyboru ;-) Jeśli system nie zostanie znaleziony na urządzeniu podanym w BIOS-ie płyty, to funkcje bootowania przechwytuje karta i wszytko działa.

Dodam na koniec, że postawiłem na tym printserwery w pracy i działają super (386 40MHz , 8MB RAM-u ;-)

przydatne linki:


^marek/(o)\rojcanet/(-)pl$