Verzeichnisse auf dem Server für OpenSLX Umgebungen¶
Die inzwischen vielfältigen Alternativen zu einem NFS-basierten Client-Rootfilesystem führen ein weiteres Problem ein: Arbeitet man alternativ zu NFS mit NBD, DNBD oder anderen Network Block Devices, hat man unter Umständen das Unterverzeichnis /boot/ nicht im direkten Zugriff, um Kernels und Initramfs zu laden. Wenn das exportierte Rootfilesystem ein Filecontainer ist (solche lassen sich einfach per NBD herausreichen), muss es noch nicht einmal im Serverfilesystem irgendwohin gemountet sein. Besonders klar wird dieses bei SquashFS. Hier erzeugt man den Container mit einem speziellen Tool (mksquashfs) und hat danach einen nur lesbaren Container (der dann das Rootfilesystem incl. /boot/ enthält). Will man hier ein neues/weiteres Initialramfs anlegen oder etwas an der PXE-Menu-Struktur ändern, scheitert man am Zugriff.
Zwei Stufen Modell¶
Hierfür arbeitet OpenSLX (in Zukunft) mit zwei Stages/Stadien (siehe BetriebsKonzept). Stage1 dient der Vorbereitung von Stage2, welches den verschiedenen Exportvarianten ("<system-name>") entspricht. Stage1 kann damit an beliebiger Stelle liegen, vom Projekt vorgeschlagen wird /var/opt/openslx. Alle Daten, die hier liegen, dienen der Regeneration von Stage2: Exportierbare Images, PXE-Menü, Kernel und Initramfs. Stage2 Daten müssen für die entsprechenden Exportdienste erreichbar sein.
Deshalb werden die Verzeichnisse aufgeteilt: NFS oder NBD (o.ä.) exportieren dann beispielsweise besagtes /export/dxsN (oder für NFS einfach ein export von /export). Alles was von PXElinux/TFTP kommt oder darüber ausgeliefert werden soll, kann ja in das dafür traditionelle Verzeichnis */tftpboot wandern.
Um der Tatsache Rechnung zu tragen, dass die verschiedenen Host-Systeme unterschiedliche Verzeichnisstrukturen vorsehen, und um den jeweiligen Administratoren einfache Möglichkeiten zur Anpassung zu ermöglichen, sind die Pfade für "public" (hier liegt alles, was an Clients in irgendeiner Form "hinausgeht") und "private" (interne SLX-Strukturen, die Stage1,2 vorbehalten sind) in einer zentralen Konfigurationsdatei slxsettings eingetragen. Diese Datei liegt normalerweise unter /etc/opt/openslx. Die Datei settings.defaults wird entweder per 'make install' generiert oder beim Installieren des OpenSLX-Pakets erstellt. Nach Anpassungen durch slxsettings könnte sie beispielsweise folgenden Inhalt haben:
SLX_DB_TYPE=SQLite SLX_MIRRORS_PREFERRED_TOP_LEVEL_DOMAIN=de SLX_PRIVATE_PATH=/data/openslx SLX_PUBLIC_PATH=/data
Wenn ein Administrator die Verzeichnisse ändern möchte, dann kann er entweder settings editieren oder slxsettings aufrufen. Letzteres hat den Vorteil, dass die lokalen Änderungen auch nach einem Upgrade des OpenSLX-Pakets noch Bestand haben.
Den Default-Einstellungen folgend, würde ein zukünftiges Serverfilesystem (nach abgeschlossenem Setup) wie folgt aussehen (die Prefixes lassen sich wie eben gezeigt auch ändern):/srv/openslx /srv/openslx/export /srv/openslx/export/sqfs/suse-10.2-clone /srv/openslx/export/sqfs/suse-10.2-clone@nbd /srv/openslx/export/nfs/ubuntu-7.04 /srv/openslx/export/... ... /srv/openslx/tftpboot /srv/openslx/tftpboot/client-config/<system-name>/default.tgz /srv/openslx/tftpboot/client-config/<system-name>/01-00-11-43-7c-da-ff.tgz /srv/openslx/tftpboot/client-config/suse-10.1-A/default.tgz /srv/openslx/tftpboot/pxelinux.0 /srv/openslx/tftpboot/pxelinux.cfg/default /srv/openslx/tftpboot/pxelinux.cfg/01-00-11-43-7c-da-ff /srv/openslx/tftpboot/pxelinux.cfg/<time-span01>/default /srv/openslx/tftpboot/pxelinux.cfg/<time-span01>/01-00-11-43-7c-da-ff /srv/openslx/tftpboot/pxelinux.cfg/<time-span0N/... /srv/openslx/tftpboot/<vendor-os-name>/* /srv/openslx/tftpboot/suse-10.2-clone/vmlinuz /srv/openslx/tftpboot/suse-10.2-clone/initramfs-1 /srv/openslx/tftpboot/ubuntu-7.04/vmlinuz-2.6.20-16-generic /srv/openslx/tftpboot/ubuntu-7.04/initramfs-1 ... /etc/opt/openslx /etc/opt/openslx/PXE-template.example /etc/opt/openslx/settings ... /opt/openslx /opt/openslx/share /opt/openslx/share/distro-specs /opt/openslx/share/perl /opt/openslx/share/templates /opt/openslx/share/tftpboot /opt/openslx/share/themes ... /var/opt/openslx /var/opt/openslx/config /var/opt/openslx/config/default /var/opt/openslx/config/default/initramfs/machine-setup /var/opt/openslx/config/default/initramfs/preinit.local /var/opt/openslx/config/default/initramfs/postinit.local /var/opt/openslx/config/default/rootfs /var/opt/openslx/config/suse-10.2-x60:sqfs-nbd/default /var/opt/openslx/config/suse-10.2-x60:sqfs-nbd/default/initramfs /var/opt/openslx/config/suse-10.2-x60:sqfs-nbd/default/rootfs /var/opt/openslx/config/<system-name> /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/rootfs/etc /var/opt/openslx/config/<system-name>/default/rootfs/etc/passwd /var/opt/openslx/config/<system-name>/default/rootfs/etc/init.d/boot.local /var/opt/openslx/config/<system-name>/<client-name>/... # siehe Datenbank nicht mehr 01-<client-mac> /var/opt/openslx/db /var/opt/openslx/stage1 /var/opt/openslx/stage1/<vendor-os-name>
Sämtliche Verzeichnisse können auf diese Art und Weise sowohl distributionsabhängig gewählt als auch an die lokalen Anforderungen angepasst werden. Mit dem SLX_PUBLIC_PATH gibt es ein gemeinsames Verzeichnis für alle "öffentlichen" - also für Clients zugreifbaren - OpenSLX-spezifischen Unterverzeichnisse:
- tftpboot - enthält alle Dateien, die per TFTP an die Clients zur Verfügung gestellt werden:
- client-config - enthält Dateien, die vom TFTP-Client ins Initramfs zur Konfiguration gezogen werden können. Sie sind mit der MAC-Adresse kodiert, gibt es keine Datei erfolgt ein Fallback auf default. Die Dateien enthalten mindestens die Konfigurationsdatei, aber auch zusätzliche Dateien und Skripten. Letztere erlauben bspw. lokale Anpassungen des Clients (postinit.local, boot.local, ...), die Konfiguration von User-Authentifizierung (PAM, NSS) und die Einbindung von Home-Verzeichnissen (NFSv3/Automounter, NFSv4, AFS, SSL-Mount, CIFS, ...)
- pxelinux.cfg - hier liegen die PXE-Menüdateien, welche die mögliche Auswahl beim Booten der jeweiligen Clients definieren. Hier gibt es evtl. noch Unterverzeichnisse, die Konfigurationen für bestimmte Zeitspannen enthalten können. Dann sollte ein externes Skript aus pxelinux.cfg/ je nach Zeit auf diese verlinken.
- <vendor-os-name> - hier liegen alle Kernels und dazugehörende InitialRamFS (Initrd) des entsprechenden Vendor-OS. Es muss zu jedem Kernel mindestens ein Initialramfs geben, es kann aber auch mehrere geben.
- export - enthält alles, was an Clients für das Dateisystem brauchen (könnten). Das kann ein klassischer NFS-Export sein, aber auch ein Network Block Device (NBD, DNBD, DNBD2), iSCSI, AoE, ...
Dabei können natürlich die verschiedenen Kernels (Benennung natürlich beliebig) auch in die jeweiligen Rootfilesysteme als Link zeigen (setzt voraus, dass sie zugreifbar sind - NFS oder gemountete Blockdevices).
Alle serverseitig notwendigen Daten, die wärend des Setups und Betriebs einer OpenSLX-Umgebung gebraucht oder verändert werden, landen unterhalb von /var/opt/openslx mit folgender Aufteilung:- config - Konfiguration für einzelne Systeme und Clients. Dabei gilt folgende Unterteilung: <default> gilt global für alle Clients, mit <client-name> können clientspezifische Konfigurationen erstellt werden.
- db - Lage der Konfigurationsdatenbank.
- stage1 - In dieses Verzeichnis erfolgen die Stage1-Installation(en) (siehe auch VerwendeteBegriffe), die dann Ausgangspunkt für verschiedene Vendor-OS sind.