Alle wesentlichen Konfigurationsschritte finden wärend des Ablaufs des InitialRamFS (Stage3 des OpenSLX) statt.
Die zentralen Konfigurationsdateien sind initramfs-setup und machine-setup. Für das einfachere Debugging kann man sich ihren Inhalt zudem noch in Stage4 in /etc/machine-setup des laufenden SLX-Clients ansehen. Sie hat in Stage4 jedoch keine Bedeutung mehr.
Beide Dateien werden durch den slxconfig-demuxer erzeugt und im InitRamFS (initramfs-setup) oder ins ConfTGZ (machine-setup) eingebaut. Die finale /etc/machine-setup wird wärend des Stage3 weiter gefüllt und ausgewertet.
Die Kernel Commandline besteht aus statischen und dynamischen Einträgen. Viele Einträge können beispielsweise per PXElinux1 oder Etherboot2 übergeben werden.
Mittels Kernel Commandline kann so bei Bedarf eine Anzahl initialer Konfigurationsparameter an OpenSLX Clients übermittelt werden. Generell existiert eine Beschränkung, welche in der Begrenzung der Kernel Commandline bei Intel-Plattformen auf 256 Zeichen liegt. Deshalb sollte man bei auftretenden Problemen zuerst auf dem Client überprüfen, ob die Commandline mit allen Optionen vollständig vorliegt. Alternativ könnten bestimmte, gemeinsame Variablen in die initramfs-setup verschoben werden, die initial vom slxconfig-demuxer mit dem InitRamFS zusammengepackt wird. Ausführlichere Informationen bietet Abschnitt 6.2.
Die Zuweisung von Variablen und Werten unterscheidet sich zwischen Kernel Commandline und Konfigurationsdatei nicht. Einziger Unterschied: Wärend einige Variablen ohne Zuweisung in der Kernel Commandline definiert werden können, wie beispielsweise ”debug”, geht dieses in der initramfs-setup oder machine-setup nicht. Hier müssen diese leer deklariert werden: ”debug=”.
Die zentrale Konfigurationsdateien eines OpenSLX Clients sind initramfs-setup und machine-setup, welche im Stage4 in /etc/machine-setup zusammengeführt zu sehen sind. Erstere wird durch den slxconfig-demuxer aus der SLX-Konfigurationsdatenbank erzeugt und ins InitRamFS eingebaut.6 direkt in das erzeugte InitRamFS eingefügt wird. Alle Zuweisungen, die in dieser Datei vorgenommen und im Bootverlauf nicht überschrieben werden, wirken auf alle Client, die ein bestimmtes gemeinsames InitRamFS verwenden.
Die Datei wird mehrfach im Laufe der Stage3-Setup-Prozedur aufgerufen. Durch den Aufruf zu Beginn des SLX init können Zuweisungen bestimmter für viele Clients gemeinsamer Parameter aus der Kernel Commandline auch in die machine-setup verschoben werden.
Die im Anschluss beschriebenen Konfigurationsmethoden hängen an diese Datei ihre Ergebnisse an: So dass beispielsweise die DHCP-Konfiguration die evtl. vorbelegten Variablen für Hostname, DNS-Server, ... überschreiben können. Später kann der Client via ConfTGZ neben weiteren Konfigurations- und anderen Dateien ein neues machine-setup erhalten, welches hinten an das initial vorhandene angefügt wird.
Variablen sind dann unter Umständen mehrfach definiert. Es gilt jedoch immer nur die letzte, so dass die Datei von hinten her zu lesen ist, wenn man eine bestimmte Zuweisung sucht.
Statt einer fest eingetragenen Server-IP für die verschiedenen Quellen oder Services kann die Variable ”@@@serverip@@@” in machine-setup verwendet werden. Sie wird im Stage3 mit dem via DHCP empfangenen Wert für die Adresse des DHCP-Servers ersetzt. Damit kann man sich statische Einträge sparen, wenn sowieso für wichtige bzw. alle SLX-Services die identische IP gilt.
Obwohl in den meisten Umgebungen OpenSLX Clients sehr einheitlich gehalten werden, kann es doch von Interesse oder notwendig sein, für einzelne Clients separate Festlegungen zu treffen. Das wird insbesondere in größeren Netzwerken mit Gruppen von Clients immer wichtiger. Alle der im Folgenden genannten Konfigurationsarten greifen in Stage3 des Client-Starts.
Derzeit sind drei (vier) Konfigurationswege vorgesehen, wenn auch noch nicht alle implementiert:
Nicht alle Konfigurationen eines Clients lassen sich durch mehr oder weniger einfaches Skript-Setup abdecken, wie es durch servconfig innerhalb des Initialramfs erledigt wird. Für diese Fälle besteht die Möglichkeit Konfigurations- und weitere Dateien vorzupaketieren, die dann wärend des Stage3 auf das spätere Rootfilesystem des Clients für Stage4 ausgepackt werden.
Die Vorbereitung dieser Dateien erfolgt unterhalb von /var/opt/openslx/config:
/var/opt/openslx/config/
/var/opt/openslx/config/<system-name>/default /var/opt/openslx/config/<system-name>/default/initramfs /var/opt/openslx/config/<system-name>/default/initramfs/postinit.local /var/opt/openslx/config/<system-name>/default/initramfs/preinit.local /var/opt/openslx/config/<system-name>/default/rootfs /var/opt/openslx/config/default /var/opt/openslx/config/default/initramfs /var/opt/openslx/config/default/initramfs/postinit.local /var/opt/openslx/config/default/initramfs/preinit.local /var/opt/openslx/config/default/rootfs |
Hier wird für jedes installierte System (Stage1) ein Unterverzeichnis angelegt. Auf dieser Ebene und unterhalb jedes Systemverzeichnisses gibt es ein Unterverzeichnis default oder Unterverzeichnisse, die mit 01-MAC der jeweiligen Clients kodiert sind. Unterhalb dieser Verzeichnisse gibt es:
Wärend einfache Konfigurationen wie beispielsweise das traditionelle NIS9 für die Benutzerauthentifizierung und NFSv3/Automount für die Homeverzeichnisse10 einfach per Eintrag in der machine-setup oder per Konfigurationsvariable aktiviert werden können, fällt diese Option für komplexere Setups weg.
So sind die Benutzerauthentifizierung per LDAP und das gesicherte Einbinden von Homeverzeichnissen typische Kandidaten für die Paketierung. Hierzu kopiert man alle benötigten Dateien und Verzeichnisse in ihrer späteren Lage in das jeweilige Unterverzeichnis rootfs:
~/rootfs/etc
~/rootfs/etc/ldap.conf ~/rootfs/etc/nsswitch.conf ~/rootfs/etc/pam.d/login ~/rootfs/etc/pam.d/xdm ~/rootfs/etc/openldap/ldap.conf ~/rootfs/etc/... |
Ein Administrator hat eine Reihe verschiedener Möglichkeiten Erweiterungen neben den vordefinierten Einstellungen vorzunehmen. Dabei ist es jedoch eine schlechte Idee diese Erweiterungen direkt am Stage1 vorzunehmen. Sie könnten bei Updates oder Neuinstallationen unbemerkt verloren gehen. Deshalb sollten Ergänzungen, die nicht direkt durch Programme oder Skripten des jeweiligen Systems abgebildet werden, ausserhalb abgelegt werden. Das gilt ebenso für sämtliche Konfigurationen, die nicht durch die Stage1-Installation automatisch korrekt generiert werden. Änderungen, die man am Stage1 vornehmen möchte, werden in einem eigenen Abschnitt behandelt.
Erweiterungen können in verschiedenen Stadien (Stage3 oder Stage4) des Client-Bootprozesses greifen:
Erweiterungen im InitialRamFS sind nur über die beiden lokalen *init-Skripten möglich.
Dieses Skript kann dazu genutzt werden, eigene Erweiterungen oder Einstellung zu einem sehr frühen Boot-Zeitpunkt vorzunehmen. Zu diesem Zeitpunkt steht jedoch nur das Toolset des InitRamFS zur Verfügung und es sind lediglich /proc und /dev (mit Minimalausstattung) gemountet.
Für alle Vorgänge, die das gemountete spätere Rootfilesystem des Clients voraussetzen, Module laden, Mountvorgänge anstoßen sollen, verwendet man postinit.local.
Das Skript postinit.local findet ein weitgehend konfiguriertes System vor. Die automatisch erkannte Hardware und alle definierten Services wurden eingerichtet. Das Stage4-Rootfilesystem ist unterhalb von mnt erreichbar und kann bei Bedarf weiter modifiziert werden. Die Auswahl der zur Verfügung stehenden Kommandos ist weiterhin beschränkt, jedoch lässt sich durch das Einbinden einiger Dateien das Set der für Stage3 definierten SLX-Funktionen einbinden:
# lädt die allgemeine Funktionsliste
. /etc/functions # bindet die jeweils distributionsspezifische Liste ein . /etc/distro-functions # lädt die Liste vordefinierter Variablen . /etc/sysconfig/config # sorgt dafür einen eigenen Dienst in die jeweils gültige Runlevelkonfiguration # aufgenommen wird (im Beispiel Start nach allen Diensten mit ID kleiner 80 und # Stop vor allen Diensten mit ID größer 1 rllinker dienst 80 01 # Anlegen eines Verzeichnisses im Stage4 Rootfilesystem mkdir /mnt/media/nfsmount-point # RO-NFS-Mount ausführen (sorgt für den Start des Portmappers vor dem Mount) nfsmnt 10.1.2.3:/content /mnt/media/nfsmount-point # RO-NFS-Mount transparent in bestehendes RootFS einfügen nfsmnt 10.2.2.4:/openslx/additional_stuff /mnt/add-on unionctl /mnt --add --after /mnt --mode ro /mnt/add-on |
Die Verwendung von UnionFS erlaubt es bequem für Clients das Rootfilesystem zu erweitern. So kann man ausgehend von einem Basissystem bestimmte Software und Komponenten aus einer anderen Quelle hinzufügen. Das ergibt im wesentlichen zwei Szenarien:
Ein OpenSLX-Client kann in der Konfigurationsdatenbank mit individuellen Einstellungen versorgt werden. Das betrifft alle Daten zum Betrieb des Clients, die nicht schon mittels DHCP direkt oder mittelbar per DNS zur Verfügung gestellt werden. Hierzu zählen beispielsweise die verschiedenen privaten Schlüssel oder Samba-Secrets.
Die ”Verknüpfung” mit bestehenden DNS bzw. DHCP-Servern erfolgt über die MAC-Adresse des Clients. Aus Sicht der Administration der OpenSLX-Seite kann dem Rechner eine Kurzbeschreibung bzw. ein Name verpasst werden. Dieser Name sollte nicht unbedingt der FQDN des Clients sein. Dann gibt es keine Probleme einen Rechner ohne Änderung von wichtigen Konfigurationsparametern zwischen verschiedenen IP-Netzen14 zu bewegen.
Einen Überblick zu allen jeweils verfügbaren Optionen erhält man, indem man sich die Einstellungen des SLX-Default-Systems, welches immer vorhanden ist, ansieht:
socrates:~# slxconfig list-system name="<<<default>>>" --verbose
List of the matching systems: system ’<<<default>>>’: attr_automnt_dir = attr_automnt_src = attr_country = us attr_dm_allow_shutdown = user attr_hw_graphic = attr_hw_monitor = attr_hw_mouse = attr_late_dm = no attr_netbios_workgroup = slx-network attr_nis_domain = attr_nis_servers = attr_ramfs_fsmods = attr_ramfs_nicmods = forcedeth e1000 e100 tg3 r8169 pcnet32 attr_ramfs_screen = attr_sane_scanner = attr_scratch = attr_slxgrp = attr_start_alsasound = yes attr_start_atd = no attr_start_cron = no attr_start_dreshal = yes attr_start_nfsv4 = no attr_start_ntp = initial attr_start_printer = no attr_start_samba = may attr_start_snmp = no attr_start_sshd = yes attr_start_syslog = yes attr_start_x = yes attr_start_xdmcp = kdm attr_tex_enable = no attr_timezone = Europe/Berlin attr_tvout = no attr_vmware = no clients = comment = internal system that holds default values export_id = hidden = id = 0 kernel = kernel_params = label = name = <<<default>>> |
Dabei haben die Optionen die nachfolgend erläuterte Bedeutung und möglichen Werte.
attr_ramfs_fsmods hält die Liste der zu ladenden Blockdevice- und Filesystem-Kernelmodule vor. Im Stage3 müssen vor dem Mounten des Rootfilesystems die entsprechenden Module verfügbar sein. Für ein SquashFS auf Basis eines Network Block Device (NBD) also die Module ”squashfs.ko” und ”nbd.ko”.
attr_ramfs_nicmods bestimmt die zu unterstützenden Netzwerkkarten. Da in den meisten Kernels keine Unterstützung für die verschiedenen Ethernet-Adapter fest einkompiliert ist, müssen diese als Modul rechtzeitig bereitgestellt werden, damit alle Netzwerkoperationen stattfinden können. Die Default-Liste umfasst die Module ”forcedeth.ko”, ”e1000.ko”, ”e100.ko”, ”tg3.ko”, ”r8169.ko” und ”pcnet32.ko”. Die Netzwerkfähigkeit durch PXE oder Etherboot zum Übertragen von Kernel und InitRamFS überträgt sich nicht auf den laufenden Kernel.
attr_ramfs_screen wählt das zu verwendende Splash-Theme aus. ”default” ist das OpenSLX-Theme.
Die nachstehenden Werte erlauben eine Einrichtung des Stage4-Zustandes von Systemen allgemein oder Clients im speziellen.
attr_automnt_dir legt fest, an welches Verzeichnis im Stage4 des Clients die User-Homes gehängt werden. Üblicherweise wird der Wert mit ”/home” belegt sein. Jedes andere erreichbare und existierende Verzeichnis ist ebenso zulässig.
attr_automnt_src bestimmt die Quelle, von der die Homeverzeichnisse importiert werden, typischerweise ”nfs://Server-IP/Pfad”. Andere Quellen sollen in Zukunft möglich werden ...
attr_late_dm kann unter bestimmten Umständen abgeschaltet werden und damit den Start der grafischen Oberfläche etwas beschleunigen.
attr_netbios_workgroup slx-network
attr_nis_domain setzt die sogenannte NIS-Domain, ein String für die Benutzerverwaltung auf Basis des veralteten und recht unsicheren Network Information Service (NIS). Diese Variable kann alternativ auch per DHCP verteilt werden. Dann sollte der Wert in der Datenbank leer bleiben.
attr_nis_servers enthält die Liste der NIS-Server, die auch aus einer einzigen IP bestehen kann. Diese Variable kann, wie auch ”attr_nis_domain”, per DHCP verteilt werden. Dann sollte der Wert in der Datenbank nicht gesetzt sein.
attr_scratch erlaubt das Einbinden von temporärem Speicher von einem zentralen Server. Stateless Clients haben oft keine eingebaute Festplatte oder keinen Zugriff darauf, so dass es in /tmp für einige Anwendungen, wie k3b oder VMware 15 eng werden könnte. ”attr_scratch” erlaubt die Angabe eines URIs, welcher dann auf /tmp eingehangen wird. Eine Alternative ist die Definition einer leeren Partition mit der ID44. Sie wird im Stage3 als SLX-Partition erkannt, bei jedem Start frisch formatiert und als Temp eingehangen. Diese Option ist für hohe Last im Temp vorzuziehen.
attr_slxgrp definiert eine Gruppe von Clients unabhängig vom SLX-System. Diese Gruppen-ID kann beispielsweise dazu benutzt werden, festzulegen, was für eine Auswahl virtueller Maschinen ein Benutzer an seinem Client beim grafischen Login zu sehen bekommt.
attr_start_alsasound Einige Distributionen benutzen ein Runlevel-Skript um Voreinstellungen der Audioausgabe einzustellen. Üblicherweise ist der Sound auf einem SLX-Client stummgeschaltet.
attr_start_dreshal legt fest, ob die Dienste für D-Bus, Resource-Manager (einige Distros, wie SuSE) und Hardware Abstraction Layer (HAL) gestartet werden. Das macht für Desktop-Systeme auf jeden Fall sind, kann aber in Rechnen-Cluster unnötig sein.
attr_start_nfsv4 Das NFS in der neuesten Version 4 verfügt über eine Reihe neuer Eigenschaften. Für seine gegenüber Version 3 signifikant verbesserten Sicherheitsfunktionen greift es üblicherweise auf Kerberos und weitere Dienste zurück, die ebenfalls gestartet werden sollten.
attr_start_ntp Anders als die meisten Start-Service-Einstellungen kann hier neben ”yes” und ”no” alternativ ”initial” eingetragen werden. Dann wird im boot.slx im Stage4 des Clients ein ntpdate -bs Server-IP ausgeführt.
attr_start_samba Werte ”yes”, ”no” und ”may”. Letzteres hat die Aufgabe den Dienst zwar für eine spätere Nutzung zu konfigurieren, ihn aber nicht zu starten.
attr_start_snmp Werte ”yes” und ”no”
attr_start_sshd Werte ”yes” und ”no”
attr_start_syslog Werte ”yes” und ”no”
attr_start_x Neben den Werte ”yes” und ”no” sind weitere Einstellungen möglich, siehe dazu Abschnitt 6.5. So lassen sich ”direct”, ”indirect” und ”broadcast” festlegen, sowie der Name von Startskripten beliebiger grafischer Oberflächen eintragen. Letzteres ist für Kiosk-Modi interessant.
attr_start_xdmcp kennt die Werte ”kdm”, ”gdm”,”xdm” und ”no” und arbeitet eng mit ”attr_start_x” zusammen (siehe dazu auch Abschnitt 6.5).
attr_tvout Für spezielle Grafikkarten Default ist no.
attr_vmware kann die Einstellung ”yes” und ”no” und ein URI für eine Quelle mit Images virtueller Maschinen aufnehmen.
clients enthält die Liste aller Clients für die das System angeboten werden soll. Ist diese Liste leer, gibt es jedoch immer ein PXE-Default-Menü zum booten.
comment internal system that holds default values
id ist ein datenbankinternes Feld.
kernel_params ”vga=0x317 splash=silent”
label bestimmt das Aussehen des Eintrags im PXE-Bootmenü. Wenn dort nicht einfach nur der automatisch generierte Systemname enthalten sein soll, empfielt es sich eine ”sprechende” Bezeichnung zu wählen, die von den Nutzern verstanden wird, beispielsweise ”Standard-Linux-System mit ...”.
OpenSXL Clients können in verschiedenen Betriebsarten betrieben werden. So stehen neben dem klassischen Workstation-Modus auch verschiedene Kiosk- oder X-Terminal-Varianten zur Verfügung. So läßt sich jede Betriebsart einer Linux-Workstation auch im stateless Betrieb realisieren.
Für die verschiedenen Modi sind in erster Linie zwei Konfigurationsvariablen bestimmend, ”start_x” und ”start_xdmcp”, welche in der zentralen Konfigurationsdatei /etc/machine-setup bestimmt und im Stage3 ausgewertet werden.
In den meisten Fällen werden Clients im Workstation-Modus arbeiten, d.h. der Benutzer bekommt einen grafischen Login, wie xdm oder gdm gezeigt. Wenn komfortable grafische Display-Manager verwendet werden, besteht auch die Option die Art der Session auszuwählen. Diese Auswahl wird üblicherweise durch die jeweilige Distribution festgelegt, kann aber durch die Komponente der virtuellen Workstation16 erweitert werden.
# should Xorg/XFree server be started or some special windowmanager be run
# in kiosk mode e.g. start_x="kde" start_x="yes" # kind of X11 display manager to run start_xdmcp="kdm" |
Clients können auch im X-Terminal-Mode betrieben werden. Dann ist nur eine minimale Software-Ausstattung erforderlich. Jedoch müssen die in der Variable ”start_xdmcp” angeforderten Display-Manager auch tatsächlich ausführbar, d.h. alle notwendigen Bibliotheken vorhanden,17 sein.
start_x="indirect" # "broadcast" for connecting to first responding machine
start_xdmcp="kdm" # provide list (if desired) of terminalserver here if no DHCP info is available #x_display_manager="1.2.3.4 5.6.7.8 A.B.C.D [127.0.0.1]" |
Im indirekten X-Server Modus liefert der Display-Manager einen Chooser. In diesem Chooser werden alle in der Variable ”x_display_manager”18 definierten Server angezeigt, so diese online sind und antworten. Für einen Mischbetrieb aus lokalem und Remote-X-Betrieb nimmt man in die Liste der IP-Adressen zusätzlich die 127.0.0.1 für die lokale Maschine mit auf.
Die DHCP-Variable ”x-display-manager” wird nur vom dhclient angefordert und anschliessend im Stage3 zur Verfügung gestellt. Der udhcpc kennt sie nicht.
OpenSLX Clients können direkt in eine bestimmte, festlegbare grafische Benutzerumgebung gestartet werden. In diesem Modus wird kein Displaymanager benötigt und konfiguriert.
start_x="gnome"
start_xdmcp="no" |
In der Variable ”start_x” wird das Programm oder Skript hinterlegt, welches automatisch beim Hochfahren des grafischen Systems gestartet werden soll. Das kann kde oder gnome sein, aber auch beliebige andere Programme. Es ist notwendig die Variable ”start_xdmcp” auch tatsächlich auf no zu konfigurieren.
Zum Teil werden in diesem Modus Programme oder Produkte verwendet, die nicht Bestandteil der gewählten Distribution sind. Diese müssen entsprechend in Stage1 installiert worden sein. Für den reinen Terminal-Betrieb aus Citrix- oder RDP-Client kann sich die Verwendung des LTSP19 als Alternativlösung anbieten.
Für den Cluster-Betrieb von Linux-Maschinen für Number-Crunshing oder ähnliche Anwendungen benötigt man üblicherweise keinerlei grafische Konsole. Deshalb schaltet man den X-Server aus und startet zudem keinen Displaymanager.
start_x="no"
start_xdmcp="" |
Cluster-Nodes verwenden üblicherweise eine sehr eingeschränkte Software-Auswahl. Auf Programme für grafische Oberflächen kann in den meisten Setups komplett verzichtet werden.
Ein recht spezieller Einsatzzweck können Terminal- bzw. X-Display-Server sein. Dieses sind Maschinen, auf die sich remote Clients verbinden, so dass der User auf dem Terminalserver statt lokal seine Sitzung ablaufen lässt. In diesem Fall werden ein Displaymanager aber kein lokales grafisches Display benötigt.
start_x="no"
start_xdmcp="gdm" |
Auf diesen Maschinen sollte dann eine für den Anwendungszweck vollständige Installation des Exportsystems vorliegen.