Automatisierte Implementierung mit PXE-Boot

Beim Durchführen vieler Installationen eines Betriebssystems auf ähnlicher Hardware ist es nützlich, eine Massenimplementierung des Betriebssystems gründlich vorzubereiten und die erforderliche Zeit für die tatsächliche Implementierung zu minimieren. Das wird in diesem Kapitel behandelt. Es muss einfach ein Computer an die Stromversorgung und das Netzwerk angeschlossen, ein Netzwerkboot gestartet und abgewartet werden, bis er wieder herunterfährt.

Die folgenden Aktionen müssen ausgeführt werden, um diese Aufgabe zu erfüllen:

Einrichten eines Boot- und Installationsservers

Ein dedizierter Computer ist erforderlich, der so eingerichtet ist, dass er PXE-Boot sowie einen FTP- oder Webserver für die Bereitstellung eines Preload-Image bietet. Der Computer sollte über genügend Arbeitsspeicher verfügen, um alle erforderlichen Installationsdaten bereitzuhalten. Für eine Standardinstallation benötigen Sie mindestens 4 GB Arbeitsspeicher. Alle erforderlichen Aufgaben können mit einem SUSE Linux Enterprise Server erledigt werden. Weitere Informationen finden Sie unter Abschnitt 22.2.1, „Einrichten eines Boot- und Installationsservers“.

Vorbereiten eines Preload-Image

Die tatsächliche Installation erfolgt durch das Kopieren eines RAW-Image des Betriebssystems auf eine neue Festplatte. Alle Funktionen und Einstellungen müssen sorgfältig vorbereitet und geprüft werden. Für die Bereitstellung eines solchen Image kann KIWI verwendet werden, das im SDK des SUSE Linux Enterprise-Betriebssystems zur Verfügung steht. Weitere Informationen über die Image-Erstellung mit KIWI erhalten Sie in Kapitel 17, KIWI. Weitere Details über die Anforderungen des Preload-Image finden Sie in Abschnitt 22.2.2, „Erstellen eines Preload-Image“.

Erstellen eines ersten Systems für die Implementierung

Für diese Aufgabe sind einige Linux-Kenntnisse erforderlich. Eine Beschreibung anhand einer Beispielinstallation finden Sie unter Abschnitt 22.2.3, „Erstellen eines ersten Systems zur Implementierung eines Preload-Image“.

Konfigurieren des Boot-Servers für automatische Implementierungen

Zum Schluss muss alles zusammengesetzt werden. PXE-Boot muss angewiesen werden, das Installationssystem zu starten, das wiederum das Preload-Image vom Server übernimmt und es auf die Festplatte kopiert.

Einrichten eines Boot- und Installationsservers

Vier Schritte sind erforderlich, damit diese Aufgabe nach der Installation eines SUSE Linux Enterprise Server ausgeführt werden kann:

Gehen Sie wie folgt vor, um diese Art der Installation auszuführen:

  1. Richten Sie die Installationsquelle ein wie in Abschnitt 14.2, „Einrichten des Servers, auf dem sich die Installationsquellen befinden“ beschrieben. Wählen Sie einen HTTP- oder FTP-Netzwerkserver.

  2. Richten Sie einen TFTP-Server so ein, dass er ein Boot-Image enthalten wird, das in einem späteren Schritt erstellt wird. Die Konfiguration eines solchen Servers wird in Abschnitt 14.3.2, „Einrichten eines TFTP-Servers“ beschrieben.

  3. Richten Sie einen DHCP-Server ein, der IP-Adressen für alle Computer bereitstellt und dem Zielsystem den Speicherort des TFTP-Servers bekannt gibt. Die Konfiguration eines solchen Servers wird in Abschnitt 14.3.1, „Einrichten eines DHCP-Servers“ beschrieben.

  4. Bereiten Sie den PXE-Boot des Installationsservers vor. Dies wird ausführlich in Abschnitt 14.3.3, „Verwenden von PXE Boot“ beschrieben.

Beachten Sie, dass es für den eigentlichen Installationsvorgang sehr vorteilhaft ist, wenn Sie diesem Computer genügend Arbeitsspeicher zur Verfügung stellen, damit er das Preload-Image im Arbeitsspeicher halten kann. Des Weiteren beschleunigt die Verwendung von Gigabit-Ethernet den Implementierungsvorgang für langsamere Netzwerke bedeutend, wenn das gesamte Netzwerk dieses unterstützt.

