Diskless X-Terminals unter Linux

Eine preiswerte Lösung zur Einrichtung mehrerer internetfähiger Computerarbeitsplätze

Alte PCs können als X-Terminals genutzt werden. X-Terminals sind Minimalrechner, die die grafische Ausgabe des X-Window und die Tastatur- bzw. Mauseingabe ermöglichen. Diese Terminals benötigen keine Festplatten und Diskettenlaufwerke. Es kann aber auch alternativ ein Betriebssystem von der Platte gebootet werden. Die Programme laufen auf dem Server-Rechner, der über ausreichend RAM verfügen sollte.

Anwendungsbeispiele

Kosten

Software

Ca. 90,- DM für eine Linux-Distribution, z. B. SuSE 6.4. Man kann sich diese aber auch leihen. Das ist ganz legal.

Hardware

Server-PC (ca. 3500,- DM)

Der Arbeitsspeicher ist sehr wichtig (günstig 256 MByte RAM). Bei mehr als 15 X-Terminals sind mindestens 512 MByte RAM zu empfehlen.
Die Prozessorleistung ist nicht so wichtig.
Vorteilhaft sind SCSI-Festplatten. Diese sind natürlich auch etwas teurer. Die Festplattenkapazität sollte mindestens 10 GByte betragen. Besser sind 20 GByte.

Netzwerk

Ein HUB ist bei Verwendung von Twisted-Pair-Kabeln notwendig. Ein HUB ist ein Konzentrator, der die Computer sternförmig verbindet. Es gibt HUBs mit unterschiedlicher Anzahl von Anschlüssen. Man braucht einen Anschluß für jedes X-Terminal und einen für den Server. Ein HUB mit 8 Anschlüssen kostet ca. 100,- DM. HUBs sind auch kaskadierbar.
Twisted-Pair-Kabel für jedes Terminal und ein Kabel für den Server (je ca. 18,- DM)
Bemerkung: Es wäre auch eine Lösung mit BNC-Kabel möglich. Das ist aber nicht empfehlenswert, da beim Ausfall eines Kabels das gesamte Netzwerk zusammenbricht.

X-Terminals

Alte 486er PCs mit 16 MByte RAM. Je mehr RAM, desto besser.
Die Grafikkarte und der Monitor sollten je nach Einsatzgebiet bemessen sein. Mindestens empfiehlt sich eine SuperVGA-Karte.
Festplatten, CD-ROM und Diskettenlaufwerke sind nicht erforderlich.
Pro Terminal wird eine Netzwerkkarte benötigt (ca. 50,-DM).
Boot-PROM (25,- DM): Um das Betriebssystem zu booten, ist ein Boot-PROM für die Netzwerkkarte notwendig.

Administrationsaufwand

Neben dem Kostenvorteil ist auch der Administrationsaufwand zu sehen. Hier beschränkt sich die Administration auf den Server-Rechner. Updates sind sofort für alle Arbeitsplätze verfügbar.

Theorie

X-Window-Umleitung

Im Gegensatz zu MS-Windows 9x/NT oder MacOS 9 kann bei X-Window die Grafik-Ausgabe und Tastatur- und Maus-Eingabe auf andere Rechner umgeleitet werden. Das heißt auf dem Bildschirm werden Programme dargestellt, die auf einen anderen Rechner ausgeführt werden. Ermöglicht wird die Darstellung mit X-Servern. X-Server gibt es für unterschiedliche Plattformen, so z. B. für MS-Windows 9x/NT und MacOS. Der Nutzer kann also neben seiner normalen Arbeitsumgebung auch mit Unix/Linux-Programmen arbeiten. Die Programme können so einmalig und zentral verwaltet werden. Dadurch wird Festplattenkapazizät gespart und der Verwaltungsaufwand sinkt beträchtlich.

Diskless Terminals

