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.