Erstellen eines Preload-Image

Das Verfahren der Image-Erstellung mit KIWI wird in Abschnitt 17.4.2, „Erstellen eines Image“ beschrieben. Jedoch müssen bei der Image-Erstellung für Massenimplementierungen mehrere Punkte berücksichtigt werden:

  • Ein typisches Preload-Image verwendet den folgenden Typ:

    <type primary="true" filesystem="ext3" boot="oemboot/suse-SLES11">vmx</type>
  • Beim Einrichten eines Preload-Image wird der Image-Erstellungsvorgang mehrmals ausgeführt. Die erforderlichen Repositorys für die Image-Erstellung müssen auf dem lokalen Computer verfügbar sein.

  • Abhängig von der gewünschten Nutzung des Preloads sollten einige Mühen in die Konfiguration von Firstboot investiert werden. Weitere Details über Firstboot finden Sie in Kapitel 20, Installieren von benutzerdefinierten Vorinstallationen. Mit dieser Methode können Sie auch festlegen, dass der Benutzer beim ersten Boot des Systems anfängliche Konfigurationen angeben muss.

  • Viele zusätzliche Funktionen können im Image konfiguriert werden, z. B. das Hinzufügen von Update-Repositorys oder das Ausführen einer Aktualisierung beim ersten Booten. Jedoch können hier nicht alle Möglichkeiten beschrieben werden. Abhängig von den Anforderungen erfordert die Erstellung des Preload-Image eingehende Kenntnisse des Imaging-Systems KIWI sowie mehrerer anderer Techniken, die in SUSE Linux Enterprise Server verwendet werden.

Das eigentliche Image, das implementiert werden soll, muss auf dem FTP- oder HTTP-Server verfügbar sein, den Sie auf dem Installationsserver bereitgestellt haben.

Erstellen eines ersten Systems zur Implementierung eines Preload-Image

Für die Ausführung einer automatischen Implementierung muss ein erstes Linux-System auf dem Zielcomputer gestartet werden. Während einer typischen Installation werden Kernel und das erste RAM-Dateisystem von einem Bootmedium gelesen und durch das BIOS gestartet. Die benötigte Funktionalität kann im RAM-Dateisystem implementiert werden, das zusammen mit dem Kernel als erstes System dient.

Die Hauptfunktionen, die das erste System bieten muss, sind die Ermöglichung des Zugriffs auf die Festplatte und die Bereitstellung einer Netzwerkverbindung. Diese beiden Funktionen hängen von der Hardware ab, auf der die Implementierung erfolgen soll. Prinzipiell ist es möglich, ein erstes System von Grund auf neu zu erstellen, aber zur Vereinfachung dieser Aufgabe ist es auch möglich, das anfängliche RAM-Dateisystem zu ändern, das der Computer beim Booten verwendet.