Günstig ist es auch die Anwenderdaten zentral auf einen Server zu speichern. Dadurch wird eine einfachere Datensicherung ermöglicht. Wenn das Betriebssystem auch noch über das Netzwerk vom Server geladen werden kann, brauchen diese Rechner nicht einmal Festplatten, CD-ROM- oder Disketten-Laufwerke. Doch wie soll das funktionieren?
Auf der Netzwerkkarte wird ein spezieller Boot-PROM installiert. Beim Booten des Rechners wird die Software aus diesem ROM-Speicher ausgelesen und gestartet. Diese Software sendet eine sogenannte Broadcast-Meldung in das Netzwerk mit der Frage "Wer bin ich?". Die einzige Information die das Diskless Terminal hat, ist die Hardware-Adresse seiner Netzwerkkarte. Diese Adresse ist in der Welt einmalig, da jede Netzwerkkarte seine eigene Adresse hat. Das Terminal sendet also seine Hardware-Adresse.
Der Server-Rechner erhält diese Botschaft und schaut in der Datei /etc/dhcpd.conf nach. Diese Text-Datei enthält die Zuordnung der Hardware-Adressen zu den IP-Adressen. Außerdem enthält diese Datei Informationen welcher Kernel jeweils gebootet werden soll.
Der Server sendet also diese Informationen und den Kernel zum Terminal. Der Kernel muß natürlich an die Gegebenheiten angepaßt sein. Das Terminal startet dann den geladenen Kernel und dieser lädt den Rest des minimalistischen Betriebssystem.
Diese Betriebssystem braucht ja nur den X-Server starten. Es ist ersichtlich, das die Konfiguration der X-Terminals mit wenig Aufwand verbunden ist. Anders sieht es dagegen mit der Konfiguration des Servers aus. Dafür gibt es aber auch eine fast vorkonfigurierte Lösung.

Beispielkonfiguration

Die folgende Hard- und Software wurde getestet. Sicherlich sind abweichende Konfigurationen auch lauffähig.

Server

Arbeitsspeicher: 256 MByte RAM
Festplatte: 18 GByte, SCSI
Grafikkarte: Diese ist für den reinen Server-Betrieb unwichtig. Hier kann ein billiges Modell verwendet werden.

Netzwerk

Das Netzwerk wurde mit Twisted-Pair-Kabel eingerichtet. Die Länge der Kabel wurde großzügig mit je 10 m gewählt. Über einen HUB erfolgt die sternförmige Verbindung. Je nach geplanter Anzahl der Terminals + Server muß der HUB Eingänge haben. Wir verwenden 5 Terminals. Also muß der HUB 6 Anschlüsse haben. Man kann aber auch mehrere HUBs kaskadieren.

Terminals

Diverse 486er PCs mit jeweils mindestens 16 MByte RAM.
Netzwerkkarte: AT-2000 PnP Series, 16 Bit NE2000 kompatible, 10 Base-T, Sockel für Boot-ROM, Firma Allied Telesyn International
Folgendes muß beim Kauf der Netzwerkkarten beachtet werden: Planen Sie eine größere Anzahl von Netzwerkkarten zu kaufen, nehmen Sie erst mal nur eine. Wenn diese in einem Terminal funktioniert, kaufen Sie den Rest.

BootROMs

GKM-Flash Service
http://www.gknw.de
eflash@gmx.net

Installation/Konfiguration

X-Terminals

Die 486er PCs sind auf mindestens 16 MByte RAM zu erweitern.
Die Netzwerkkarte ist einzubauen. Ist der Boot-ROM noch nicht verfügbar bzw. soll die Karte erst mal getestet werden, kann auch anstelle des Boot-ROMs eine Boot-Diskette verwendet werden. Diskettenimages für unterschiedliche Netzwerkkarten können per Email über GKM-Flash Service eflash@gmx.net bestellt werden.

Netzwerkkarten

Der Boot-ROM muß noch aktiviert werden. Je nach Netzwerkkarte gibt es unterschiedliche Arten der Konfiguration. Entweder die Einstellung erfolgt über Jumper oder über ein Konfigurationsprogramm.
Bei der oben genannten Karte erfolgt dies mit dem Konfigurationsprogramm SETUP20.EXE auf der beiliegenden Diskette. Unter dem Menü Configure | Boot ROM | Enable wird der Boot-ROM aktiviert.
Die Adresse C800, 32k funktioniert in unserer Konfiguration. Eventuell müssen hier noch Interupts und I/O-Adressen entsprechend der Hardware angepaßt werden. In der Beispielskonfiguration funktionieren alle X-Terminals mit IRQ=11 und I/O=300h.
Ist die Netzwerkkarte mit dem Boot-ROM eingebaut, bzw. wird mit der entsprechenden Diskette gebootet, erscheint beim Booten etwa folgende Meldung:
ROM segment 0xC800 length 0x400
Type L to boot from local
Und etwas später:
Ehterboot/32 version 4.43gk (GPL) for [NE*000]
Probing ... [NE*000]
NE2000 base 0x300, adr 00:00:F4:AC:AE:63
Searching for server (DHCP)
So ähnlich könnte die Meldung aussehen. Jede Netzwerkkarte hat eine eigene Hardware-Adresse. Hier ist es 00:00:F4:AC:AE:63. Über diese Adresse wird das X-Terminal identifizert.
Schreiben Sie sich diese Adresse für jedes Terminal auf.
Nun sucht die Netzwerkkarte über das Netzwerk einen Server. Dieser ist aber jetzt leider noch nicht verfügbar. Aber die Netzwerkkarte scheint zu funktionieren.

