# Diskless X Server: "how to" vodič

Jerry
Kendall

    	    jerry@kcis.com

28. decembar 1996.
1996
Jerry Kendall

Uz pomoć nekih prijatelja sa FreeBSD-hackers liste, napravio sam diskless X terminal. Pravljenje X terminala je prvo zahtevalo da se napravi sistem bez diska sa minimalnim skupom alata koji se mountuje preko NFSa. Isti postupak je korišćen da se naprave 2 odvojena diskless sistema. Prvi je altair.kcis.com, X terminal bez diska koji radi na mom starom 386DX-40 računaru. Ima hard disk od 340 megabajta, ali nisam želeo da ga menjam. Tako da se mašina bootuje sa antares.kcis.com mašine, preko Etherneta. Drugi sistem je 486DX2-66. Napravio sam diskless FreeBSD instalaciju (kompletnu) koja ne koristi lokalni disk. U ovom slučaju server je Sun 670MP pod SunOSom 4.1.3. Ista konfiguracija je korišćena za obe mašine.

Siguran sam da ima dosta stvari koje treba dodati ovom dokumentu. Molim vas, pošaljite mi sve komentare.

## Kreiranje boot diskete (na diskless sistemu)

Pošto mrežni boot loaderi neće da rade sa nekim TSR MS-DOS programima, najbolje je napraviti posebnu boot disketu, ili, ako možete, napraviti MS-DOS meni koji će (pomoću `config.sys`/`autoexec.bat` datoteka) upitati koju konfiguraciju želimo da učitamo pri startu sistema. Ovo potonje je metod koji ja koristim i radi sjajno. Evo mog MS-DOS (6.x) menija.

### `config.sys`

    [menu]
    menuitem=normal, normal
    menuitem=unix, unix
    [normal]
    ....
    normal config.sys stuff
    ...
    [unix]

### `autoexec.bat`

    @ECHO OFF
    goto %config%

    :normal
    ...
    normal autoexec.bat stuff
    ...
    goto end

    :unix
    cd \netboot
    nb8390.com

    :end

## Instalacija programa za boot preko mreže (na serveru)

Prevedite 'net-boot' programe koji se nalaze u `/usr/src/sys/i386/boot/netboot`. Trebalo bi da pročitate komentare na početku `Makefile` fajla. Podesite po potrebi. Napravite rezervnu kopiju originala za svaki slučaj. Kad se prevođenje završi, trebalo bi da imate 2 MS-DOS izvršna fajla, `nb8390.com` i `nb3c509.com`. Jedan od ova dva programa je ono što ćete pokrenuti na diskless mašini. Služiće da učita kernel sa boot servera. Sada stavite oba programa na MS-DOS boot disketu koju ste ranije napravili.

## Koji program pokrenuti? (na diskless mašini)

Ako znate koji set čipova vaša Ethernet kartica koristi, ovaj korak je lak. Ako imate NS8390 set čipova, ili neki baziran na NS8390 čipu, uzmite `nb8390.com`. Ako imate karticu baziranu na 3Com 509 čipu, uzmite `nb3C509.com` boot program. Ako niste sigurni kakvu karticu imate, pokušajte sa jednim, ako prijavi No adapter found, pokušajte sa onim drugim. Ako ovo ne upali, moraćete sami da se snađete.

## Podizanje sistema preko mreže

Podignite diskless sistem bez config.sys/autoexec.bat fajlova. Pokušajte da pokrenete boot program za vašu mrežnu karticu.

Moja mrežna kartica radi u WD8013 16bitnom modu, pa ja koristim `nb8390.com`.

    C:> cd \netboot
    C:&gt nb8390

    Boot from Network (Y/N) ?  Y

    BOOTP/TFTP/NFS bootstrap loader     ESC for menu

    Searching for adapter..
    WD8013EBT base 0x0300, memory 0x000D8000, addr 00:40:01:43:26:66

    Searching for server...

U ovom trenutku, moj diskless sistem pokušava da nađe mašinu koja će služiti kao boot server. Prepišite `addr` liniju u gornjem listingu, trebaće vam taj broj kasnije. Resetujte diskless mašinu i podesite `config.sys` i `autoexec.bat` da rade ovaj posao automatski. Na primer pomoću menija. Ako koristite `nb3c509.com` umesto `nb8390.com`, listing će biti isti kao gornji. Ako ste dobili poruku No adapter found kod `Searching for adapter...` poruke, proverite da li ste dobro podesili opcije u `Makefile`-u.

## Omogućite sistemima da se podignu preko mreže (na serveru)

Proverite da li su tftp i bootps podešeni u `/etc/inetd.conf` fajlu. Evo mog podešavanja:

    tftp	dgram	udp	wait	nobody	/usr/libexec/tftpd	tftpd /tftpboot
    #
    # Additions by who ever you are
    bootps  dgram  udp  wait  root  /usr/libexec/bootpd bootpd /etc/bootptab

