{"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\/pt\/blog\/administrirovanie\/bare-metal-provisioning-svoimi-rukami-ili-avtomaticheskaya-podgotovka-serverov-s-nulya","title":{"rendered":"Provisionamento Bare-Metal DIY ou Prepara\u00e7\u00e3o Autom\u00e1tica de Servidores do Zero","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ol\u00e1, eu sou Denis e uma das minhas \u00e1reas de atua\u00e7\u00e3o \u00e9 o desenvolvimento de solu\u00e7\u00f5es de infraestrutura na X5. Hoje, gostaria de compartilhar com voc\u00ea como \u00e9 poss\u00edvel implementar um sistema autom\u00e1tico de prepara\u00e7\u00e3o de servidores utilizando ferramentas de acesso p\u00fablico. Na minha opini\u00e3o, \u00e9 uma solu\u00e7\u00e3o interessante, simples e flex\u00edvel.<\/p>\n<p><img decoding=\"async\" alt=\"Provisionamento Bare-Metal DIY ou Prepara\u00e7\u00e3o Autom\u00e1tica de Servidores do 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 \/>\nPrepara\u00e7\u00e3o significa: transformar um novo servidor 'de caixa' em um servidor totalmente configurado com o sistema operacional Linux ou com o hypervisor ESXi (instala\u00e7\u00e3o <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/pt\/server\/\"   title=\"servidores\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1469\">servidores<\/a> Windows n\u00e3o ser\u00e1 discutido neste artigo).<\/p>\n<p><b>Termos<\/b>:<\/p>\n<ul>\n<li>servidores \u2013 servidores que precisam ser configurados.<\/li>\n<li>servidor de instala\u00e7\u00e3o \u2013 o servidor principal que fornece todo o processo de prepara\u00e7\u00e3o pela rede.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Por que a automa\u00e7\u00e3o \u00e9 necess\u00e1ria?<\/h3>\n<p>\nSuponha que a tarefa seja: preparar servidores em massa desde o in\u00edcio, em pico \u2013 30 por dia. Servidores de diversos fabricantes e modelos, que podem ter diferentes sistemas operacionais instalados, podendo ou n\u00e3o ter o hypervisor.<\/p>\n<p>Quais opera\u00e7\u00f5es fazem parte do processo de configura\u00e7\u00e3o (sem automa\u00e7\u00e3o):<\/p>\n<ul>\n<li>conectar teclado, mouse e monitor ao servidor;<\/li>\n<li>configurar BIOS, RAID, IPMI;<\/li>\n<li>atualizar o firmware dos componentes;<\/li>\n<li>implantar a imagem do sistema de arquivos (ou instalar o hypervisor e copiar m\u00e1quinas virtuais);<\/li>\n<\/ul>\n<p>\nNota. Como alternativa, a implanta\u00e7\u00e3o do SO pode ser feita atrav\u00e9s da instala\u00e7\u00e3o com um arquivo de resposta autom\u00e1tica. Mas isso n\u00e3o ser\u00e1 abordado no artigo. Embora abaixo voc\u00ea ver\u00e1 que adicionar essa funcionalidade n\u00e3o \u00e9 complicado.<\/p>\n<ul>\n<li>configurar as op\u00e7\u00f5es do SO (hostname, IP, etc.).<\/li>\n<\/ul>\n<p>\nCom essa abordagem, as mesmas configura\u00e7\u00f5es s\u00e3o realizadas sequencialmente em cada servidor. A efici\u00eancia desse trabalho \u00e9 muito baixa.<\/p>\n<p>A ess\u00eancia da automa\u00e7\u00e3o \u00e9 excluir a participa\u00e7\u00e3o humana do processo de prepara\u00e7\u00e3o do servidor. Maximamente, na medida do poss\u00edvel. <\/p>\n<p>Gra\u00e7as \u00e0 automa\u00e7\u00e3o, o tempo de inatividade entre opera\u00e7\u00f5es \u00e9 reduzido e \u00e9 poss\u00edvel preparar v\u00e1rios servidores simultaneamente. A probabilidade de erros devido ao fator humano tamb\u00e9m diminui muito.<\/p>\n<p><img decoding=\"async\" alt=\"Provisionamento Bare-Metal DIY ou Prepara\u00e7\u00e3o Autom\u00e1tica de Servidores do Zero\" src=\"\/wp-content\/uploads\/2020\/03\/8c196058891a7f41c5b93e7f6721480b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Como ocorre a configura\u00e7\u00e3o autom\u00e1tica de servidores?<\/h3>\n<p>\nVamos analisar todas as etapas com detalhes.<\/p>\n<p>Voc\u00ea tem um servidor Linux que utiliza como servidor de instala\u00e7\u00e3o PXE. Nele, est\u00e3o instalados e configurados os servi\u00e7os: DHCP, TFTP.<\/p>\n<p>Ent\u00e3o, fazemos o boot do servidor (que precisa ser configurado) via PXE. Vamos lembrar como isso funciona:<\/p>\n<ul>\n<li>No servidor, a op\u00e7\u00e3o de boot pela rede foi selecionada.<\/li>\n<li>O servidor carrega o PXE-ROM da placa de rede e se conecta ao servidor de instala\u00e7\u00e3o via DHCP para obter um endere\u00e7o de rede.<\/li>\n<li>O servidor de instala\u00e7\u00e3o DHCP fornece o endere\u00e7o, assim como instru\u00e7\u00f5es para o carregamento posterior via PXE.<\/li>\n<li>O servidor carrega o carregador de rede do servidor de instala\u00e7\u00e3o via PXE, e o carregamento subsequente acontece de acordo com o arquivo de configura\u00e7\u00e3o PXE.<\/li>\n<li>O carregamento ocorre com base nos par\u00e2metros recebidos (n\u00facleo, initramfs, pontos de montagem, imagem squashfs e outros).<\/li>\n<\/ul>\n<p>\nNota. Este artigo descreve o carregamento via PXE em modo BIOS. Atualmente, os fabricantes est\u00e3o implementando ativamente o modo de inicializa\u00e7\u00e3o UEFI. Para PXE, a diferen\u00e7a estar\u00e1 na configura\u00e7\u00e3o do servidor DHCP e na presen\u00e7a de um carregador adicional.<\/p>\n<p>Vamos considerar um exemplo de configura\u00e7\u00e3o do servidor PXE (menu pxelinux).<\/p>\n<p>Arquivo 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 padr\u00e3o\n\tMENU LABEL Linux Scripting Toolkits\n\tMENU default\n\tKERNEL menu.c32\n\tAPPEND pxelinux.cfg\/toolkit \/\/ transi\u00e7\u00e3o para o pr\u00f3ximo menu<\/code><\/pre>\n<p>\nArquivo pxelinux.cfg\/toolkit:<\/p>\n<pre><code class=\"plaintext\">prompt 0\ntimeout 100\nmenu title X5 PXE Boot Menu\nlabel mainmenu\n    menu label ^Retornar ao Menu Principal\n    kernel menu.c32\n    append pxelinux.cfg\/default\nlabel x5toolkit-auto \/\/ padr\u00e3o - modo autom\u00e1tico\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=\"...\"\nlabel x5toolkit-shell \/\/ para depura\u00e7\u00e3o - 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=\"...\"<\/code><\/pre>\n<p>\nO n\u00facleo e o initramfs neste est\u00e1gio s\u00e3o uma imagem linux intermedi\u00e1ria, por meio da qual ocorrer\u00e1 a principal prepara\u00e7\u00e3o e configura\u00e7\u00e3o do servidor.<\/p>\n<p>Como voc\u00ea pode ver, o carregador transmite muitos par\u00e2metros ao n\u00facleo. Parte desses par\u00e2metros \u00e9 utilizada pelo pr\u00f3prio n\u00facleo. E alguns podemos usar para nossos objetivos. Isso ser\u00e1 abordado a seguir, mas, por enquanto, pode-se lembrar que todos os par\u00e2metros transmitidos estar\u00e3o dispon\u00edveis na imagem linux intermedi\u00e1ria atrav\u00e9s de \/proc\/cmdline.<\/p>\n<p>De onde obt\u00ea-los, n\u00facleo e initramfs?<br \/>\nPodemos escolher qualquer distribui\u00e7\u00e3o linux como base. O que devemos observar ao escolher:<\/p>\n<ul>\n<li>a imagem de inicializa\u00e7\u00e3o deve ser universal (presen\u00e7a de drivers, capacidades de instala\u00e7\u00e3o de utilit\u00e1rios adicionais);<\/li>\n<li>provavelmente, ser\u00e1 necess\u00e1rio personalizar o initramfs.<\/li>\n<\/ul>\n<p>\nComo isso \u00e9 feito na nossa solu\u00e7\u00e3o para o X5? Tomamos como base o CentOS 7. Vamos fazer o seguinte truque: prepararemos a futura estrutura da imagem, a empacotaremos em um arquivo e criaremos o initramfs, dentro do qual estar\u00e1 o nosso arquivo de sistema. Ao iniciar a imagem, o arquivo ser\u00e1 descompactado na parti\u00e7\u00e3o tmpfs criada. Assim, teremos uma imagem live do linux minimalista, mas completa, com todas as utilidades necess\u00e1rias, consistindo apenas de dois arquivos: 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>\nEnt\u00e3o, definimos o kernel e o initramfs que devem ser carregados. Como resultado, nesta etapa, ao carregar a imagem intermedi\u00e1ria do linux via PXE, obteremos o console do SO.<\/p>\n<p>\u00d3timo, mas agora precisamos transferir o controle para a nossa 'automatiza\u00e7\u00e3o'.<\/p>\n<p>Isso pode ser feito assim.<\/p>\n<p>Suponha que, ap\u00f3s carregar a imagem, planejamos transferir o controle para o script mount.sh.<br \/>\nVamos incluir o script mount.sh no in\u00edcio autom\u00e1tico. Para isso, ser\u00e1 necess\u00e1rio modificar o initramfs:<\/p>\n<ul>\n<li>descompactar o initramfs (se estivermos usando a vers\u00e3o de initramfs acima, isso n\u00e3o \u00e9 necess\u00e1rio)<\/li>\n<li>incluir na inicializa\u00e7\u00e3o o c\u00f3digo que analisar\u00e1 os par\u00e2metros passados atrav\u00e9s de \/proc\/cmdline e transferir\u00e1 o controle adiante;<\/li>\n<li>empacotar o initramfs.<\/li>\n<\/ul>\n<p>\nNota: No caso do toolkit X5, o controle de inicializa\u00e7\u00e3o \u00e9 transferido para o 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>Ent\u00e3o, a imagem \u00e9 carregada, na qual o script mount.sh inicia na inicializa\u00e7\u00e3o autom\u00e1tica. Em seguida, o script mount.sh analisa os par\u00e2metros passados (script_cmd=) e executa o programa\/script necess\u00e1rio.<\/p>\n<p>r\u00f3tulo toolkit-<b>auto<\/b><br \/>\nkernel \u2026<br \/>\nanexar \u2026 nfs_toolkit_script=scripts\/mount.sh <b>script_cmd=master-install.sh<br \/>\n<\/b><br \/>\nr\u00f3tulo toolkit-<b>shell<\/b><br \/>\nkernel \u2026<br \/>\nanexar \u2026 nfs_toolkit_script=scripts\/mount.sh <b>script_cmd=\/bin\/bash<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Provisionamento Bare-Metal DIY ou Prepara\u00e7\u00e3o Autom\u00e1tica de Servidores do Zero\" src=\"\/wp-content\/uploads\/2020\/03\/943eeb64fbf746feab5119ead5b1ca66.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nAqui \u00e0 esquerda est\u00e1 o menu PXE, \u00e0 direita \u2013 o esquema de transfer\u00eancia de controle.<\/p>\n<p>Com a transfer\u00eancia de controle, estamos esclarecidos. Dependendo da escolha do menu PXE, inicia-se ou o script de auto-configura\u00e7\u00e3o ou o console para depura\u00e7\u00e3o.<\/p>\n<p>Em caso de auto-configura\u00e7\u00e3o, os diret\u00f3rios necess\u00e1rios do servidor de instala\u00e7\u00e3o s\u00e3o montados, contendo:<\/p>\n<ul>\n<li>scripts;<\/li>\n<li>templates BIOS\/UEFI salvos de v\u00e1rios servidores;<\/li>\n<li>firmwares;<\/li>\n<li>utilit\u00e1rios para servidores;<\/li>\n<li>logs.<\/li>\n<\/ul>\n<p>\nEm seguida, o script mount.sh transfere o controle para o script master-install.sh do diret\u00f3rio com os scripts.<\/p>\n<p>A \u00e1rvore de scripts (ordem de execu\u00e7\u00e3o) parece aproximadamente assim:<\/p>\n<ul>\n<li>master-install<\/li>\n<li>sharefunctions (fun\u00e7\u00f5es comuns)<\/li>\n<li>info (exibi\u00e7\u00e3o de informa\u00e7\u00f5es)<\/li>\n<li>models (defini\u00e7\u00e3o de par\u00e2metros de instala\u00e7\u00e3o com base no modelo do servidor)<\/li>\n<li>prepare_utils (instala\u00e7\u00e3o de utilit\u00e1rios necess\u00e1rios)<\/li>\n<li>fwupdate (atualiza\u00e7\u00e3o de firmware)<\/li>\n<li>diag (diagn\u00f3stico b\u00e1sico)<\/li>\n<li>biosconf (configura\u00e7\u00e3o do BIOS\/UEFI)<\/li>\n<li>clockfix (ajuste de tempo na placa-m\u00e3e)<\/li>\n<li>srmconf (configura\u00e7\u00e3o da interface remota)<\/li>\n<li>raidconf (configura\u00e7\u00e3o de volumes l\u00f3gicos)<\/li>\n<\/ul>\n<p>\num dos:<\/p>\n<ul>\n<li>preinstall (transfer\u00eancia de controle para o instalador do SO ou hipervisor, por exemplo, ESXi)<\/li>\n<li>merged-install (in\u00edcio direto da extra\u00e7\u00e3o da imagem)<\/li>\n<\/ul>\n<p>\n<b>Agora sabemos:<\/p>\n<ul>\n<li>como inicializar o servidor pelo PXE;<\/li>\n<li>como transferir o controle para o nosso pr\u00f3prio script.<\/li>\n<\/ul>\n<p><\/b><br \/>\nVamos continuar. Surgiram as seguintes quest\u00f5es:<\/p>\n<ul>\n<li>Como identificar o servidor que estamos preparando?<\/li>\n<li>Quais utilit\u00e1rios utilizar e como configurar o servidor?<\/li>\n<li>Como obter configura\u00e7\u00f5es para um servidor espec\u00edfico?<\/li>\n<\/ul>\n<p><\/p>\n<h3>Como identificar o servidor que estamos preparando?<\/h3>\n<p>\n\u00c9 simples \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>\nAqui est\u00e3o todas as informa\u00e7\u00f5es necess\u00e1rias: fornecedor, modelo, n\u00famero de s\u00e9rie. Se voc\u00ea n\u00e3o tiver certeza de que essas informa\u00e7\u00f5es est\u00e3o dispon\u00edveis em todos os servidores, voc\u00ea pode identific\u00e1-los pelo endere\u00e7o MAC. Ou utilizar ambos os m\u00e9todos ao mesmo tempo, se os fornecedores dos servidores forem diferentes e em alguns modelos as informa\u00e7\u00f5es do n\u00famero de s\u00e9rie simplesmente n\u00e3o estiverem dispon\u00edveis.<\/p>\n<p>Com base nas informa\u00e7\u00f5es obtidas, s\u00e3o montadas pastas de rede a partir do servidor de instala\u00e7\u00e3o e todos os necess\u00e1rios (utilit\u00e1rios, firmwares etc.) s\u00e3o carregados.<\/p>\n<h3>Quais utilit\u00e1rios utilizar e como configurar o servidor?<\/h3>\n<p>\nAqui est\u00e3o utilit\u00e1rios para Linux de alguns fabricantes. Todos os utilit\u00e1rios est\u00e3o dispon\u00edveis nos sites oficiais dos fornecedores.<\/p>\n<p><img decoding=\"async\" alt=\"Provisionamento Bare-Metal DIY ou Prepara\u00e7\u00e3o Autom\u00e1tica de Servidores do Zero\" src=\"\/wp-content\/uploads\/2020\/03\/fab53d1fa6e9a222ec69248439551ad7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nCom os firmwares, acredito que tudo est\u00e1 claro. Normalmente, eles s\u00e3o fornecidos na forma de arquivos execut\u00e1veis compactados. O arquivo execut\u00e1vel controla o processo de atualiza\u00e7\u00e3o do firmware e informa o c\u00f3digo de retorno.<\/p>\n<p>BIOS e IPMI geralmente s\u00e3o configurados por meio de modelos. Se necess\u00e1rio, o modelo pode ser editado antes da inicializa\u00e7\u00e3o.<\/p>\n<p>Os utilit\u00e1rios RAID de alguns fornecedores tamb\u00e9m podem ser configurados por modelo. Se n\u00e3o for o caso, ser\u00e1 necess\u00e1rio escrever um script de configura\u00e7\u00e3o.<\/p>\n<p>A sequ\u00eancia de configura\u00e7\u00e3o do RAID \u00e9 frequentemente a seguinte:<\/p>\n<ul>\n<li>Solicitamos a configura\u00e7\u00e3o atual.<\/li>\n<li>Se j\u00e1 houver arrays l\u00f3gicos \u2013 apagamos.<\/li>\n<li>Verificamos quais discos f\u00edsicos est\u00e3o presentes e quantos s\u00e3o.<\/li>\n<li>Criamos um novo array l\u00f3gico. Interrompemos o processo em caso de erro.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Como obter configura\u00e7\u00f5es para um servidor espec\u00edfico?<\/h3>\n<p>\nSuponhamos que as configura\u00e7\u00f5es de todos os servidores ser\u00e3o armazenadas no servidor de instala\u00e7\u00e3o. Nesse caso, para responder \u00e0 nossa pergunta, \u00e9 preciso primeiro decidir: como transferir as configura\u00e7\u00f5es para o servidor de instala\u00e7\u00e3o.<\/p>\n<p>No in\u00edcio, \u00e9 perfeitamente poss\u00edvel usar arquivos de texto. (No futuro, um arquivo de texto pode ser utilizado como um meio de backup para transmitir configura\u00e7\u00f5es). <\/p>\n<p>\u00c9 poss\u00edvel 'compartilhar' um arquivo de texto no servidor de instala\u00e7\u00e3o. E adicionar sua montagem no script mount.sh.<\/p>\n<p>As linhas ter\u00e3o, por exemplo, o seguinte formato:<\/p>\n<p><\/p>\n<p>Essas linhas ser\u00e3o transmitidas em um arquivo pelo engenheiro a partir de sua m\u00e1quina de trabalho. E, em seguida, durante a configura\u00e7\u00e3o do servidor, os par\u00e2metros para o servidor espec\u00edfico ser\u00e3o lidos do arquivo.<\/p>\n<p>Mas, a longo prazo, \u00e9 melhor envolver um banco de dados para armazenar configura\u00e7\u00f5es, estados e logs de instala\u00e7\u00f5es de servidores.<\/p>\n<p>Claro, n\u00e3o basta um banco de dados, e ser\u00e1 necess\u00e1rio criar uma parte cliente, atrav\u00e9s da qual as configura\u00e7\u00f5es ser\u00e3o enviadas para o banco. Implementar isso \u00e9 mais complicado em compara\u00e7\u00e3o com um arquivo de texto, mas, na verdade, n\u00e3o \u00e9 t\u00e3o dif\u00edcil quanto parece. A vers\u00e3o m\u00ednima do cliente, que apenas transmitir\u00e1 dados para o banco, pode ser facilmente escrita por voc\u00ea mesmo. E a melhoria do programa cliente pode ser feita mais tarde de forma livre (relat\u00f3rios, impress\u00e3o de etiquetas, envio de notifica\u00e7\u00f5es e mais, o que ocorrer \u00e0 mente).<\/p>\n<p>Fazendo uma solicita\u00e7\u00e3o espec\u00edfica ao banco e informando o n\u00famero de s\u00e9rie do servidor, obteremos os par\u00e2metros necess\u00e1rios para a configura\u00e7\u00e3o do servidor.<\/p>\n<p>Al\u00e9m disso, n\u00e3o precisaremos inventar bloqueios para acesso simult\u00e2neo, como no caso de um arquivo de texto.<\/p>\n<p>Podemos registrar o log de configura\u00e7\u00e3o em todas as etapas no banco e controlar o processo de instala\u00e7\u00e3o atrav\u00e9s de eventos e flags das etapas de prepara\u00e7\u00e3o.<\/p>\n<p><b>Agora sabemos como:<\/p>\n<ul>\n<li>carregar o servidor via PXE;<\/li>\n<li>transmitir o controle para o nosso script;<\/li>\n<li>identificar o servidor que precisa ser preparado pelo n\u00famero de s\u00e9rie;<\/li>\n<li>configurar o servidor com as utilidades apropriadas;<\/li>\n<li>transmitir as configura\u00e7\u00f5es para o banco de dados do servidor de instala\u00e7\u00e3o atrav\u00e9s da parte cliente.<\/li>\n<\/ul>\n<p>\nDescobrimos como:<\/p>\n<ul>\n<li>o servidor a ser instalado recebe as configura\u00e7\u00f5es necess\u00e1rias do banco de dados;<\/li>\n<li>todo o progresso da prepara\u00e7\u00e3o \u00e9 registrado no banco de dados (logs, eventos, flags das etapas).<\/li>\n<\/ul>\n<p><\/b><\/p>\n<h3>E quanto aos diferentes tipos de software a ser instalado? Como instalar um hypervisor, copiar uma VM e configurar tudo isso?<\/h3>\n<p>\nNo caso de implanta\u00e7\u00e3o de uma imagem de sistema de arquivos (linux) no hardware, tudo \u00e9 bastante simples:<\/p>\n<ul>\n<li>Ap\u00f3s configurar todos os componentes do servidor, implantamos a imagem.<\/li>\n<li>Instalamos o carregador grub.<\/li>\n<li>Fazemos chroot e configuramos tudo o que \u00e9 necess\u00e1rio.<\/li>\n<\/ul>\n<p>\n<b>Como passar o controle para o instalador do sistema operacional (exemplo ESXi).<\/b><\/p>\n<ul>\n<li>Organizamos a transfer\u00eancia de controle do nosso script para o instalador do hypervisor atrav\u00e9s do arquivo de resposta autom\u00e1tica (kickstart):<\/li>\n<li>Removemos as parti\u00e7\u00f5es atuais do disco.<\/li>\n<li>Criamos uma parti\u00e7\u00e3o de 500MB.<\/li>\n<li>Marcamos-a como inicializ\u00e1vel.<\/li>\n<li>Formatamos em FAT32.<\/li>\n<li>Copiamos os arquivos de instala\u00e7\u00e3o do ESXi para a raiz dela.<\/li>\n<li>Instalamos o syslinux.<\/li>\n<li>Copiamos syslinux.cfg para \/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>Copiamos mboot.c32 para \/syslinux.<\/li>\n<li>Em boot.cfg deve constar kernelopt=ks=ftp:\/\/\/ks_esxi.cfg<\/li>\n<li>Reiniciamos o servidor.<\/li>\n<\/ul>\n<p>\nAp\u00f3s reiniciar o servidor a partir de seu disco r\u00edgido, o instalador do ESXi ser\u00e1 carregado. Todos os arquivos necess\u00e1rios do instalador ser\u00e3o carregados na mem\u00f3ria e, em seguida, a instala\u00e7\u00e3o do ESXi come\u00e7ar\u00e1, de acordo com o arquivo de resposta autom\u00e1tica indicado.<\/p>\n<p>Cito aqui algumas linhas do arquivo de resposta autom\u00e1tica ks_esxi.cfg:<\/p>\n<pre><code class=\"plaintext\">%firstboot --interpreter=busybox\n\u2026\n# obtendo o n\u00famero de s\u00e9rie\n\nSYSSN=$(esxcli hardware platform get | grep Serial | awk -F \" \" '{print $3}')\n\n# obtendo o 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# conectando o servidor de instala\u00e7\u00e3o NFS\n\nesxcli storage nfs add -H is -s \/srv\/nfs_share -v nfsshare1\n\n# copiando configura\u00e7\u00f5es tempor\u00e1rias do ssh, para uso do cliente 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# copiando o ovftool, para a implanta\u00e7\u00e3o da VM agora, al\u00e9m de possivelmente ser \u00fatil depois\n\ncp -R \/vmfs\/volumes\/nfsshare1\/ovftool \/vmfs\/volumes\/datastore1\/\n\n# implantando a 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# obtendo a linha com as configura\u00e7\u00f5es do nosso servidor\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# gerando o script de configura\u00e7\u00e3o de rede\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# definindo o par\u00e2metro guestinfo.esxihost.id, indicando o n\u00famero de s\u00e9rie\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# atualizando as informa\u00e7\u00f5es no banco de dados\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# retornando configura\u00e7\u00f5es do SSH\n\nrm -rf \/etc\/ssh\nmv \/etc\/ssh.tmp \/etc\/ssh\n\n# configurando a rede e reiniciando\n\nesxcli system hostname set --fqdn=esx-${G_NICK}.x5.ru\n\/vmfs\/volumes\/datastore1\/netconf.sh\nreboot\n<\/code><\/pre>\n<p>\nNeste est\u00e1gio, o hipervisor foi instalado e configurado, e as m\u00e1quinas virtuais foram copiadas.<\/p>\n<p>Como agora configurar as m\u00e1quinas virtuais?<\/p>\n<p>Fizemos uma pequena manobra: durante a instala\u00e7\u00e3o, configuramos o par\u00e2metro guestinfo.esxihost.id = \"$SYSSN\" no arquivo VM1.vmx, especificando nele o n\u00famero de s\u00e9rie do servidor f\u00edsico.<\/p>\n<p>Agora, ap\u00f3s a inicializa\u00e7\u00e3o, a m\u00e1quina virtual (com o pacote vmware-tools instalado) pode acessar esse par\u00e2metro:<\/p>\n<pre><code class=\"plaintext\">ESXI_SN=$(vmtoolsd --cmd \"info-get guestinfo.esxihost.id\")<\/code><\/pre>\n<p>\nOu seja, a VM conseguir\u00e1 se identificar (ela conhece o n\u00famero de s\u00e9rie do host f\u00edsico), fazer uma solicita\u00e7\u00e3o ao banco de dados do servidor de instala\u00e7\u00e3o e obter os par\u00e2metros que precisam ser configurados. Tudo isso \u00e9 organizado em um script que deve ser acionado automaticamente ao iniciar a guestos vm (mas apenas uma vez: RunOnce).<\/p>\n<p><b>Agora sabemos como:<\/p>\n<ul>\n<li>carregar o servidor via PXE;<\/li>\n<li>transmitir o controle para o nosso script;<\/li>\n<li>identificar o servidor que precisa ser preparado pelo n\u00famero de s\u00e9rie;<\/li>\n<li>configurar o servidor com as ferramentas apropriadas;<\/li>\n<li>transmitir as configura\u00e7\u00f5es para o banco de dados do servidor de instala\u00e7\u00e3o por meio da parte cliente;<\/li>\n<li>configurar diferentes tipos de software, incluindo a implanta\u00e7\u00e3o do hipervisor ESXi e a configura\u00e7\u00e3o de m\u00e1quinas virtuais (tudo automaticamente).<\/li>\n<\/ul>\n<p>\nDescobrimos como:<\/p>\n<ul>\n<li>o servidor a ser instalado recebe as configura\u00e7\u00f5es necess\u00e1rias do banco de dados;<\/li>\n<li>todo o progresso da prepara\u00e7\u00e3o \u00e9 registrado no banco de dados (logs, eventos, flags das etapas).<\/li>\n<\/ul>\n<p><\/b><br \/>\n<u><b>Resultado:<\/b><\/u><\/p>\n<p>Acredito que a singularidade desta solu\u00e7\u00e3o est\u00e1 na flexibilidade, simplicidade, suas capacidades e versatilidade.<\/p>\n<p>Por favor, escreva nos coment\u00e1rios o que voc\u00ea pensa.<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 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u044f \u0414\u0435\u043d\u0438\u0441 \u0438 \u043e\u0434\u043d\u043e \u0438\u0437 \u043c\u043e\u0438\u0445 \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0439 \u0434\u0435\u044f\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u2013 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0432 X5.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/bare-metal-provisioning-svoimi-rukami-ili-avtomaticheskaya-podgotovka-serverov-s-nulya\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\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\/pt\/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\udd47Provisionamento Bare-Metal por conta pr\u00f3pria, ou Prepara\u00e7\u00e3o Autom\u00e1tica de Servidores do Zero | ProHoster","description":"Ol\u00e1, eu sou Denis e uma das minhas \u00e1reas de atua\u00e7\u00e3o \u00e9 o desenvolvimento de solu\u00e7\u00f5es de infraestrutura na X5.","canonical_url":"https:\/\/prohoster.info\/pt\/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":"pt_PT","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\/pt\/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\/pt\/wp-json\/wp\/v2\/posts\/74905","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=74905"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/74905\/revisions"}],"predecessor-version":[{"id":158713,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/74905\/revisions\/158713"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/74906"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=74905"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=74905"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=74905"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}