Server

Installation SuSE-Linux

Die Installation der SuSE-Software erfolgt entsprechend der SuSE-Installationsanweisung. Folgende Pakete müssen installiert werden:
Serie n - Netzwerk-Support
dhcp - ISC DHCP Server
nfsserv - Userspace NFS Server Daemons
tcpdump - Packet Sniffer (zum Testen des Netzwerkes)
Serie X - Grundpaket Xfree86
Alle notwendigen Pakete zum Betreiben von X-Window.

Konfiguration mit yast

Mit Hilfe des SuSE-Konfigurationstools yast erfolgen weitere Konfigurationen. Diese befinden sich im Menü „Administration des Systems“| Hardware in System integrieren
Netzwerkkarte konfigurieren
Typ des Netzwerkes: eth0
Art der Netzwerkkarte: In unserer Beispielkonfiguration ist es RealTek RTL 8128/8139
Optionen zum Laden des Moduls: In unserer Beispielkonfiguration gibt es keine Optionen.
Netzwerk konfigurieren
Netzwerk Grundkonfiguration
Nummer: 0
Aktiv: X
Netzwerktyp: Ethernet
Device-Name: eth0
IP-Adresse: In unserer Beispielkonfiguration ist es 192.168.1.111
Die IP-Nummern des Servers und der X-Terminals sind in Abhängigkeit der Netzwerkplanung zu vergeben. Haben Sie freie Wahl, können Sie die IP-Nummern, beginnend mit 192.168.1.* verwenden. Ihr Netzwerk hat dann die Adresse 192.168.1.0. Jeder Rechner erhält dann jeweils eine eindeutige Nummer: 192.168.1.1, 192.168.1.2, ..., 192.168.1.254.Die letzte Adresse ist 192.168.1.255 und ist für Broadcast-Meldungen reserviert. Wir können also 254 IP-Nummern vergeben und können somit 254 Rechner in diesem Netz verwalten. Ich habe dem Server die 111 gegeben. Die X-Terminals erhalten die IP-Nummern 192.168.1.10, 192.168.1.12, 192.168.1.13, ...
Rechnernamen ändern
Rechnername: In unserem Beipiel: srserver (Schulungsraum-Server).
Domainname: meinedomain.de Ist das Netz nicht an das Internet oder an andere Netzwerke angeschlossen, kann dieser Name frei gewählt werden.
Netzwerkdienste konfigurieren
Inetd starten: Ja
Portmap-Programm starten: Ja
NFS-Server: Ja
NEWS FROM ADRESSE: in unserem Beispiel: srserver.meinedomain.de
Login-Konfiguration
Login-Oberfläche: Grafisch
Display-Manager: XDM
Gruppenverwaltung
Name der Gruppe: schulung (Oder je nachdem wie der Verwendungszweck ist.)
Benutzerverwaltung
Benutzername: student01, student02, ... dozent01, ...(Oder je nachdem wie der Verwendungszweck ist.)
Gruppe: schulung
Konfigurationsdatei verändern
START_DHCPD: yes

LTSP - Linux Terminal Server Projekt

http://www.ltsp.org
Auf dieser Website entwickelt ein Open Source Projekt zur einfachen Installation und Konfiguration von X-Terminals und der Server.

Download der Pakete

Von dieser Site kann die über das Netzwerk bootbare Mini-Linux-Version für die X-Terminals und die Konfigurationstools für den Server geladen werden:
http://www.ltsp.org "Download" oder
ftp://ftp.ltsp.org

Folgende Dateien sind notwendig:

