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.