{"id":74905,"date":"2020-03-21T20:42:25","date_gmt":"2020-03-21T17:42:25","guid":{"rendered":"https:\/\/prohoster.info\/blog\/administrirovanie\/bare-metal-provisioning-svoimi-rukami-ili-avtomaticheskaya-podgotovka-serverov-s-nulya"},"modified":"2020-03-21T20:42:25","modified_gmt":"2020-03-21T17:42:25","slug":"bare-metal-provisioning-svoimi-rukami-ili-avtomaticheskaya-podgotovka-serverov-s-nulya","status":"publish","type":"post","link":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/bare-metal-provisioning-svoimi-rukami-ili-avtomaticheskaya-podgotovka-serverov-s-nulya","title":{"rendered":"Bare-Metal-Provisionierung mit eigenen H\u00e4nden oder Automatisierte Servervorbereitung von Grund auf","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hallo, ich bin Denis und eines meiner T\u00e4tigkeitsfelder ist die Entwicklung von Infrastrukturma\u00dfnahmen bei X5. Heute m\u00f6chte ich mit Ihnen teilen, wie man mit allgemein verf\u00fcgbaren Werkzeugen ein automatisiertes Serversystem einrichten kann. Meiner Meinung nach ist dies eine interessante, einfache und flexible L\u00f6sung.<\/p>\n<p><img decoding=\"async\" alt=\"Bare-Metal-Provisionierung mit eigenen H\u00e4nden oder Automatisierte Servervorbereitung von Grund auf\" src=\"\/wp-content\/uploads\/2020\/03\/b49cca7e782c0875a95feee497f141b0.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nUnter Vorbereitung versteht man: einen neuen Server aus der Box in einen vollst\u00e4ndig konfigurierten Server mit dem Betriebssystem Linux oder mit dem Hypervisor ESXi (Windows wird in diesem Artikel nicht behandelt). <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/de\/server\/\"   title=\"Server\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1469\">Server<\/a> Server \u2013 Server, die konfiguriert werden m\u00fcssen.<\/p>\n<p><b>Begriffe<\/b>:<\/p>\n<ul>\n<li>Installationsserver \u2013 der Hauptserver, der den gesamten Vorbereitungsprozess \u00fcber das Netzwerk gew\u00e4hrleistet.<\/li>\n<li>Warum ist Automatisierung notwendig?<\/li>\n<\/ul>\n<p><\/p>\n<h3>Angenommen, die Aufgabe besteht darin, Server massenhaft von Grund auf vorzubereiten, im H\u00f6chstfall \u2013 30 pro Tag. Server unterschiedlicher Hersteller und Modelle, auf denen verschiedene Betriebssysteme installiert werden k\u00f6nnen, und es kann ein Hypervisor vorhanden sein oder auch nicht.<\/h3>\n<p>\nWelche Operationen geh\u00f6ren zum Konfigurationsprozess (ohne Automatisierung):<\/p>\n<p>Tastatur, Maus und Monitor mit dem Server verbinden;<\/p>\n<ul>\n<li>BIOS, RAID, IPMI konfigurieren;<\/li>\n<li>Firmware der Komponenten aktualisieren;<\/li>\n<li>Abbild des Dateisystems bereitstellen (oder Hypervisor installieren und virtuelle Maschinen kopieren);<\/li>\n<li>Hinweis. Als M\u00f6glichkeit kann das Betriebssystem \u00fcber die Installation mit einer Antwortdatei bereitgestellt werden. Dies wird jedoch im Artikel nicht behandelt. Obwohl Sie weiter unten sehen werden, dass es nicht schwierig ist, diese Funktionalit\u00e4t hinzuzuf\u00fcgen.<\/li>\n<\/ul>\n<p>\nBetriebssystemparameter konfigurieren (Hostname, IP usw.).<\/p>\n<ul>\n<li>Bei diesem Ansatz werden die gleichen Einstellungen nacheinander auf jedem Server durchgef\u00fchrt. Die Effizienz dieser Arbeit ist sehr gering.<\/li>\n<\/ul>\n<p>\nDer Kern der Automatisierung besteht darin, die menschliche Beteiligung am Prozess der Servervorbereitung so weit wie m\u00f6glich auszuschlie\u00dfen.<\/p>\n<p>Dank der Automatisierung wird die Ausfallzeit zwischen den Operationen verk\u00fcrzt und die M\u00f6glichkeit geschaffen, mehrere Server gleichzeitig vorzubereiten. Au\u00dferdem wird die Wahrscheinlichkeit von Fehlern aufgrund menschlicher Faktoren erheblich verringert. <\/p>\n<p>Wie erfolgt die automatische Serverkonfiguration?<\/p>\n<p><img decoding=\"async\" alt=\"Bare-Metal-Provisionierung mit eigenen H\u00e4nden oder Automatisierte Servervorbereitung von Grund auf\" src=\"\/wp-content\/uploads\/2020\/03\/8c196058891a7f41c5b93e7f6721480b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Lassen Sie uns alle Schritte im Detail durchgehen.<\/h3>\n<p>\nSie haben einen Linux-Server, den Sie als PXE-Installationsserver verwenden. Auf diesem sind die Dienste DHCP und TFTP installiert und konfiguriert.<\/p>\n<p>Laden wir also den Server (der konfiguriert werden muss) \u00fcber PXE. Erinnern wir uns, wie das funktioniert:<\/p>\n<p>Auf dem Server ist das Booten \u00fcber das Netzwerk ausgew\u00e4hlt.<\/p>\n<ul>\n<li>Es wurde ein Netzwerkboot auf dem Server ausgew\u00e4hlt.<\/li>\n<li>Der Server l\u00e4dt den PXE-ROM des Netzwerkkarten und kontaktiert den Installationsserver \u00fcber DHCP, um eine Netzwerkadresse zu erhalten.<\/li>\n<li>Der DHCP des Installationsservers gibt eine Adresse sowie Anweisungen f\u00fcr das weitere Laden \u00fcber PXE aus.<\/li>\n<li>Der Server l\u00e4dt den Netzwerk-Loader vom Installationsserver \u00fcber PXE, das weitere Laden erfolgt gem\u00e4\u00df der PXE-Konfigurationsdatei.<\/li>\n<li>Die Ladung erfolgt basierend auf den erhaltenen Parametern (Kernel, initramfs, Mount-Punkte, squashfs-Image und weitere).<\/li>\n<\/ul>\n<p>\nHinweis. In diesem Artikel wird die PXE-Boot-Prozedur \u00fcber den BIOS-Modus beschrieben. Derzeit wird aktiv von den Herstellern der UEFI-Bootmodus implementiert. Der Unterschied bei PXE liegt in der Konfiguration des DHCP-Servers und der Verf\u00fcgbarkeit eines zus\u00e4tzlichen Bootloaders.<\/p>\n<p>Betrachten wir ein Beispiel f\u00fcr die Konfiguration eines PXE-Servers (pxelinux-Men\u00fc).<\/p>\n<p>Datei pxelinux.cfg\/default:<\/p>\n<pre><code class=\"plaintext\">default menu.c32\nprompt 0\ntimeout 100\nmenu title X5 PXE Boot Men\u00fc\nLABEL InstallServer Men\u00fc\n\tMENU LABEL InstallServer\n\tKERNEL menu.c32\n\tAPPEND pxelinux.cfg\/installserver\nLABEL VMware Men\u00fc\n\tMENU LABEL VMware ESXi Installieren\n\tKERNEL menu.c32\n\tAPPEND pxelinux.cfg\/vmware\nLABEL toolkit \/\/ Standardmen\u00fc\n\tMENU LABEL Linux Scripting Toolkits\n\tMENU default\n\tKERNEL menu.c32\n\tAPPEND pxelinux.cfg\/toolkit \/\/ Wechsel zum n\u00e4chsten Men\u00fc<\/code><\/pre>\n<p>\nDatei pxelinux.cfg\/toolkit:<\/p>\n<pre><code class=\"plaintext\">prompt 0\ntimeout 100\nmenu title X5 PXE Boot Men\u00fc\nlabel mainmenu\n    menu label ^Zur\u00fcck zum Hauptmen\u00fc\n    kernel menu.c32\n    append pxelinux.cfg\/default\nlabel x5toolkit-auto \/\/ Standard - Automatischer Modus\n        menu label x5 Toolkit Autoinstallation\n        menu default\n        kernel toolkit\/tkcustom-kernel\n        append initrd=toolkit\/tk-initramfs.gz quiet net.ifnames=0 biosdevname=0 nfs_toolkit_ip=192.168.200.1 nfs_toolkit_path=tftpboot\/toolkit nfs_toolkit_script=scripts\/mount.sh script_cmd=master-install.sh CMDIS2=\"\u2026\"\nlabel x5toolkit-shell \/\/ F\u00fcr Debugging - Konsole\n        menu label x5 Toolkit Shell\n        kernel toolkit\/tkcustom-kernel\n        append initrd=toolkit\/tkcustom-initramfs.gz quiet net.ifnames=0 biosdevname=0 nfs_toolkit_ip=192.168.200.1 nfs_toolkit_path=tftpboot\/toolkit nfs_toolkit_script=scripts\/mount.sh script_cmd=\/bin\/bash CMDIS2=\"\u2026\"<\/code><\/pre>\n<p>\nKernel und initramfs sind in diesem Stadium ein Zwischenergebnis eines Linux-Images, mit dem die grundlegende Vorbereitung und Konfiguration des Servers durchgef\u00fchrt wird.<\/p>\n<p>Wie Sie sehen, \u00fcbergibt der Bootloader viele Parameter an den Kernel. Ein Teil dieser Parameter wird vom Kernel selbst verwendet. Einige davon k\u00f6nnen wir jedoch f\u00fcr unsere eigenen Zwecke nutzen. Dar\u00fcber wird sp\u00e4ter erl\u00e4utert, und vorerst k\u00f6nnen Sie sich einfach merken, dass alle \u00fcbergebenen Parameter im Zwischenergebnis des Linux-Images \u00fcber \/proc\/cmdline verf\u00fcgbar sind.<\/p>\n<p>Woher bekommt man Kernel und initramfs?<br \/>\nAls Grundlage kann jeder Linux-Distribution gew\u00e4hlt werden. Worauf wir bei der Auswahl achten:<\/p>\n<ul>\n<li>Das Boot-Image sollte universell sein (Verf\u00fcgbarkeit von Treibern, M\u00f6glichkeit zur Installation zus\u00e4tzlicher Tools);<\/li>\n<li>Wahrscheinlich wird es notwendig sein, das initramfs anzupassen.<\/li>\n<\/ul>\n<p>\nWie wird das in unserer L\u00f6sung f\u00fcr X5 gemacht? Als Basis wurde CentOS 7 gew\u00e4hlt. Wir werden folgendes tricksen: Wir bereiten die zuk\u00fcnftige Struktur des Images vor, packen sie in ein Archiv und erstellen ein initramfs, in dem unser Archiv des Dateisystems enthalten ist. W\u00e4hrend des Bootens des Images wird das Archiv in das zu erstellende tmpfs-Verzeichnis entpackt. So erhalten wir ein minimales, aber voll funktionsf\u00e4higes Live-Image von Linux mit allen notwendigen Dienstprogrammen, das aus nur zwei Dateien besteht: vmkernel und initramfs. <\/p>\n<pre><code class=\"plaintext\">#\u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0434\u0438\u0440\u0435\u043a\u0442\u043e\u0440\u0438\u0438: \n\nmkdir -p \/tftpboot\/toolkit\/CustomTK\/rootfs \/tftpboot\/toolkit\/CustomTK\/initramfs\/bin\n\n#\u043f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443:\n\nyum groups -y install &quot;Minimal Install&quot; --installroot=\/tftpboot\/toolkit\/CustomTK\/rootfs\/\nyum -y install nfs-utils mariadb ntpdate mtools syslinux mdadm tbb libgomp efibootmgr dosfstools net-tools pciutils openssl make ipmitool OpenIPMI-modalias rng-tools --installroot=\/tftpboot\/toolkit\/CustomTK\/rootfs\/\nyum -y remove biosdevname --installroot=\/tftpboot\/toolkit\/CustomTK\/rootfs\/\n\n# \u043f\u043e\u0434\u0433\u043e\u0442\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c initramfs:\n\nwget https:\/\/busybox.net\/downloads\/binaries\/1.31.0-defconfig-multiarch-musl\/busybox-x86_64 -O \/tftpboot\/toolkit\/CustomTK\/initramfs\/bin\/busybox\nchmod a+x \/tftpboot\/toolkit\/CustomTK\/initramfs\/bin\/busybox\ncp \/tftpboot\/toolkit\/CustomTK\/rootfs\/boot\/vmlinuz-3.10.0-957.el7.x86_64 \/tftpboot\/toolkit\/tkcustom-kernel\n\n# \u0441\u043e\u0437\u0434\u0430\u0435\u043c \/tftpboot\/toolkit\/CustomTK\/initramfs\/init (\u043d\u0438\u0436\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u043d\u0438\u0435 \u0441\u043a\u0440\u0438\u043f\u0442\u0430):\n\n#!\/bin\/busybox sh\n\/bin\/busybox --install \/bin\nmkdir -p \/dev \/proc \/sys \/var\/run \/newroot\nmount -t proc proc \/proc\nmount -o mode=0755 -t devtmpfs devtmpfs \/dev\nmkdir -p \/dev\/pts \/dev\/shm \/dev\/mapper \/dev\/vc\nmount -t devpts -o gid=5,mode=620 devpts \/dev\/pts\nmount -t sysfs sysfs \/sys\nmount -t tmpfs -o size=4000m tmpfs \/newroot\necho -n &quot;Extracting rootfs... &quot;\nxz -d -c -f rootfs.tar.xz | tar -x -f - -C \/newroot\necho &quot;done&quot;\nmkdir -p \/newroot\/dev \/newroot\/proc \/newroot\/sys\nmount --move \/sys  \/newroot\/sys\nmount --move \/proc \/newroot\/proc\nmount --move \/dev  \/newroot\/dev\nexec switch_root \/newroot \/sbin\/init\n\n# \u0443\u043f\u0430\u043a\u043e\u0432\u044b\u0432\u0430\u0435\u043c rootfs \u0438 initramfs:\n\ncd \/tftpboot\/toolkit\/CustomTK\/rootfs\ntar cJf \/tftpboot\/toolkit\/CustomTK\/initramfs\/rootfs.tar.xz --exclude .\/proc --exclude .\/sys --exclude .\/dev .\ncd \/tftpboot\/toolkit\/CustomTK\/initramfs\nfind . -print0 | cpio --null -ov --format=newc | gzip -9 &gt; \/tftpboot\/toolkit\/tkcustom-initramfs-new.gz<\/code><\/pre>\n<p>\nSo haben wir den Kernel und das initramfs angegeben, die geladen werden sollen. Infolgedessen erhalten wir in diesem Schritt, indem wir ein Zwischen-Image von Linux \u00fcber PXE laden, die OS-Konsole.<\/p>\n<p>Ausgezeichnet, aber jetzt m\u00fcssen wir die Kontrolle \u00fcber unsere \u201eAutomatisierung\u201c \u00fcbergeben.<\/p>\n<p>Das kann so gemacht werden.<\/p>\n<p>Angenommen, nach dem Laden des Images planen wir, die Kontrolle an das Skript mount.sh zu \u00fcbergeben.<br \/>\nWir aktivieren das Skript mount.sh beim Systemstart. Dazu muss das initramfs modifiziert werden:<\/p>\n<ul>\n<li>initramfs entpacken (wenn wir die oben beschriebene initramfs-Variante verwenden, ist dies nicht erforderlich)<\/li>\n<li>Code f\u00fcr die Autostart einf\u00fcgen, der die \u00fcbergebenen Parameter \u00fcber \/proc\/cmdline analysiert und die Kontrolle weitergibt;<\/li>\n<li>initramfs verpacken.<\/li>\n<\/ul>\n<p>\nHinweis. Im Fall des X5-Toolkits wird die Bootkontrolle an das Skript \u00fcbergeben. <code>\/opt\/x5\/toolkit\/bin\/hook.sh \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e override.conf \u0432 getty tty1 (ExecStart=\u2026) <\/code><\/p>\n<p>So wird ein Image geladen, in dem beim Autostart das Skript mount.sh gestartet wird. Das Skript mount.sh analysiert w\u00e4hrend seiner Ausf\u00fchrung die \u00fcbergebenen Parameter (script_cmd=) und startet das ben\u00f6tigte Programm\/Skript.<\/p>\n<p>label toolkit-<b>auto<\/b><br \/>\nkernel \u2026<br \/>\nappend \u2026 nfs_toolkit_script=scripts\/mount.sh <b>script_cmd=master-install.sh<br \/>\n<\/b><br \/>\nlabel toolkit-<b>shell<\/b><br \/>\nkernel \u2026<br \/>\nappend \u2026 nfs_toolkit_script=scripts\/mount.sh <b>script_cmd=\/bin\/bash<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Bare-Metal-Provisionierung mit eigenen H\u00e4nden oder Automatisierte Servervorbereitung von Grund auf\" src=\"\/wp-content\/uploads\/2020\/03\/943eeb64fbf746feab5119ead5b1ca66.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHier auf der linken Seite \u2013 das PXE-Men\u00fc, auf der rechten \u2013 das Schema zur \u00dcbergabe der Kontrolle.<\/p>\n<p>Mit der Kontrolle sind wir durch. Je nach Auswahl im PXE-Men\u00fc wird entweder das Skript zur automatischen Konfiguration oder die Konsole f\u00fcr das Debugging gestartet.<\/p>\n<p>Bei der automatischen Konfiguration werden die erforderlichen Verzeichnisse vom Installationsserver gemountet, die Folgendes enthalten:<\/p>\n<ul>\n<li>Skripte;<\/li>\n<li>gespeicherte BIOS\/UEFI-Vorlagen verschiedener Server;<\/li>\n<li>Firmware;<\/li>\n<li>Dienstprogramme f\u00fcr Server;<\/li>\n<li>Protokolle.<\/li>\n<\/ul>\n<p>\nDanach \u00fcbergibt das Skript mount.sh die Kontrolle an das Skript master-install.sh aus dem Verzeichnis mit den Skripten.<\/p>\n<p>Die Struktur der Skripte (Reihenfolge ihrer Ausf\u00fchrung) sieht ungef\u00e4hr so aus:<\/p>\n<ul>\n<li>master-install<\/li>\n<li>sharefunctions (gemeinsame Funktionen)<\/li>\n<li>info (Ausgabe von Informationen)<\/li>\n<li>models (Konfiguration der Installationsparameter basierend auf dem Servermodell)<\/li>\n<li>prepare_utils (Installation der erforderlichen Dienstprogramme)<\/li>\n<li>fwupdate (Firmware-Updates)<\/li>\n<li>diag (elementare Diagnostik)<\/li>\n<li>biosconf (BIOS\/UEFI-Einstellungen)<\/li>\n<li>clockfix (Zeiteinstellung auf der Hauptplatine)<\/li>\n<li>srmconf (Einstellungen f\u00fcr die Remote-Schnittstelle)<\/li>\n<li>raidconf (Einstellungen f\u00fcr logische Laufwerke)<\/li>\n<\/ul>\n<p>\neiner von:<\/p>\n<ul>\n<li>preinstall (\u00dcbergabe der Kontrolle an den OS- oder Hypervisor-Installer, z. B. ESXi)<\/li>\n<li>merged-install (direkter Start des Entpackens des Images)<\/li>\n<\/ul>\n<p>\n<b>Jetzt wissen wir:<\/p>\n<ul>\n<li>wie man den Server \u00fcber PXE bootet;<\/li>\n<li>wie man die Kontrolle an ein eigenes Skript \u00fcbergibt.<\/li>\n<\/ul>\n<p><\/b><br \/>\nLassen Sie uns fortfahren. Die folgenden Fragen sind relevant geworden:<\/p>\n<ul>\n<li>Wie identifizieren wir den Server, den wir vorbereiten?<\/li>\n<li>Mit welchen Tools und wie konfigurieren wir den Server?<\/li>\n<li>Wie erh\u00e4lt man die Einstellungen f\u00fcr einen bestimmten Server?<\/li>\n<\/ul>\n<p><\/p>\n<h3>Wie identifizieren wir den Server, den wir vorbereiten?<\/h3>\n<p>\nDas ist einfach \u2013 DMI:<\/p>\n<pre><code class=\"plaintext\">dmidecode \u2013s system-product-name\ndmidecode \u2013s system-manufacturer\ndmidecode \u2013s system-serial-number<\/code><\/pre>\n<p>\nHier gibt es alles, was ben\u00f6tigt wird: Anbieter, Modell, Seriennummer. Wenn Sie sich nicht sicher sind, dass diese Informationen auf allen Servern vorhanden sind, k\u00f6nnen Sie sie auch \u00fcber die MAC-Adresse identifizieren. Oder auf beide Arten gleichzeitig, wenn die Anbieter der Server unterschiedlich sind und bei einigen Modellen die Seriennummer einfach nicht verf\u00fcgbar ist.<\/p>\n<p>Basierend auf den erhaltenen Informationen werden die Netzwerkordner vom Installationsserver gemountet und alles Notwendige (Tools, Firmware usw.) wird geladen.<\/p>\n<h3>Mit welchen Tools und wie konfigurieren wir den Server?<\/h3>\n<p>\nIch werde Tools f\u00fcr Linux f\u00fcr einige Hersteller anf\u00fchren. Alle Tools sind auf den offiziellen Websites der Anbieter verf\u00fcgbar.<\/p>\n<p><img decoding=\"async\" alt=\"Bare-Metal-Provisionierung mit eigenen H\u00e4nden oder Automatisierte Servervorbereitung von Grund auf\" src=\"\/wp-content\/uploads\/2020\/03\/fab53d1fa6e9a222ec69248439551ad7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nBei Firmware denke ich, dass alles klar ist. Normalerweise werden sie in Form von gepackten ausf\u00fchrbaren Dateien geliefert. Die ausf\u00fchrbare Datei steuert den Firmware-Update-Prozess und meldet den R\u00fcckgabecode.<\/p>\n<p>BIOS und IPMI werden normalerweise \u00fcber Vorlagen konfiguriert. Bei Bedarf kann die Vorlage vor dem eigentlichen Booten bearbeitet werden.<\/p>\n<p>RAID-Tools einiger Anbieter k\u00f6nnen ebenfalls \u00fcber Vorlagen konfiguriert werden. Wenn das nicht der Fall ist, muss ein Konfiguration-Skript geschrieben werden.<\/p>\n<p>Der Ablauf zur RAID-Konfiguration ist meist wie folgt:<\/p>\n<ul>\n<li>Wir fordern die aktuelle Konfiguration an.<\/li>\n<li>Wenn bereits logische Arrays vorhanden sind \u2013 l\u00f6schen wir diese.<\/li>\n<li>Wir pr\u00fcfen, welche physikalischen Laufwerke vorhanden sind und wie viele es sind.<\/li>\n<li>Wir erstellen ein neues logisches Array. Wir brechen den Prozess im Fehlerfall ab.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Wie erh\u00e4lt man die Einstellungen f\u00fcr einen bestimmten Server?<\/h3>\n<p>\nNehmen wir an, die Einstellungen aller Server werden auf dem Installationsserver gespeichert. In diesem Fall m\u00fcssen wir zun\u00e4chst kl\u00e4ren, wie die Einstellungen an den Installationsserver \u00fcbergeben werden.<\/p>\n<p>In der Anfangsphase kann man problemlos mit Textdateien auskommen. (In Zukunft kann man die Textdatei als Backup-Methode zur \u00dcbertragung von Einstellungen verwenden). <\/p>\n<p>Es ist m\u00f6glich, eine Textdatei auf dem Installationsserver zu \"teilen\" und ihr Einbindung in das Skript mount.sh hinzuzuf\u00fcgen.<\/p>\n<p>Die Zeilen werden beispielsweise so aussehen:<\/p>\n<p><\/p>\n<p>Diese Zeilen werden von einem Ingenieur von seinem Arbeitsplatzrechner in die Datei \u00fcbertragen. Bei der Konfiguration des Servers werden die Parameter f\u00fcr den spezifischen Server dann aus der Datei gelesen.<\/p>\n<p>Langfristig ist es allerdings besser, eine Datenbank zur Speicherung von Einstellungen, Zust\u00e4nden und Installationsprotokollen der Server zu verwenden.<\/p>\n<p>Nat\u00fcrlich kommt man nicht ohne eine Datenbank aus, und es wird notwendig sein, einen Client zu erstellen, \u00fcber den die Einstellungen in die Datenbank \u00fcbertragen werden. Dies umzusetzen ist komplizierter als mit einer Textdatei, aber es ist tats\u00e4chlich nicht so schwierig, wie es scheint. Eine Minimalversion des Clients, der einfach Daten in die Datenbank \u00fcbertr\u00e4gt, kann man problemlos selbst schreiben. Weitere Verbesserungen der Client-Software k\u00f6nnen sp\u00e4ter in einem freien Modus vorgenommen werden (Berichte, Etikettendruck, Benachrichtigungen senden und alles, was einem einf\u00e4llt).<\/p>\n<p>Wenn man eine bestimmte Anfrage an die Datenbank stellt und die Seriennummer des Servers angibt, erh\u00e4lt man die notwendigen Parameter zur Konfiguration des Servers.<\/p>\n<p>Au\u00dferdem m\u00fcssen wir keine Sperren f\u00fcr den gleichzeitigen Zugriff erfinden, wie im Fall einer Textdatei.<\/p>\n<p>Das Konfigurationsprotokoll k\u00f6nnen wir in allen Phasen in die Datenbank schreiben und den Installationsprozess \u00fcber Ereignisse und Flags der Vorbereitungsschritte steuern.<\/p>\n<p><b>Jetzt wissen wir, wie:<\/p>\n<ul>\n<li>den Server \u00fcber PXE zu starten;<\/li>\n<li>die Kontrolle an unser Skript zu \u00fcbergeben;<\/li>\n<li>den Server, der vorbereitet werden soll, anhand der Seriennummer zu identifizieren;<\/li>\n<li>den Server mit den entsprechenden Dienstprogrammen zu konfigurieren;<\/li>\n<li>die Einstellungen \u00fcber den Client in die Datenbank des Installationsservers zu \u00fcbertragen.<\/li>\n<\/ul>\n<p>\nWir haben herausgefunden, wie:<\/p>\n<ul>\n<li>der zu installierende Server die notwendigen Einstellungen aus der Datenbank erh\u00e4lt;<\/li>\n<li>der gesamte Fortschritt der Vorbereitung in der Datenbank festgehalten wird (Protokolle, Ereignisse, Flags der Phasen).<\/li>\n<\/ul>\n<p><\/b><\/p>\n<h3>Wie sieht es mit verschiedenen Arten von zu installierender Software aus? Wie installiert man einen Hypervisor, kopiert eine VM und konfiguriert alles?<\/h3>\n<p>\nIm Fall der Bereitstellung eines Dateisystem-Images (linux) auf Hardware ist alles recht einfach:<\/p>\n<ul>\n<li>Nach der Konfiguration aller Serverkomponenten setzen wir das Image ein.<\/li>\n<li>Wir installieren den Bootloader grub.<\/li>\n<li>Wir f\u00fchren chroot durch und richten alles Notwendige ein.<\/li>\n<\/ul>\n<p>\n<b>Wie man die Kontrolle an den OS-Installer \u00fcbergibt (am Beispiel von ESXi).<\/b><\/p>\n<ul>\n<li>Wir organisieren die \u00dcbergabe der Kontrolle von unserem Skript an den Hypervisor-Installer mithilfe der Antwortdatei (kickstart):<\/li>\n<li>Wir l\u00f6schen die aktuellen Partitionen auf der Festplatte.<\/li>\n<li>Wir erstellen eine Partition mit einer Gr\u00f6\u00dfe von 500MB.<\/li>\n<li>Wir kennzeichnen sie als bootf\u00e4hig.<\/li>\n<li>Wir formatieren sie in FAT32.<\/li>\n<li>Wir kopieren die Installationsdateien von ESXi in das Wurzelverzeichnis.<\/li>\n<li>Wir installieren syslinux.<\/li>\n<li>Wir kopieren syslinux.cfg nach \/syslinux\/<\/li>\n<\/ul>\n<p><\/p>\n<pre><code class=\"plaintext\">default esxi\nprompt 1\ntimeout 50\nlabel esxi\nkernel mboot.c32\nappend -c boot.cfg<\/code><\/pre>\n<p><\/p>\n<ul>\n<li>Wir kopieren mboot.c32 nach \/syslinux.<\/li>\n<li>In boot.cfg sollte kernelopt=ks=ftp:\/\/\/ks_esxi.cfg stehen.<\/li>\n<li>Server neu starten.<\/li>\n<\/ul>\n<p>\nNach dem Neustart des Servers wird der ESXi-Installer von der Festplatte geladen. Alle notwendigen Installationsdateien werden in den Speicher geladen, und dann beginnt die Installation von ESXi gem\u00e4\u00df der angegebenen Antwortdatei.<\/p>\n<p>Hier sind einige Zeilen aus der Antwortdatei ks_esxi.cfg:<\/p>\n<pre><code class=\"plaintext\">%firstboot --interpreter=busybox\n\u2026\n# Seriennummer abrufen\n\nSYSSN=$(esxcli hardware platform get | grep Serial | awk -F \" \" '{print $3}')\n\n# IP abrufen\n\nIPADDRT=$(esxcli network ip interface ipv4 get | grep vmk0 | awk -F \" \" '{print $2}')\nLAST_OCTET=$(echo $IPADDRT | awk -F'.' '{print $4}')\n\n# NFS Installationsserver verbinden\n\nesxcli storage nfs add -H is -s \/srv\/nfs_share -v nfsshare1\n\n# Tempor\u00e4re SSH-Einstellungen kopieren, um den SSH-Client zu verwenden\n\nmv \/etc\/ssh \/etc\/ssh.tmp\ncp -R \/vmfs\/volumes\/nfsshare1\/ssh \/etc\/\nchmod go-r \/etc\/ssh\/ssh_host_rsa_key\n\n# ovftool kopieren, um die VM jetzt bereitzustellen, k\u00f6nnte sp\u00e4ter n\u00fctzlich sein\n\ncp -R \/vmfs\/volumes\/nfsshare1\/ovftool \/vmfs\/volumes\/datastore1\/\n\n# VM bereitstellen\n\n\/vmfs\/volumes\/datastore1\/ovftool\/tools\/ovftool --acceptAllEulas --noSSLVerify --datastore=datastore1 --name=VM1 \/vmfs\/volumes\/nfsshare1\/VM_T\/VM1.ova vi:\/\/root:esxi_password@127.0.0.1\n\/vmfs\/volumes\/datastore1\/ovftool\/tools\/ovftool --acceptAllEulas --noSSLVerify --datastore=datastore1 --name=VM2 \/vmfs\/volumes\/nfsshare1\/VM_T\/VM2.ova vi:\/\/root:esxi_password@127.0.0.1\n\n# Zeile mit den Einstellungen unseres Servers abrufen\n\nssh root@is \"mysql -h'192.168.0.1' -D'servers' -u'user' -p'secretpassword' -e \"SELECT ... WHERE servers.serial='$SYSSN'\"\" | grep -v ^$ | sed 's\/NULL\/\/g' &gt; \/tmp\/servers\n...\n# Skript zur Netzwerkkonfiguration generieren\n\necho '#!\/bin\/sh' &gt; \/vmfs\/volumes\/datastore1\/netconf.sh\necho \"esxcli network ip interface ipv4 set -i=vmk0 -t=static --ipv4=$IPADDR --netmask=$S_SUB || exit 1\" &gt;&gt; \/vmfs\/volumes\/datastore1\/netconf.sh\necho \"esxcli network ip route ipv4 add -g=$S_GW -n=default || exit 1\" &gt;&gt; \/vmfs\/volumes\/datastore1\/netconf.sh\nchmod a+x \/vmfs\/volumes\/datastore1\/netconf.sh\n\n# den Parameter guestinfo.esxihost.id setzen, die Seriennummer angeben\n\necho \"guestinfo.esxihost.id = \"$SYSSN\"\" &gt;&gt; \/vmfs\/volumes\/datastore1\/VM1\/VM1.vmx\necho \"guestinfo.esxihost.id = \"$SYSSN\"\" &gt;&gt; \/vmfs\/volumes\/datastore1\/VM2\/VM2.vmx\n...\n# Informationen in der Datenbank aktualisieren\n\nSYSNAME=$(esxcli hardware platform get | grep Product | sed 's\/Product Name:\/\/;s\/^ *\/\/')\nUUID=$(vim-cmd hostsvc\/hostsummary | grep uuid | sed 's\/ \/\/g;s\/,$\/\/';s\/^uuid=\"\/\/;s\/\"$\/\/')\nssh root@is \"mysql -D'servers' -u'user' -p'secretpassword' -e \"UPDATE servers ... SET ... WHERE servers.serial='$SYSSN'\"\"\nssh root@is \"mysql -D'servers' -u'user' -p'secretpassword' -e \"INSERT INTO events ...\"\"\n\n# SSH-Einstellungen zur\u00fcckgeben\n\nrm -rf \/etc\/ssh\nmv \/etc\/ssh.tmp \/etc\/ssh\n\n# Netzwerk einrichten und neu starten\n\nesxcli system hostname set --fqdn=esx-${G_NICK}.x5.ru\n\/vmfs\/volumes\/datastore1\/netconf.sh\nreboot\n<\/code><\/pre>\n<p>\nIn diesem Schritt wurde der Hypervisor installiert und konfiguriert, die virtuellen Maschinen wurden kopiert.<\/p>\n<p>Wie konfiguriert man nun die virtuellen Maschinen?<\/p>\n<p>Wir waren ein wenig schlau: W\u00e4hrend der Installation haben wir den Parameter guestinfo.esxihost.id = \"$SYSSN\" in der Datei VM1.vmx gesetzt und die Seriennummer des physischen Servers angegeben.<\/p>\n<p>Jetzt kann die virtuelle Maschine (mit installiertem vmware-tools-Paket) beim Start auf diesen Parameter zugreifen:<\/p>\n<pre><code class=\"plaintext\">ESXI_SN=$(vmtoolsd --cmd \"info-get guestinfo.esxihost.id\")<\/code><\/pre>\n<p>\nDas hei\u00dft, die VM wird in der Lage sein, sich selbst zu identifizieren (sie kennt die Seriennummer des physischen Hosts), eine Anfrage an die Datenbank des Installationsservers zu stellen und die Parameter zu erhalten, die konfiguriert werden m\u00fcssen. Das alles wird in einem Skript formuliert, das automatisch beim Start der guestos VM ausgef\u00fchrt werden soll (aber nur einmal: RunOnce).<\/p>\n<p><b>Jetzt wissen wir, wie:<\/p>\n<ul>\n<li>den Server \u00fcber PXE zu starten;<\/li>\n<li>die Kontrolle an unser Skript zu \u00fcbergeben;<\/li>\n<li>den Server, der vorbereitet werden soll, anhand der Seriennummer zu identifizieren;<\/li>\n<li>den Server mit den entsprechenden Dienstprogrammen konfigurieren;<\/li>\n<li>Einstellungen \u00fcber die Client-Software an die Datenbank des Installationsservers \u00fcbermitteln;<\/li>\n<li>verschiedene Arten von Software konfigurieren, einschlie\u00dflich der Bereitstellung des Hypervisors ESXi und der Konfiguration virtueller Maschinen (alles automatisiert).<\/li>\n<\/ul>\n<p>\nWir haben herausgefunden, wie:<\/p>\n<ul>\n<li>der zu installierende Server die notwendigen Einstellungen aus der Datenbank erh\u00e4lt;<\/li>\n<li>der gesamte Fortschritt der Vorbereitung in der Datenbank festgehalten wird (Protokolle, Ereignisse, Flags der Phasen).<\/li>\n<\/ul>\n<p><\/b><br \/>\n<u><b>Fazit:<\/b><\/u><\/p>\n<p>Ich glaube, die Einzigartigkeit dieser L\u00f6sung liegt in ihrer Flexibilit\u00e4t, Einfachheit, ihren M\u00f6glichkeiten und ihrer Vielseitigkeit.<\/p>\n<p>Bitte teilen Sie in den Kommentaren mit, was Sie denken.<br \/>\n<br \/>Quelle: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/X5RetailGroup\/blog\/493124\/\">habr.com<\/a> <\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u044f \u0414\u0435\u043d\u0438\u0441 \u0438 \u043e\u0434\u043d\u043e \u0438\u0437 \u043c\u043e\u0438\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u2013 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0432 X5. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u0445\u043e\u0442\u0435\u043b \u0431\u044b \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043d\u0430 \u0431\u0430\u0437\u0435 \u043e\u0431\u0449\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0445 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u043e\u0432 \u0440\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432. \u041d\u0430 \u043c\u043e\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u044d\u0442\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0435, \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0438 \u0433\u0438\u0431\u043a\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435. \u041f\u043e\u0434 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u043e\u0439 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442\u0441\u044f: \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0437 \u043d\u043e\u0432\u043e\u0433\u043e \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438, \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u0441\u0435\u0440\u0432\u0435\u0440 [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":74906,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-74905","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u044f \u0414\u0435\u043d\u0438\u0441 \u0438 \u043e\u0434\u043d\u043e \u0438\u0437 \u043c\u043e\u0438\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u2013 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0432 X5.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/bare-metal-provisioning-svoimi-rukami-ili-avtomaticheskaya-podgotovka-serverov-s-nulya\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"de_DE\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Bare-Metal Provisioning \u0441\u0432\u043e\u0438\u043c\u0438 \u0440\u0443\u043a\u0430\u043c\u0438, \u0438\u043b\u0438 \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0441 \u043d\u0443\u043b\u044f | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u044f \u0414\u0435\u043d\u0438\u0441 \u0438 \u043e\u0434\u043d\u043e \u0438\u0437 \u043c\u043e\u0438\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u2013 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0432 X5.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/bare-metal-provisioning-svoimi-rukami-ili-avtomaticheskaya-podgotovka-serverov-s-nulya\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2020-03-21T17:42:25+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2020-03-21T17:42:25+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Bare-Metal Provisioning selbst machen oder automatische Servervorbereitung von Grund auf | ProHoster","description":"Hallo, ich bin Denis und eines meiner T\u00e4tigkeitsfelder ist die Entwicklung von Infrastruktur L\u00f6sungen bei X5.","canonical_url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/bare-metal-provisioning-svoimi-rukami-ili-avtomaticheskaya-podgotovka-serverov-s-nulya","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"de_DE","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Bare-Metal Provisioning \u0441\u0432\u043e\u0438\u043c\u0438 \u0440\u0443\u043a\u0430\u043c\u0438, \u0438\u043b\u0438 \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u0432 \u0441 \u043d\u0443\u043b\u044f | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u044f \u0414\u0435\u043d\u0438\u0441 \u0438 \u043e\u0434\u043d\u043e \u0438\u0437 \u043c\u043e\u0438\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u2013 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0432 X5.","og:url":"https:\/\/prohoster.info\/de\/blog\/administrirovanie\/bare-metal-provisioning-svoimi-rukami-ili-avtomaticheskaya-podgotovka-serverov-s-nulya","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2020-03-21T17:42:25+00:00","article:modified_time":"2020-03-21T17:42:25+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"74905","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-02-28 18:05:46","updated":"2026-02-09 16:50:18","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/74905","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/comments?post=74905"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/74905\/revisions"}],"predecessor-version":[{"id":158713,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/posts\/74905\/revisions\/158713"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media\/74906"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/media?parent=74905"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/categories?post=74905"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/de\/wp-json\/wp\/v2\/tags?post=74905"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}