{"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\/pl\/blog\/administrirovanie\/bare-metal-provisioning-svoimi-rukami-ili-avtomaticheskaya-podgotovka-serverov-s-nulya","title":{"rendered":"Bare-Metal Provisioning z w\u0142asnej inicjatywy, czyli automatyczne przygotowanie serwer\u00f3w od podstaw","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Cze\u015b\u0107, nazywam si\u0119 Denis i jednym z moich obszar\u00f3w dzia\u0142alno\u015bci jest rozw\u00f3j rozwi\u0105za\u0144 infrastrukturalnych w X5. Dzi\u015b chcia\u0142bym podzieli\u0107 si\u0119 z Wami sposobem, w jaki mo\u017cna za pomoc\u0105 og\u00f3lnodost\u0119pnych narz\u0119dzi uruchomi\u0107 automatyczny system przygotowywania serwer\u00f3w. Moim zdaniem, to ciekawe, proste i elastyczne rozwi\u0105zanie.<\/p>\n<p><img decoding=\"async\" alt=\"Bare-Metal Provisioning z w\u0142asnej inicjatywy, czyli automatyczne przygotowanie serwer\u00f3w od podstaw\" 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 \/>\nPod przygotowaniem rozumie si\u0119: przekszta\u0142cenie nowego serwera z pude\u0142ka w w pe\u0142ni skonfigurowany serwer z systemem Linux lub z hyperwizorem ESXi (Windows w tym artykule nie jest omawiany). <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/pl\/server\/\"   title=\"serwer\u00f3w\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1469\">serwer\u00f3w<\/a> serwery \u2013 serwery, kt\u00f3re musz\u0105 by\u0107 skonfigurowane.<\/p>\n<p><b>Terminy<\/b>:<\/p>\n<ul>\n<li>serwer instalacyjny \u2013 g\u0142\u00f3wny serwer, kt\u00f3ry zapewnia ca\u0142y proces przygotowania przez sie\u0107.<\/li>\n<li>Po co potrzebna jest automatyzacja?<\/li>\n<\/ul>\n<p><\/p>\n<h3>Za\u0142\u00f3\u017cmy, \u017ce mamy zadanie: masowo przygotowywa\u0107 serwery od podstaw, w szczycie \u2013 30 dziennie. Serwery r\u00f3\u017cnych producent\u00f3w i modeli, mog\u0105 by\u0107 na nich instalowane r\u00f3\u017cne systemy operacyjne, mo\u017ce by\u0107 zainstalowany lub brakowa\u0107 hyperwizora.<\/h3>\n<p>\nJakie operacje wchodz\u0105 w sk\u0142ad procesu konfiguracji (bez automatyzacji):<\/p>\n<p>pod\u0142\u0105czy\u0107 klawiatur\u0119, mysz, monitor do serwera;<\/p>\n<ul>\n<li>skonfigurowa\u0107 BIOS, RAID, IPMI;<\/li>\n<li>zaktualizowa\u0107 firmware komponent\u00f3w;<\/li>\n<li>wdro\u017cy\u0107 obraz systemu plik\u00f3w (lub zainstalowa\u0107 hyperwizor i skopiowa\u0107 maszyny wirtualne);<\/li>\n<li>Uwaga. Alternatywnie, wdro\u017cenie systemu operacyjnego jest mo\u017cliwe poprzez instalacj\u0119 z plikiem odpowiedzi. Jednak nie b\u0119dzie to omawiane w artykule. Chocia\u017c poni\u017cej zobaczysz, \u017ce dodanie tej funkcji nie jest skomplikowane.<\/li>\n<\/ul>\n<p>\nskonfigurowa\u0107 parametry systemu operacyjnego (hostname, IP, itp.).<\/p>\n<ul>\n<li>W tym podej\u015bciu tak samo wykonywane s\u0105 ustawienia kolejno na ka\u017cdym serwerze. Efektywno\u015b\u0107 takiej pracy jest bardzo niska.<\/li>\n<\/ul>\n<p>\nIstota automatyzacji polega na wyeliminowaniu udzia\u0142u cz\u0142owieka w procesie przygotowania serwera. Tak bardzo, jak to mo\u017cliwe.<\/p>\n<p>Dzi\u0119ki automatyzacji skraca si\u0119 czas przestoju mi\u0119dzy operacjami, co pozwala na jednoczesne przygotowanie kilku serwer\u00f3w. Zmniejsza si\u0119 r\u00f3wnie\u017c znacznie prawdopodobie\u0144stwo wyst\u0105pienia b\u0142\u0119d\u00f3w z powodu czynnika ludzkiego. <\/p>\n<p>Jak przebiega automatyczna konfiguracja serwer\u00f3w?<\/p>\n<p><img decoding=\"async\" alt=\"Bare-Metal Provisioning z w\u0142asnej inicjatywy, czyli automatyczne przygotowanie serwer\u00f3w od podstaw\" src=\"\/wp-content\/uploads\/2020\/03\/8c196058891a7f41c5b93e7f6721480b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Zajmijmy si\u0119 szczeg\u00f3\u0142owo wszystkimi etapami.<\/h3>\n<p>\nMasz serwer linuxowy, kt\u00f3ry u\u017cywasz jako PXE serwer instalacyjny. Na nim zainstalowane i skonfigurowane s\u0105 us\u0142ugi: DHCP, TFTP.<\/p>\n<p>Zatem, uruchamiamy serwer (kt\u00f3ry ma by\u0107 skonfigurowany) przez PXE. Przypomnijmy sobie, jak to dzia\u0142a:<\/p>\n<p>Na serwerze wybrano bootowanie z sieci.<\/p>\n<ul>\n<li>Na serwerze wybrano bootowanie przez PXE.<\/li>\n<li>Serwer \u0142aduje PXE-ROM karty sieciowej i kontaktuje si\u0119 z serwerem instalacyjnym przez DHCP w celu uzyskania adresu sieciowego.<\/li>\n<li>Serwer instalacyjny DHCP wydaje adres oraz instrukcje dotycz\u0105ce dalszego \u0142adowania przez PXE.<\/li>\n<li>Serwer \u0142aduje program rozruchowy z serwera instalacyjnego przez PXE, a dalsze \u0142adowanie przebiega zgodnie z plikiem konfiguracyjnym PXE.<\/li>\n<li>Zachodzi \u0142adowanie na podstawie otrzymanych parametr\u00f3w (j\u0105dro, initramfs, punkty montowania, obraz squashfs i inne).<\/li>\n<\/ul>\n<p>\nUwaga. W artykule opisano \u0142adowanie przez PXE w trybie BIOS. Obecnie producenci aktywnie wdra\u017caj\u0105 tryb rozruchu UEFI. R\u00f3\u017cnica dla PXE b\u0119dzie polega\u0107 na konfiguracji serwera DHCP oraz obecno\u015bci dodatkowego programu rozruchowego.<\/p>\n<p>Rozwa\u017cmy przyk\u0142ad konfiguracji serwera PXE (menu pxelinux).<\/p>\n<p>Plik 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 \/\/ menu domy\u015blne\n\tMENU LABEL Linux Scripting Toolkits\n\tMENU default\n\tKERNEL menu.c32\n\tAPPEND pxelinux.cfg\/toolkit \/\/ przej\u015bcie do nast\u0119pnego menu<\/code><\/pre>\n<p>\nPlik pxelinux.cfg\/toolkit:<\/p>\n<pre><code class=\"plaintext\">prompt 0\ntimeout 100\nmenu title X5 PXE Boot Menu\nlabel mainmenu\n    menu label ^Powr\u00f3t do menu g\u0142\u00f3wnego\n    kernel menu.c32\n    append pxelinux.cfg\/default\nlabel x5toolkit-auto \/\/ domy\u015blnie \u2014 tryb automatyczny\n        menu label x5 toolkit autoinstalacja\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 \/\/ do debugowania - konsola\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>\nJ\u0105dro i initramfs na tym etapie to tymczasowy obraz linux, przy pomocy kt\u00f3rego nast\u0105pi g\u0142\u00f3wne przygotowanie i konfiguracja serwera.<\/p>\n<p>Jak wida\u0107, program rozruchowy przekazuje wiele parametr\u00f3w do j\u0105dra. Cz\u0119\u015b\u0107 tych parametr\u00f3w jest wykorzystywana przez samo j\u0105dro, a niekt\u00f3re mo\u017cemy wykorzysta\u0107 do w\u0142asnych cel\u00f3w. O tym b\u0119dzie mowa p\u00f3\u017aniej, a na razie mo\u017cna zapami\u0119ta\u0107, \u017ce wszystkie przekazane parametry b\u0119d\u0105 dost\u0119pne w tymczasowym obrazie linux przez \/proc\/cmdline.<\/p>\n<p>Sk\u0105d wzi\u0105\u0107 j\u0105dro i initramfs?<br \/>\nMo\u017cna wybra\u0107 dowolny dystrybucj\u0119 linuxa. Na co zwracamy uwag\u0119 przy wyborze:<\/p>\n<ul>\n<li>obraz rozruchowy musi by\u0107 uniwersalny (obecno\u015b\u0107 sterownik\u00f3w, mo\u017cliwo\u015b\u0107 instalacji dodatkowych narz\u0119dzi);<\/li>\n<li>prawdopodobnie b\u0119dzie potrzeba dostosowa\u0107 initramfs.<\/li>\n<\/ul>\n<p>\nJak to zosta\u0142o zrealizowane w naszym rozwi\u0105zaniu dla X5? Jako baz\u0119 wybrano CentOS 7. Wykonamy nast\u0119puj\u0105cy myk: przygotujemy przysz\u0142\u0105 struktur\u0119 obrazu, spakujemy j\u0105 w archiwum i stworzymy initramfs, w kt\u00f3rego wn\u0119trzu b\u0119dzie nasze archiwum systemu plik\u00f3w. Podczas \u0142adowania obrazu archiwum zostanie rozpakowane do tworzonego dzia\u0142u tmpfs. W ten spos\u00f3b uzyskamy minimalny, ale pe\u0142noprawny obraz live linux z wszystkimi niezb\u0119dnymi narz\u0119dziami, sk\u0142adaj\u0105cy si\u0119 z zaledwie dw\u00f3ch plik\u00f3w: vmkernel i 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>\nZatem wskazali\u015bmy j\u0105dro i initramfs, kt\u00f3re maj\u0105 by\u0107 za\u0142adowane. W rezultacie na tym etapie, \u0142aduj\u0105c tymczasowy obraz linux przez PXE, otrzymamy konsol\u0119 OS.<\/p>\n<p>\u015awietnie, ale teraz musimy przekaza\u0107 kontrol\u0119 naszej 'automatyzacji'.<\/p>\n<p>Mo\u017cna to zrobi\u0107 w ten spos\u00f3b.<\/p>\n<p>Za\u0142\u00f3\u017cmy, \u017ce po za\u0142adowaniu obrazu planujemy przekaza\u0107 kontrol\u0119 do skryptu mount.sh.<br \/>\nW\u0142\u0105czymy skrypt mount.sh do automatycznego uruchamiania. W tym celu nale\u017cy zmodyfikowa\u0107 initramfs:<\/p>\n<ul>\n<li>rozpakowa\u0107 initramfs (je\u015bli u\u017cywamy powy\u017cej wymienionego wariantu initramfs, to nie jest wymagane)<\/li>\n<li>doda\u0107 do autostartu kod, kt\u00f3ry b\u0119dzie analizowa\u0142 przekazywane parametry przez \/proc\/cmdline i przekazywa\u0142 kontrol\u0119 dalej;<\/li>\n<li>spakowa\u0107 initramfs.<\/li>\n<\/ul>\n<p>\nUwaga. W przypadku narz\u0119dzia X5 kontrola \u0142adowania jest przekazywana do skryptu <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>Zatem \u0142adowany jest obraz, w kt\u00f3rym w autostarcie uruchamiany jest skrypt mount.sh. Nast\u0119pnie skrypt mount.sh w trakcie wykonywania analizuje przekazane parametry (script_cmd=) i uruchamia odpowiedni program\/skrypt.<\/p>\n<p>etykieta toolkit-<b>auto<\/b><br \/>\nj\u0105dro \u2026<br \/>\nza\u0142\u0105cz \u2026 nfs_toolkit_script=scripts\/mount.sh <b>script_cmd=master-install.sh<br \/>\n<\/b><br \/>\netykieta toolkit-<b>shell<\/b><br \/>\nj\u0105dro \u2026<br \/>\nza\u0142\u0105cz \u2026 nfs_toolkit_script=scripts\/mount.sh <b>script_cmd=\/bin\/bash<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Bare-Metal Provisioning z w\u0142asnej inicjatywy, czyli automatyczne przygotowanie serwer\u00f3w od podstaw\" src=\"\/wp-content\/uploads\/2020\/03\/943eeb64fbf746feab5119ead5b1ca66.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nTutaj po lewej stronie \u2014 menu PXE, po prawej \u2013 schemat przekazywania kontroli.<\/p>\n<p>Rozwi\u0105za\u0142em problem z przekazywaniem kontroli. W zale\u017cno\u015bci od wyboru menu PXE uruchamiany jest albo skrypt auto-config, albo konsola do debugowania.<\/p>\n<p>W przypadku automatycznej konfiguracji montowane s\u0105 niezb\u0119dne katalogi z serwera instalacyjnego, kt\u00f3re zawieraj\u0105:<\/p>\n<ul>\n<li>skrypty;<\/li>\n<li>zachowane szablony BIOS\/UEFI r\u00f3\u017cnych serwer\u00f3w;<\/li>\n<li>firmware;<\/li>\n<li>narz\u0119dzia dla serwer\u00f3w;<\/li>\n<li>logi.<\/li>\n<\/ul>\n<p>\nNast\u0119pnie skrypt mount.sh przekazuje kontrol\u0119 do skryptu master-install.sh z katalogu ze skryptami.<\/p>\n<p>Drzewo skrypt\u00f3w (kolejno\u015b\u0107 ich uruchamiania) wygl\u0105da mniej wi\u0119cej tak:<\/p>\n<ul>\n<li>master-install<\/li>\n<li>sharefunctions (funkcje wsp\u00f3lne)<\/li>\n<li>info (wy\u015bwietlanie informacji)<\/li>\n<li>models (ustawianie parametr\u00f3w instalacji na podstawie modelu serwera)<\/li>\n<li>prepare_utils (instalacja niezb\u0119dnych narz\u0119dzi)<\/li>\n<li>fwupdate (aktualizacja firmware'u)<\/li>\n<li>diag (elementarna diagnoza)<\/li>\n<li>biosconf (konfiguracja BIOS\/UEFI)<\/li>\n<li>clockfix (ustawienie czasu na p\u0142ycie g\u0142\u00f3wnej)<\/li>\n<li>srmconf (konfiguracja interfejsu zdalnego)<\/li>\n<li>raidconf (konfiguracja wolumen\u00f3w logicznych)<\/li>\n<\/ul>\n<p>\njeden z:<\/p>\n<ul>\n<li>preinstall (przekazanie kontroli do instalatora systemu operacyjnego lub hypervisora, np. ESXi)<\/li>\n<li>merged-install (bezpo\u015bredni start rozpakowywania obrazu)<\/li>\n<\/ul>\n<p>\n<b>Teraz wiemy:<\/p>\n<ul>\n<li>jak uruchomi\u0107 serwer przez PXE;<\/li>\n<li>jak przekaza\u0107 kontrol\u0119 do w\u0142asnego skryptu.<\/li>\n<\/ul>\n<p><\/b><br \/>\nKontynuujemy. Pojawiaj\u0105 si\u0119 nast\u0119puj\u0105ce pytania:<\/p>\n<ul>\n<li>Jak zidentyfikowa\u0107 serwer, kt\u00f3ry przygotowujemy?<\/li>\n<li>Jakie narz\u0119dzia i jak skonfigurowa\u0107 serwer?<\/li>\n<li>Jak uzyska\u0107 ustawienia dla konkretnego serwera?<\/li>\n<\/ul>\n<p><\/p>\n<h3>Jak zidentyfikowa\u0107 serwer, kt\u00f3ry przygotowujemy?<\/h3>\n<p>\nTo proste \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>\nZnajdziesz tutaj wszystko, co potrzebne: producenta, model i numer seryjny. Je\u015bli nie jeste\u015b pewien, czy te informacje s\u0105 dost\u0119pne na wszystkich serwerach, mog\u0105 one by\u0107 zidentyfikowane po adresie MAC. Mo\u017cesz tak\u017ce u\u017cy\u0107 obu metod jednocze\u015bnie, je\u017celi producenci serwer\u00f3w s\u0105 r\u00f3\u017cni i niekt\u00f3re modele nie maj\u0105 informacji o numerze seryjnym.<\/p>\n<p>Na podstawie uzyskanych informacji montowane s\u0105 sieciowe foldery z serwera instalacyjnego i \u0142adowane wszystko, co potrzebne (narz\u0119dzia, firmware itd.).<\/p>\n<h3>Jakie narz\u0119dzia i jak skonfigurowa\u0107 serwer?<\/h3>\n<p>\nPodam narz\u0119dzia dla Linuxa dla niekt\u00f3rych producent\u00f3w. Wszystkie narz\u0119dzia s\u0105 dost\u0119pne na oficjalnych stronach producent\u00f3w.<\/p>\n<p><img decoding=\"async\" alt=\"Bare-Metal Provisioning z w\u0142asnej inicjatywy, czyli automatyczne przygotowanie serwer\u00f3w od podstaw\" src=\"\/wp-content\/uploads\/2020\/03\/fab53d1fa6e9a222ec69248439551ad7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nZ firmwarem, my\u015bl\u0119, \u017ce wszystko jest jasne. Zazwyczaj s\u0105 one dostarczane w postaci spakowanych plik\u00f3w wykonywalnych. Plik wykonywalny kontroluje proces aktualizacji firmware'u i informuje o kodzie zwrotnym.<\/p>\n<p>BIOS i IPMI zazwyczaj konfiguruje si\u0119 za pomoc\u0105 szablon\u00f3w. W razie potrzeby szablon mo\u017cna edytowa\u0107 tu\u017c przed samym uruchomieniem.<\/p>\n<p>Narz\u0119dzia RAID niekt\u00f3rych producent\u00f3w r\u00f3wnie\u017c mog\u0105 by\u0107 konfigurowane za pomoc\u0105 szablon\u00f3w. Je\u015bli nie jest to mo\u017cliwe, b\u0119dziesz musia\u0142 napisa\u0107 skrypt konfiguracyjny.<\/p>\n<p>Kolejno\u015b\u0107 konfiguracji RAID najcz\u0119\u015bciej jest nast\u0119puj\u0105ca:<\/p>\n<ul>\n<li>Zbieramy aktualn\u0105 konfiguracj\u0119.<\/li>\n<li>Je\u015bli ju\u017c istniej\u0105 wolumeny logiczne \u2013 usuwamy je.<\/li>\n<li>Sprawdzamy, jakie fizyczne dyski s\u0105 obecne i ile ich jest.<\/li>\n<li>Tworzymy nowy wolumen logiczny. Przerywamy proces w przypadku b\u0142\u0119du.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Jak uzyska\u0107 ustawienia dla konkretnego serwera?<\/h3>\n<p>\nZak\u0142adaj\u0105c, \u017ce ustawienia wszystkich serwer\u00f3w b\u0119d\u0105 przechowywane na serwerze instalacyjnym. W takim przypadku, aby odpowiedzie\u0107 na nasze pytanie, najpierw musimy rozwi\u0105za\u0107, w jaki spos\u00f3b przekaza\u0107 ustawienia do serwera instalacyjnego.<\/p>\n<p>Na pocz\u0105tek mo\u017cna spokojnie korzysta\u0107 z plik\u00f3w tekstowych. (W przysz\u0142o\u015bci mo\u017cna u\u017cywa\u0107 pliku tekstowego jako awaryjnego sposobu przesy\u0142ania ustawie\u0144). <\/p>\n<p>Mo\u017cna \"udost\u0119pni\u0107\" plik tekstowy na serwerze instalacyjnym. I doda\u0107 jego montowanie w skrypcie mount.sh.<\/p>\n<p>Linie b\u0119d\u0105 mia\u0142y na przyk\u0142ad taki format:<\/p>\n<p><\/p>\n<p>Te linie b\u0119d\u0105 przesy\u0142ane do pliku przez in\u017cyniera z jego roboczego komputera. A nast\u0119pnie, podczas konfiguracji serwera, parametry dla konkretnego serwera b\u0119d\u0105 odczytywane z pliku.<\/p>\n<p>Jednak w d\u0142u\u017cszej perspektywie lepiej jest wykorzysta\u0107 baz\u0119 danych do przechowywania ustawie\u0144, stan\u00f3w i dziennik\u00f3w instalacji serwer\u00f3w.<\/p>\n<p>Oczywi\u015bcie, sama baza danych to za ma\u0142o, i b\u0119dzie trzeba stworzy\u0107 cz\u0119\u015b\u0107 klienck\u0105, dzi\u0119ki kt\u00f3rej b\u0119d\u0105 przesy\u0142ane ustawienia do bazy. Realizacja tego jest trudniejsza w por\u00f3wnaniu z plikiem tekstowym, ale tak naprawd\u0119 wszystko nie jest takie trudne, jak si\u0119 wydaje. Minimaln\u0105 wersj\u0119 klienta, kt\u00f3ra b\u0119dzie po prostu przesy\u0142a\u0107 dane do bazy, mo\u017cna spokojnie napisa\u0107 samodzielnie. A w przysz\u0142o\u015bci klienta mo\u017cna b\u0119dzie rozwija\u0107 w trybie swobodnym (raporty, drukowanie etykiet, wysy\u0142anie powiadomie\u0144 i inne, co tylko przyjdzie do g\u0142owy).<\/p>\n<p>Przesy\u0142aj\u0105c odpowiednie zapytanie do bazy i podaj\u0105c numer seryjny serwera, uzyskamy niezb\u0119dne parametry do konfiguracji serwera.<\/p>\n<p>Ponadto, nie b\u0119dziemy musieli wymy\u015bla\u0107 blokad dla jednoczesnego dost\u0119pu, jak w przypadku pliku tekstowego.<\/p>\n<p>Dziennik konfiguracji mo\u017cemy na wszystkich etapach zapisywa\u0107 w bazie danych i proces instalacji kontrolowa\u0107 za pomoc\u0105 zdarze\u0144 i flag etap\u00f3w przygotowania.<\/p>\n<p><b>Teraz wiemy, jak:<\/p>\n<ul>\n<li>za\u0142adowa\u0107 serwer za pomoc\u0105 PXE;<\/li>\n<li>przekaza\u0107 kontrol\u0119 naszemu skryptowi;<\/li>\n<li>zidentyfikowa\u0107 serwer, kt\u00f3ry nale\u017cy przygotowa\u0107, po numerze seryjnym;<\/li>\n<li>skonfigurowa\u0107 serwer odpowiednimi narz\u0119dziami;<\/li>\n<li>przesy\u0142a\u0107 ustawienia do bazy danych serwera instalacyjnego za pomoc\u0105 cz\u0119\u015bci klienckiej.<\/li>\n<\/ul>\n<p>\nUstalili\u015bmy, w jaki spos\u00f3b:<\/p>\n<ul>\n<li>instalowany serwer otrzymuje niezb\u0119dne ustawienia z bazy danych;<\/li>\n<li>ca\u0142y post\u0119p przygotowania jest rejestrowany w bazie danych (logi, zdarzenia, flagi etap\u00f3w).<\/li>\n<\/ul>\n<p><\/b><\/p>\n<h3>Co z r\u00f3\u017cnymi typami instalowanego oprogramowania? Jak zainstalowa\u0107 hypervisor, skopiowa\u0107 VM i skonfigurowa\u0107 to wszystko?<\/h3>\n<p>\nW przypadku wdra\u017cania obrazu systemu plik\u00f3w (linux) na sprz\u0119cie wszystko jest do\u015b\u0107 proste:<\/p>\n<ul>\n<li>Po skonfigurowaniu wszystkich komponent\u00f3w serwera wdra\u017camy obraz.<\/li>\n<li>Instalujemy bootloader grub.<\/li>\n<li>Tworzymy chroot i konfigurujemy wszystko, co potrzebne.<\/li>\n<\/ul>\n<p>\n<b>Jak przekaza\u0107 sterowanie instalatorowi OS (na przyk\u0142adzie ESXi).<\/b><\/p>\n<ul>\n<li>Organizujemy przekazanie sterowania z naszego skryptu do instalatora hipernadzorcy za pomoc\u0105 pliku odpowiedzi automatycznej (kickstart):<\/li>\n<li>Usuwamy obecne partycje na dysku.<\/li>\n<li>Tworzymy partycj\u0119 o rozmiarze 500 MB.<\/li>\n<li>Oznaczamy j\u0105 jako startow\u0105.<\/li>\n<li>Formatujemy w FAT32.<\/li>\n<li>Kopiujemy na ni\u0105 pliki instalacyjne ESXi do katalogu g\u0142\u00f3wnego.<\/li>\n<li>Instalujemy syslinux.<\/li>\n<li>Kopiujemy syslinux.cfg do \/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>Kopiujemy mboot.c32 do \/syslinux.<\/li>\n<li>W boot.cfg powinno by\u0107 kernelopt=ks=ftp:\/\/\/ks_esxi.cfg<\/li>\n<li>Restartujemy serwer.<\/li>\n<\/ul>\n<p>\nPo restarcie serwera z jego dysku twardego uruchomi si\u0119 instalator ESXi. Wszystkie potrzebne pliki instalatora za\u0142aduj\u0105 si\u0119 do pami\u0119ci, a nast\u0119pnie rozpocznie si\u0119 instalacja ESXi zgodnie z podanym plikiem odpowiedzi automatycznej.<\/p>\n<p>Przytocz\u0119 tutaj kilka linii z pliku odpowiedzi automatycznej ks_esxi.cfg:<\/p>\n<pre><code class=\"plaintext\">%firstboot --interpreter=busybox\n\u2026\n# pobieramy numer seryjny\n\nSYSSN=$(esxcli hardware platform get | grep Serial | awk -F \" \" '{print $3}')\n\n# pobieramy 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# \u0142\u0105czymy si\u0119 z serwerem instalacyjnym NFS\n\nesxcli storage nfs add -H is -s \/srv\/nfs_share -v nfsshare1\n\n# kopiujemy tymczasowe ustawienia ssh, do u\u017cycia z klientem ssh\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# kopiujemy ovftool, do wdro\u017cenia VM teraz, mo\u017ce si\u0119 przyda\u0107 p\u00f3\u017aniej\n\ncp -R \/vmfs\/volumes\/nfsshare1\/ovftool \/vmfs\/volumes\/datastore1\/\n\n# wdra\u017camy 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# pobieramy lini\u0119 z ustawieniami naszego serwera\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# generujemy skrypt konfiguracji sieci\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# ustawiamy parametr guestinfo.esxihost.id, wskazujemy w nim numer seryjny\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# aktualizujemy informacje w bazie\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# przywracamy ustawienia SSH\n\nrm -rf \/etc\/ssh\nmv \/etc\/ssh.tmp \/etc\/ssh\n\n# konfigurujemy sie\u0107 i restartujemy\n\nesxcli system hostname set --fqdn=esx-${G_NICK}.x5.ru\n\/vmfs\/volumes\/datastore1\/netconf.sh\nreboot\n<\/code><\/pre>\n<p>\nNa tym etapie hipernawigator zosta\u0142 zainstalowany i skonfigurowany, a maszyny wirtualne zosta\u0142y skopiowane.<\/p>\n<p>Jak teraz skonfigurowa\u0107 maszyny wirtualne?<\/p>\n<p>Troch\u0119 si\u0119 oszukali\u015bmy: podczas instalacji ustawili\u015bmy parametr guestinfo.esxihost.id = \"$SYSSN\" w pliku VM1.vmx, wskazuj\u0105c w nim numer seryjny fizycznego serwera.<\/p>\n<p>Teraz po uruchomieniu maszyna wirtualna (z zainstalowanym pakietem vmware-tools) mo\u017ce uzyska\u0107 dost\u0119p do tego parametru:<\/p>\n<pre><code class=\"plaintext\">ESXI_SN=$(vmtoolsd --cmd \"info-get guestinfo.esxihost.id\")<\/code><\/pre>\n<p>\nTo znaczy, VM b\u0119dzie w stanie zidentyfikowa\u0107 si\u0119 (zna numer seryjny fizycznego hosta), z\u0142o\u017cy\u0107 zapytanie do bazy danych instalacyjnego serwera i uzyska\u0107 parametry, kt\u00f3re nale\u017cy skonfigurowa\u0107. Wszystko to jest realizowane w skrypcie, kt\u00f3ry powinien by\u0107 uruchamiany automatycznie przy starcie guestos vm (jednak tylko raz: RunOnce).<\/p>\n<p><b>Teraz wiemy, jak:<\/p>\n<ul>\n<li>za\u0142adowa\u0107 serwer za pomoc\u0105 PXE;<\/li>\n<li>przekaza\u0107 kontrol\u0119 naszemu skryptowi;<\/li>\n<li>zidentyfikowa\u0107 serwer, kt\u00f3ry nale\u017cy przygotowa\u0107, po numerze seryjnym;<\/li>\n<li>konfigurowa\u0107 serwer przy u\u017cyciu odpowiednich narz\u0119dzi;<\/li>\n<li>przekazywa\u0107 ustawienia do bazy danych instalacyjnego serwera za pomoc\u0105 cz\u0119\u015bci klienckiej;<\/li>\n<li>konfigurowa\u0107 r\u00f3\u017cne typy oprogramowania, w tym rozwija\u0107 hypervisor esxi i konfigurowa\u0107 maszyny wirtualne (wszystko automatycznie).<\/li>\n<\/ul>\n<p>\nUstalili\u015bmy, w jaki spos\u00f3b:<\/p>\n<ul>\n<li>instalowany serwer otrzymuje niezb\u0119dne ustawienia z bazy danych;<\/li>\n<li>ca\u0142y post\u0119p przygotowania jest rejestrowany w bazie danych (logi, zdarzenia, flagi etap\u00f3w).<\/li>\n<\/ul>\n<p><\/b><br \/>\n<u><b>Podsumowanie:<\/b><\/u><\/p>\n<p>S\u0105dz\u0119, \u017ce wyj\u0105tkowo\u015b\u0107 tego rozwi\u0105zania le\u017cy w jego elastyczno\u015bci, prostocie, mo\u017cliwo\u015bciach i uniwersalno\u015bci.<\/p>\n<p>Prosz\u0119, napisz w komentarzach, co o tym my\u015blisz.<br \/>\n<br \/>\u0179r\u00f3d\u0142o: <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\/pl\/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=\"pl_PL\" \/>\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\/pl\/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\udd47Provisioning Bare-Metal w\u0142asnymi r\u0119kami, czyli automatyczne przygotowanie serwer\u00f3w od zera | ProHoster","description":"Cze\u015b\u0107, jestem Denis i jednym z moich obszar\u00f3w dzia\u0142alno\u015bci jest rozw\u00f3j rozwi\u0105za\u0144 infrastrukturalnych w X5.","canonical_url":"https:\/\/prohoster.info\/pl\/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":"pl_PL","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\/pl\/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\/pl\/wp-json\/wp\/v2\/posts\/74905","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=74905"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/74905\/revisions"}],"predecessor-version":[{"id":158713,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/74905\/revisions\/158713"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/74906"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=74905"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=74905"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=74905"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}