Die folgende Prozedur ist nur ein Beispiel dafür, wie das erforderliche erste RAM-Dateisystem erstellt werden kann. Es gibt mehrere Methoden, ein solches System zu erstellen, diese hier ist jedoch nicht allzu komplex.

  1. Führen Sie eine Standardinstallation von SUSE Linux Enterprise Server auf dem Zielsystem durch.

  2. Installieren Sie das Paket busybox auf dem System.

  3. Erstellen Sie mit dem folgenden Kommando ein neues RAM-Dateisystem:

    mkinitrd -f busybox -D eth0

    Beachten Sie, dass eth0 das Ethernet-Gerät darstellt, an das Ihr Netzwerkkabel angeschlossen ist. Der Parameter -f busybox fügt dem RAM-Dateisystem das ausführbare Programm busybox hinzu, das mehrfach aufgerufen werden kann. Danach stehen in diesem System viele UNIX-Standardkommandos zur Verfügung.

  4. Kopieren Sie das neue RAM-Dateisystem und den Kernel mit dem folgenden Kommando auf Ihren Boot-Server:

    scp /boot/initrd /boot/vmlinuz pxe.example.com:

    Ersetzen Sie pxe.example.com durch den Namen Ihres lokalen Boot-Servers oder der IP-Adresse.

  5. Melden Sie sich bei Ihrem Boot-Server als root-Benutzer an und erstellen Sie ein Verzeichnis, in dem Sie das RAM-Dateisystem ändern können:

    mkdir ~/bootimage
  6. Ändern Sie Ihr Arbeitsverzeichnis mithilfe des Kommandos cd ~/bootimage in dieses Verzeichnis.

  7. Entpacken Sie mithilfe des folgenden Kommandos das zuvor kopierte erste RAM-Dateisystem:

    zcat ../initrd | cpio -i
  8. Bearbeiten Sie die Datei run_all.sh.

  9. Suchen Sie die folgende Zeile, löschen Sie sie und den Rest der Datei:

    [ "$debug" ] && echo preping 21-nfs.sh 
  10. Fügen Sie die folgenden Zeilen an das Ende der Dateien run_all.sh:

    [ "$debug" ] && echo preping 92-install.sh
    [ "$debug" ] && echo running 92-install.sh
    source boot/92-install.sh
    [ "$modules" ] && load_modules
         
  11. Erstellen Sie ein neues Skript mit dem Namen boot/92-install.sh und dem folgenden Inhalt:

    #!/bin/bash
    if [ "$(get_param rawimage)" ]; then
      rawimage=$(get_param rawimage)
      if  [ "$(get_param rawdevice)" ]; then
        rawdevice=$(get_param rawdevice)
        echo "wget -O ${rawdevice} ${rawimage}"
        wget -O ${rawdevice} ${rawimage}
        sync
        sleep 5
        echo "DONE"
      fi
    fi
    # /bin/bash
    /bin/poweroff -f
    
  12. Wenn Sie vor dem Abschalten des Computers eine Debug-Shell wünschen, entfernen Sie das Kommentarzeichen vor /bin/bash.

  13. Machen Sie dieses Skript ausführbar mithilfe des Kommandos chmod 755 boot/92-install.sh.

  14. Erstellen Sie ein neues anfängliches RAM-Dateisystem mit den folgenden Kommandos:

    mkdir -p /srv/tftpboot
    find . | cpio --quiet -H newc -o | gzip -9 -n > \
    /srv/tftpboot/initrd.boot
  15. Kopieren Sie auch den Kernel in dieses Verzeichnis.

    cp ../vmlinuz /srv/tftpboot/linux.boot

Das erste RAM-Dateisystem ist nun für zwei neue Kernel-Kommandozeilenparameter vorbereitet. Der Parameter rawimage=<URL> wird benutzt, um den Speicherort des Preload-Image zu identifizieren. Jede URL, die von wget verstanden wird, ist verwendbar. Der Parameter rawdevice=<device> wird verwendet, um das Block-Gerät für die Festplatte auf dem Zielcomputer zu identifizieren.

Konfiguration des Boot-Servers

Die Konfiguration des Boot-Servers wird ausführlich in mehreren Kapiteln behandelt. Siehe dazu die Liste in Abschnitt 22.2.1, „Einrichten eines Boot- und Installationsservers“. Dieser Abschnitt enthält eine Prüfliste mit den Schritten, die mindestens zur Konfiguration des Systems erforderlich sind.

  • Richten Sie einen DHCP-Server ein. Das Subnetz, in dem die Computer installiert sind, benötigt die folgenden Zeilen:

    filename "pxelinux.0";
    next-server 192.168.1.115;

    In diesem Beispiel ist 192.168.1.115 die IP-Adresse des PXE-Servers pxe.example.com.

  • Konfigurieren Sie einen PXE-Server wie in Abschnitt 14.3.3, „Verwenden von PXE Boot“ beschrieben. Fügen Sie beim Bearbeiten von /srv/tftpboot/pxelinux.cfg/default die folgenden Einträge hinzu:

    default bootinstall
    label bootinstall
      kernel linux.boot
      append initrd=initrd.boot \
      rawimage=ftp://192.168.1.115/preload/preloadimage.raw rawdevice=/dev/sda
  • Richten Sie einen FTP-Server ein und kopieren Sie Ihre vorbereiteten Preload-Images nach /srv/ftp/preload/preloadimage.raw.

Testen Sie Ihr Setup, indem Sie das Zielsystem mit dem PXE-Netzwerk-Boot starten. Damit wird das vorbereitete Preload-Image automatisch auf die Festplatte kopiert und der Computer zum Schluss abgeschaltet.