Terminalserver unter Linux#
Bei einem Terminalserver geht es darum, daß ich einen relativ einfachen Client-Rechner habe, der normalerweise auch keine Festplatte besitzt (Diskless Client bzw. Thinclient) und der von einem zentralen Server aus alle Daten bekommt, um zu arbeiten. Der große Vorteil ist, daß man nur noch eine zentrale Stelle hat, an der man ein ganzes Netzwerk von Rechnern konfiguriert und wartet.
Grundsätzlich gibt es die Frage, welche Aufgaben vom Server und
welche von Client übernommen werden sollen. Klassische
Terminalserver-Projekte wie das bekannte
LTSP (Linux Terminal Server Projekt)
gehen davon aus, daß der Client so
einfach (d.h. billig) wie möglich aufgebaut ist und eigentlich nur
als verlängerter Bildschirm und Tastatur des Servers dient. Dies
hat den großen Vorteil, daß alle Benutzer wirklich nur auf einem
System (nämlich dem Server) arbeiten und lediglich ein Mini-Linux
mit X-Server auf dem Client laufen muss.
Eine Alternative ist, den Server lediglich als Fileserver benutzen und die Applikationen dadurch jeweils auf dem Client laufen zu lassen. ThomasBayen hat seine Erfahrungen dazu auf der Seite DisklessClient und BootenVomNetzwerk zusammengefasst.
Zur Skalierung eines LTSP-Systems ist zu sagen, daß ich von Skolelinux-Installationen an Universitäten gehört habe, die tausende(!) von Clients in einer Installation laufen haben.
Wer lediglich einen Linux-Rechner aus der Ferne bedienen will, sucht (neben ssh -X) vielleicht nach der Seite XdmcpTerminalServer oder einem VncServer.
Technischer Hintergrund#
Im April 2006 habe ich (ThomasBayen) einen LTSP-Server
aufgesetzt. Hierbei habe ich einige Dinge zur
Architektur eines LTSP-Systems bemerkt, die mir nicht direkt klar
waren. Deshalb erkläre ich das Ganze hier nochmal etwas: Am Anfang
steht ein ganz normales Linux-System. Dieses System hat eine
graphische Oberfläche, d.h. insbesondere einen Display Manager
wie z.B. kdm installiert. Dieses Programm erzeugt den uns
allen wahrscheinlich wohlbekannten Login-Dialog, der nach dem
Einschalten auf dem Bildschirm erscheint. Der erste Schritt ist
nun, den kdm so zu konfigurieren, daß er XDMCP-Anfragen von
außerhalb annimmt (das ist nur eine Zeile in einer Config-Datei).
Siehe hierzu auch XdmcpTerminalServer. Nun können X-Server (mit "X
-query" o.ä.) von einem anderen Rechner aus auf unseren
Hauptrechner zugreifen und erhalten dann einen eigenen
Login-Dialog.
Bisher haben wir einen normalen XDMCP-Server. Was wir jetzt brauchen, sind Clients, die automatisch booten und per XDMCP an unseren Hauptrechner andocken. Diese Clients müssen im Grunde wie ein DisklessClient gebootet werden. Hierzu benötigen wir einen Server, der einerseits die hierzu benötigten Dienste (DHCP, TFTPD, NFS) laufen hat und andererseits das root-Filesystem der Clients in einem eigenen Verzeichnis enthält.
Die Besonderheit an LTSP im Vergleich zu einem normalen DisklessClient ist nun, daß das root-Filesystem des Clients ganz speziell auf diesen Zweck zugeschnitten ist. LTSP ist insofern eine ganz eigene Distribution für Thin-Clients. Das Filesystem wird read-only gemountet und daher vom Client nicht geändert. Deshalb können alle Clients mit einem identischen Filesystem booten. Beim Hochfahren wird eine automatische Erkennung des X-Servers vorgenommen und dieser dann mit einer XDMCP-Anfrage an den Hauptserver gestartet.
Der LTSP-Server ist normalerweise identisch mit dem Hauptserver (muss aber nicht). Da die LTSP-Distribution in einem ganz eigenen Verzeichnis liegt, braucht man keine Sorgen zu haben, sein Hauptsystem in irgendeiner Weise zu verändern. Es werden lediglich die o.g. Netzwerkdienste installiert und eingerichtet.
Installation#
Ich habe mir das ltsp-utils-Paket von der LTSP-Webseite
geholt. Dies lief nach der vorhandenen Doku sehr
einfach und unkompliziert. (Fehlermeldungen bzgl. Checksummen
verschwanden bei mehrmaligen Installationsversuchen) --
ThomasBayen
Unter Ubuntu-Linux gibt es die Alternative der neueren Mue-Cow-Pakete, die in Zusammenarbeit mit Ubuntu entwickelt wurden (s.u.).
Projekt Mue-Cow#
Dadurch, daß LTSP im Grunde eine eigene Distribution ist, haben die LTSP-Betreuer viel Arbeit am Hals, alle Komponenten ständig auf dem laufenden zu halten. Insbesondere gibt es natürlich einige Applikationen, die man eventuell dann doch auf dem Client und nicht auf dem Server laufen lassen will (z.B. ein VNC-Client oder ein Seti@home-Client). Die Installation solcher Applikationen auf dem Client geht nun aber nicht einfach mit apt oder rpm, sondern muss immer genau auf LTSP abgestimmt sein.
Um diesem Problem zu begegnen, möchte das LTSP-Team die Architektur unter dem Namen "Projekt Mue-Cow" verändern. Statt eines Paketes ltsp-utils, das dann LTSP-tgz-Pakete nachlädt, um die LTSP-Distribution zu installieren, wird die Client-Distribution in Zukunft auf einem normalen Debian (oder Redhat oder Suse oder Ubuntu) basieren. Dazu kommt dann noch ein spezielles "ltsp-client" Debian-Paket, das aus der Standard-Distribution einen LTSP-Client macht. Um den Server einzurichten, gibt es dann ein "ltsp-server"-Paket.
Die neueren Pakete gibt es bereits in Debian unstable, allerdings habe ich sie auf meinem Sarge-System nicht ans laufen gebracht. Deshalb habe ich obigen Installationsweg beschritten.
In Ubuntu seit "Breezy Badger" (5.10) sind bereits Pakete nach dem Mue-Cow Standard enthalten. Wem das also besser gefällt, sollte überlegen, seine LTSP-Experimente mit Ubuntu zu machen.
lokale Applikationen#
Eigentlich ist LTSP ja dazu da, das alle Applikationen auf dem Server laufen. Dies hat viele Vorteile. Man braucht nur ein System zu warten und die Ressoucen dieses Systems werden viel besser ge- und verteilt. Dennoch gibt es Gründe, Applikationen dezentral laufen zu lassen. Spontan fallen mir hier einige Gründe ein:
- Programme, deren primärer Zweck die Verbindung zwischen Display und einem dritten Server ist: Vnc (siehe VncServer), RDesktop (für Windows Terminalserver)
- Programme, die den X-Server besonders fordern wie z.B. Videoplayer oder Streamingclients
- Programme, die besonders viel Rechenleistung benötigen und die Ressourcen des Hauptservers damit zu stark blockieren würden wie z.B. Seti@home oder DosEmu. (Ich habe selber den DosEmu auf einem LTSP-Client installiert. Dies habe ich auf DosEmuAufLTSPClient dokumentiert.)