Korytarz raport z placu boju (c) 2000 Piotr Rosiak & Daniel Rychcik 0. Wstęp Dokument ten opisuje budowę i zasadę działania sieci ogólnodostępnych terminali Wydziału Matematyki i Informatyki UMK w Toruniu. Zawarliśmy w nim nasze doświadczenia i uwagi powstałe przy budowaniu tejże sieci. Naszym głównym celem było ujednolicenie konfiguracji oraz ułatwienie dodawania nowych terminali. Osiągnęliśmy to przez zastosowanie nowszego X-Servera automatycznie rozpoznającego kartę graficzną, konfiguracji klientów opartej całkowicie na protokole BOOTP oraz przeniesieniu większej części obrazu na dysk routera montowany z użyciem NFS. Efektem dodatkowym jest przyspieszenie pracy w trybie X-Terminala wynikające z mniejszego zapotrzebowania na pamięć. I. TEORIA 1. Zasada działania BOOTP i TFTP Protokół BOOTP jest wykorzystywany do dwóch podstawowych celów: uzyskania przez maszynę bezdyskową adresu IP oraz ściągnięcia obrazu. Znalezienie adresu realizowane jest następująco: - Klient wysyła datagram BOOTP z adresem docelowym równym 255.255.255.255 (broadcast) w którym umieszcza swój adres sprzętowy i informuje o chęci uzyskania numeru IP. - Jeżeli w sieci znajduje się jakiś serwer BOOTP, to po otrzymaniu takiego zapytania przeszukuje swoją bazę danych (/etc/bootptab) i, jeśli znajdzie w niej wpis odpowiadający adresowi ethernetowemu zgłaszającego się klienta, wysyła odpowiedź zawierającą adres IP i ewentualnie nazwę pliku z obrazem startowym odpowiadającym danej maszynie. Odpowiedź BOOTP musi być również wysłana przy użyciu broadcastu, bo w tym czasie na serwerze nie ma jeszcze wpisów ARP odpowiadających nowo zgłoszonemu interfejsowi. - Jeżeli zapytanie klienta było związane np. z konfiguracją Linuxa przez pump, lub uruchomieniem dosowego telneta, wtedy klient kontynuuje prace używając otrzymanych danych do konfiguracji swoich interfejsów sieciowych. - Jeśli zaś informacja ta była potrzebna do uruchomienia komputera bezdyskowego, to klient łączy się z serwere przy użyciu protokołu TFTP w celu ściągnięcia obrazu startowego. Od strony serwera za działanie usługi odpowiedzialny jest program bootpd. Może on być uruchamiany przy starcie systemu, lub pracować pod kontrolą demona inetd. W tym drugim przypadku w pliku /etc/inetd.conf potrzebne jest następujący wpis: bootps dgram udp wait root /etc/bootpd bootpd bootptab Protokoły BOOTP i TFTP działają na portach 67-69. Odpowiednie linijki w /etc/services wyglądają następująco: bootps 67/tcp # BOOTP server bootps 67/udp bootpc 68/tcp # BOOTP client bootpc 68/udp tftp 69/udp Głównym elementem konfiguracji BOOTP jest plik /etc/bootptab. Dla każdego klienta możemy zdefiniować kilka parametrów bootowania. Ważniejsze z nich to: bf - Nazwa pliku z obrazem startowym dn - Nazwa domenu ds - Adres (adresy) DNS gw - Adres bramki ha - Adres sprzętowy hd - Katalog pliku z obrazem ht - Rodzaj karty sieciowej ip - Adres IP rp - Ścieżka do zamontowania jako / sm - Maska podsieci tc - Wzorzec W naszym przypadku plik /etc/bootptab wygląda następująco: # Parametry domyślne dla wszystkich komputerów .default:\ :sm=255.255.255.128:\ # maska podsieci :gw=192.168.1.126:\ # bramka :ht=ethernet:\ # rodzaj karty sieciowej :vm=rfc1084: # format ramki BOOTP # Opisy konfiguracji poszczególnych terminali koryt01:ip=192.168.1.1:ha=0000c05c636b:bf=/tftpboot/DOSwd-5-300:tc=.default koryt02:ip=192.168.1.2:ha=0000c099a264:bf=/tftpboot/DOSwd-5-300:tc=.default ... koryt20:ip=192.168.1.20:ha=00c06c10a99d:bf=/tftpboot/TXTne-5-300:tc=.default 2. Emulacja BootPROMu z użyciem dyskietki - program makerom. Makerom to prosty program umożliwiający tworzenie dyskietek startowych emulujących BootPROM. Obraz stworzony przez niego wystarczy zgrać, używając polecenia dd, na dyskietkę i tak przygotowany komputer zachowuje się jakby miał kartę sieciową z BootPROMem. Jeżeli mamy kartę sieciową nie obsługiwaną przez makerom, to wystarczy dodać jej sterownik pakietowy do katalogu netboot/bootrom/netdrvr. Tworzenie dyskietek: root@router-k# ./makerom Bootrom configuration program, Version 0.8.1 (netboot) Copyright (C) 1995-1998 G. Kuhlmann The following 3 kernels are available: (1) kernelm.bin (2) kernel86.bin (3) kernel.bin Select the kernel you wish to user [1]: Do you want the bootrom to look for boot drives (y/n) [no] ? The following 10 network drivers are available: (0) user defined network driver ... (10) smc_wd.com ( Tutaj przykładowo konfigurujemy kartę SMC ) Select the network driver you wish to use [0]: 10 Enter command line arguments for network driver: 0x60 -o 0x300 Do you want to use the ANSI display driver (y/n) [yes] ? Do you want to use the packet driver debugger (y/n) [no] ? Do you want to specify the additional program (y/n) [no] ? Available output file typer (floppy image gets always created): (1) Raw binary ... Select the format you wish to use [1]: root@router-k#_ Programu makerom można również używać w sposób wsadowy podając wszystkie parametry w linii komend - patrz makerom(8). 3. Tworzenie obrazów startowych przy użyciu programu mknbi. Mknbi jest prostym programem który umożliwia stworzenie pliku z obrazem startowego RAM-dysku. Wywolujemy go w następujący sposób: root@router-k# ./mknbi 4. XFS Część DOS-owa konfiguracji terminala opiera się głównie na wykorzystaniu XFS - darmowej implementacji NFS dla systemu MS-DOS. Program jest dostępny w katalogu /src/msdos, natomiast nowsze wersje można znaleźć pod adresem: ftp://lwfws.uni-paderborn.de/pub/xfs/ Przed uruchomieniem XFS musimy zadbać o to, aby w pamięci był odpowiedni sterownik pakietowy zapewniający podstawową komunikację przy użyciu TCP/IP W naszym systemie sterownik pakietowy uruchamia się w pierwszym etapie startu - z RAM-dysku. To jest zresztą jedynym powodem, dla którego musi być kilka obrazów startowych - odpowiadają one różnym kartom sieciowym. Aby możliwe było zdalne montowanie katalogów, na serwerze musi działać demon nfsd. Jest on kontrolowany skryptem /etc/rc.d/init.d/nfsd - w sekcji /etc/rc.c/rc3.d powinien się znaleźć odpowiedni link. Powinien również istnieć plik /etc/exports, o standardowym formacie: /katalog/do/exportu adres.ip.lub.nazwa (opcje) Opcje stosowane przez nas to: ro: oznacza, że katalog może być montowany tylko do odczytu. all_squash: na zewnątrz wszystkie pliki będą widoczne jako pliki użytkownika anonymous. Po załadowaniu sterownika pakietowego należy załadować jądro systemu XFS poleceniem xfskrnl . Od tej pory możemy komunikować się z XFS za pomocą polecenia xfstool. Jego składnia to: xfstool polecenie parametry... xfstool @plik_polecen Składnię drugą stosujemy, gdy chcemy wykonać kilka poleceń naraz - wtedy zapisujemy je w pliku i xfstool uruchamiamy tylko raz. W naszym przypadku cała konfiguracja terminala dokonuje się właśnie poleceniem xfstool @init. Aby można było odwoływać się do nazw hostów należy również stworzyć plik hosts - ma on standardowy format. Ważniejsze polecenia xfstool to: - init { BOOTP | sm= gw= bs= } Inicjuje protokół TCP/IP korzystając z podanych parametrów lub przez BOOTP. Jeżeli w pliku hosts mamy wpisy "hostów" nazwanych: netmask, gateway i broadcast to wystarczy: init ) - mount : Montuje zdalny katalog jako dysk DOSowy. - mount : Montuje zdalną drukarkę. - umount | Odmontowuje drukarkę/katalog. - rdate Synchronizuje datę z podaną maszyną. - show Wyświetla stan montowanych dysków i drukarek. - unload Kończy pracę z XFS. II PRAKTYKA 1. Dodawanie nowego terminala. Dodawanie nowego terminala nie jest (już) rzeczą trudną. Nie udało nam się (jest to raczej niemożliwe) przygotować uniwersalnego obrazu, który pracowałby z dowolną konfiguracją sprzętową. Spowodowane jest to chociażby róznymi sterownikami pakietowymi do kart sieciowych. Aby dodać nowy terminal należy: - Przygotować dyskietkę startową emulującą bootprom (komenda makerom) oraz zapisać go na dyskietce komendą: dd if=nazwa_obrazu of=/dev/fd0 - Dopisać "nowy" komputer do następujących plików: * hosts w obrazie dyskietki startowej * router-k:/etc/bootptab (z właściwym obrazem) * router-k:/etc/ethers * router-k:/etc/hosts * ultra60:/etc/ethers * ultra60:/etc/hosts Należy wspomnieć jeszcze o minimalnych wymaganiach sprzętowych dla multi-terminala oraz terminala tekstowego. - Multi-terminal wymaga: * 486DX / 16MB RAM * 1 MB karty graficznej pracującej z serwerem XF86_SVGA * karty sieciowej * FDD * monitora pracującego w rozdzielczości 1024x768 - Do stworzenia terminala tekstowego potrzeba: * 286 / 2MB RAM * dowolnej karty graficznej z odpowiednim monitorem * karty sieciowej * FDD 2. Obrazy dla terminali. Obraz, który "ściągany" jest do komputera przy użyciu protokołu tftp ma za zadanie uruchomienie systemu operacyjnego (DOS 6.22) oraz w przypadku multi-terminala podmontowanie (przy pomocy XFS) dysku c, zaś w przypadku terminala tekstowego zawiera wszystkie niezbędne programy do obsługi telneta. - Obraz tftp dla multi-terminala: * autoexec.bat * command.com * config.sys * himem.sys * hosts - host dla xfstool * init - plik konfiguracyjny xfstool * io.sys * msdos.sys * ne2000.com - lub inny sterownik pakietowy * rmrd.com - usuwanie ram dysku * xfskrnl.exe - inicjalizacja xfs * xfstool.exe - program do obsługi xfs - Obraz tftp dla terminala tekstowego zawiera ponadto: * config.tel * enhanced.key * standard.key * telbin.exe * telnet.bat 3. XFS, dysk_c. Po starcie systemu operacyjnego autoexec.bat montuje dysk c:, który znajduje się na router-k:/korytarz/dysk_c/. Na eksoprtowanym przez router-k katalogu umieściliśmy oprogamowanie uruchamiające telneta (telbin.exe + ...) oraz Xterminal (loadlin.exe, vmlinuz, xterm.gz). root@router-k# ls -la /korytarz/dysk_c/ total 3142 drwxr-xr-x 2 root root 1024 Apr 1 1996 . drwxr-xr-x 9 root root 1024 Apr 1 1996 .. -rwxr-xr-x 1 root root 54645 Mar 7 13:39 command.com -rw-r--r-- 1 root root 2368 Apr 1 1996 config.tel -rw-r--r-- 1 root root 5569 Apr 1 1996 enhanced.key -rwxr-xr-x 1 root root 155 Mar 27 1996 init.bat -rw-r--r-- 1 root root 32208 Mar 8 12:38 loadlin.exe -rw-r--r-- 1 root root 3783 Apr 1 1996 standard.key -rwxr-xr-x 1 root root 268966 Mar 7 10:27 telbin.exe -rwxr-xr-x 1 root root 144 Mar 27 1996 telnet.bat -rw-r--r-- 1 root root 556743 Mar 31 1996 vmlinuz -rw-r--r-- 1 root root 1521204 Mar 27 1996 xterm.gz 4. Uruchamianie terminala tekstowego. - ładowany jest system DOS do RAM-dysku (jako a:) - użytkownik wybiera terminal tekstowy - uruchamiany jest sterownik pakietowy karty sieciowej - uruchamiany jest program xfskrnl.exe - uruchamiany jest program xfstool.exe, który montuje dysk c: - kasowany jest program a:\rmrd.com (po to, aby użytkownik nie mógł odmontować RAM-dysku i popsuć dyskietki) Konfiguracja pakietu XFS i telnet jest bardzo prosta i opiera się na prookole BOOTP. Plik konfiguracyjny xfstool.exe (a:\init) w naszym przypaku ma następującą postać: init BOOTP csum=off pcnfsd lrouter mount c: lrouter:/korytarz/dysk_c/ Do pracy xfstool.exe niezbędny jest także plik a:\hosts: 192.168.1.126 gateway 192.168.1.127 broadcast 255.255.255.128 netmask 192.168.1.126 lrouter 192.168.1.1 koryt01 ... 192.168.1.20 koryt20 Telnet wymaga pliku konfiguracyjnego config.tel: myip=bootp # najważniejsza linijka tek=yes video=vga bios=no ftp=no nfcolor=white # sekcja kolorów ... name=jan; host=jan.mat.uni.torun.pl; hostip=158.75.2.13; ... 5. Uruchamianie Xterminala. - ładowany jest system operacyjny do ram dysku (jako a:) - użytkownik wybiera Xterminal - uruchamiany jest sterownik pakietowy karty sieciowej - uruchamiany jest program xfskrnl.exe - uruchamiany jest program xfstool.exe, który montuje dysk c: - uruchamiany jest program a:\rmrd.com - startowanie linux'a (c:\loadlin.exe c:\vmlinuz root=/dev/ram initrd=xterm.gz) * wykonywana jest komenda /sbin/modprobe na wszystkich modułach kart sieciowych dostępnych w obrazie * /sbin/ifconfig eth0 up - "podniesienie" kart sieciowej * /sbin/pump - klient bootp dla linux'a * montowanie router-k:/korytarz/xterm/ jako /usr - fonty, XF86_SVGA * X -indirect 158.75.2.7 6. Uwagi. Bardzo ważnym programem jest program rmrd.com (znajdujący się w obrazie tftp). Jego zadaniem jest usuwanie ram-dysku, który zostaje utworzony przy starcie systemu przez tftp. W przypadku wybrania przez użytkownika terminala tekstowego program ten jest kasowany, a w przypadku wyboru Xteminala - uruchamiany. Gdy ram-dysk nie był usuwany - linux nie mógł montwoać "/" w /dev/ram. Powód - ???. Jądro musi zawierać obsługę sysemu plików MINIX oraz NFS. Nie wolno natomiast wkompilowywać obsługi kontrolera twardego dyku. Sterownik kart sieciowych kompilowane są jako moduły. "Partycja" / montowana jest w systemie MINIX. Obraz systemu plików został zaczerpnięty z dystrybucji Linux'a - Slackware 7.0. 7. Router-k. Router-k jest komputerem klasy AMD K5-100 MHz, 32MB RAM, HDD 850MB, VGA mono z zaistalowanymi trzema kartami sieciowymi: eth0 Intel EEPro 100 - 158.75.2.141 eth1 SMC Ultra - 192.168.1.126 (korytarz IIp) eth2 NE2000 - 192.168.1.254 (ts1) root@router-k# /sbin/route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 158.75.2.141 * 255.255.255.255 UH 0 0 0 eth0 192.168.1.126 * 255.255.255.255 UH 0 0 0 eth1 158.75.2.128 * 255.255.255.192 U 0 0 0 eth0 158.75.2.0 158.75.2.129 255.255.255.128 UG 0 0 0 eth0 192.168.1.0 * 255.255.255.128 U 0 0 0 eth1 192.168.1.128 * 255.255.255.128 U 0 0 0 eth2 127.0.0.0 * 255.0.0.0 U 0 0 0 lo Zablokowaliśmy (prawie wszystkie) porty. Zalogowanie sie na router-k możliwe jest tylko przy użyciu ssh z Anny. W związku z możliwością przebywania studentów na WMiI w godzinach 6-22 - cron odłącza o godz. 22.00 sieci 192.168.1.0 i 192.168.1.128. O godz. 6.00 przywracane są ustawienia przedstawione powyżej. Pod kontrolą crona wykonywana jest także synchronizacja daty. 8. Znane problemy: - problem z montowaniem router-k:/korytarz/xterm/ przy starcie Xteminala Objawia się on tym, że przy starcie linuxa po skonfigurowaniu karty sieciowej pump-em nie od razu montowane są dyski sieciowe, ale system wypisuje najpierw kilka komunikatów o błędach RPC. Niemniej po chwili wszystko działa prawidłowo. 9. Przyszłość: - własny chooser (odciążenie Waldemara i możliwość wstawienia jakiegoś małego copyrightu :-) 10. Podziękowania: - dr A. Kurpielowi - za wspomaganie nas wiedzą oraz doświadczeniem. - mgr J. Białkowskiemu - za pomoc w przyniesieniu Xterminala do 207. - Wydziałowemu konserwatorowi za to, że nas prąd nie zabił. - UPS-owi, za to, że wytrzymał o minutę dłużej. - Pizzerii "Verona" za świetną pizzę. - Panu Bogu, za to, że to wszystko działa.