Core components: lts_core-1.03-1.i386.rpm, lts_core-1.92.tgz
Kernels je nach Netzwerkkarte: lts_kernel_ne2000-1.02-1.i386.rpm (für NE2000-Kompatible)
X-Servers je nach Grafikkarte: lts_xsvga-1.2.rpm (für SVGA-Karten)
Dokumentation: lts.html

Installation der Pakete

lts_core-Paket

Die Verzeichnis-Struktur ist an die Linux-Distribution Redhat angepasst. Damit die Installation auch bei SuSE erfolgreich ist, wenden wir einen Trick an. Wir erzeugen die Verzeichnisse, in die XDM-Konfigurationsdateien kopiert werden:
cd /etc
mkdir X11
cd X11
mkdir xdm
Zum Entpacken und Installieren der Pakete dient der rpm-Befehl.
rpm -i lts_core-1.03-1.i386.rpm
Es werden folgende Dateien geändert und jeweils eine Sicherungskopie erstellt:
/etc/bootptab
/etc/exports
/etc/X11/xdm/xdm-config

Der Inhalt der Datei /etc/X11/xdm/xdm-config muß bei SuSE in die Datei /etc/X11R6/lib/X11/xdm/xdm-config/xdm-config kopiert und angepasst werden. Oder man fügt dort folgende Zeile von Hand an das Ende ein:

DisplayManager.*.setup:        /etc/X11/xdm/Xsetup_workstation

lts_core-1.92.tgz - Update für deutsche Tastatur

Bevor dieses Update installiert wird, muß das folgende Verzeichnis erstellt werden.
cd /var/lib
mkdir xkb
Die Datei lts_core-1.92.tgz muß vor dem Entpacken in das Verzeichnis /tftboot/lts/ltsroot kopiert und dann enpackt werden.
cp lts_core-1.92.tgz /tftboot/lts/ltsroot
cd /tftboot/lts/ltsroot
tar -xvzf lts_core-1.92.tgz
rm lts_core-1.92.tgz

Kernel-Paket

Je nach Netzwerkkarte muß der passende Kernel entpackt werden. In diesem Beispiel ist es der Kernel für NE2000-Kompatible.
rpm -i lts_kernel_ne2000-1.02-1.i386.rpm
Es wird der Kernel vmlinuz.ne2000 in das Verzeichnis /tftpboot/lts installiert. Als Standard wird aber der Kernel im Verzeichnis /tftpboot erwartet. Haben alle X-Terminals die gleichen Netzwerkkarten, kann hier ein Link auf die eigentliche Kerneldatei installiert werden:
cd /tftpboot
ln -s lts/vmlinuz.ne2000 kernel

X-Server-Paket

Je nach Grafikkarten der X-Terminals müssen die passenden X-Server installiert werden. In unserer Beispiel-Konfiguration werden nur X-Server für SVGA-Grafikkarten benötigt.
rpm -i lts_xsvga-1.2.rpm

Editieren der Konfigurationsdateien

/etc/inetd.conf

Es muß eine Zeile für den Start des tftp-Protokoll vorhanden sein. Dies ist ein „minimales“ FTP-Protokoll zur Übertragung des Kernels. Die Zeile dazu muß folgendermaßen aussehen:
tftp  dgram  udp  wait  nobody  /usr/sbin/tcpd  in.tftpd /tftpboot
Ist eine Zeile mit bootps vorhanden, ist diese mit einem Doppekreuz auszukommentieren. Anstelle von bootps verwenden wir DHCP.
# bootps  dgram  udp  ...

/usr/X11R6/lib/X11/xdm/Xaccess

Diese Datei regelt den Zugriff von anderen Rechnern auf das xdm des Servers. Um allen Rechnern den Zugriff zu erlauben, muß eine Zeile mit einem Stern * vorhanden sein:
*
Existiert eine Zeile mit !* ist diese mit einem # auszukommentieren.

/etc/exports