Ako promenite nešto u `/etc/inetd.conf` fajlu, pošaljite `HUP` signal inetd demonu. Da bi ovo učinili, nađite ID procesa inetd sa `ps -ax | grep inetd | grep -v grep`. Zatim mu pošaljite HUP signal sa `kill -HUP <pid>`. Ovo će naterati inetd da ponovo pročita svoj konfiguracioni fajl.

Da li ste zabeležili `addr` liniju iz ispisa boot loadera na mašini bez diska? Sada će vam biti potrebna.

Dodajte sledeće u `/etc/bootptab` (možda ćete morati da kreirate fajl).

    altair:\
            :ht=ether:\
            :ha=004001432666:\
            :sm=255.255.255.0:\
            :hn:\
            :ds=199.246.76.1:\
            :ip=199.246.76.2:\
            :gw=199.246.76.1:\
            :vm=rfc1048:

Evo značenja ovih redova:

`altair` | ime sistema bez diska, bez imena domena.
`ht=ether` | tip hardvera, u ovom slučaju 'ethernet'.
`ha=004001432666` | hardverska adresa (broj koji ste zabeležili).
`sm=255.255.255.0` | subnet maska.
`hn` | govori serveru da treba klijentu da pošalje njegov hostname.
`ds=199.246.76.1` | govori klijentu gde je domain server.
`ip=199.246.76.2` | govori klijentu koja mu je IP adresa.
`gw=199.246.76.1` | govori klijentu koji je podrazumevani gateway.
`vm=...` | samo ostavite ovo kako jeste.

Vodite računa da upišete IP adrese ispravno, gornji primer je moja konfiguracija.

Kreirajte direktorijum '/tftpboot' na serveru, koji će sadržati konfiguracione fajlove za sisteme bez diska koje će server opsluživati. Ovi fajlovi će nositi ime 'cfg.<ip>' gde je <ip> IP adresa diskless sistema. Konfiguracioni fajl za 'altair' je /tftpboot/cfg.199.246.76.2. Njegov sadržaj je:

    rootfs 199.246.76.1:/DiskLess/rootfs/altair
    hostname altair.kcis.com

Red `hostname altair.kcis.com` govori računaru bez diska njegovo puno ime domena.

Red `rootfs 199.246.76.1:/DiskLess/rootfs/altair` govori računaru bez diska gde mu se nalazi root fajlsistem koji će mountovati preko NFSa.

NFS root fajlsistem će biti mountovan kao read only.

Hijerarhija za sistem bez diska može biti re-mountovana da bi se dozvolilo pisanje po fajl sistemu, ukoliko je to potrebno.

Ja koristim moj stari 386DX-40 kao posvećeni X terminal.

Hijerarhija za 'altair' izgleda ovako:

    /
    /bin
    /etc
    /tmp
    /sbin
    /dev
    /dev/fd
    /usr
    /var
    /var/run

Evo i liste samih fajlova:

    -r-xr-xr-x  1 root  wheel  779984 Dec 11 23:44 ./kernel
    -r-xr-xr-x  1 root    bin  299008 Dec 12 00:22 ./bin/sh
    -rw-r--r--  1 root  wheel     499 Dec 15 15:54 ./etc/rc
    -rw-r--r--  1 root  wheel    1411 Dec 11 23:19 ./etc/ttys
    -rw-r--r--  1 root  wheel     157 Dec 15 15:42 ./etc/hosts
    -rw-r--r--  1 root    bin    1569 Dec 15 15:26 ./etc/XF86Config.altair
    -r-x------  1 bin     bin  151552 Jun 10  1995 ./sbin/init
    -r-xr-xr-x  1 bin     bin  176128 Jun 10  1995 ./sbin/ifconfig
    -r-xr-xr-x  1 bin     bin  110592 Jun 10  1995 ./sbin/mount_nfs
    -r-xr-xr-x  1 bin     bin  135168 Jun 10  1995 ./sbin/reboot
    -r-xr-xr-x  1 root    bin   73728 Dec 13 22:38 ./sbin/mount
    -r-xr-xr-x  1 root  wheel    1992 Jun 10  1995 ./dev/MAKEDEV.local
    -r-xr-xr-x  1 root  wheel   24419 Jun 10  1995 ./dev/MAKEDEV

Ne zaboravite da pokrenete `MAKEDEV all` u `dev` direktorijumu.

Moj `/etc/rc` za altair izgleda ovako:

    #!/bin/sh
    #
    PATH=/bin:/
    export PATH
    #
    # configure the localhost
    /sbin/ifconfig lo0 127.0.0.1
    #
    # configure the ethernet card
    /sbin/ifconfig ed0 199.246.76.2 netmask 0xffffff00
    #
    # mount the root filesystem via NFS
    /sbin/mount antares:/DiskLess/rootfs/altair /
    #
    # mount the /usr filesystem via NFS
    /sbin/mount antares:/DiskLess/usr /usr
    #
    /usr/X11R6/bin/XF86_SVGA -query antares -xf86config /etc/XF86Config.altair >/dev/null 2>&1
    #
    # Reboot after X exits
    /sbin/reboot
    #
    # We blew up....
    exit 1

Svi komentari su dobrodošli, kao i sva pitanja.