Diskless Workstation: Unterschied zwischen den Versionen

Aus wiki.archlinux.de
Wolgeorg (Diskussion | Beiträge)
Wolgeorg (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
Zeile 34: Zeile 34:


Eine Art von Netzwerkspeicher (entweder [[Network_File_System|NFS]] {{Sprache|de}} oder NBD) um die Arch Installation zu den Ziel-Rechnern exportieren zu können.
Eine Art von Netzwerkspeicher (entweder [[Network_File_System|NFS]] {{Sprache|de}} oder NBD) um die Arch Installation zu den Ziel-Rechnern exportieren zu können.
{{Hinweis|{{Paket|dnsmasq}} [[Bild:Arch_Paket.png]] kann gleichzeitig sowohl als DHCP- und als TFTP-Server eingesetzt werden. Weitere Informationen finden Sie im [[Dnsmasq|dnsmasq]] Artikel. {{Sprache|de}}}}
{{Hinweis1|{{Paket|dnsmasq}} [[Bild:Arch_Paket.png]] kann gleichzeitig sowohl als DHCP- und als TFTP-Server eingesetzt werden. Weitere Informationen finden Sie im [[Dnsmasq|dnsmasq]] Artikel. {{Sprache|de}}}}
=== DHCP Server ===
=== DHCP Server ===
Installiere ISC {{Paket|dhcp}} [[Bild:Arch_Paket.png]] auf dem Server und konfiguriere ihn.
Installiere ISC {{Paket|dhcp}} [[Bild:Arch_Paket.png]] auf dem Server und konfiguriere ihn.
Zeile 63: Zeile 63:
}</nowiki>}}
}</nowiki>}}


{{Hinweis|{{ic|next-server}} sollte die IP-Adresse des TFTP Servers sein; alles andere sollte entsprechend geändert werden, um zu Ihrem Netzwerk zu passen.}}
{{Hinweis1|{{ic|next-server}} sollte die IP-Adresse des TFTP Servers sein; alles andere sollte entsprechend geändert werden, um zu Ihrem Netzwerk zu passen.}}


{{Hinweis|{{ic|filename "/grub/i386-pc/core.0";}} Diese Zeile kann sich in Bezug auf den Boot-Loader syslinux noch verändern.}}
{{Hinweis1|{{ic|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.
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.
Zeile 145: Zeile 145:
/srv/arch *(rw,no_root_squash,no_subtree_check,sync)}}
/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 [[Network_File_System|NFS]] Artikel. {{Sprache|de}}}}
{{hinweis1|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 [[Network_File_System|NFS]] Artikel. {{Sprache|de}}}}