Diese Datei gibt Verzeichnisse über NFS für die Nutzung im Netzwerk frei. Das zu exportierende root-Verzeichnis /tftpboot/lts/ltsroot für die X-Terminals muß hier freigegeben werden. Dies erfolgt nur für dieses Netzwerk - hier 192.168.1.0. Außerdem erfolgt die Freigabe readonly (ro), also schreibgeschützt. So können bei fehlerhafter Bedienung an den X-Terminals diese Verzeichnisse nicht zerstört werden. Bei einer anderen IP-Nummer für das Netzwerk als 192.168.1.1 und anderer Netzwerkmaske als 255.255.255.0 müssen die IP-Nummern angepasst werden.
## LTS-begin ##
/tftpboot/lts/ltsroot 192.168.1.0/255.255.255.0(ro,no_root_squash)
## LTS-end ##

/etc/services

Hier ist zu kontrollieren, ob die folgenden Dienste ohne Kommentarzeichnen eingetragen sind.
bootps  67/tcp
bootps  67/udp
bootpc  68/tcp
bootpc  68/udp
tftp    69/tcp
tftp    69/udp

/etc/dhcpd.conf

Das DHCP-Protokoll weist feste oder dynamische IP-Adressen zu. In unserer Beispiel-Konfiguration erhält jedes Terminal eine feste IP-Adresse. Die Zuweisung der IP-Adresse erfolgt anhand der Hardwareadresse der Netzwerkkarte. Diese Zurodnung wird in der Datei dhcpd.conf festgelegt.
# dhcpd.conf
# Der Domainname muss angepasst werden:
option domain-name "meinedomain.de";

default-lease-time 600;
max-lease-time 7200;

# Die Netzwerkadresse muss ggf. angepasst werden.
subnet 192.168.1.0 netmask 255.255.255.0 {
  option broadcast-address 192.168.1.255;
  option routers 192.168.1.1;
  option root-path "/tftpboot/lts/ltsroot";
}

# Für jedes Terminal ist ein solcher Block notwendig.
# Hier heissen die Terminals: terminal01, terminal02, ...
# Die IP-Nummer beginnen bei 192.168.1.11 für terminal01, 192.168.1.12 für terminal02, ...
# Wichtig ist jeweils der Eintrag der eindeutigen Hardware-Adresse für jede Netzwerkkarte.

host terminal01 {
  hardware ethernet 00:00:F4:AC:AE:62;
  fixed-address 192.168.1.11;
}

host terminal02 {
  hardware ethernet 00:00:F4:AC:AE:64;
  fixed-address 192.168.1.12;
# filename "/tftpboot/lts/vmlinux.ne2000";
}

/tftpboot/lts/ltsroot/etc/lts.conf

Diese Datei konfiguriert jeweils die Einstellungen für Grafikkarte, Maus etc. für die X-Terminals. Die Optionen werden in der ltsp-Dokumentation beschrieben.
# Config file for the Linux Terminal Server Project (www.ltsp.org)
# Der Abschnitt Default beschreibt eine Grundkonfiguration.
# Wird für alle X-Terminals die gleiche Hardware verwendet,
# braucht nur dieser Abschnitt definiert werden.
[Default]
        XSERVER            = XF86_SVGA
        X_COLOR_DEPTH      = 8
        SERVER             = 192.168.1.111
        X_MOUSE_PROTOCOL   = "Microsoft"
        X_MOUSE_RESOLUTION = 50
        X_MOUSE_DEVICE     = "/dev/ttyS0"
        X_MOUSE_BAUD       = 1200
        X_MOUSE_BUTTONS    = 3
        USE_XFS            = N
        UI_MODE            = GUI
# Die Abschnitte fuer die Terminals beschreiben Abweichungen.
# Beispiel: terminal01 mit Mach64-Grafikkarte und PS/2-Maus.
[terminal01]
        XSERVER            = XF86_Mach64
        X_MOUSE_PROTOCOL   = "PS/2"
        X_MOUSE_DEVICE     = "/dev/psaux"
        X_MOUSE_RESOLUTION = 400
        X_MOUSE_BUTTONS    = 2
        X_MOUSE_BAUD       = 1200
        UI_MODE            = CHAR   # Nur Textconsole beim Einloggen

Deutsche Tastatur für die X-Terminals

Nach der Installation von lts_core-1.92.tgz sind folgende Änderungen vorzunehmen:

/tftpboot/lts/ltsroot/etc/rc.local

XkbLayout "de"

Kopieren der Tastatur-Symbole

cp /usr/X11R6/lib/X11/xkb/symbols/de \
   /tftpboot/lts/ltsroot/usr/X11R6/lib/X11/xkb/symbols


rowa.giso.de | contact | (Good Old Europe)