Rechenzentrumsingenieure stehen häufig vor der Aufgabe der anfänglichen Serverkonfiguration. Darüber hinaus ist es meistens erforderlich, nicht ein oder zwei Geräte zu konfigurieren, sondern mehrere zehn oder sogar Hunderte. Jedes Mal, wenn ein neues Gerät zu uns kommt, müssen wir es nicht nur gründlich prüfen, bevor wir es in Betrieb nehmen, sondern es auch ordnungsgemäß für die Verwendung mit unseren internen Systemen konfigurieren.
Bevor Sie mit dem eher trivialen Verfahren zum Einrichten von BIOS und IPMI fortfahren, müssen Sie sicherstellen, dass jede Serverkomponente über die erforderliche Firmware-Version verfügt. In den meisten Fällen, mit seltenen Ausnahmen, ist eine aktuelle Version erforderlich, die auf der Website des Herstellers bestimmter Komponenten verfügbar ist. Heute werden wir Ihnen erzählen, wie wir auf die Idee gekommen sind, die jetzt beliebte "Himbeere" zu verwenden, um den Prozess zu beschleunigen.
Was ist die Schwierigkeit
Es scheint, dass die Aufgabe sehr einfach ist. Nehmen wir eine Live-Linux-Distribution, rollen sie auf ein USB-Flash-Laufwerk aus, booten von dort und führen die erforderlichen Verfahren aus. Aber es war nicht da.
Das Problem ist, dass jeder Anbieter seine eigenen Methoden und Dienstprogramme zum Aktualisieren der Firmware hat. Darüber hinaus können nicht alle unter Linux ordnungsgemäß funktionieren. Bei einigen Komponenten, z. B. BIOS für SuperMicro-Server, ist es wünschenswert, unter MS-DOS zu nähen. Für einige Komponenten, z. B. Mellanox-Netzwerkkarten, müssen Sie in einigen Fällen Windows verwenden, und einige unterstützen Firmware direkt von Linux.
Daher müssen wir entweder ein Multiboot-Image sammeln und auf mehrere Dutzend Flash-Laufwerke schreiben, dann lange und dauerhaft von diesen booten oder uns etwas Interessanteres und Schnelleres einfallen lassen. Und hier kommt die Verwendung von Servernetzwerkkarten mit Unterstützung für PXE (Preboot eXecution Environment, ausgesprochen pixie) in den Sinn.
Wir nehmen die "Himbeere", stellen dort einen DHCP- und TFTP-Server bereit und bereiten die erforderlichen Images zum Laden vor. Um mehrere Dutzend Server massiv zu laden, verwenden wir nur vorübergehend einen nicht verwalteten 48-Port-Gigabit-Switch und Voila. Standardmäßig erlauben die meisten Server das PXE-Booten ohne zusätzliche Konfiguration, daher ist dies ideal.
Ich habe einen ausgezeichneten Artikel als Grundlage genommen. von Romanenko_Eugene, aber mit Korrekturen für die Funktionen des Raspberry Pi und die zu lösenden Aufgaben. Lass uns anfangen!
Himbeermarmelade
Als ich dies zum ersten Mal tat, war die fortschrittlichste Version des Raspberry Pi die dritte mit einer 100-Mbit / s-Netzwerkkarte. Dies ist offen gesagt nicht genug für die Massenverteilung schwerer Bilder, daher empfehle ich dringend, den derzeit verfügbaren Raspberry Pi 4 mit einem 1-Gbit / s-Port zu verwenden. Eine weitere Empfehlung ist die Verwendung einer schnellen und geräumigen Speicherkarte, wann immer dies möglich ist.
Nun zur Ersteinrichtung. Eine grafische Oberfläche für so etwas ist absolut nicht erforderlich, daher können Sie die einfachste Lite-Version des Betriebssystems Raspberry Pi OS herunterladen . Wir entpacken das Bild und laden es auf eine bequeme Weise auf die MicroSD-Karte hoch, beispielsweise mit dd:
sudo dd if=<_> of=/dev/mmcblk0 bs=1M
Während des Konfigurationsprozesses können Sie entweder auf herkömmliche Weise konfigurieren, indem Sie eine Tastatur und einen Monitor anschließen, oder über SSH. Erstellen Sie eine leere Datei mit dem Namen ssh im Abschnitt / boot, damit der SSH-Dienst beim Start funktioniert .
Da der Netzwerkanschluss für den DHCP-Betrieb verwendet wird, können Sie entweder eine Wi-Fi-Verbindung verwenden, um auf das Internet zuzugreifen, oder eine andere Netzwerkkarte über USB mit dem Malinka verbinden. Hier ist zum Beispiel eines:
Jetzt starten wir den Raspberry Pi, verbinden ihn mit dem Internet und aktualisieren die Repositorys und Softwarepakete:
sudo apt update
sudo apt upgrade
Da ich eine andere Netzwerkkarte verwende, muss die integrierte auf eine statische IP-Adresse eingestellt sein. Öffnen Sie die Konfiguration:
sudo nano /etc/dhcpcd.conf
Fügen Sie die folgenden Zeilen hinzu:
interface eth0 static ip_address=192.168.50.1/24
Hier ist eth0 die integrierte Netzwerkkarte des Raspberry Pi. Mit ihrer Hilfe werden die Verteilung der IP-Adressen und das Laden des Netzwerks durchgeführt. Installieren Sie nun den TFTP-Server:
sudo apt install tftpd-hpa
Öffnen Sie nach der Installation die Konfigurationsdatei:
sudo nano /etc/default/tftpd-hpa
Wir bringen die Zeile in die folgende Form:
TFTP_OPTIONS="--secure -l -v -r blksize"
Im Allgemeinen kann man alles so lassen, wie es ist, aber jedes Mal auf einem separaten Computer zu testen, ist manchmal nicht sehr praktisch. Mit den Optionen -l -v -r blksize können Sie all dies problemlos in einer VirtualBox-VM testen und so Kompatibilitätsprobleme beheben. Jetzt installieren wir einen DHCP-Server zum Verteilen von IP-Adressen:
sudo apt install isc-dhcp-server
Öffnen Sie die erste Konfigurationsdatei isc-dhcp-server:
sudo nano /etc/default/isc-dhcp-server
Wir geben explizit die Schnittstelle an, auf der der DHCP-Server arbeiten soll:
INTERFACESv4="eth0"
Öffnen Sie nun die zweite config dhcpd.conf :
sudo nano /etc/dhcp/dhcpd.conf
Wir legen die erforderlichen Serverparameter und das zu verteilende Subnetz fest und übergeben auch den Namen der Loader-Datei:
default-lease-time 600; max-lease-time 7200; ddns-update-style none; authoritative; subnet 192.168.50.0 netmask 255.255.255.0 { range 192.168.50.2 192.168.50.250; option broadcast-address 192.168.50.255; option routers 192.168.50.1; filename "pxelinux.0"; }
Wir speichern die Datei und müssen nun den Bootloader und die erforderlichen Module herunterladen und das PXE-Menü bilden. Beginnen wir mit dem Herunterladen einer Reihe von Syslinux-Ladern. In meinem Fall ist Version 5.01 am bequemsten:
wget https://mirrors.edge.kernel.org/pub/linux/utils/boot/syslinux/syslinux-5.01.zip
Auspacken:
unzip syslinux-5.01.zip
Jetzt müssen wir das memdisk- Modul finden und extrahieren , das ganze ISO-Images in den RAM, den pxelinux.0- Loader und den Rest der Comboot- Module laden kann . Wir führen nacheinander die Befehle aus, die alles im Verzeichnis / srv / tftp finden und kopieren:
find ./ -name "memdisk" -type f|xargs -I {} sudo cp '{}' /srv/tftp/
find ./ -name "pxelinux.0"|xargs -I {} sudo cp '{}' /srv/tftp/
find ./ -name "*.c32"|xargs -I {} sudo cp '{}' /srv/tftp/
Nach diesem Vorgang müssen wir eine Konfigurationsdatei direkt für das auf dem PXE-Bildschirm angezeigte Menü erstellen. Gehen Sie in unser Verzeichnis:
cd /srv/tftp
Erstellen Sie ein Verzeichnis mit dem Namen pxelinux.cfg und navigieren Sie zu diesem Verzeichnis:
sudo mkdir pxelinux.cfg
cd pxelinux.cfg
Wir erstellen eine Konfigurationsdatei:
sudo nano default
Nehmen wir als Beispiel die hervorragende Live-GRML-Distribution und laden Sie sie über PXE herunter. Unten finden Sie ein fertiges Konfigurationsbeispiel:
UI vesamenu.c32 PROMPT 0 MENU TITLE Raspberry Pi PXE Server MENU BACKGROUND bg.png LABEL bootlocal menu label Boot from HDD kernel chain.c32 append hd0 0 timeout 0 TEXT HELP Boot from first HDD in your system ENDTEXT LABEL grml menu label GRML Linux KERNEL grml/boot/grml32full/vmlinuz APPEND root=/dev/nfs rw nfsroot=192.168.50.1:/srv/tftp/grml/ live-media-path=/live/grml32-full boot=live lang=us nomce apm=power-off noprompt noeject initrd=grml/boot/grml32full/initrd.img vga=791 LABEL reboot menu label Reboot kernel reboot.c32 TEXT HELP Reboot server ENDTEXT
Es lohnt sich wahrscheinlich, hier ein wenig anzuhalten und herauszufinden, was jede Zeile tut:
- UI vesamenu.c32 - Verwenden Sie das Modul vesamenu.c32, um das Menü anzuzeigen.
- PROMPT 0 - Markieren Sie den Menüpunkt Null.
- MENÜTITEL Raspberry Pi PXE Server - Legen Sie den allgemeinen Namen des Menüs fest.
- MENÜ HINTERGRUND bg.png - Gestaltungselement, verwenden Sie bg.png als Hintergrundbild.
Das Hintergrundbild kann im Voraus erstellt werden. Standardmäßig ist ein 640 x 480-Bild mit einer Farbtiefe von nicht mehr als 24 Bit im PNG- oder JPG-Format geeignet. Es muss vorab nach / srv / tftp kopiert werden . Schauen wir uns nun jeden Abschnitt an. Der erste Abschnitt wurde der Einfachheit halber eingeführt. Wenn Sie von der ersten Festplatte booten müssen, registrieren wir:
- LABEL bootlocal - interner Abschnittsname;
- Menübezeichnung Boot from HDD - wie das Benutzermenü angezeigt wird;
- kernel chain.c32 - Wir verwenden das Modul chain.c32, das von verschiedenen Medien booten kann.
- append hd0 0 - Geben Sie explizit an, dass das Laden von der ersten Partition der ersten Festplatte erfolgen soll.
- Zeitlimit 0 - Hier können Sie entweder ein Zeitlimit in Sekunden festlegen, nach dem der Download automatisch gestartet wird, oder indem Sie 0 angeben, um den Timer zu entfernen.
- TEXTHILFE - Geben Sie den Anfang des Hilfetextes für den Benutzer an.
- Booten Sie von der ersten Festplatte in Ihrem System - Hinweistext;
- ENDTEXT - Geben Sie das Ende des Hinweistextes an.
In etwa gleicher Weise bilden wir den Abschnitt zum Nachladen. Der einzige Unterschied ist der Aufruf des Moduls reboot.c32, das das Auto tatsächlich zum Neustart sendet. Bevor wir untersuchen, was der dritte Abschnitt, in dem die GRML-Distribution geladen wird, bewirkt, lassen Sie uns darüber sprechen, was tatsächlich wie geladen wird.
Alles ist eine Datei
Das ISO-Image selbst ist auf der Website dieser Live-Distribution verfügbar . Laden Sie es herunter und benennen Sie es der Einfachheit halber um. Im Beispiel nehmen wir die 32-Bit-Version:
wget https://download.grml.org/grml32-full_2020.06.iso
mv grml32-full_2020.06.iso grml.iso
Jetzt müssen wir dieses Image irgendwie zum Booten zwingen. Einerseits können Sie das memdisk- Modul verwenden und es zwingen, zuerst alle "rohen" Inhalte des Images direkt in den RAM zu laden und dann die Kontrolle über den Start zu übertragen. Diese Methode eignet sich jedoch nur für sehr kleine Images. Beispielsweise ist es praktisch, MS-DOS auf diese Weise zu starten. Das Laden großer Bilder dauert lange und funktioniert nicht immer ausreichend.
Daher sollten Sie das Image weiterhin "ausnehmen" und nur den Kernel und livefs zum Booten übertragen. Weitere Dateien von der Festplatte können dem System jedoch auf Anfrage über den NFS-Server zur Verfügung gestellt werden. Dieser Ansatz funktioniert viel schneller und angemessener, erfordert jedoch zusätzliche Gesten, z. B. die Installation eines NFS-Servers.
Es geschieht auf elementare Weise:
sudo apt install nfs-kernel-server
Erstellen Sie ein separates Verzeichnis für grml, um die Dateien nicht durcheinander zu bringen:
sudo mkdir /srv/tftp/grml
Wir müssen die ISO einbinden, also kümmern wir uns um den temporären Einhängepunkt:
sudo mkdir /tmp/iso
Wir montieren das Bild. Das System warnt Sie, dass das Image im schreibgeschützten Modus bereitgestellt wird:
sudo mount -o loop grml.iso /tmp/iso
Kopieren Sie den Inhalt des Bildes rekursiv in unser separates Verzeichnis:
sudo cp -R /tmp/iso/* /srv/tftp/grml
Um Probleme mit Zugriffsrechten zu vermeiden, ändern wir den Eigentümer und weisen diesem Verzeichnis rekursiv die Rechte aus der Serie "Freies Zuhause, lebe, wen immer du willst" zu:
sudo chown -R nobody:nogroup /srv/tftp/grml/
sudo chmod -R 755 /srv/tftp/grml/
Jetzt ist es einfach, dem NFS-Server mitzuteilen, dass er das Verzeichnis / srv / tftp / grml für jede IP-Adresse aus unserem Subnetz bereitstellen soll :
sudo nano /etc/exports
Wir registrieren die Leitung:
/srv/tftp/grml 192.168.50.0/24(rw,sync,no_subtree_check)
Aktualisieren Sie die Liste und starten Sie den NFS-Server neu:
sudo exportfs -a
sudo systemctl restart nfs-kernel-server
Jetzt haben wir endlich die Möglichkeit, den Download-Prozess korrekt in zwei bedingte Phasen zu unterteilen. Der erste Schritt ist das Laden des Kernels und des Live-Dateisystems. In der zweiten Phase werden alle anderen Dateien über NFS abgerufen. Es ist Zeit, einen Blick auf den verbleibenden Abschnitt zu werfen:
- LABEL grml - Abschnittsname;
- Menübezeichnung GRML Linux - Anzeige im Menü;
- KERNEL grml / boot / grml32full / vmlinuz - Geben Sie den Pfad zum Kernel relativ zum Stammverzeichnis / srv / tftp an .
- APPEND root = / dev / nfs rw nfsroot = 192.168.50.1: / srv / tftp / grml / live-media-path = / live / grml32-full boot = live lang = us nomce apm = Ausschalten noprompt noeject initrd = grml /boot/grml32full/initrd.img vga = 791 - hier sagen wir, dass wir NFS verwenden, schreiben die Pfade in das bedingte Stammverzeichnis, legen einige zusätzliche in der Dokumentation empfohlene Parameter fest und geben den relativen Pfad zu initrd an.
Jetzt müssen Sie nur noch den TFTP- und DHCP-Server nacheinander starten, und Sie können versuchen, PXE zu starten. Wenn alles richtig gemacht wurde, sehen Sie das erstellte Menü:
Wählen Sie das GRML Linux-Element aus, drücken Sie die Eingabetaste, um sicherzustellen, dass der Bildladevorgang erfolgreich war:
Auf diese Weise haben wir die Möglichkeit, die bei Systemadministratoren beliebte GRML-Distribution im Netzwerk zu booten. Aber was ist mit demselben MS-DOS und wie können Sie unabhängig voneinander ein Image für das Flashen des BIOS vorbereiten? Lassen Sie uns weiter darüber sprechen.
Wir vertrauen auf DOS
Wird das Betriebssystem aus den 80er Jahren des letzten Jahrtausends im 21. Jahrhundert noch verwendet? Egal wie seltsam es auch erscheinen mag, für einige bestimmte Aufgaben ist MS-DOS immer noch relevant und für sich selbst sehr nützlich. Eine dieser Aufgaben ist das Aktualisieren der BIOS-Firmware auf Servern.
Nehmen wir als Beispiel ein Motherboard, zum Beispiel Supemicro X11SSL-F, und laden Sie das BIOS-Update von der offiziellen Website herunter. Im Inneren sehen wir einen ähnlichen Satz von Dateien:
user@linux:~//X11SSLF0_B26> ls -l 16592 -rw-r--r-- 1 user users 169120 1 2015 AFUDOSU.SMC -rw-r--r-- 1 user users 5219 20 2003 CHOICE.SMC -rw-r--r-- 1 user users 22092 27 2014 FDT.smc -rw-r--r-- 1 user users 3799 15 2016 FLASH.BAT -rw-r--r-- 1 user users 3739 22 2019 Readme for UP X11 AMI BIOS.txt -rw-r--r-- 1 user users 16777216 25 23:48 X11SSLF0.B26
Wir sehen, dass wir bereits eine vorgefertigte BAT-Datei haben, mit der wir das BIOS flashen können. Dazu muss jedoch bereits ein Server in MS-DOS geladen sein. Jetzt zeigen wir Ihnen genau, wie das geht.
Zunächst müssen wir mit dem Betriebssystem ein kleines Roh-Image der Festplatte erstellen. Erstellen Sie eine neue virtuelle Maschine über Oracle VM VirtualBox mit einer kleinen 32-Megabyte-Festplatte. Wir wählen das Format QCOW, nach all den Manipulationen kann es leicht in Raw konvertiert werden.
Sicher wissen Sie alle, wo Sie mit MS-DOS Images von Disketten erhalten können. Hängen Sie sie also in die virtuelle Maschine ein und führen Sie die Installation aus:
Wir ändern die Disketten-Images im virtuellen Laufwerk zweimal und nach buchstäblich 20 Sekunden haben wir ein qcow-Image mit einem neuen MS-DOS 6.22-Betriebssystem:
Der einfachste Weg, Dateien auf diese Festplatte zu kopieren, besteht darin, sie auf einer anderen virtuellen Maschine unter Windows oder Linux bereitzustellen. Nach diesem Vorgang stellen wir die Festplatte erneut in die virtuelle MS-DOS-Maschine bereit und überprüfen, ob die Dateien sichtbar sind:
Wenn Sie möchten, können Sie das automatische Laden sogar so konfigurieren, dass eine BAT-Datei ausgeführt wird, sodass das BIOS automatisch geflasht wird. Denken Sie jedoch daran, dass dies eine potenziell gefährliche Operation ist und Sie dies auf eigene Gefahr und Gefahr tun. Schalten Sie nun die virtuelle Maschine aus und konvertieren Sie sie mit qemu-img in ein Rohbild.
qemu-img convert -f qcow -O raw DOS.qcow dos.img
Kopieren Sie das resultierende IMG-Image in ein separates Verzeichnis unseres TFTP-Servers:
sudo mkdir /srv/tftp/dos
sudo cp dos.img /srv/tftp/dos
Öffnen Sie nun die Konfiguration /srv/tftp/pxelinux.cfg/default zum Bearbeiten und fügen Sie dem Menü einen weiteren Eintrag hinzu:
LABEL DOS kernel memdisk initrd dos/dos.img append raw
Wir speichern die Konfiguration und haben jetzt einen neuen Menüpunkt im PXE-Menü, indem wir auswählen, welchen wir das erstellte Bild laden:
Auf die gleiche Weise können Sie Bilder erstellen, die sowohl Dienstprogramme als auch zum Spaß mit alten DOS-Spielen enthalten.
In Windows Veritas
Versuchen wir nun, das Live-Image von WinPE (Windows Preinstallation Environment) zu starten. Das Herunterladen einer Vollversion ist oft einfach nicht erforderlich, nur eine begrenzte Anzahl von Funktionen reicht aus. Dieses Ding findet echte Verwendung beim Flashen einiger Geräte.
Dieselbe Mellanox, die vor einem Jahr von Nvidia übernommen wurde, veröffentlicht das Dienstprogramm Mellanox Firmware Tools zum Flashen seiner Netzwerkkarten in verschiedenen Versionen für WinPE. Natürlich gibt es jetzt bereits verschiedene MFT-Optionen, aber einige Male mussten wir die WinPE-Version durchnähen.
Das Erstellen eines eigenen WinPE-Images und das Integrieren der erforderlichen Software ist keine allzu schwierige Aufgabe, deren Erklärung jedoch den Rahmen dieses Artikels sprengt. Um diesen Prozess im Detail zu beherrschen, können Sie die hervorragende Ressource winpe.ru besuchen . Als Beispiel nehmen wir eine fertige Baugruppe, um den Startvorgang zu demonstrieren.
Oft sind solche Baugruppen entweder ISO-Bilder oder seltene Archive mit ISO-Bildern. Bevor wir ein solches Image auswählen, müssen wir den entsprechenden Bootloader besorgen.
wimboot ist ein ziemlich einfacher Bootloader , der Bilder im wim-Format (Windows Imaging Format) laden kann. Es kann entweder in Verbindung mit syslinux oder mit seinem fortgeschritteneren Geschwister iPXE verwendet werden... Erstellen Sie ein separates Verzeichnis in / srv / tftp :
sudo mkdir wimboot
cd wimboot
Laden Sie den Bootloader selbst herunter:
wget https://github.com/ipxe/wimboot/releases/latest/download/wimboot
Jetzt ist es Zeit, das Image zu mounten. Erstellen Sie ein temporäres Verzeichnis in / tmp :
sudo mkdir winpe
Wechseln Sie in das Verzeichnis mit dem heruntergeladenen ISO-Assembly-Image und führen Sie Folgendes aus:
sudo mount -o loop <_> /tmp/winpe
Erstellen Sie ein Verzeichnis in / srv / tftp , in dem wir die benötigten Dateien ablegen :
sudo mkdir /srv/tftp/winpe
Jetzt suchen wir in der Baugruppe und kopieren 4 Dateien:
sudo cp BOOTMGR /srv/tftp/winpe
sudo cp bcd /srv/tftp/winpe
sudo cp boot.sdi /srv/tftp/winpe
sudo cp boot.wim /srv/tftp/winpe
Die Angelegenheit ist klein - fügen Sie der Konfigurationsdatei /srv/tftp/pxelinux.cfg/default den folgenden Abschnitt hinzu :
LABEL WinPE menu label WinPE com32 linux.c32 wimboot/wimboot append initrdfile=winpe/BOOTMGR,winpe/bcd,winpe/boot.sdi,winpe/boot.wim
Tatsächlich verwenden wir das linux.c32-Modul, um den Bootloader zu laden,
Es ist wichtig zu berücksichtigen, dass Dateien über TFTP hochgeladen werden, was nicht sehr schnell und bequem ist. Im Allgemeinen können Sie die Konfiguration leicht ändern und auf andere Weise dehnen. Für einfache utilitaristische Aufgaben reicht dies jedoch völlig aus.
Anstelle einer Schlussfolgerung
In diesem Artikel gibt es kein Know-how, aber als es nötig wurde, hat der Raspberry Pi einen großartigen Job gemacht. Sie musste nicht nach einer zusätzlichen Steckdose suchen, der USB-Anschluss des nächsten freien Servers war perfekt. Es gibt keine zusätzlichen Probleme, einen Platz in einem Gestell zu finden, das an den Augäpfeln vollgestopft ist. Es funktioniert genau so, wie es sollte, und seine kleinen Abmessungen ermöglichen es Ihnen, es immer zur Hand zu haben.
Es gibt tatsächlich viele Tutorials im Internet zum Einrichten von Netboot. Das einzige Problem ist, dass unterschiedliche Mittel und unterschiedliche Ansätze für unterschiedliche Bilder verwendet werden. Die Wahl des richtigen Ansatzes kann manchmal viel Zeit in Anspruch nehmen, und ich hoffe wirklich, dass dieses Material vielen Menschen hilft, Zeit zu sparen, wenn sie verschiedene Aufgaben lösen, die mit der Notwendigkeit verbunden sind, PXE schnell auf einem Raspberry Pi-Einplatinencomputer bereitzustellen.