{"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\/da\/blog\/administrirovanie\/bare-metal-provisioning-svoimi-rukami-ili-avtomaticheskaya-podgotovka-serverov-s-nulya","title":{"rendered":"Bare-metal provisioning selv, eller automatisk opstilling af servere fra bunden","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Hej, jeg er Denis, og et af mine arbejdsomr\u00e5der er udvikling af infrastrukturl\u00f8sninger i X5. I dag vil jeg dele med dig, hvordan man kan oprette et automatiseret system til serverforberedelse ved hj\u00e6lp af offentligt tilg\u00e6ngelige v\u00e6rkt\u00f8jer. Jeg synes, det er en interessant, enkel og fleksibel l\u00f8sning.<\/p>\n<p><img decoding=\"async\" alt=\"Bare-metal provisioning selv, eller automatisk opstilling af servere fra bunden\" 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 \/>\nMed forberedelse menes: at g\u00f8re en ny server fra kassen til en fuldt konfigureret server med Linux OS eller med hypervisoren ESXi (installationen <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/da\/server\/\"   title=\"servere\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1469\">servere<\/a> Windows diskuteres ikke i denne artikel).<\/p>\n<p><b>Termer<\/b>:<\/p>\n<ul>\n<li>servere \u2013 servere, der skal konfigureres.<\/li>\n<li>install-server \u2013 den prim\u00e6re server, der sikrer hele forberedelsesprocessen over netv\u00e6rket.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Hvorfor er automatisering n\u00f8dvendig?<\/h3>\n<p>\nAntag, at der er en opgave: at forberede servere massivt fra bunden, i spidsen \u2013 30 om dagen. Servere fra forskellige producenter og modeller, hvorp\u00e5 forskellige OS kan installeres, og der kan v\u00e6re eller ikke v\u00e6re en hypervisor.<\/p>\n<p>Hvilke operationer indg\u00e5r i konfigurationsprocessen (uden automatisering):<\/p>\n<ul>\n<li>tilslutte tastatur, mus, sk\u00e6rm til serveren;<\/li>\n<li>konfigurere BIOS, RAID, IPMI;<\/li>\n<li>opdatere firmwarekomponenter;<\/li>\n<li>udrulle billedet af filsystemet (eller installere hypervisoren og kopiere virtuelle maskiner);<\/li>\n<\/ul>\n<p>\nBem\u00e6rk. Som et alternativ kan OS installeres via en installation med en svarfil. Men dette vil ikke blive dr\u00f8ftet i artiklen. Dog vil du se nedenfor, at det ikke er sv\u00e6rt at tilf\u00f8je denne funktionalitet.<\/p>\n<ul>\n<li>konfigurere OS-parametre (hostname, IP, mm.).<\/li>\n<\/ul>\n<p>\nMed denne tilgang udf\u00f8res identiske indstillinger sekventielt p\u00e5 hver server. Effektiviteten af en s\u00e5dan proces er meget lav.<\/p>\n<p>Essensen af automatisering er at udelukke menneskelig deltagelse i serverforberedelsesprocessen s\u00e5 meget som muligt. <\/p>\n<p>Takket v\u00e6re automatiseringen reduceres nedetiden mellem operationerne, og det bliver muligt at forberede flere servere samtidig. Derudover reduceres sandsynligheden for fejl betydeligt p\u00e5 grund af den menneskelige faktor.<\/p>\n<p><img decoding=\"async\" alt=\"Bare-metal provisioning selv, eller automatisk opstilling af servere fra bunden\" src=\"\/wp-content\/uploads\/2020\/03\/8c196058891a7f41c5b93e7f6721480b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Hvordan sker automatisk serverkonfiguration?<\/h3>\n<p>\nLad os gennemg\u00e5 alle faser i detaljer.<\/p>\n<p>Du har en linux-server, som du bruger som PXE install-server. Den har installerede og konfigurerede tjenester: DHCP, TFTP.<\/p>\n<p>S\u00e5, lad os starte serveren (som skal konfigureres) via PXE. Lad os huske, hvordan det fungerer:<\/p>\n<ul>\n<li>Serveren er indstillet til at starte via netv\u00e6rket.<\/li>\n<li>Serveren indl\u00e6ser PXE-ROM fra netv\u00e6rkskortet og kontakter installationsserveren via DHCP for at f\u00e5 en netv\u00e6rksadresse.<\/li>\n<li>DHCP installationsserveren udleverer adressen samt instruktionen om videre indl\u00e6sning via PXE.<\/li>\n<li>Serveren indl\u00e6ser netv\u00e6rksbootloaderen fra installationsserveren via PXE, og den videre indl\u00e6sning foreg\u00e5r if\u00f8lge PXE konfigurationsfilen.<\/li>\n<li>Indl\u00e6sningen foreg\u00e5r baseret p\u00e5 de modtagne parametre (kerne, initramfs, monteringspunkter, squashfs billede osv.).<\/li>\n<\/ul>\n<p>\nBem\u00e6rk. Artiklen beskriver indl\u00e6sningen via PXE gennem BIOS mode. I \u00f8jeblikket implementeres UEFI bootmode aktivt af producenterne. For PXE vil forskellen v\u00e6re i konfigurationen af DHCP-serveren og tilstedev\u00e6relsen af en ekstra bootloader.<\/p>\n<p>Lad os se p\u00e5 et eksempel p\u00e5 konfigurationen af PXE-serveren (pxelinux menu).<\/p>\n<p>Fil pxelinux.cfg\/default:<\/p>\n<pre><code class=\"plaintext\">default menu.c32\nprompt 0\ntimeout 100\nmenu title X5 PXE Boot Menu\nLABEL InstallServer Menu\n\tMENU LABEL InstallServer\n\tKERNEL menu.c32\n\tAPPEND pxelinux.cfg\/installserver\nLABEL VMware Menu\n\tMENU LABEL VMware ESXi Install\n\tKERNEL menu.c32\n\tAPPEND pxelinux.cfg\/vmware\nLABEL toolkit \/\/ standardmenu\n\tMENU LABEL Linux Scripting Toolkits\n\tMENU default\n\tKERNEL menu.c32\n\tAPPEND pxelinux.cfg\/toolkit \/\/ overgang til n\u00e6ste menu<\/code><\/pre>\n<p>\nFil pxelinux.cfg\/toolkit:<\/p>\n<pre><code class=\"plaintext\">prompt 0\ntimeout 100\nmenu title X5 PXE Boot Menu\nlabel mainmenu\n    menu label ^Return to Main Menu\n    kernel menu.c32\n    append pxelinux.cfg\/default\nlabel x5toolkit-auto \/\/ standard \u2014 automatisk tilstand\n        menu label x5 toolkit autoinstall\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 \/\/ til debugging - konsol\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>\nKernen og initramfs p\u00e5 dette stadium er et mellemliggende linux-billede, som vil blive brugt til den grundl\u00e6ggende forberedelse og konfiguration af serveren.<\/p>\n<p>Som du kan se, videregiver bootloaderen mange parametre til kernen. Nogle af disse parametre bruges af selve kernen, mens andre kan bruges til vores egne form\u00e5l. Dette vil blive forklaret senere, men indtil videre kan man blot huske, at alle videregivne parametre vil v\u00e6re tilg\u00e6ngelige i det mellemliggende linux-billede via \/proc\/cmdline.<\/p>\n<p>Hvor kan man finde dem, kernen og initramfs?<br \/>\nMan kan v\u00e6lge enhver linux-distribution som basis. Hvad skal vi v\u00e6re opm\u00e6rksomme p\u00e5, n\u00e5r vi v\u00e6lger:<\/p>\n<ul>\n<li>bootbilledet skal v\u00e6re universelt (have drivere, muligheder for installation af ekstra v\u00e6rkt\u00f8jer);<\/li>\n<li>det vil sandsynligvis v\u00e6re n\u00f8dvendigt at tilpasse initramfs.<\/li>\n<\/ul>\n<p>\nHvordan er dette gjort i vores l\u00f8sning til X5? Som grundlag er CentOS 7 valgt. Vi vil udf\u00f8re f\u00f8lgende trick: forberede den fremtidige struktur af billedet, pakke det i en arkivfil og oprette initramfs, som vil indeholde vores arkiv af filsystemet. Ved opstart af billedet vil arkivet blive udpakket til den oprettede tmpfs-partition. P\u00e5 den m\u00e5de f\u00e5r vi et minimalt, men fuldt fungerende live-billede af Linux med alle n\u00f8dvendige v\u00e6rkt\u00f8jer, der kun best\u00e5r af to filer: vmkernel og 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>\nS\u00e5 vi har angivet kernen og initramfs, der skal indl\u00e6ses. Som resultat, ved at indl\u00e6se det midlertidige Linux-billede via PXE, vil vi f\u00e5 OS-konsollen.<\/p>\n<p>Fremragende, men nu skal vi overf\u00f8re styringen til vores \"automatisering\".<\/p>\n<p>Dette kan g\u00f8res som f\u00f8lger.<\/p>\n<p>Lad os antage, at vi planl\u00e6gger at overf\u00f8re styringen til scriptet mount.sh efter indl\u00e6sning af billedet.<br \/>\nVi incluirer scriptet mount.sh i automatisk opstart. For dette er det n\u00f8dvendigt at modificere initramfs:<\/p>\n<ul>\n<li>udpakke initramfs (hvis vi bruger den n\u00e6vnte variant af initramfs, er dette ikke n\u00f8dvendigt)<\/li>\n<li>includere i boot-koden, der vil analysere de overf\u00f8rte parametre via \/proc\/cmdline og overf\u00f8re styringen videre;<\/li>\n<li>pakke initramfs.<\/li>\n<\/ul>\n<p>\nBem\u00e6rk. I tilf\u00e6lde af X5 toolkit overf\u00f8res bootstyringen til scriptet <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>S\u00e5 indl\u00e6ses billedet, hvori scriptet mount.sh starter i automatisk opstart. Derefter analyserer scriptet mount.sh under udf\u00f8relsen de overf\u00f8rte parametre (script_cmd=) og starter det n\u00f8dvendige program\/script.<\/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 provisioning selv, eller automatisk opstilling af servere fra bunden\" src=\"\/wp-content\/uploads\/2020\/03\/943eeb64fbf746feab5119ead5b1ca66.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nHer i venstre side er PXE-menuen, og i h\u00f8jre side \u2013 skemaet for overf\u00f8rsel af kontrol.<\/p>\n<p>Vi har forst\u00e5et overf\u00f8rslen af kontrol. Afh\u00e6ngigt af valg af PXE-menuen starter enten scriptet til automatisk konfiguration eller konsollen til fejlfinding.<\/p>\n<p>I tilf\u00e6lde af automatisk konfiguration monteres de n\u00f8dvendige biblioteker fra install-serveren, som indeholder:<\/p>\n<ul>\n<li>scripts;<\/li>\n<li>gemte BIOS\/UEFI-skabeloner for forskellige servere;<\/li>\n<li>firmware;<\/li>\n<li>v\u00e6rkt\u00f8jer til servere;<\/li>\n<li>logfiler.<\/li>\n<\/ul>\n<p>\nDerefter overf\u00f8rer scriptet mount.sh kontrollen til scriptet master-install.sh i scripts-mappen.<\/p>\n<p>Scripttr\u00e6et (r\u00e6kkef\u00f8lgen af deres k\u00f8rsel) ser omtrent s\u00e5dan ud:<\/p>\n<ul>\n<li>master-install<\/li>\n<li>sharefunctions (f\u00e6lles funktioner)<\/li>\n<li>info (information output)<\/li>\n<li>models (installation parametre baseret p\u00e5 servermodel)<\/li>\n<li>prepare_utils (installation af n\u00f8dvendige v\u00e6rkt\u00f8jer)<\/li>\n<li>fwupdate (firmwareopdatering)<\/li>\n<li>diag (grundl\u00e6ggende diagnose)<\/li>\n<li>biosconf (bios\/uefi konfiguration)<\/li>\n<li>clockfix (ops\u00e6tning af tid p\u00e5 hovedkortet)<\/li>\n<li>srmconf (konfiguration af fjerninterface)<\/li>\n<li>raidconf (konfiguration af logiske volumener)<\/li>\n<\/ul>\n<p>\n\u00e9n af:<\/p>\n<ul>\n<li>preinstall (overf\u00f8rsel af kontrol til OS- eller hypervisorinstallat\u00f8ren, f.eks. ESXi)<\/li>\n<li>merged-install (direkte opstart af billedudpakning)<\/li>\n<\/ul>\n<p>\n<b>Nu ved vi:<\/p>\n<ul>\n<li>hvordan man indl\u00e6ser serveren via PXE;<\/li>\n<li>hvordan man overf\u00f8rer kontrol til eget script.<\/li>\n<\/ul>\n<p><\/b><br \/>\nLad os forts\u00e6tte. F\u00f8lgende sp\u00f8rgsm\u00e5l er blevet relevante:<\/p>\n<ul>\n<li>Hvordan identificerer vi serveren, som vi forbereder?<\/li>\n<li>Hvilke v\u00e6rkt\u00f8jer og hvordan konfigurerer vi serveren?<\/li>\n<li>Hvordan f\u00e5r vi indstillingerne for den specifikke server?<\/li>\n<\/ul>\n<p><\/p>\n<h3>Hvordan identificerer vi serveren, som vi forbereder?<\/h3>\n<p>\nDet er enkelt \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>\nHer er alt, hvad der er n\u00f8dvendigt: producent, model, serienummer. Hvis du er usikker p\u00e5, om denne information er tilg\u00e6ngelig for alle servere, kan du identificere dem via MAC-adressen. Eller begge metoder samtidig, hvis serverproducenterne er forskellige, og informationen om serienummeret mangler p\u00e5 nogle modeller.<\/p>\n<p>Baseret p\u00e5 den indsamlede information monteres netv\u00e6rksmapper fra install-serveren, og alt n\u00f8dvendigt (v\u00e6rkt\u00f8jer, firmware osv.) hentes.<\/p>\n<h3>Hvilke v\u00e6rkt\u00f8jer og hvordan konfigurerer vi serveren?<\/h3>\n<p>\nJeg vil give nogle v\u00e6rkt\u00f8jer til Linux til visse producenter. Alle v\u00e6rkt\u00f8jer er tilg\u00e6ngelige p\u00e5 producenternes officielle hjemmesider.<\/p>\n<p><img decoding=\"async\" alt=\"Bare-metal provisioning selv, eller automatisk opstilling af servere fra bunden\" src=\"\/wp-content\/uploads\/2020\/03\/fab53d1fa6e9a222ec69248439551ad7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMed firmware er alt klart, tror jeg. De leveres normalt som pakkerede eksekverbare filer. Den eksekverbare fil kontrollerer firmwareopdateringsprocessen og rapporterer en returkode.<\/p>\n<p>BIOS og IPMI konfigureres normalt via skabeloner. Om n\u00f8dvendigt kan skabelonen redigeres lige f\u00f8r opstart.<\/p>\n<p>RAID-v\u00e6rkt\u00f8jer fra nogle producenter kan ogs\u00e5 konfigureres via skabeloner. Hvis det ikke er tilf\u00e6ldet, skal der skrives et konfigurationsscript.<\/p>\n<p>Forl\u00f8bet af RAID-konfiguration er oftest som f\u00f8lger:<\/p>\n<ul>\n<li>Vi anmoder om den aktuelle konfiguration.<\/li>\n<li>Hvis der allerede er logiske array, sletter vi dem.<\/li>\n<li>Vi ser, hvilke fysiske diske der er til stede, og hvor mange der er.<\/li>\n<li>Vi opretter et nyt logisk array. Vi afbryder processen i tilf\u00e6lde af fejl.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Hvordan f\u00e5r vi indstillingerne for den specifikke server?<\/h3>\n<p>\nLad os antage, at indstillingerne for alle servere vil blive gemt p\u00e5 install-serveren. I s\u00e5 fald, for at besvare vores sp\u00f8rgsm\u00e5l, skal vi f\u00f8rst afg\u00f8re: hvordan vi skal overf\u00f8re indstillingerne til install-serveren.<\/p>\n<p>I begyndelsen er det helt i orden at bruge tekstfiler. (I fremtiden kan man bruge tekstfilen som en backupmetode til at overf\u00f8re indstillinger). <\/p>\n<p>Man kan \"delekort\" en tekstfil p\u00e5 installationsserveren og tilf\u00f8je dens montering i mount.sh-scriptet.<\/p>\n<p>Linjerne vil v\u00e6re af f\u00f8lgende format:<\/p>\n<p><\/p>\n<p>Disse linjer vil blive overf\u00f8rt til filen af ingeni\u00f8ren fra hans arbejdsstation. Og senere, ved ops\u00e6tningen af serveren, vil parametre for den specifikke server blive l\u00e6st fra filen.<\/p>\n<p>Men p\u00e5 sigt er det bedre at anvende en database til at gemme indstillinger, tilstande og installationslogfiler for serverne.<\/p>\n<p>Selvf\u00f8lgelig er en enkelt database ikke tilstr\u00e6kkelig, og det vil v\u00e6re n\u00f8dvendigt at oprette en klientdel, der kan overf\u00f8re indstillinger til databasen. Det er mere kompliceret at implementere i forhold til tekstfilen, men i virkeligheden er det ikke s\u00e5 sv\u00e6rt, som det virker. Den minimumsversion af klienten, der blot vil overf\u00f8re data til databasen, kan man sagtens skrive selv. Og man kan forbedre klientprogrammet senere i fritiden (rapporter, udskrivning af etiketter, sending af meddelelser osv., hvad man nu kan finde p\u00e5).<\/p>\n<p>Ved at lave en bestemt foresp\u00f8rgsel til databasen og angive serverens serienummer, vil vi f\u00e5 de n\u00f8dvendige parametre til serverops\u00e6tningen.<\/p>\n<p>Plus, vi skal ikke finde p\u00e5 l\u00e5sningsmetoder for samtidige adgang, som i tilf\u00e6lde af tekstfilen.<\/p>\n<p>Vi kan skrive konfigurationsloggen i databasen p\u00e5 alle trin og kontrollere installationsprocessen gennem begivenheder og faseflag.<\/p>\n<p><b>Nu ved vi, hvordan:<\/p>\n<ul>\n<li>man indl\u00e6ser serveren via PXE;<\/li>\n<li>man overf\u00f8rer kontrol til vores script;<\/li>\n<li>man identificerer den server, der skal forberedes, ved serienummeret;<\/li>\n<li>man konfigurerer serveren med de relevante v\u00e6rkt\u00f8jer;<\/li>\n<li>man overf\u00f8rer indstillinger til installationsserverens database ved hj\u00e6lp af klientdelen.<\/li>\n<\/ul>\n<p>\nVi har fundet ud af, hvordan:<\/p>\n<ul>\n<li>den installerede server modtager de n\u00f8dvendige indstillinger fra databasen;<\/li>\n<li>fremskridtene i forberedelsen registreres i databasen (logs, begivenheder, faseflag).<\/li>\n<\/ul>\n<p><\/b><\/p>\n<h3>Hvad med de forskellige typer installeret software? Hvordan installerer man hypervisoren, kopierer VM og konfigurerer det hele?<\/h3>\n<p>\nI tilf\u00e6lde af udrulning af en filsystemafbildning (linux) til hardware er alt ret simpelt:<\/p>\n<ul>\n<li>Efter konfiguration af alle serverkomponenter rulles billedet ud.<\/li>\n<li>Vi installerer bootloaderen grub.<\/li>\n<li>Vi udf\u00f8rer chroot og konfigurerer alt, hvad der er n\u00f8dvendigt.<\/li>\n<\/ul>\n<p>\n<b>Hvordan man overf\u00f8rer kontrol til operativsysteminstallat\u00f8ren (p\u00e5 eksempel ESXi).<\/b><\/p>\n<ul>\n<li>Vi organiserer overf\u00f8rslen af kontrol fra vores script til hypervisorinstallat\u00f8ren via en svarfil (kickstart):<\/li>\n<li>Vi sletter de nuv\u00e6rende partitioner p\u00e5 disken.<\/li>\n<li>Vi opretter en partition p\u00e5 500MB.<\/li>\n<li>Vi markerer den som bootbar.<\/li>\n<li>Vi formaterer den til FAT32.<\/li>\n<li>Vi kopierer installationsfilerne for ESXi til roden af den.<\/li>\n<li>Vi installerer syslinux.<\/li>\n<li>Vi kopierer syslinux.cfg til \/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>Vi kopierer mboot.c32 til \/syslinux.<\/li>\n<li>I boot.cfg skal der st\u00e5 kernelopt=ks=ftp:\/\/\/ks_esxi.cfg<\/li>\n<li>Genstart serveren.<\/li>\n<\/ul>\n<p>\nN\u00e5r serveren genstarter fra sin h\u00e5rde disk, vil ESXi-installationsprogrammet blive indl\u00e6st. Alle n\u00f8dvendige installationsfiler vil blive indl\u00e6st i hukommelsen, og installationen af ESXi vil derefter begynde i henhold til den angivne svarfil.<\/p>\n<p>Her er et par linjer fra svarfilen ks_esxi.cfg:<\/p>\n<pre><code class=\"plaintext\">%firstboot --interpreter=busybox\n\u2026\n# Hent serienummer\n\nSYSSN=$(esxcli hardware platform get | grep Serial | awk -F \" \" '{print $3}')\n\n# Hent IP\n\nIPADDRT=$(esxcli network ip interface ipv4 get | grep vmk0 | awk -F \" \" '{print $2}')\nLAST_OCTET=$(echo $IPADDRT | awk -F'.' '{print $4}')\n\n# Tilslut NFS installationsserver\n\nesxcli storage nfs add -H is -s \/srv\/nfs_share -v nfsshare1\n\n# Kopier midlertidige SSH-indstillinger til brug for SSH-klienten\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# Kopier ovftool til udrulning af VM nu, samt det kan v\u00e6re nyttigt senere\n\ncp -R \/vmfs\/volumes\/nfsshare1\/ovftool \/vmfs\/volumes\/datastore1\/\n\n# Udrul VM\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# Hent strengen med indstillingerne for vores server\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# Generer netv\u00e6rkskonfigurationsscript\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# Angiv parameteret guestinfo.esxihost.id, angiv serienummeret\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# Opdater oplysninger i databasen\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# Giv SSH-indstillingerne tilbage\n\nrm -rf \/etc\/ssh\nmv \/etc\/ssh.tmp \/etc\/ssh\n\n# Konfigurer netv\u00e6rk og genstart\n\nesxcli system hostname set --fqdn=esx-${G_NICK}.x5.ru\n\/vmfs\/volumes\/datastore1\/netconf.sh\nreboot\n<\/code><\/pre>\n<p>\nP\u00e5 dette tidspunkt er hypervisoren installeret og konfigureret, og virtuelle maskiner er blevet kopieret.<\/p>\n<p>Hvordan konfigurerer vi nu de virtuelle maskiner?<\/p>\n<p>Vi satte lidt i scene: under installationen satte vi parameteren guestinfo.esxihost.id = \"$SYSSN\" i filen VM1.vmx, hvor vi angav serienummeret for den fysiske server.<\/p>\n<p>Nu, efter opstart kan den virtuelle maskine (med den installerede vmware-tools pakke) f\u00e5 adgang til denne parameter:<\/p>\n<pre><code class=\"plaintext\">ESXI_SN=$(vmtoolsd --cmd \"info-get guestinfo.esxihost.id\")<\/code><\/pre>\n<p>\nDet vil sige, at VM'en vil v\u00e6re i stand til at identificere sig selv (den kender det fysiske hosts serienummer), lave en foresp\u00f8rgsel til install-serverens database og f\u00e5 de parametre, der skal konfigureres. Alt dette udformes i et script, der skal k\u00f8res automatisk ved opstart af guestos vm (men kun \u00e9n gang: RunOnce).<\/p>\n<p><b>Nu ved vi, hvordan:<\/p>\n<ul>\n<li>man indl\u00e6ser serveren via PXE;<\/li>\n<li>man overf\u00f8rer kontrol til vores script;<\/li>\n<li>man identificerer den server, der skal forberedes, ved serienummeret;<\/li>\n<li>konfigurere serveren med de relevante v\u00e6rkt\u00f8jer;<\/li>\n<li>overf\u00f8re indstillinger til install-serverens database ved hj\u00e6lp af klientdelen;<\/li>\n<li>konfigurere forskellige typer software, herunder at implementere hypervisoren esxi og konfigurere virtuelle maskiner (og alt automatisk).<\/li>\n<\/ul>\n<p>\nVi har fundet ud af, hvordan:<\/p>\n<ul>\n<li>den installerede server modtager de n\u00f8dvendige indstillinger fra databasen;<\/li>\n<li>fremskridtene i forberedelsen registreres i databasen (logs, begivenheder, faseflag).<\/li>\n<\/ul>\n<p><\/b><br \/>\n<u><b>Konklusion:<\/b><\/u><\/p>\n<p>Jeg mener, at unikheden ved denne l\u00f8sning ligger i dens fleksibilitet, enkelhed, muligheder og alsidighed.<\/p>\n<p>Skriv venligst i kommentarerne, hvad du synes.<br \/>\n<br \/>Kilde: <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.3 - 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\/da\/blog\/administrirovanie\/bare-metal-provisioning-svoimi-rukami-ili-avtomaticheskaya-podgotovka-serverov-s-nulya\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\/da\/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 g\u00f8r det selv, eller Automatisk ops\u00e6tning af servere fra bunden | ProHoster","description":"Hej, jeg er Denis, og et af mine arbejdsomr\u00e5der er udviklingen af infrastrukturl\u00f8sninger i X5.","canonical_url":"https:\/\/prohoster.info\/da\/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":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/74905","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=74905"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/74905\/revisions"}],"predecessor-version":[{"id":158713,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/74905\/revisions\/158713"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/74906"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=74905"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=74905"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=74905"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}