Diskless Workstation
„Diskless Workstation“ wurde von Wolgeorg (Diskussion) als in Bearbeitung markiert. Um Bearbeitungskonflikte zu vermeiden, kontaktiere Wolgeorg (Diskussion) bitte, bevor du den Artikel bearbeitest.
„Diskless-Workstation“ bezeichnet einen Computer, der über keine eigenen Festplatten verfügt und sowohl Betriebssystem als auch Daten von einem oder mehreren Servern über ein Netzwerk bezieht. (Wikipedia)
Vorbemerkungen
Auf Grund der Einführung von systemd und netctl sind einige Anleitungen zu dem oben genannten Thema nicht mehr aktuell.
Einige Hinweise zu der Funktionsweise von (P)reboot e(X)ecution (E)nvironment (PXE) findet sich in dem entsprechenden Beitrag.
NFSv4: Bei dem Beitrag Mkinitcpio unter dem Punkt Mkinitcpio#Using_net bringt dieses Ergebnis:
Achtung: NFSv4 is not yet supported.
(Stand: 28.06.2013)
Somit bleibt dieser Punkt unberücksichtigt, bis eine Änderung eingetreten ist. Wenn jemand NFSv4 einsetzen will, auch wenn das Paket mkinitcpio-nfs-utils für net
installiert ist, wird spätestens beim Bau von initramfs-linux.img und initramfs-linux-fallback.img mit Mkinitcpio Probleme bekommen.
mkarchroot wird genauer erläutert. Von diesem Befehl gibt es keine manpage nur die "-h" Hilfeausgabe.
pacstrap: Hier gilt das gleiche wie für mkarchroot.
Verzeichnisstruktur: Beim anlegen sollte folgendes beachtet werden:
"Viele ziehen es vor, das Boot-System in /var/lib/tftpboot
anzulegen, und unter /srv/nfs
anschließend die Dateisysteme der Ziel-Rechner anzulegen, allerdings hat dies den Nachteil, das vom Clientsystem aus anschließend kein Kernelupdate durchgeführt werden kann. Der Vorteil ist eine erhöhte Sicherheit, da man via TFTP auf sämtliche Unterverzeichnisse Zugriff hat! Dies ist abzuwägen anhand der eigenen Paranoia. Sollten in einem Netz viele Fremde unterwegs sein, ist es im Interesse der Sicherheit anzuraten, nicht /srv/nfs
auch für den Bootloader zu verwenden!"
Quelle: Preboot eXecution Environment
Rechner-Architektur: Für jede (i686, x86_64, PowerPC, AMD ....) empfiehlt es sich ein eigenes Verzeichnis für die Ziel-Rechner anzulegen. Es wird gezeigt wie dies mit einer entsprechend angepassten pacman.conf erreicht werden kann. Aufgrund der obigen Informationen wird das Boot-System im Verzeichnis /srv/tftp
installiert. Die Dateisysteme für die Ziel-Rechner werden im Root-Verzeichnis /srv/arch/linux_i686
für die i686-Architektur installiert.
Die Server Konfiguration
Zunächst einmal müssen wir die folgenden Komponenten installieren:
Einen DHCP Server um den Ziel-Rechnern IP Adressen zuweisen zu können.
Einen TFTP Server um die Bootimages zu den Ziel-Rechnern übertragen zu können. (Eine optionale Voraussetzung für alle PXE ROMs).
Eine Art von Netzwerkspeicher (entweder NFS oder NBD) um die Arch Installation zu den Ziel-Rechnern exportieren zu können.
Hinweis: dnsmasq Datei:Arch Paket.png kann gleichzeitig sowohl als DHCP- und als TFTP-Server eingesetzt werden. Weitere Informationen finden Sie im dnsmasq Artikel.
DHCP Server
Installiere ISC dhcp Datei:Arch Paket.png auf dem Server und konfiguriere ihn.
# vim /etc/dhcpd.conf
allow booting; allow bootp; authoritative; option domain-name-servers 10.0.0.1; option architecture code 93 = unsigned integer 16; group { next-server 10.0.0.1; if option architecture = 00:07 { filename "/grub/x86_64-efi/core.efi"; } else { filename "/grub/i386-pc/core.0"; } subnet 10.0.0.0 netmask 255.255.255.0 { option routers 10.0.0.1; range 10.0.0.128 10.0.0.254; } }
Hinweis: next-server
sollte die IP-Adresse des TFTP Servers sein; alles andere sollte entsprechend geändert werden, um zu Ihrem Netzwerk zu passen.
Hinweis: filename "/grub/i386-pc/core.0";
Diese Zeile kann sich in Bezug auf den Boot-Loader syslinux noch verändern.
RFC 4578 definiert die "Art der System Architektur des Ziel-Rechners" in der dhcp Option. In der obigen Konfiguration, sollte der PXE Ziel-Rechner ein x86_64-efi Bootimage (Typ 0x7) anfordern, wir ihm das passende übertragen, ansonsten wird auf ein i686 Bootimage zurück gegriffen. Dies erlaubt beides, sowohl einem UEFI Ziel-Rechner als auch einem Ziel-Rechner mit älterem BIOS simultan über das selbe Netwerksegment zu booten.
Starte den ISC DHCP per systemd Service.
# systemctl start dhcpd4.service
Um zu überprüfen, ob der Service erfolgreich gestartet werden konnte wird folgende Eingabe benötigt:
# systemctl status dhcpd4.service
Hier sollte alles im grünen Bereich sein. (Wie das Beispiel zeigt:)
TFTP Server
Installiere tftp-hpa-hpa Datei:Arch Paket.png auf dem Server und konfiguriere ihn.
Der TFTP Server wird gebraucht um den Bootloader, den Kernel, und das Initramfs zum Ziel-Rechner zu übertragen.
Erstelle die Datei entsprechend diesem Muster:
[Unit] Description=hpa's original TFTP daemon [Service] ExecStart=/usr/sbin/in.tftpd -s /srv/tftp/ StandardInput=socket StandardOutput=inherit StandardError=journal
Weitere Informationen befinden sich im Tftpd Server Artikel zur Installation und Konfiguration.
Die erstellte Datei wird auf dem Server im Pfad /etc/systemd/system/
unter dem Namen tftpd.service
gespeichert.
Starte den TFTP Server per systemd Service.
# systemctl start tftpd.socket tftpd.service
Eine Überprüfung lohnt sich immer:
# systemctl status tftpd.socket # systemctl status tftpd.service
Das ganze sollte so ausssehen:
Netzwerkspeicher
Der primäre Unterschied zwischen der Verwendung von NFS und NBD ist, während es mit beiden in der Tat möglich ist, das mehrere Ziel-Rechner die selbe Installation nutzen können, mit NBD jedoch (aufgrund der direkten Art der Manipulation des Dateisystems) benötigen Sie den copyonwrite
Modus um dies zu erreichen, was zum verwerfen jeglichen Schreibzugriffes führt, wenn sich der Ziel-Rechner abmeldet. In einigen Situationen könnte dies jedoch sehr wünschenswert sein.
NFS Server
Installiere nfs-utils Datei:Arch Paket.png auf dem Server.
NFSv3
Das Root-Verzeichnis der jeweiligen arch-Installation muss in in die NFS exports-Datei eintragen werden.
# vim /etc/exports
/srv/arch *(rw,no_root_squash,no_subtree_check,sync)
Hinweis: Wenn Du nicht über Datenverlust im Falle von Netzwerk- und / oder Server-Ausfällen besorgt bist, ersetze sync durch async --zusätzliche Optionen finden sich im NFS Artikel.
Als Nächstes starten Sie den NFSv3 Server:
# systemctl start rpc-mountd rpc-statd
Die Überprüfung:
# systemctl status rpc-mountd # systemctl status rpc-statd
Das Ergebnis:
NBD
Installiere nbd Datei:Arch Paket.png auf dem Server und konfiguriere ihn.
# vim /etc/nbd-server/config
[generic] user = nbd group = nbd [arch] exportname = /srv/arch.img copyonwrite = false
Hinweis: Setze copyonwrite
auf "wahr" falls Sie möchten das mehrere Ziel-Rechner das NBD Verzeichnis gleichzeitig nutzen; geben Sie man 5 nbd-server für mehr Details auf der Konsole ein.
Starte nbd per systemd Service.
# systemctl start nbd.service
Die Prüfung:
# systemctl status nbd.service
Das Ergebnis: Vorlage:Shell
Zielrechner Installation / Konfiguration
Als nächstes werden wir eine komplette Arch Linux Installation in einem Unterverzeichnis auf dem Server einrichten. Während der Startphase wird der Ziel-Rechner eine IP-Adresse vom DHCP-Server erhalten, dann booten Sie von dem Rechner mit PXE und mounten diese Installation als das Root-Verzeichnis.
Root-Verzeichnis für Ziel-Rechner einrichten
Informationen zum nachfolgend genannten btrfs Dateisystem gibt es auf der entsprechenden Site.
Demnach werden viele Anwender dieses Dateisystem zuerst auf Ihren Systemen installieren müssen, da es erst ab Anfang 2013 in den Standard-Kernel eingeflossen ist. Wenn Du gerne dieses neu in Arch-Linux eingeführte Dateisystem nutzen möchten
Erstelle eine Sparse-Datei von mindestens 1 Gigabyte, und erschaffe ein btrfs Filesystem darauf.
(Es kann natürlich auch ein echtes Block-Device oder ein LVM einrichten, wenn dies gewünscht wird).
Des weiteren soll hier von der Einrichtung auf einem Block-Device ausgegangen werden.
# truncate -s 1G /srv/arch.img # mkfs.btrfs /srv/arch.img # export root=/srv/arch/linux_i686 # mkdir -p "$root" # mount -o loop,discard,compress=lzo /srv/arch.img "$root"
Hinweis: Das Erstellen eines separaten Dateisystems ist für NBD zwingend nötig aber dies ist optional für NFS und kann übersprungen / ignoriert werden.
Wie oben schon unter Rechner-Architektur erwähnt soll das Root-System im Verzeichnis /srv/arch/linux_i686
installiert werden.
Bootstrapping Installation
Installiere devtools Datei:Arch Paket.png und arch-install-scripts, Datei:Arch Paket.png und führe mkarchroot
aus.
Es folgt die Ausgabe des Befehls mkarchroot -h: Vorlage:Shell
Hier ist die Option -C bedeutend: Damit lässt sich eine alternative pacman.conf
angeben. In dieser kann eine für den oder die Ziel-Rechner passende Architektur angeben werden. Gerade wenn die Ziel-Rechner eine andere Architektur als der Server aufweist.
Ein Ausschnitt aus der pacman.conf
:
# # /etc/pacman.conf # # See the pacman.conf(5) manpage for option and repository directives # # GENERAL OPTIONS # [options] # The following paths are commented out with their default values listed. # If you wish to use different paths, uncomment and update the paths. #RootDir = / #DBPath = /var/lib/pacman/ #CacheDir = /var/cache/pacman/pkg/ #LogFile = /var/log/pacman.log #GPGDir = /etc/pacman.d/gnupg/ HoldPkg = pacman glibc #XferCommand = /usr/bin/curl -C - -f %u > %o #XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u #CleanMethod = KeepInstalled #UseDelta = 0.7 Architecture = auto # Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup #IgnorePkg = #IgnoreGroup = #NoUpgrade = #NoExtract = .....
Hier ist die Zeile mit Architecture = auto
relevant. Mit dem Wert auto
wird die selbe Architektur verwendete wie auf dem Server auch. Die Datei wird in einen Editor geladen und die Architektur für den Ziel-Rechner eingetragen. Im Falle einer i686-Architektur lautet der Eintrag: Architecture = i686
. Die Datei sollte unter dem Name abspeichern werden, der die Architektur trägt, z. B. pacman_arch_i686.conf
.
Hier die angepasste Datei:
# # /etc/pacman.conf # # See the pacman.conf(5) manpage for option and repository directives # # GENERAL OPTIONS # [options] # The following paths are commented out with their default values listed. # If you wish to use different paths, uncomment and update the paths. #RootDir = / #DBPath = /var/lib/pacman/ #CacheDir = /var/cache/pacman/pkg/ #LogFile = /var/log/pacman.log #GPGDir = /etc/pacman.d/gnupg/ HoldPkg = pacman glibc #XferCommand = /usr/bin/curl -C - -f %u > %o #XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u #CleanMethod = KeepInstalled #UseDelta = 0.7 Architecture = i686 # Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup #IgnorePkg = #IgnoreGroup = #NoUpgrade = #NoExtract = .....
NFSv3
Dann wird in das Verzeichnis /srv/arch/ gewechselt.
Der Aufruf von "mkarchroot" lautet:
# mkarchroot -C pacman_arch_i686.conf linux_i686
Mit diesem Befehl wird das Verzeichnis linux_i686
angelegt und die Pakete aus der Gruppe "base" für die Architektur i686 installiert. Diese Gruppe ist der default Wert für mkarchroot. Sollte das Verzeichnis bereits existieren wird der Befehl mit einer entsprechenden Meldung abgebrochen. Es ist auch folgender Aufruf möglich in Anbetracht der obigen Zeile export root=/srv/arch/linux_i686
:
# mkarchroot -C pacman_arch_i686.conf "$root"
Je nachdem von welchem Verzeichnis aus man gerne installiert.
Zunächst einige Infos zu dem Befehl "pacstrap":
NBD
Zielrechner Konfiguration (auf dem Server)
Die verschiedenen Bootloader
GRUB
Pxelinux
zusätzliche Mountpunkte
NBD Root-Verzeichnis
Programm state Verzeichnisse
Client Boot
NBD
Siehe auch
Dieser Artikel (oder Teile davon) steht unter GNU FDL (GNU Freie Dokumentationslizenz) und ist eine Übersetzung aus dem ArchLinux.org Wiki. Am Original-Artikel kann jeder Korrekturen und Ergänzungen vornehmen. Im ArchLinux.org Wiki ist eine Liste der Autoren verfügbar. |