{"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\/et\/blog\/administrirovanie\/bare-metal-provisioning-svoimi-rukami-ili-avtomaticheskaya-podgotovka-serverov-s-nulya","title":{"rendered":"Bare-Metal Provisioning oma k\u00e4tega v\u00f5i Automaatne serverite ettevalmistamine nullist","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Tere, mina olen Denis ja \u00fcks minu tegevusvaldkondadest on infrastruktuuri lahenduste arendamine X5-s. T\u00e4na tahaksin jagada, kuidas avalike t\u00f6\u00f6riistade baasil saab \u00fcles seada automaatse serverite ettevalmistamise s\u00fcsteemi. Minu arvates on see huvitav, lihtne ja paindlik lahendus.<\/p>\n<p><img decoding=\"async\" alt=\"Bare-Metal Provisioning oma k\u00e4tega v\u00f5i Automaatne serverite ettevalmistamine nullist\" 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 \/>\nEttevalmistusega m\u00f5istetakse: teha uue \"karbi\" serverist t\u00e4ielikult seadistatud server Linuxi op.s\u00fcsteemiga v\u00f5i hyperviisoriga ESXi (jaotamine <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/et\/server\/\"   title=\"serverid\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1469\">serverid<\/a> Windowsi puhul seda artiklis ei k\u00e4sitleta).<\/p>\n<p><b>Terminid<\/b>:<\/p>\n<ul>\n<li>serverid \u2013 serverid, mida tuleb seadistada.<\/li>\n<li>install-server \u2013 peamine server, mis tagab kogu ettevalmistusprotsessi \u00fcle v\u00f5rgu.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Miks on automatiseerimine vajalik?<\/h3>\n<p>\nOletame, et on \u00fclesanne: massiliselt valmistada servereid nullist, tipphind 30 p\u00e4eva jooksul. Serverid erinevatelt tootjatelt ja mudelitelt, neile v\u00f5ib paigaldada erinevaid op.s\u00fcsteeme, v\u00f5ib olla v\u00f5i mitte olla hyperviisor.<\/p>\n<p>Millised toimingud kuuluvad seadistamisprotsessi (ilma automatiseerimiseta):<\/p>\n<ul>\n<li>\u00fchendada serverile klaviatuur, hiir, monitor;<\/li>\n<li>seadistada BIOS, RAID, IPMI;<\/li>\n<li>uuendada komponente tarkvara;<\/li>\n<li>rakendada failis\u00fcsteemi pilti (v\u00f5i paigaldada hyperviisor ja kopeerida virtuaalmasinad);<\/li>\n<\/ul>\n<p>\nM\u00e4rkus. \u00dche variantina on op.s\u00fcsteemi rakendamine v\u00f5imalik auto-vastuse failiga. Kuid sellest artiklis ei r\u00e4\u00e4gita. Kuigi allpool n\u00e4ete, et selle funktsiooni lisamine pole keeruline.<\/p>\n<ul>\n<li>seadistada op.s\u00fcsteemi parameetrid (hostname, IP, jne).<\/li>\n<\/ul>\n<p>\nSelle l\u00e4henemisviisi korral viiakse igas serveris j\u00e4rjestikku l\u00e4bi samad seadistused. T\u00f6\u00f6 efektiivsus on v\u00e4ga madal.<\/p>\n<p>Automatiseerimise sisu on v\u00e4lja j\u00e4tta inimeste osalemine serveri ettevalmistamise protsessist. Nii palju kui v\u00f5imalik. <\/p>\n<p>Automatiseerimise abil v\u00e4hendatakse seisaku aega toimingute vahel ja on v\u00f5imalik ette valmistada mitu serverit samal ajal. Samuti v\u00e4heneb oluliselt inimfaktorist p\u00f5hjustatud vigade teke.<\/p>\n<p><img decoding=\"async\" alt=\"Bare-Metal Provisioning oma k\u00e4tega v\u00f5i Automaatne serverite ettevalmistamine nullist\" src=\"\/wp-content\/uploads\/2020\/03\/8c196058891a7f41c5b93e7f6721480b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Kuidas toimub serverite automaatne seadistamine?<\/h3>\n<p>\nUurime k\u00f5iki etappe detailsemalt.<\/p>\n<p>Teil on Linuxi server, mida kasutate PXE install-serverina. Sellel on seadistatud ja t\u00f6\u00f6s DHCP ja TFTP teenused.<\/p>\n<p>Nii et laadige server (mida tuleb seadistada) PXE kaudu. Meenutame, kuidas see toimib:<\/p>\n<ul>\n<li>Serveris on valitud v\u00f5rgust laadimine.<\/li>\n<li>Server loads the PXE-ROM of the network card and contacts the installation server via DHCP to obtain a network address.<\/li>\n<li>The DHCP installation server issues the address and further boot instructions via PXE.<\/li>\n<li>The server loads the network boot loader from the installation server via PXE, and the subsequent loading occurs according to the PXE configuration file.<\/li>\n<li>Loading takes place based on the received parameters (kernel, initramfs, mount points, squashfs image, etc.).<\/li>\n<\/ul>\n<p>\nNote: The article describes PXE loading via BIOS mode. Currently, manufacturers are actively implementing UEFI boot mode. For PXE, the difference will be in the DHCP server configuration and the presence of an additional bootloader.<\/p>\n<p>Let's consider an example configuration of a PXE server (pxelinux menu).<\/p>\n<p>File 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 \/\/ default menu\n\tMENU LABEL Linux Scripting Toolkits\n\tMENU default\n\tKERNEL menu.c32\n\tAPPEND pxelinux.cfg\/toolkit \/\/ transition to the next menu<\/code><\/pre>\n<p>\nFile 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 \/\/ default - automatic mode\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 \/\/ for debugging - console\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>\nAt this stage, the kernel and initramfs represent an intermediate Linux image, which will be used for the primary server setup and configuration.<\/p>\n<p>As you can see, the loader passes many parameters to the kernel. Some of these parameters are used by the kernel itself, while others we can use for our purposes. This will be discussed later, but for now, it's worth noting that all passed parameters will be available in the intermediate Linux image via \/proc\/cmdline.<\/p>\n<p>Where to obtain the kernel and initramfs?<br \/>\nAny Linux distribution can be chosen as a base. Here\u2019s what to consider when selecting:<\/p>\n<ul>\n<li>the boot image should be universal (availability of drivers, ability to install additional utilities);<\/li>\n<li>t\u00f5en\u00e4oliselt on vajalik initramfsi kohandamine.<\/li>\n<\/ul>\n<p>\nKuidas see on tehtud meie lahenduses X5 jaoks? Baasiks on valitud CentOS 7. Teeme j\u00e4rgmise triki: valmistame ette tulevase pildi struktuuri, pakime selle arhiivi ja loome initramfsi, mille sees on meie failis\u00fcsteemi arhiiv. Pildi k\u00e4ivitamisel arhiiv puhastatakse loomisel tmpfs ja seega saadakse minimaalne, kuid t\u00e4isfunktsionaalne Linuxi live-pilt k\u00f5igi vajalike utiliitidega, mis koosneb vaid kahest failist: vmkernel ja 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>\nNii oleme m\u00e4\u00e4ranud tuuma ja initramfsi, mis tuleb laadida. Selle tulemusena, laadides vahepealse Linuxi pildi PXE kaudu, saame OS konsooli.<\/p>\n<p>Suurep\u00e4rane, kuid n\u00fc\u00fcd tuleb edasi anda juhtimine meie \u201cautomaatikale\u201d.<\/p>\n<p>Seda saab teha j\u00e4rgmiselt.<\/p>\n<p>Oletame, et p\u00e4rast pildi laadimist plaanime juhtimise edasi anda skriptile mount.sh.<br \/>\nLisame skripti mount.sh automaatse k\u00e4ivitamise. Selleks tuleb modifitseerida initramfsi:<\/p>\n<ul>\n<li>lahendada initramfs (kui kasutame \u00fclalmainitud initramfsi versiooni, ei ole see vajalik)<\/li>\n<li>lisada automaatse k\u00e4ivitamise kood, mis anal\u00fc\u00fcsib edasi antud parameetreid l\u00e4bi \/proc\/cmdline ja edastab juhtimise edasi;<\/li>\n<li>pakendada initramfs.<\/li>\n<\/ul>\n<p>\nM\u00e4rkus. X5 t\u00f6\u00f6riistakomplekti puhul antakse laadimise juhtimine \u00fcle skriptile. <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>Nii laaditakse pilt, mille automaatse k\u00e4ivitamise korral k\u00e4ivitub skript mount.sh. Edasi anal\u00fc\u00fcsib skript mount.sh k\u00e4ivitamise k\u00e4igus edastatud parameetreid (script_cmd=) ja k\u00e4ivitab vajaliku programmi\/skripti.<\/p>\n<p>silt toolkit-<b>auto<\/b><br \/>\ntuuma ...<br \/>\nlisa ... nfs_toolkit_script=scripts\/mount.sh <b>script_cmd=master-install.sh<br \/>\n<\/b><br \/>\nsilt toolkit-<b>k\u00e4surea t\u00f5lgendus<\/b><br \/>\ntuuma ...<br \/>\nlisa ... nfs_toolkit_script=scripts\/mount.sh <b>script_cmd=\/bin\/bash<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Bare-Metal Provisioning oma k\u00e4tega v\u00f5i Automaatne serverite ettevalmistamine nullist\" src=\"\/wp-content\/uploads\/2020\/03\/943eeb64fbf746feab5119ead5b1ca66.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nSiin vasakul on PXE-men\u00fc\u00fc, paremal - juhtimise edastamise skeem.<\/p>\n<p>Oleme juhtimise edastamisega kursis. S\u00f5ltuvalt PXE-men\u00fc\u00fcst k\u00e4ivitub kas automaatse seadistamise skript v\u00f5i t\u00f5rkeotsingu konsool.<\/p>\n<p>Automaatse seadistamise korral monteeritakse vajalikud kataloogid installiserverist, milles on:<\/p>\n<ul>\n<li>skripte;<\/li>\n<li>salvestatud BIOS\/UEFI mallid erinevate serverite jaoks;<\/li>\n<li>firmwares;<\/li>\n<li>serveri utiliidid;<\/li>\n<li>logid.<\/li>\n<\/ul>\n<p>\nEdasi edastab skript mount.sh juhtimise skriptile master-install.sh skriptide kataloogist.<\/p>\n<p>Skriptide puu (k\u00e4ivitamise j\u00e4rjekord) n\u00e4eb v\u00e4lja umbes nii:<\/p>\n<ul>\n<li>master-install<\/li>\n<li>sharefunctions (\u00fcldfunktsioonid)<\/li>\n<li>info (teabe v\u00e4ljund)<\/li>\n<li>mudelid (installimise parameetrite seadmine serveri mudeli alusel)<\/li>\n<li>prepare_utils (vajalike utiliidide seadmine)<\/li>\n<li>fwupdate (firmware'i v\u00e4rskendamine)<\/li>\n<li>diag (alustav diagnostika)<\/li>\n<li>biosconf (BIOS\/iUEFI seadistamine)<\/li>\n<li>clockfix (emaplaadi aja seadistamine)<\/li>\n<li>srmconf (eemalseadme liidese seadistamine)<\/li>\n<li>raidconf (loogiliste mahutite seadistamine)<\/li>\n<\/ul>\n<p>\n\u00fcks j\u00e4rgmistest:<\/p>\n<ul>\n<li>preinstall (\u00fchendamise juhtimise edastamine OS v\u00f5i h\u00fcpervisiitori installijale, n\u00e4iteks ESXi)<\/li>\n<li>merged-install (otsemoodul pildifaili lahti pakkimiseks)<\/li>\n<\/ul>\n<p>\n<b>N\u00fc\u00fcd me teame:<\/p>\n<ul>\n<li>kuidas k\u00e4ivitada serverit PXE kaudu;<\/li>\n<li>kuidas edastada juhtimist oma skriptile.<\/li>\n<\/ul>\n<p><\/b><br \/>\nJ\u00e4tkame. Olulised k\u00fcsimused on:<\/p>\n<ul>\n<li>Kuidas tuvastada serverit, mille me ette valmistame?<\/li>\n<li>Milliste utiliitide ja kuidas seadistada serverit?<\/li>\n<li>Kuidas saada konkreetse serveri seadistusi?<\/li>\n<\/ul>\n<p><\/p>\n<h3>Kuidas tuvastada serverit, mille me ette valmistame?<\/h3>\n<p>\nSee on lihtne \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>\nSiit leiate k\u00f5ik, mis vajalik: tootja, mudel, seerianumber. Kui te pole kindel, et see informatsioon on k\u00f5igil serveritel olemas, v\u00f5ite need tuvastada MAC-aadressi p\u00f5hjal. V\u00f5ite kasutada ka m\u00f5lemat meetodit, kui serverite tootjad on erinevad ja m\u00f5nel mudelil puudub seerianumber.<\/p>\n<p>Saadud teabe p\u00f5hjal mountitakse installiserverist v\u00f5rgu kaustad ja laaditakse k\u00f5ik vajalikud (utiliidid, firmad ja muu).<\/p>\n<h3>Milliste utiliitide ja kuidas seadistada serverit?<\/h3>\n<p>\nEsitan m\u00f5nede tootjate Linuxi utiliidid. K\u00f5ik utiliidid on saadaval tootjate ametlikelt veebilehtedelt.<\/p>\n<p><img decoding=\"async\" alt=\"Bare-Metal Provisioning oma k\u00e4tega v\u00f5i Automaatne serverite ettevalmistamine nullist\" src=\"\/wp-content\/uploads\/2020\/03\/fab53d1fa6e9a222ec69248439551ad7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nMa arvan, et firmadega on k\u00f5ik selge. Need tarnitakse tavaliselt pakendatud k\u00e4ivitatavate failidena. K\u00e4ivitatav fail kontrollib firmav\u00e4rskendamise protsessi ja teatab tagastuskoodi.<\/p>\n<p>BIOS ja IPMI seadistatakse tavaliselt mallide kaudu. Vajadusel saab malli redigeerida enne k\u00e4ivitamist.<\/p>\n<p>M\u00f5ned tootjate RAID utiliidid saavad ka seadistada mallide kaudu. Kui see ei kehti, tuleb kirjutada seadistusskript.<\/p>\n<p>RAID seadistamise j\u00e4rjestus on sageli j\u00e4rgmine:<\/p>\n<ul>\n<li>K\u00fcsime praeguse konfiguratsiooni.<\/li>\n<li>Kui loogilised massiivid on juba olemas \u2013 kustutame need.<\/li>\n<li>Vaadake, millised f\u00fc\u00fcsilised kettad on olemas ja kui palju neid on.<\/li>\n<li>Loome uue loogilise massiivi. Katkestame protsessi vigade korral.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Kuidas saada konkreetse serveri seadistusi?<\/h3>\n<p>\nEeldame, et k\u00f5igi serverite seadistused salvestatakse installiserverisse. Sel juhul, et vastata meie k\u00fcsimusele, tuleb k\u00f5igepealt otsustada, kuidas seadistused edastada installiserverisse.<\/p>\n<p>Alguses saab t\u00e4iesti piirduda tekstifailidega. (Tulevikus v\u00f5ib teksti faili kasutada seadistuste edastamiseks varundusmeetodina). <\/p>\n<p>Saame jagada tekstifaili installatsiooniserveris. Ja lisada selle monteerimise skripti mount.sh.<\/p>\n<p>Read v\u00f5ivad olla n\u00e4iteks j\u00e4rgmiste n\u00e4gudega:<\/p>\n<p><\/p>\n<p>Need read edastab insener oma t\u00f6\u00f6masinast faili. Ja seej\u00e4rel konfigureeritakse serveri jaoks kindlad parameetrid failist.<\/p>\n<p>Kuid tulevikus oleks parem kasutada andmebaasi seadistuste, olekute ja serveri installatsiooni logide salvestamiseks.<\/p>\n<p>Kuid pelgalt andmebaasist ei piisa, vajalik on luua kliendipool, millega seadeid andmebaasi edastatakse. Selle rakendamine on keerulisem v\u00f5rreldes tekstifailiga, kuid tegelikult pole see nii keeruline, nagu tundub. Minimaalne klient, mis lihtsalt edastab andmeid andmebaasi, on t\u00e4iesti v\u00f5imalik ise kirjutada. Ja klientprogrammi saab tulevikus t\u00e4iustada vabamere re\u017eiimis (aruanded, etikettide printimine, teavituste saatmine ja muu, mis p\u00e4he tuleb).<\/p>\n<p>Tehes andmebaasi teatud p\u00e4ringu ja n\u00e4idates serveri seerianumbrit, saame vajalikud parameetrid serveri seadistamiseks.<\/p>\n<p>Lisaks ei pea me v\u00e4lja m\u00f5tlema lukustusi samaaegse ligi p\u00e4\u00e4su jaoks, nagu see on tekstifailiga.<\/p>\n<p>Seadistuste ajalugu saame igas etapis salvestada andmebaasi ja installimise protsessi kontrollida s\u00fcndmuste ja etappide lipude kaudu.<\/p>\n<p><b>N\u00fc\u00fcd teame, kuidas:<\/p>\n<ul>\n<li>serverit PXE kaudu k\u00e4ivitada;<\/li>\n<li>edastada juhtimine meie skriptile;<\/li>\n<li>tuvastada server, mida valmistada, seerianumbri kaudu;<\/li>\n<li>konfigureerida server sobivate utiliitidega;<\/li>\n<li>edastada seadistusi installatsiooniserveri andmebaasi kliendi osa kaudu.<\/li>\n<\/ul>\n<p>\nSelgitasime, kuidas:<\/p>\n<ul>\n<li>installitav server saab vajalikud seadistused andmebaasist;<\/li>\n<li>kogu ettevalmistuse edenemine fikseeritakse andmebaasis (logid, s\u00fcndmused, etappide lipud).<\/li>\n<\/ul>\n<p><\/b><\/p>\n<h3>Kuidas on lood erinevate installitavate tarkvarade t\u00fc\u00fcpidega? Kuidas installida h\u00fcperviisor, kopeerida VM ja k\u00f5ike seda seadistada?<\/h3>\n<p>\nKohandatud failis\u00fcsteemi (linux) kujutise juurutamisel riistvarale on k\u00f5ik \u00fcsna lihtne:<\/p>\n<ul>\n<li>P\u00e4rast k\u00f5igi serveri komponentide seadistamist juurutame kujutise.<\/li>\n<li>Paigaldame k\u00e4ivitusprogrammi grub.<\/li>\n<li>Teeme chroot ja seadistame k\u00f5ik, mis vajalik.<\/li>\n<\/ul>\n<p>\n<b>Kuidas edastada juhtimine operatsioonis\u00fcsteemi installijale (ESXi n\u00e4itel).<\/b><\/p>\n<ul>\n<li>Korraldame juhtimise edastamise meie skriptist h\u00fcperviisori installijale vastuste failist (kickstart):<\/li>\n<li>Kustutame hetke ketta partitsioonid.<\/li>\n<li>Loome partitsiooni suurusega 500MB.<\/li>\n<li>M\u00e4rkime selle k\u00e4ivitamiseks.<\/li>\n<li>Formateerime FAT32-sse.<\/li>\n<li>Kopeerime selle juurkausta ESXi installifailid.<\/li>\n<li>Installime syslinux'i.<\/li>\n<li>Kopeerime syslinux.cfg faili \/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>Kopeerime mboot.c32 faili \/syslinux.<\/li>\n<li>Failis boot.cfg peab olema kernelopt=ks=ftp:\/\/\/ks_esxi.cfg<\/li>\n<li>Taask\u00e4ivita server.<\/li>\n<\/ul>\n<p>\nP\u00e4rast serveri taask\u00e4ivitamist selle k\u00f5vakettalt laadib ESXi installer. K\u00f5ik vajalikud installifailid laaditakse m\u00e4llu ja seej\u00e4rel algab ESXi paigaldamine vastavalt antud vastuste failile.<\/p>\n<p>Toon siin v\u00e4lja m\u00f5ned read automaatvastuste failist ks_esxi.cfg:<\/p>\n<pre><code class=\"plaintext\">%firstboot --interpreter=busybox\n\u2026\n# saame seerianumber\n\nSYSSN=$(esxcli hardware platform get | grep Serial | awk -F \" \" '{print $3}')\n\n# saame 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# \u00fchendame NFS installimisserveri\n\nesxcli storage nfs add -H is -s \/srv\/nfs_share -v nfsshare1\n\n# kopeerime ajutised ssh s\u00e4tted, et kasutada ssh-klienti\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# kopeerime ovftool, et hetkel VM-i juurutada, v\u00f5ib meie jaoks ka hiljem vajalikuks osutuda\n\ncp -R \/vmfs\/volumes\/nfsshare1\/ovftool \/vmfs\/volumes\/datastore1\/\n\n# juurutame VM-i\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# saame rea seadeid meie serveri jaoks\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# genereerime v\u00f5rgu seadistusskripti\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# m\u00e4\u00e4rame parameetri guestinfo.esxihost.id, m\u00e4\u00e4rame seal seerianumbri\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# v\u00e4rskendame teavet andmebaasis\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# taastame SSH s\u00e4tted\n\nrm -rf \/etc\/ssh\nmv \/etc\/ssh.tmp \/etc\/ssh\n\n# seadistame v\u00f5rgu ja taask\u00e4ivitame\n\nesxcli system hostname set --fqdn=esx-${G_NICK}.x5.ru\n\/vmfs\/volumes\/datastore1\/netconf.sh\nreboot\n<\/code><\/pre>\n<p>\nSel hetkel on h\u00fcperviisor installitud ja seadistatud, virtuaalmasinad on kopeeritud.<\/p>\n<p>Kuidas n\u00fc\u00fcd virtuaalmasinaid seadistada?<\/p>\n<p>Me schimitime veidi: installimise ajal m\u00e4\u00e4rasime parameetri guestinfo.esxihost.id = \"$SYSSN\" failis VM1.vmx, m\u00e4\u00e4rasime seal f\u00fc\u00fcsilise serveri seerianumbri.<\/p>\n<p>N\u00fc\u00fcd, p\u00e4rast virtuaalmasina k\u00e4ivitamist (vmware-tools pakett installitud), saab sellele parameetrile juurde p\u00e4\u00e4seda:<\/p>\n<pre><code class=\"plaintext\">ESXI_SN=$(vmtoolsd --cmd \"info-get guestinfo.esxihost.id\")<\/code><\/pre>\n<p>\nSee, the VM will be able to identify itself (it knows the serial number of the physical host), make a request to the install server's database, and retrieve the parameters that need to be configured. All this is wrapped in a script that should be automatically run at the start of the guestos VM (but only once: RunOnce).<\/p>\n<p><b>N\u00fc\u00fcd teame, kuidas:<\/p>\n<ul>\n<li>serverit PXE kaudu k\u00e4ivitada;<\/li>\n<li>edastada juhtimine meie skriptile;<\/li>\n<li>tuvastada server, mida valmistada, seerianumbri kaudu;<\/li>\n<li>configure the server with the necessary utilities;<\/li>\n<li>transfer settings to the install server's database using the client part;<\/li>\n<li>configure different types of software, including deploying the ESXi hypervisor and configuring virtual machines (and do it all automatically).<\/li>\n<\/ul>\n<p>\nSelgitasime, kuidas:<\/p>\n<ul>\n<li>installitav server saab vajalikud seadistused andmebaasist;<\/li>\n<li>kogu ettevalmistuse edenemine fikseeritakse andmebaasis (logid, s\u00fcndmused, etappide lipud).<\/li>\n<\/ul>\n<p><\/b><br \/>\n<u><b>Conclusion:<\/b><\/u><\/p>\n<p>I believe the uniqueness of this solution lies in its flexibility, simplicity, capabilities, and versatility.<\/p>\n<p>Please write in the comments what you think.<br \/>\n<br \/>Allikas: <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\/et\/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=\"et_EE\" \/>\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\/et\/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\udd47 Bare-Metal Provisioning on your own, or Automatic server setup from scratch | ProHoster","description":"Hello, I am Denis, and one of my areas of activity is the development of infrastructure solutions at X5.","canonical_url":"https:\/\/prohoster.info\/et\/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":"et_EE","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\/et\/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\/et\/wp-json\/wp\/v2\/posts\/74905","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/comments?post=74905"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/74905\/revisions"}],"predecessor-version":[{"id":158713,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/posts\/74905\/revisions\/158713"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media\/74906"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/media?parent=74905"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/categories?post=74905"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/et\/wp-json\/wp\/v2\/tags?post=74905"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}