Als Nächstes starte den [https://wiki.archlinux.org/index.php/NFSv3 NFSv3] Server: {{Sprache|en}}
Als Nächstes starte den [https://wiki.archlinux.org/index.php/NFSv3 NFSv3] Server: {{Sprache|en}}
Zeile 186: Zeile 186:
     copyonwrite = false
     copyonwrite = false
}}
}}
{{hinweis|Setze {{ic|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.}}
{{hinweis1|Setze {{ic|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 [[Verschl%C3%BCsseltes_Verzeichnis|nbd]] {{Sprache|de}} per [[Wechsel_von_Sysvinit_zu_systemd|systemd]] {{Sprache|de}} Service.
Starte [[Verschl%C3%BCsseltes_Verzeichnis|nbd]] {{Sprache|de}} per [[Wechsel_von_Sysvinit_zu_systemd|systemd]] {{Sprache|de}} Service.
Zeile 219: Zeile 219:
  # mount -o loop,discard,compress=lzo /srv/arch.img "$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.}}
{{hinweis1|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 {{ic|/srv/arch/linux_i686}} installiert werden.
Wie oben schon unter '''Rechner-Architektur''' erwähnt soll das '''Root'''-System im Verzeichnis {{ic|/srv/arch/linux_i686}} installiert werden.
Zeile 348: Zeile 348:
Es wird die genannte {{ic|*.conf}} Datei verwendet, die dafür sorgt das Pakete für die i686-Architektur herunter geladen werden, diese in ein nicht gemountetes Verzeichnis installiert werden. Zum Schluß werden die beiden Pakete genannt. Sollte das Installationsverzeichnis schon gemountet sein, entfällt die Option -d.
Es wird die genannte {{ic|*.conf}} Datei verwendet, die dafür sorgt das Pakete für die i686-Architektur herunter geladen werden, diese in ein nicht gemountetes Verzeichnis installiert werden. Zum Schluß werden die beiden Pakete genannt. Sollte das Installationsverzeichnis schon gemountet sein, entfällt die Option -d.


{{hinweis|In allen Fällen ist das Paket {{Paket|mkinitcpio-nfs-utils}} [[Bild:Arch_Paket.png]] weiterhin erforderlich. {{ic|ipconfig}} wird im frühen Bootprozess nur verwendet wenn dies vorgesehen ist.}}
{{hinweis1|In allen Fällen ist das Paket {{Paket|mkinitcpio-nfs-utils}} [[Bild:Arch_Paket.png]] weiterhin erforderlich. {{ic|ipconfig}} wird im frühen Bootprozess nur verwendet wenn dies vorgesehen ist.}}


Nun wird das initramfs aufgebaut. Die kürzeste Konfiguration, #NFSv3, dient als "Basis", auf der alle nachfolgenden Abschnitten, falls nötig, angepasst werden.
Nun wird das initramfs aufgebaut. Die kürzeste Konfiguration, #NFSv3, dient als "Basis", auf der alle nachfolgenden Abschnitten, falls nötig, angepasst werden.
Zeile 362: Zeile 362:
}}
}}


{{hinweis|Außerdem müssen Sie die entsprechenden benötigten [https://wiki.archlinux.org/index.php/Network#Device_Driver module] {{Sprache|en}} für Ihren Ethernet-Controller dem {{ic|1=MODULES}} Feld hinzufügen.}}
{{hinweis1|Außerdem müssen Sie die entsprechenden benötigten [https://wiki.archlinux.org/index.php/Network#Device_Driver module] {{Sprache|en}} für Ihren Ethernet-Controller dem {{ic|1=MODULES}} Feld hinzufügen.}}


Die Datei {{ic|mkinitcpio.conf}} mit den entsprechenden Einträgen. Die relevanten Bereiche sind farblich hervorgehoben.  
Die Datei {{ic|mkinitcpio.conf}} mit den entsprechenden Einträgen. Die relevanten Bereiche sind farblich hervorgehoben.  
Zeile 493: Zeile 493:
  # pacman --root "$root" --dbpath "$root/var/lib/pacman" -U mkinitcpio-nbd-0.4-1-any.pkg.tar.xz
  # pacman --root "$root" --dbpath "$root/var/lib/pacman" -U mkinitcpio-nbd-0.4-1-any.pkg.tar.xz


{{hinweis|Die Pfad-Variable {{ic|"$root"}} muss hier auf {{ic|/srv/arch/linux_i686}} gesetzt sein.}}
{{hinweis1|Die Pfad-Variable {{ic|"$root"}} muss hier auf {{ic|/srv/arch/linux_i686}} gesetzt sein.}}


Dann muss {{ic|nbd}} in das {{ic|HOOKS}} Feld nach {{ic|net}} hinzufügt werden; {{ic|net}} wird das Netzwerk konfigurieren, aber nicht versuchen ein NFS-Mount zu machen, wenn das {{ic|nfsroot}} nicht in der Kernel-Zeile angegeben wird.
Dann muss {{ic|nbd}} in das {{ic|HOOKS}} Feld nach {{ic|net}} hinzufügt werden; {{ic|net}} wird das Netzwerk konfigurieren, aber nicht versuchen ein NFS-Mount zu machen, wenn das {{ic|nfsroot}} nicht in der Kernel-Zeile angegeben wird.
Zeile 508: Zeile 508:
  # pacman --root "$root" --dbpath "$root/var/lib/pacman" -U grub-bios-bzr-4751-1-x86_64.pkg.tar.xz
  # pacman --root "$root" --dbpath "$root/var/lib/pacman" -U grub-bios-bzr-4751-1-x86_64.pkg.tar.xz


{{hinweis|Die Pfad-Variable {{ic|1="$root"}} muss hier auf {{ic|1=/srv/arch/linux_i686}} gesetzt sein.}}
{{hinweis1|Die Pfad-Variable {{ic|1="$root"}} muss hier auf {{ic|1=/srv/arch/linux_i686}} gesetzt sein.}}


Wir möchten die burg-bios-bzr Arch Paket Installation auf dem Ziel-Rechner nutzen, daher machen wir ein arch-chroot in die Ziel-Rechner Installation damit wir den Befehl grub-mknetdir benutzen können.
Wir möchten die burg-bios-bzr Arch Paket Installation auf dem Ziel-Rechner nutzen, daher machen wir ein arch-chroot in die Ziel-Rechner Installation damit wir den Befehl grub-mknetdir benutzen können.
Zeile 518: Zeile 518:
  # pacman --root "$root" --dbpath "$root/var/lib/pacman" -U grub-bios-bzr-4751-1-x86_64.pkg.tar.xz
  # pacman --root "$root" --dbpath "$root/var/lib/pacman" -U grub-bios-bzr-4751-1-x86_64.pkg.tar.xz


{{hinweis|Die Pfad-Variable {{ic|1="$root"}} muss hier auf {{ic|1=/srv/arch/linux_i686}} gesetzt sein.}}
{{hinweis1|Die Pfad-Variable {{ic|1="$root"}} muss hier auf {{ic|1=/srv/arch/linux_i686}} gesetzt sein.}}


Nun erstellen wir eine einfache Grub-Konfiguration:
Nun erstellen wir eine einfache Grub-Konfiguration:
Zeile 531: Zeile 531:
[[GRUB|GRUB]] {{Sprache|de}} wird das Root-Verzeichnis {{ic|1=root=(tftp,10.0.0.1)}} automatisch eintragen, so das der Kernel und das initramfs per TFTP übertragen werden, ohne zusätzliche Angaben zur Konfiguration, jedoch möchtest Du diese ausdrücklich angeben, wenn Du weitere Nicht-TFTP Menüeinträge machen möchtest.
[[GRUB|GRUB]] {{Sprache|de}} wird das Root-Verzeichnis {{ic|1=root=(tftp,10.0.0.1)}} automatisch eintragen, so das der Kernel und das initramfs per TFTP übertragen werden, ohne zusätzliche Angaben zur Konfiguration, jedoch möchtest Du diese ausdrücklich angeben, wenn Du weitere Nicht-TFTP Menüeinträge machen möchtest.


{{hinweis|Passe die Kernel Zeile an wie es erforderlich ist, in Bezug auf [https://wiki.archlinux.org/index.php/PXE #Pxelinux] {{Sprache|en}} für NBD-relevante Optionen.}}
{{hinweis1|Passe die Kernel Zeile an wie es erforderlich ist, in Bezug auf [https://wiki.archlinux.org/index.php/PXE #Pxelinux] {{Sprache|en}} für NBD-relevante Optionen.}}


==== Pxelinux ====
==== Pxelinux ====
{{hinweis|Syslinux besitzt derzeit keinen UEFI-Netzwerk-Stack, so dass Du nicht in der Lage sein wirst syslinux-firmware-git Arch Paket zu benutzen. Es ist immer noch mögllich mit #GRUB und TFTP nach wie vor den Kernel und das initramfs zu übertragen; pxelinux funktioniert gut mit älteren PXE Boot ROMs.}}
{{hinweis1|Syslinux besitzt derzeit keinen UEFI-Netzwerk-Stack, so dass Du nicht in der Lage sein wirst syslinux-firmware-git Arch Paket zu benutzen. Es ist immer noch mögllich mit #GRUB und TFTP nach wie vor den Kernel und das initramfs zu übertragen; pxelinux funktioniert gut mit älteren PXE Boot ROMs.}}


[[Preboot_eXecution_Environment|Pxelinux]] {{Sprache|de}} wird bereitgestellt durch {{Paket|syslinux}}. [[Bild:Arch_Paket.png]]
[[Preboot_eXecution_Environment|Pxelinux]] {{Sprache|de}} wird bereitgestellt durch {{Paket|syslinux}}. [[Bild:Arch_Paket.png]]
Zeile 561: Zeile 561:
  append ro initrd=initramfs-linux_i686.img ip=:::::eth0:dhcp nbd_host=10.0.0.1 nbd_name=arch/linux_i686 root=/dev/nbd0
  append ro initrd=initramfs-linux_i686.img ip=:::::eth0:dhcp nbd_host=10.0.0.1 nbd_name=arch/linux_i686 root=/dev/nbd0


{{hinweis|Es muss {{ic|1=nbd_host}} und/oder {{ic|1=nfsroot}} geändert werden, auf die jeweils passende Netzwerk-Konfiguration (die Adresse des NFS / NBD-Servers)}}
{{hinweis1|Es muss {{ic|1=nbd_host}} und/oder {{ic|1=nfsroot}} geändert werden, auf die jeweils passende Netzwerk-Konfiguration (die Adresse des NFS / NBD-Servers)}}


Die pxelinux Konfigurationssyntax ist identisch mit der von syslinux; ziehe die obige Dokumentation für weitere Informationen zu Rate.
Die pxelinux Konfigurationssyntax ist identisch mit der von syslinux; ziehe die obige Dokumentation für weitere Informationen zu Rate.

Version vom 6. Juli 2013, 21:56 Uhr

Dieser Artikel oder Artikelabschnitt bedarf einer stilistischen Überarbeitung laut Empfehlungen in Artikelstil.


„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. Vorlage:Hinweis1

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;
    }
}

Vorlage:Hinweis1

Vorlage:Hinweis1

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:)

Vorlage:Shell

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:

Vorlage:Shell

Vorlage:Shell

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)

Vorlage:Hinweis1

Als Nächstes starte den NFSv3 Server:

# systemctl start rpc-mountd rpc-statd

Die Überprüfung:

# systemctl status rpc-mountd 
# systemctl status rpc-statd

Das Ergebnis:

Vorlage:Shell

Vorlage:Shell

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

Vorlage:Hinweis1

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"

Vorlage:Hinweis1

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   =
.....

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":

Vorlage:Shell

Auch hier, wie auch bei dem Befehl "mkarchroot" ist es möglich mit der Option -C eine alternativ pacman.conf an zu geben. Somit kann die schon vorhandene Datei pacman_arch_i686.conf wieder verwendet werden.

Der Befehl setzt sich wie folgt zusammen:

# pacstrap -C pacman_arch_i686.conf -d "$root" mkinitcpio-nfs-utils nfs-utils

Es wird die genannte *.conf Datei verwendet, die dafür sorgt das Pakete für die i686-Architektur herunter geladen werden, diese in ein nicht gemountetes Verzeichnis installiert werden. Zum Schluß werden die beiden Pakete genannt. Sollte das Installationsverzeichnis schon gemountet sein, entfällt die Option -d.

Vorlage:Hinweis1

Nun wird das initramfs aufgebaut. Die kürzeste Konfiguration, #NFSv3, dient als "Basis", auf der alle nachfolgenden Abschnitten, falls nötig, angepasst werden.

NFSv3

Konfiguriere die Datei mkinitcpio.conf.

# vim "$root/etc/mkinitcpio.conf"
MODULES="nfsv3"
HOOKS="base udev autodetect net filesystems keyboard"
BINARIES=""

Vorlage:Hinweis1

Die Datei mkinitcpio.conf mit den entsprechenden Einträgen. Die relevanten Bereiche sind farblich hervorgehoben.

Äußerst wichtig: Die Module, die hinter MODULES= eingetragen werden, sind für den Ziel-Rechner und nicht für den Server!!!


# vim:set ft=sh
# MODULES
# The following modules are loaded before any boot hooks are
# run.  Advanced users may wish to specify all system modules
# in this array.  For instance:
#     MODULES="piix ide_disk reiserfs"
MODULES="nfsv3 8139too ipw2200"

# BINARIES
# This setting includes any additional binaries a given user may
# wish into the CPIO image.  This is run last, so it may be used to
# override the actual binaries included by a given hook
# BINARIES are dependency parsed, so you may safely ignore libraries
BINARIES=""

# FILES
# This setting is similar to BINARIES above, however, files are added
# as-is and are not parsed in any way.  This is useful for config files.
FILES=""

# HOOKS
# This is the most important setting in this file.  The HOOKS control the
# modules and scripts added to the image, and what happens at boot time.
# Order is important, and it is recommended that you do not change the
# order in which HOOKS are added.  Run 'mkinitcpio -H ' for
# help on a given hook.
# 'base' is _required_ unless you know precisely what you are doing.
# 'udev' is _required_ in order to automatically load modules
# 'filesystems' is _required_ unless you specify your fs modules in MODULES
# Examples:
##   This setup specifies all modules in the MODULES setting above.
##   No raid, lvm2, or encrypted root is needed.
#    HOOKS="base"
#
##   This setup will autodetect all modules for your system and should
##   work as a sane default
HOOKS="base udev autodetect net filesystems keyboard"
#
##   This setup will generate a 'full' image which supports most systems.
##   No autodetection is done.
#    HOOKS="base udev block filesystems"
#
##   This setup assembles a pata mdadm array with an encrypted root FS.
##   Note: See 'mkinitcpio -H mdadm' for more information on raid devices.
#    HOOKS="base udev block mdadm encrypt filesystems"
#
##   This setup loads an lvm2 volume group on a usb device.
#    HOOKS="base udev block lvm2 filesystems"
#
##   NOTE: If you have /usr on a separate partition, you MUST include the
#    usr, fsck and shutdown hooks.
#    HOOKS="base udev autodetect modconf block filesystems keyboard fsck"

# COMPRESSION
# Use this to compress the initramfs image. By default, gzip compression
# is used. Use 'cat' to create an uncompressed image.
#COMPRESSION="gzip"
#COMPRESSION="bzip2"
#COMPRESSION="lzma"
#COMPRESSION="xz"
#COMPRESSION="lzop"

# COMPRESSION_OPTIONS
# Additional options for the compressor
#COMPRESSION_OPTIONS=""

Das initramfs wird nun installiert. Der einfachste Weg dies zu tun ist mit dem Befehl arch-chroot.

Wie oben schon unter Rechner-Architektur erwähnt soll das Boot-System im Verzeichnis /srv/tftp/ installiert werden.

# arch-chroot "$root" /bin/bash
(chroot) # mkinitcpio -g /srv/tftp/linux_i686.img
(chroot) # exit

Hier eine mögliche Ausgabe:

Vorlage:Shell

NBD

mkinitcpio-nbdAUR Datei:Arch Paket.png muss auf dem Ziel-Rechner installiert werden. Baue es mit makepkg und installiere es:

# pacman --root "$root" --dbpath "$root/var/lib/pacman" -U mkinitcpio-nbd-0.4-1-any.pkg.tar.xz

Vorlage:Hinweis1

Dann muss nbd in das HOOKS Feld nach net hinzufügt werden; net wird das Netzwerk konfigurieren, aber nicht versuchen ein NFS-Mount zu machen, wenn das nfsroot nicht in der Kernel-Zeile angegeben wird.

Zielrechner Konfiguration (auf dem Server)

Zusätzlich zu dem hier genannten Setup, sollte auch hostname , timezone , die locale , und keymap , konfiguriert werden, befolge alle anderen relevanten Teile der Arch Install Scripts. Eine ausführlichere Alternative ist der Installation Guide.

Die verschiedenen Bootloader

GRUB

Obwohl schlecht dokumentiert, unterstützt GRUB auch das Laden über PXE. Aufgrund eines Fehlers in Endian in der grub-core/net/tftp.c Datei der nicht in der bzr Revision 4548 behoben wurde (grub-gfx 2.00 Datei:Arch Paket.png ist Revision 4542), musst Du das burg-bios-bzrAUR aus dem AUR selber bauen; macht es am meisten Sinn, dies in der Ziel-Rechner-Installation zu tun. Darüber hinaus ist es aufgrund eines Fehlers in grub-core/net/drivers/efi/efinet.c der nicht behoben wurde bis zur bzr Revision 4751, muss burg-efi-x86_64-bzrAUR Datei:Arch Paket.png ebenfalls erstellt werden. Der Arch-User-Repository Artikel beschreibt, wie diese Pakete gebaut werden.

# pacman --root "$root" --dbpath "$root/var/lib/pacman" -U grub-bios-bzr-4751-1-x86_64.pkg.tar.xz

Vorlage:Hinweis1

Wir möchten die burg-bios-bzr Arch Paket Installation auf dem Ziel-Rechner nutzen, daher machen wir ein arch-chroot in die Ziel-Rechner Installation damit wir den Befehl grub-mknetdir benutzen können.

# arch-chroot /srv/tftp grub-mknetdir --subdir=grub

Als nächstes wird zu burg-efi-x86_64-bzrAUR Datei:Arch Paket.png gewechselt das eben gebaut wurde, und es wird grub-mknetdir ausgeführt, genau so wie oben, nur zum zweiten Mal.

# pacman --root "$root" --dbpath "$root/var/lib/pacman" -U grub-bios-bzr-4751-1-x86_64.pkg.tar.xz

Vorlage:Hinweis1

Nun erstellen wir eine einfache Grub-Konfiguration:

# vim "/srv/tftp/grub/grub.cfg"
menuentry "Arch Linux" {
    linux tftp/vmlinuz-linux_i686 quiet add_efi_memmap ip=:::::eth0:dhcp nfsroot=10.0.0.1:/srv/arch/linux_i686
    initrd tftp/initramfs-linux_i686.img
}

GRUB wird das Root-Verzeichnis root=(tftp,10.0.0.1) automatisch eintragen, so das der Kernel und das initramfs per TFTP übertragen werden, ohne zusätzliche Angaben zur Konfiguration, jedoch möchtest Du diese ausdrücklich angeben, wenn Du weitere Nicht-TFTP Menüeinträge machen möchtest.

Vorlage:Hinweis1

Pxelinux

Vorlage:Hinweis1

Pxelinux wird bereitgestellt durch syslinux. Datei:Arch Paket.png

Kopieren Sie den pxelinux Bootloader (aus dem Paket syslinux) auf das Boot-Verzeichnis des Ziel-Rechners.

# cp /usr/lib/syslinux/pxelinux.0 "/srv/tftp"
# mkdir "/srv/tftp/pxelinux.cfg"

Wir legten auch das pxelinux.cfg Verzeichnis an, wo pxelinux standardmäßig nach seinen Konfigurationsdateien sucht. Wir wollten nicht zwischen verschiedenen Host-MAC-Adressen unterscheiden, daher erstellen wir die Standardkonfiguration.

# vim "/srv/tftp/pxelinux.cfg/default"
default linux

label linux
kernel vmlinuz-linux_i686
append initrd=initramfs-linux_i686.img quiet ip=:::::eth0:dhcp nfsroot=10.0.0.1:/arch

NFSv3 Mountpoints sind relativ zum Root des Servers nicht fsid=0. (fsid=0 wird nur bei NFSv4 angegeben.)

Wenn NFSv3 verwendet, wird ist es notwendig 10.0.0.1:/arch durch 10.0.0.1:/srv/arch/linux_i686 bei nfsroot= zu ersetzen.

Oder wenn NBD, verwendet wird, wird die folgende "append" Zeile benötigt:

append ro initrd=initramfs-linux_i686.img ip=:::::eth0:dhcp nbd_host=10.0.0.1 nbd_name=arch/linux_i686 root=/dev/nbd0

Vorlage:Hinweis1

Die pxelinux Konfigurationssyntax ist identisch mit der von syslinux; ziehe die obige Dokumentation für weitere Informationen zu Rate.

Der Kernel und das initramfs wird per TFTP übertragen, so dass die Pfade zu diesen relativ sein werden, bezogen auf das TFTP Root-Verzeichnis. Andernfalls wird das Root-Dateisystem zum NFS mount selbst werden, also relativ zum Root-Verzeichnis des NFS-Servers.

Um tatsächlich pxelinux zu laden, ersetzen Sie filename "/grub/i386-pc/core.0"; in der Datei /etc/dhcpd.conf durch filename "/pxelinux.0";

zusätzliche Mountpunkte

NBD Root-Verzeichnis

Im späteren Bootvorgang wollen Sie Ihr Root-Dateisystem zu beidem ändern, um es sowohl schreibbar zu machen rw und die Aktivierung von compress=lzo für eine deutlich verbesserte Festplatten-Performance im Vergleich zu NFS.

Vorlage:Hinweis1

Bei einem ersten Test des obigen Setups sollte eine ähnliche Ausgabe wie unten zu sehen sein:

(MAC- und IP-Adressen geändert)

Siehe auch

kernel.org: Mounting the root filesystem via NFS (nfsroot) syslinux.org: pxelinux FAQ

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.