{"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\/it\/blog\/administrirovanie\/bare-metal-provisioning-svoimi-rukami-ili-avtomaticheskaya-podgotovka-serverov-s-nulya","title":{"rendered":"Bare-Metal Provisioning fai da te, o Preparazione automatica dei server da zero","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ciao, sono Denis e uno dei miei ambiti di attivit\u00e0 \u00e8 lo sviluppo di soluzioni infrastrutturali in X5. Oggi vorrei condividere con voi come \u00e8 possibile implementare un sistema automatico per la preparazione dei server utilizzando strumenti pubblici. A mio avviso, si tratta di una soluzione interessante, semplice e flessibile.<\/p>\n<p><img decoding=\"async\" alt=\"Bare-Metal Provisioning fai da te, o Preparazione automatica dei server da zero\" 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 \/>\nPer preparazione si intende: trasformare un nuovo server 'fuori dagli schemi' in un server completamente configurato con sistema operativo Linux o con hypervisor ESXi (rilascio <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/it\/server\/\"   title=\"server\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1469\">server<\/a> Windows non verr\u00e0 discusso in questo articolo).<\/p>\n<p><b>Terminologia<\/b>:<\/p>\n<ul>\n<li>server \u2013 server che devono essere configurati.<\/li>\n<li>install-server \u2013 server principale che gestisce l'intero processo di preparazione tramite rete.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Perch\u00e9 \u00e8 necessaria l'automazione?<\/h3>\n<p>\nSupponiamo che ci sia l'esigenza di preparare in massa i server da zero, con un picco di 30 al giorno. Server di diversi produttori e modelli, su di essi possono essere installati diversi sistemi operativi, e potrebbe esserci o meno un hypervisor.<\/p>\n<p>Quali operazioni rientrano nel processo di configurazione (senza automazione):<\/p>\n<ul>\n<li>collegare tastiera, mouse, monitor al server;<\/li>\n<li>configurare BIOS, RAID, IPMI;<\/li>\n<li>aggiornare i firmware dei componenti;<\/li>\n<li>espandere l'immagine del file system (oppure installare un hypervisor e copiare le macchine virtuali);<\/li>\n<\/ul>\n<p>\nNota. In alternativa, il deploy del sistema operativo \u00e8 possibile tramite l'installazione con un file di risposta automatica. Ma questo non sar\u00e0 trattato nell'articolo. Tuttavia, come vedrete pi\u00f9 avanti, aggiungere questa funzionalit\u00e0 non \u00e8 complicato.<\/p>\n<ul>\n<li>configurare i parametri del sistema operativo (hostname, IP, altro).<\/li>\n<\/ul>\n<p>\nCon questo approccio, vengono eseguite impostazioni identiche in modo sequenziale su ogni server. L'efficacia di questo lavoro \u00e8 molto bassa.<\/p>\n<p>L'essenza dell'automazione consiste nell'escludere il coinvolgimento umano dal processo di preparazione del server. Il pi\u00f9 possibile. <\/p>\n<p>Grazie all'automazione, si riduce il tempo di inattivit\u00e0 tra le operazioni e si ha la possibilit\u00e0 di preparare pi\u00f9 server contemporaneamente. Inoltre, si riduce significativamente la probabilit\u00e0 di errori a causa del fattore umano.<\/p>\n<p><img decoding=\"async\" alt=\"Bare-Metal Provisioning fai da te, o Preparazione automatica dei server da zero\" src=\"\/wp-content\/uploads\/2020\/03\/8c196058891a7f41c5b93e7f6721480b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Come avviene la configurazione automatica dei server?<\/h3>\n<p>\nAnalizziamo tutte le fasi in dettaglio.<\/p>\n<p>Hai un server linux che utilizzi come server di installazione PXE. Su di esso sono installati e configurati i servizi: DHCP, TFTP.<\/p>\n<p>Quindi, avviamo il server (quello da configurare) tramite PXE. Ricordiamo come funziona:<\/p>\n<ul>\n<li>\u00c8 stata selezionata l'avvio di rete sul server.<\/li>\n<li>Il server carica il PXE-ROM della scheda di rete e si rivolge al server di installazione tramite DHCP per ottenere un indirizzo di rete.<\/li>\n<li>Il server di installazione DHCP fornisce un indirizzo e istruzioni per il successivo avvio tramite PXE.<\/li>\n<li>Il server carica il bootloader di rete dal server di installazione tramite PXE, e il successivo caricamento avviene secondo il file di configurazione PXE.<\/li>\n<li>Avviene il caricamento basato sui parametri ricevuti (kernel, initramfs, punti di montaggio, immagine squashfs e altro).<\/li>\n<\/ul>\n<p>\nNota. L'articolo descrive l'avvio tramite PXE in modalit\u00e0 BIOS. Attualmente, i produttori stanno adottando attivamente la modalit\u00e0 di avvio UEFI. Per PXE la differenza sar\u00e0 nella configurazione del server DHCP e nella presenza di un bootloader aggiuntivo.<\/p>\n<p>Consideriamo un esempio di configurazione del server PXE (menu pxelinux).<\/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 \/\/ menu predefinito\n\tMENU LABEL Linux Scripting Toolkits\n\tMENU default\n\tKERNEL menu.c32\n\tAPPEND pxelinux.cfg\/toolkit \/\/ passaggio al menu successivo<\/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 ^Torna al Menu Principale\n    kernel menu.c32\n    append pxelinux.cfg\/default\nlabel x5toolkit-auto \/\/ predefinito \u2014 modalit\u00e0 automatica\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=\u201d\u2026\"\nlabel x5toolkit-shell \/\/ per debug - 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=\u201d\u2026\u201d<\/code><\/pre>\n<p>\nIl kernel e l'initramfs in questa fase sono un'immagine linux intermedia, grazie alla quale avverr\u00e0 la preparazione e configurazione principale del server.<\/p>\n<p>Come potete vedere, il bootloader trasmette molti parametri al kernel. Alcuni di questi parametri sono utilizzati dal kernel stesso. Altri possono essere utilizzati per i nostri scopi. Di questo parleremo pi\u00f9 avanti, per ora basta ricordare che tutti i parametri trasmessi saranno disponibili nell'immagine linux intermedia attraverso \/proc\/cmdline.<\/p>\n<p>Dove possiamo trovarli, il kernel e l'initramfs?<br \/>\nSi pu\u00f2 scegliere qualsiasi distribuzione linux come base. A cosa dobbiamo prestare attenzione nella scelta:<\/p>\n<ul>\n<li>l'immagine di avvio deve essere universale (presenza di driver, possibilit\u00e0 di installare utilit\u00e0 aggiuntive);<\/li>\n<li>probabilmente sar\u00e0 necessario personalizzare initramfs.<\/li>\n<\/ul>\n<p>\nCome \u00e8 stato realizzato nella nostra soluzione per X5? Abbiamo scelto come base CentOS 7. Eseguiamo il seguente trucco: prepariamo la futura struttura dell'immagine, la imballiamo in un archivio e creiamo un initramfs, all'interno del quale ci sar\u00e0 il nostro archivio del file system. Al momento dell'avvio dell'immagine, l'archivio verr\u00e0 estratto nella partizione tmpfs creata. In questo modo otteniamo un'immagine live linux minimale ma completamente funzionale con tutte le utilit\u00e0 necessarie, composta da soli due file: vmkernel e 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>\nQuindi, abbiamo specificato il kernel e initramfs che devono essere caricati. Di conseguenza, in questa fase, caricando l'immagine intermedia linux tramite PXE, otteniamo la console del sistema operativo.<\/p>\n<p>Ottimo, ma ora dobbiamo trasferire il controllo alla nostra 'automazione'.<\/p>\n<p>Questo pu\u00f2 essere fatto in questo modo.<\/p>\n<p>Supponiamo che, dopo aver caricato l'immagine, intendiamo trasferire il controllo a uno script mount.sh.<br \/>\nIncluderemo lo script mount.sh nell'avvio automatico. Per questo sar\u00e0 necessario modificare initramfs:<\/p>\n<ul>\n<li>estrarre initramfs (se utilizziamo la variante di initramfs sopra citata, ci\u00f2 non \u00e8 necessario)<\/li>\n<li>inserire nel caricamento automatico il codice che analizzer\u00e0 i parametri trasmessi tramite \/proc\/cmdline e passer\u00e0 il controllo successivamente;<\/li>\n<li>comprimere l'initramfs.<\/li>\n<\/ul>\n<p>\nNota. Nel caso del toolkit X5, il controllo di avvio viene passato allo script <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>Quindi, viene caricato un'immagine in cui nel caricamento automatico avvia lo script mount.sh. Successivamente, lo script mount.sh durante l'esecuzione analizza i parametri trasmessi (script_cmd=) e avvia il programma\/script necessario.<\/p>\n<p>etichetta 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 \/>\netichetta 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 fai da te, o Preparazione automatica dei server da zero\" src=\"\/wp-content\/uploads\/2020\/03\/943eeb64fbf746feab5119ead5b1ca66.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nQui a sinistra si trova il menu PXE, a destra \u2013 schema di controllo del trasferimento.<\/p>\n<p>Abbiamo chiarito il trasferimento del controllo. A seconda della scelta nel menu PXE, viene avviato o lo script di auto-configurazione o la console di debug.<\/p>\n<p>Nel caso di configurazione automatica, vengono montati le directory necessarie dal server di installazione, che contengono:<\/p>\n<ul>\n<li>script;<\/li>\n<li>modelli BIOS\/UEFI salvati di vari server;<\/li>\n<li>firmware;<\/li>\n<li>utility per server;<\/li>\n<li>log.<\/li>\n<\/ul>\n<p>\nSuccessivamente, lo script mount.sh trasferisce il controllo allo script master-install.sh dalla directory degli script.<\/p>\n<p>L'albero degli script (l'ordine della loro esecuzione) appare all'incirca cos\u00ec:<\/p>\n<ul>\n<li>master-install<\/li>\n<li>sharefunctions (funzioni comuni)<\/li>\n<li>info (output informativo)<\/li>\n<li>modelli (installazione delle impostazioni di installazione in base al modello del server)<\/li>\n<li>prepare_utils (installazione degli strumenti necessari)<\/li>\n<li>fwupdate (aggiornamento del firmware)<\/li>\n<li>diag (diagnostica di base)<\/li>\n<li>biosconf (configurazione del BIOS\/UEFI)<\/li>\n<li>clockfix (impostazione dell'ora sulla scheda madre)<\/li>\n<li>srmconf (configurazione dell'interfaccia remota)<\/li>\n<li>raidconf (configurazione dei volumi logici)<\/li>\n<\/ul>\n<p>\nuno dei seguenti:<\/p>\n<ul>\n<li>preinstall (passaggio di controllo all'installatore del sistema operativo o del hypervisor, ad esempio ESXi)<\/li>\n<li>merged-install (avvio diretto dell'estrazione dell'immagine)<\/li>\n<\/ul>\n<p>\n<b>Ora sappiamo:<\/p>\n<ul>\n<li>come avviare il server tramite PXE;<\/li>\n<li>come passare il controllo a uno script personalizzato.<\/li>\n<\/ul>\n<p><\/b><br \/>\nContinuiamo. Si pongono le seguenti domande:<\/p>\n<ul>\n<li>Come identificare il server che stiamo preparando?<\/li>\n<li>Quali strumenti e come configurare il server?<\/li>\n<li>Come ottenere le impostazioni per un server specifico?<\/li>\n<\/ul>\n<p><\/p>\n<h3>Come identificare il server che stiamo preparando?<\/h3>\n<p>\n\u00c8 semplice \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>\nQui trovi tutto il necessario: fornitore, modello, numero di serie. Se non sei sicuro che queste informazioni siano disponibili su tutti i server, puoi identificarli tramite l'indirizzo MAC. Oppure entrambi i metodi contemporaneamente, se i fornitori dei server sono diversi e su alcuni modelli le informazioni sul numero di serie sono semplicemente assenti.<\/p>\n<p>Sulla base delle informazioni ricevute, vengono montate le cartelle di rete dai server di installazione e vengono caricati tutti i componenti necessari (utilit\u00e0, firmware e altro).<\/p>\n<h3>Quali strumenti e come configurare il server?<\/h3>\n<p>\nElenco delle utilit\u00e0 per Linux di alcuni produttori. Tutte le utilit\u00e0 sono disponibili sui siti ufficiali dei fornitori.<\/p>\n<p><img decoding=\"async\" alt=\"Bare-Metal Provisioning fai da te, o Preparazione automatica dei server da zero\" src=\"\/wp-content\/uploads\/2020\/03\/fab53d1fa6e9a222ec69248439551ad7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPer quanto riguarda i firmware, credo sia tutto chiaro. Di solito vengono forniti come file eseguibili confezionati. Il file eseguibile controlla il processo di aggiornamento del firmware e riporta il codice di ritorno.<\/p>\n<p>BIOS e IPMI di solito vengono configurati tramite modelli. Se necessario, il modello pu\u00f2 essere modificato prima del caricamento.<\/p>\n<p>Le utilit\u00e0 RAID di alcuni fornitori possono anche essere configurate tramite modelli. Se non \u00e8 cos\u00ec, sar\u00e0 necessario scrivere uno script di configurazione.<\/p>\n<p>Il processo di configurazione RAID \u00e8 di solito il seguente:<\/p>\n<ul>\n<li>Richiediamo la configurazione attuale.<\/li>\n<li>Se ci sono gi\u00e0 array logici, cancelliamoli.<\/li>\n<li>Verifichiamo quali dischi fisici sono presenti e quanti sono.<\/li>\n<li>Creiamo un nuovo array logico. Interrompiamo il processo in caso di errore.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Come ottenere le impostazioni per un server specifico?<\/h3>\n<p>\nSupponiamo che le configurazioni di tutti i server siano memorizzate sul server di installazione. In tal caso, per rispondere alla nostra domanda, dobbiamo prima decidere come trasmettere le configurazioni al server di installazione.<\/p>\n<p>Inizialmente, \u00e8 possibile utilizzare file di testo. (In futuro, si pu\u00f2 usare un file di testo come metodo di backup per la trasmissione delle configurazioni). <\/p>\n<p>Si pu\u00f2 'condividere' un file di testo sul server di installazione e aggiungere il suo montaggio nello script mount.sh.<\/p>\n<p>Le righe saranno, ad esempio, di questo tipo:<\/p>\n<p><\/p>\n<p>Queste righe saranno trasferite in un file dall'ingegnere dal suo computer di lavoro. Successivamente, durante la configurazione del server, i parametri per il server specifico saranno letti dal file.<\/p>\n<p>Tuttavia, in prospettiva, \u00e8 meglio utilizzare un database per memorizzare le configurazioni, gli stati e i registri delle installazioni dei server.<\/p>\n<p>Certamente, non si pu\u00f2 fare a meno di un database, e sar\u00e0 necessario creare una parte client attraverso la quale verranno trasmessi i parametri al database. Realizzare questo \u00e8 pi\u00f9 complesso rispetto a un file di testo, ma, in effetti, non \u00e8 cos\u00ec difficile come sembra. Una versione minima del client, che si limiter\u00e0 a trasmettere i dati al database, \u00e8 assolutamente fattibile da scrivere da soli. Inoltre, in seguito sar\u00e0 possibile migliorare il programma client a tempo libero (rapporti, stampa di etichette, invio di notifiche e altro che verr\u00e0 in mente).<\/p>\n<p>Effettuando una richiesta specifica al database e indicando il numero di serie del server, otterremo i parametri necessari per la configurazione del server.<\/p>\n<p>Inoltre, non sar\u00e0 necessario inventare blocchi per l'accesso simultaneo, come nel caso di un file di testo.<\/p>\n<p>Possiamo registrare il registro di configurazione nel database in tutte le fasi e controllare il processo di installazione attraverso eventi e flag delle fasi di preparazione.<\/p>\n<p><b>Ora sappiamo come:<\/p>\n<ul>\n<li>caricare il server tramite PXE;<\/li>\n<li>trasferire il controllo al nostro script;<\/li>\n<li>identificare il server da preparare tramite il numero di serie;<\/li>\n<li>configurare il server con gli strumenti appropriati;<\/li>\n<li>trasmettere le impostazioni al database del server di installazione tramite la parte client.<\/li>\n<\/ul>\n<p>\nAbbiamo scoperto come:<\/p>\n<ul>\n<li>il server in fase di installazione riceve le impostazioni necessarie dal database;<\/li>\n<li>l'intero progresso della preparazione \u00e8 registrato nel database (log, eventi, flag delle fasi).<\/li>\n<\/ul>\n<p><\/b><\/p>\n<h3>E per quanto riguarda i vari tipi di software in fase di installazione? Come installare un hypervisor, copiare una VM e configurare tutto ci\u00f2?<\/h3>\n<p>\nNel caso di implementazione di un'immagine del file system (linux) su hardware, \u00e8 piuttosto semplice:<\/p>\n<ul>\n<li>Dopo aver configurato tutti i componenti del server, deployiamo l'immagine.<\/li>\n<li>Installiamo il bootloader grub.<\/li>\n<li>Eseguiamo chroot e configuriamo tutto ci\u00f2 che \u00e8 necessario.<\/li>\n<\/ul>\n<p>\n<b>Come passare il controllo all'installatore del sistema operativo (utilizzando l'esempio di ESXi).<\/b><\/p>\n<ul>\n<li>Organizziamo il passaggio di controllo dal nostro script all'installatore dell'hypervisor tramite un file di risposte automatiche (kickstart):<\/li>\n<li>Eliminiamo le partizioni attuali sul disco.<\/li>\n<li>Creiamo una partizione di dimensioni 500MB.<\/li>\n<li>Segniamo la partizione come avviabile.<\/li>\n<li>Formattiamo in FAT32.<\/li>\n<li>Copiamo i file di installazione di ESXi nella radice della partizione.<\/li>\n<li>Installiamo syslinux.<\/li>\n<li>Copiamo syslinux.cfg in \/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>Copiamo mboot.c32 in \/syslinux.<\/li>\n<li>In boot.cfg deve esserci kernelopt=ks=ftp:\/\/\/ks_esxi.cfg<\/li>\n<li>Riavviamo il server.<\/li>\n<\/ul>\n<p>\nDopo il riavvio, il programma di installazione di ESXi si avvier\u00e0 dal disco rigido del server. Tutti i file necessari del programma di installazione verranno caricati in memoria e successivamente inizier\u00e0 l'installazione di ESXi, secondo il file di risposte automatiche specificato.<\/p>\n<p>Riporto qui alcune righe dal file di risposte automatiche ks_esxi.cfg:<\/p>\n<pre><code class=\"plaintext\">%firstboot --interpreter=busybox\n\u2026\n# otteniamo il numero di serie\n\nSYSSN=$(esxcli hardware platform get | grep Serial | awk -F \" \" '{print $3}')\n\n# otteniamo l'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# colleghiamo il server di installazione NFS\n\nesxcli storage nfs add -H is -s \/srv\/nfs_share -v nfsshare1\n\n# copiamo le impostazioni temporanee ssh, per l'uso del client 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# copiamo ovftool, per il deploy delle VM adesso, potrebbe tornare utile in seguito\n\ncp -R \/vmfs\/volumes\/nfsshare1\/ovftool \/vmfs\/volumes\/datastore1\/\n\n# deployiamo le 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# otteniamo la stringa con le impostazioni del nostro 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# generiamo lo script di configurazione della rete\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# impostiamo il parametro guestinfo.esxihost.id, indicando il numero di serie\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# aggiorniamo le informazioni nel database\n\nSYSNAME=$(esxcli hardware platform get | grep Product | sed 's\/Product Name:\/\/' | sed 's\/^ *\/\/')\nUUID=$(vim-cmd hostsvc\/hostsummary | grep uuid | sed 's\/ \/\/g;s\/,$\/\/;' | sed '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# ripristiniamo le impostazioni SSH\n\nrm -rf \/etc\/ssh\nmv \/etc\/ssh.tmp \/etc\/ssh\n\n# configuriamo la rete e riavviamo\n\nesxcli system hostname set --fqdn=esx-${G_NICK}.x5.ru\n\/vmfs\/volumes\/datastore1\/netconf.sh\nreboot\n<\/code><\/pre>\n<p>\nA questo punto, l'hypervisor \u00e8 stato installato e configurato, e le macchine virtuali sono state copiate.<\/p>\n<p>Come configurare ora le macchine virtuali?<\/p>\n<p>Abbiamo fatto un piccolo trucco: durante l'installazione abbiamo impostato il parametro guestinfo.esxihost.id = \"$SYSSN\" nel file VM1.vmx, specificando il numero di serie del server fisico.<\/p>\n<p>Ora, dopo l'avvio, la macchina virtuale (con il pacchetto vmware-tools installato) pu\u00f2 accedere a questo parametro:<\/p>\n<pre><code class=\"plaintext\">ESXI_SN=$(vmtoolsd --cmd \"info-get guestinfo.esxihost.id\")<\/code><\/pre>\n<p>\nIn altre parole, la VM sar\u00e0 in grado di identificarsi (sa il numero di serie dell'host fisico), fare una richiesta al database del server di installazione e ottenere i parametri da configurare. Questo viene formalizzato in uno script che deve essere eseguito automaticamente all'avvio della guestos vm (ma una sola volta: RunOnce).<\/p>\n<p><b>Ora sappiamo come:<\/p>\n<ul>\n<li>caricare il server tramite PXE;<\/li>\n<li>trasferire il controllo al nostro script;<\/li>\n<li>identificare il server da preparare tramite il numero di serie;<\/li>\n<li>configurare il server con le utilit\u00e0 appropriate;<\/li>\n<li>trasmettere le impostazioni al database del server di installazione tramite la parte client;<\/li>\n<li>configurare diversi tipi di software, incluso il dispiegamento dell'hypervisor ESXi e la configurazione delle macchine virtuali (e tutto automaticamente).<\/li>\n<\/ul>\n<p>\nAbbiamo scoperto come:<\/p>\n<ul>\n<li>il server in fase di installazione riceve le impostazioni necessarie dal database;<\/li>\n<li>l'intero progresso della preparazione \u00e8 registrato nel database (log, eventi, flag delle fasi).<\/li>\n<\/ul>\n<p><\/b><br \/>\n<u><b>Risultato:<\/b><\/u><\/p>\n<p>Credo che l'unicit\u00e0 di questa soluzione risieda nella flessibilit\u00e0, semplicit\u00e0, possibilit\u00e0 e versatilit\u00e0.<\/p>\n<p>Per favore, scrivete nei commenti cosa ne pensate.<br \/>\n<br \/>Fonte: <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 4.9.10 - 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. \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\" \/>\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\/it\/blog\/administrirovanie\/bare-metal-provisioning-svoimi-rukami-ili-avtomaticheskaya-podgotovka-serverov-s-nulya\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 4.9.10\" \/>\n\t\t<meta property=\"og:locale\" content=\"it_IT\" \/>\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. \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\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/it\/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 fai-da-te, o Preparazione automatica dei server da zero | ProHoster","description":"Ciao, sono Denis e uno dei miei settori di attivit\u00e0 \u00e8 lo sviluppo di soluzioni infrastrutturali in X5. Oggi vorrei condividere con voi come \u00e8 possibile implementare un sistema automatico di preparazione dei server utilizzando strumenti pubblici. Ritengo che sia una soluzione interessante, semplice e flessibile. Per preparazione si intende: trasformare un nuovo server 'out of the box' in un server completamente configurato.","canonical_url":"https:\/\/prohoster.info\/it\/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":"it_IT","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. \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","og:url":"https:\/\/prohoster.info\/it\/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"},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/74905","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/comments?post=74905"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/74905\/revisions"}],"predecessor-version":[{"id":158713,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/posts\/74905\/revisions\/158713"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media\/74906"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/media?parent=74905"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/categories?post=74905"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/it\/wp-json\/wp\/v2\/tags?post=74905"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}