Jeżeli powyższe dokumenty nie wystarczyły Ci, to zapraszam do przeczytania mojego opisu: ;)
Na początku może spróbuję wyjaśnic co to jest ów Terminal. W skórcie można powiedzieć, że jest to komputer spełniający rolę końcówki sieciowej. Osoba pracująca przy takim terminalu korzysta z zasobów serwera. Czyli wszelkie programy są uruchamiane na serwerze. Uruchomione programy korzystają z procesora, RAMu, dysków serwera. Terminal służy jedynie do komunikacji użytkownika z serwerem. Rozwiązanie takie ma sporo zalet. Terminal nie musi być wyposażony w dysk twardy, może posiadać "słaby" procesor i nie musi posiadać sporej ilości pamięci operacyjnej (minimum 4MB dla trybu tekstowego, 8-16MB dla trybu graficznego). Do budowy takiego Xterminala może oczywiście posłużyć stary PC, w przyadku chęci korzystania z trybu graficznego warto wyposażyć go w kartę graficzną zdolną do wyświetlania większej liczby kolory (więcej niż 256) i pracy w wyższych rozdzielczościach.
Jak działać będzie taki (X)termnial ? Po starcie kernela, terminal uzyska przy pomocy bootp swój adres IP, oraz adres routera i inne informacje dotyczące sieci. "podmountowanie" za pomocą NFS mini root filesytemu, a następnie - zależnie od konfiguracji - start Xów (X -query serwer) lub też np. ssh -l user serwer.
Pierwszym (najprostszym) etapem jest skonfigurwanie terminala (klienta).
Konfiguracja kernela dla takiego terminala powinna w sobie zawierać wpsarcie dla TCP/IP, wsparcie dla karty sieciowej (takiej jaka będzie znajdować się w naszym terminalu). Dodatkowo warto pamiętać o wkompilowaniu wsparcia dla NFS tudzież dla BOOTP i opcjonalnie dla RARP.
Networking options ---> [*] IP: kernel level autoconfiguration [*] BOOTP support (NEW) [*] RARP support (NEW) Filesystems ---> Network File Systems ---> <*> NFS filesystem support [*] Root file system on NFS (NEW)
Tak skompilowany kernel, może być załadowany na bardzo wiele sposobów. Jednym z nich może być użycie dosowego pogramu loadlin.exe Start loadlina, może odbywać się np. z systemowej dyskietki DOS Wpisujemy do autoexec.bat następującą linie:
loadlin zimage nfsroot=192.0.0.2:/image
Gdzie 192.0.0.2 to adres serwera, na którym udostępniony jest za pomocą NFS katalog /image. Innym sposobem "bootowania" terminala może być użycie LILO (LInux LOader) Przygotowanie dyskietki zostało opisane w nfsroot.txt oraz w NFS-Root.pl.txt Jeszcze innym sposobem jest użycie bootromów, oraz usługi TFTP (tej metody jednak nie opisuję). Mając skonfigurwany Xterminal, możemy przystąpić do konfigracji serwera:
Konfiguracja Serwera
Usługa będzie nam służyła do automagicznego nadawania adresów IP terminalom. Każdej karcie sieciowej będziemy przyporządkowywać zawsze ten sam numer IP, inaczej mówiąc adresowi sprzętowemu karty siecowej (MAC) jest przypisywany numer IP (zawsze ten sam)
Potrzebny będzie nam pakiet bootp. Usługę boot odpalamy z inetd: Fragment pliku /etc/inetd.conf bootps dgram udp wait root /usr/sbin/tcpd bootpd /etc/bootptab Plikiem konfigracyjnym dla usługi bootp jest plik /etc/bootptab Poniżej przedtawiam przykładową konfigurację:
.config:hd=/tmp:bf=null:\
:ds=195.205.208.1:\
:sm=255.255.255.0:\
:gw=195.205.208.1:\
:cs=195.205.208.1,195.205.208.1:\
:ht=ethernet:\
:to=-7200:
test:ha=0000C03D9567:ip=195.205.208.235:tc=.config
lt:ha=0000C0FCAD67:ip=195.205.208.234:tc=.config
Oznaczenia:
sm = Host subnet mask
gw = Gateway address list
cs = Cookie server address list
ds = Domain name server address list
ht = Host hardware type
to = Time offset in seconds from UTC
ha = Host hardware address
Szczegółowe informacje na temat konfigracji bootp można znaleźć oczywiście
w manualu do bootp, a szczególności w man bootptab
Aby przetestować działanie bootp, możemy użyć programu bootptest
Mająć skonfigurwane BOOTP, możemy przystąpić do konfiguracji NFS
Przede wszystkim musimy zaopatrzyć się w pakiet nfs-server bądź też w knfsd (RedHat), który umożliwi odpalenie NFS serwera. Musimy pamiętać również o odpowiednim skonfigurowaniu kernela, czyli:
Filesystems ---> Network File Systems ---> <*> NFS filesystem support [ ] Root file system on NFS <*> NFS server support
Udostępnienie mini root filesystemu Plikiem konfiguracyjnym od NFS serwera jest /etc/exports. Określamy w nim co, komu i na jakich zasadach ma być udostępnione. Przykładowo plik taki może wyglądać następująco:
/images *.wsisiz.edu.pl(r,all_squash)
Wszystkim maszynom z domeny wsisiz.edu.pl jest udostępniany katalog /images w trybie odczytu. W naszym wypadku klient (terminal) nie ma potrzeby mieć możliwość zapisywania czegokolwiek w tym katalogu! ;) Więcej informacji o opcjach pliku exports w man exports ;)
Tworzymy katalog, w którym umiejscowimy nasz mini root filesystem. Np. mkdir /images następnie tworzymy w nim katalog /etc /usr/ bin /var /proc /tmp czyli wszystkie te, które znajdują sie normalnie w root filesystemie. Następnie przekopiowujemy tylko to co niezbędne do tych katalogów. Czyli do /bin wystarczy przekopiować binaria takie jak: bash (ash),init mount,umount,ls,ld i XF86_XX (czyli X-serwery). Oczywiście to co znajdzie się w /bin zależy od inwidualny potrzeb. Dosyć istotną sprawą jest przekopiowanie odpowiednich bibliotek do katalou /lib. (cp -a /lib/ld.* /lib/libc.* /lib/libcursses.* /images). Przdatne może tu się okozać polecenie ldd, które pokazuje z czym są zlinkowane poszczególne binaria.
np.:
[lukasz@lt ]$ ldd /bin/bash
libtermcap.so.2 => /lib/libtermcap.so.2 (0x40019000)
libdl.so.2 => /lib/libdl.so.2 (0x4001e000)
libc.so.6 => /lib/libc.so.6 (0x40021000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Do katalogu /dev przekopiowujemy wszystkie te urządzenia, które będa używane w naszym terminalu (fd0). Jeżeli nie wiemy, które będa potrzebe, możemy przekopiować cały katalog /dev/ (np. cp -a /dev/ /images/) W katalogu /images/etc powinno się znaleźć pliki:
fstat, group, host,conf,inittab,ioctl.save,nsswitch.conf,passwd,profile protocols,services, rgb.txt, resolv.conf, ld.so.cache
Zapewnią one poprawny start maszyny oraz poprawne działanie binariów. Jeżeli do /bin przekopiowaliśmy jakiś program, który korzysta standardowo z dodatkowych plików z /etc powinniśmy je również przekopiować do katalog /etc/ naszego mini root-filesystemu. (np. w przyadku ssh /etc/ssh_config itp.)
Poniżej przedstawiam, jak mogą wyglądać przykładowe pliki z /etcPlik /etc/passwd root:x:0:0:root:/:/bin/bash Plik /etc/group root::0:root Plik /etc/host.conf order hosts,bind multi on Plik /etc/mtab dobrze jest zrobić linkiem do /proc/mounts, czyli: mtab -> /proc/mounts Plik /etc/inittab (dosyć istotny plik!) id:5:initdefault: x:1235:respawn:/bin/startxJak widać w pliku inittab domyślnym runlevelem jest 5 (tryb graficzny) i zaraz po uruchomieniu inita (pierwszy proces, który uruchamia się po załadowaniu kerenela) uruchamiany jest pogram startx. (Startowanie Xów) W naszym wpyadku startx może wyglądać tak:
#!/bin/ash mount -n /proc XF86_S3 -query 192.0.0.2 -nolock
Otóż jak widać startx mountuje "filesystem" /proc (opcja -n przy mount mówi, aby nie dokonywać zmian w /etc/mtab) i startuje X-serwer (przykładowo serwer dla kart S3) z opcja -nolock, która nie tworzy w katalogu /tmp żadnych plików "lockujących" opcja -query 192.0.0.2 mówi Xserwerowi aby podłączył się oczywiście do naszego serwera o numerze IP 192.0.0.2
Idealną sytuacją jest sytuacją kiedy wszystkie nasze terminale są wyposażone w identyczne komponenty. Wtedy wystarczy jeden plik XF86Config, jeden startx itp. Niestety może się okazać, że mamy różne karty graficzne w poszczególnych terminalach, co wtedy? Możemy stworzyć osobny katalog, który udstępnimy po NFS, a nim osobną, inną konfigurację. W przyadadku Xów można tworzyć osobne pliki XF86Config. Np. XF86Config.192.0.0.20, XF86Config.192.0.0.30 jak widać są to osobne configi dla osobnych komputerów. W tym wypadku X serwer autmoatycznie wczyta odpowiednią konfiguracje (plik) - maszyna o numerze IP 192.0.0.20 wczyta XF86Config.192.0.0.20 itp.
Poniżej przedstawiam wynik komend ls -R i ls -all -R wykonanych na serwerze, z któego jest udostepniany taki file-system:
Łukasz Trąbiński 15.01.2000