{"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\/fr\/blog\/administrirovanie\/bare-metal-provisioning-svoimi-rukami-ili-avtomaticheskaya-podgotovka-serverov-s-nulya","title":{"rendered":"Provisionnement Bare-Metal soi-m\u00eame, ou pr\u00e9paration automatique des serveurs depuis z\u00e9ro","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Bonjour, je suis Denis et l'un de mes domaines d'activit\u00e9 est le d\u00e9veloppement de solutions d'infrastructure chez X5. Aujourd'hui, j'aimerais partager avec vous comment d\u00e9ployer un syst\u00e8me automatique de pr\u00e9paration de serveurs en utilisant des outils accessibles. \u00c0 mon avis, c'est une solution int\u00e9ressante, simple et flexible.<\/p>\n<p><img decoding=\"async\" alt=\"Provisionnement Bare-Metal soi-m\u00eame, ou pr\u00e9paration automatique des serveurs depuis z\u00e9ro\" 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 \/>\nLa pr\u00e9paration consiste \u00e0 transformer un nouveau serveur pr\u00eat \u00e0 l'emploi en un serveur enti\u00e8rement configur\u00e9 avec un syst\u00e8me d'exploitation Linux ou avec l'hyperviseur ESXi (le d\u00e9ploiement de <a class=\"wpil_keyword_link\" href=\"https:\/\/prohoster.info\/fr\/server\/\"   title=\"serveurs\" data-wpil-keyword-link=\"linked\"  data-wpil-monitor-id=\"1469\">serveurs<\/a> Windows n'est pas discut\u00e9 dans cet article).<\/p>\n<p><b>Termes<\/b>:<\/p>\n<ul>\n<li>serveurs \u2013 serveurs qui doivent \u00eatre configur\u00e9s.<\/li>\n<li>serveur d'installation \u2013 serveur principal qui assure tout le processus de pr\u00e9paration via le r\u00e9seau.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Pourquoi l'automatisation est-elle n\u00e9cessaire?<\/h3>\n<p>\nSupposons qu'il y ait une t\u00e2che : pr\u00e9parer massivement des serveurs \u00e0 partir de z\u00e9ro, avec un pic de 30 par jour. Des serveurs de diff\u00e9rents fabricants et mod\u00e8les, diff\u00e9rents syst\u00e8mes d'exploitation peuvent y \u00eatre install\u00e9s, avec ou sans hyperviseur.<\/p>\n<p>Quelles op\u00e9rations sont incluses dans le processus de configuration (sans automatisation) :<\/p>\n<ul>\n<li>brancher un clavier, une souris, un moniteur au serveur ;<\/li>\n<li>configurer le BIOS, le RAID, l'IPMI ;<\/li>\n<li>mettre \u00e0 jour les firmwares des composants ;<\/li>\n<li>d\u00e9ployer une image du syst\u00e8me de fichiers (ou installer un hyperviseur et copier des machines virtuelles) ;<\/li>\n<\/ul>\n<p>\nRemarque. En option, le d\u00e9ploiement du syst\u00e8me d'exploitation peut se faire via une installation avec un fichier de r\u00e9ponse automatique. Mais cela ne sera pas discut\u00e9 dans l'article. Cependant, vous verrez ci-dessous que l'ajout de cette fonctionnalit\u00e9 n'est pas compliqu\u00e9.<\/p>\n<ul>\n<li>configurer les param\u00e8tres du syst\u00e8me d'exploitation (nom d'h\u00f4te, IP, etc.).<\/li>\n<\/ul>\n<p>\nAvec cette approche, les m\u00eames configurations sont ex\u00e9cut\u00e9es successivement sur chaque serveur. L'efficacit\u00e9 d'un tel travail est tr\u00e8s faible.<\/p>\n<p>Le but de l'automatisation est d'exclure l'intervention humaine dans le processus de pr\u00e9paration des serveurs. Autant que possible. <\/p>\n<p>Gr\u00e2ce \u00e0 l'automatisation, le temps d'arr\u00eat entre les op\u00e9rations est r\u00e9duit et il devient possible de pr\u00e9parer plusieurs serveurs simultan\u00e9ment. De plus, le risque d'erreurs dues au facteur humain diminue consid\u00e9rablement.<\/p>\n<p><img decoding=\"async\" alt=\"Provisionnement Bare-Metal soi-m\u00eame, ou pr\u00e9paration automatique des serveurs depuis z\u00e9ro\" src=\"\/wp-content\/uploads\/2020\/03\/8c196058891a7f41c5b93e7f6721480b.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h3>Comment se d\u00e9roule la configuration automatique des serveurs?<\/h3>\n<p>\nAnalysons toutes les \u00e9tapes en d\u00e9tail.<\/p>\n<p>Vous avez un serveur linux que vous utilisez comme serveur d'installation PXE. Il dispose des services suivants install\u00e9s et configur\u00e9s : DHCP, TFTP.<\/p>\n<p>Donc, nous d\u00e9marrons le serveur (qui doit \u00eatre configur\u00e9) via PXE. Rappelons-nous comment cela fonctionne :<\/p>\n<ul>\n<li>Le serveur est configur\u00e9 pour d\u00e9marrer \u00e0 partir du r\u00e9seau.<\/li>\n<li>Le serveur charge le PXE-ROM de la carte r\u00e9seau et se connecte au serveur d'installation via DHCP pour obtenir une adresse r\u00e9seau.<\/li>\n<li>Le serveur d'installation DHCP attribue une adresse ainsi qu'une instruction pour le d\u00e9marrage ult\u00e9rieur via PXE.<\/li>\n<li>Le serveur charge le bootstrap r\u00e9seau depuis le serveur d'installation par PXE, le d\u00e9marrage ult\u00e9rieur se fait selon le fichier de configuration PXE.<\/li>\n<li>Le d\u00e9marrage s'effectue sur la base des param\u00e8tres re\u00e7us (noyau, initramfs, points de montage, image squashfs, etc.).<\/li>\n<\/ul>\n<p>\nRemarque. Cet article d\u00e9crit le d\u00e9marrage par PXE en mode BIOS. Actuellement, les fabricants int\u00e8grent activement le mode de d\u00e9marrage UEFI. La diff\u00e9rence pour PXE r\u00e9side dans la configuration du serveur DHCP et l'existence d'un bootstrap suppl\u00e9mentaire.<\/p>\n<p>Examinons un exemple de configuration d'un serveur PXE (menu pxelinux).<\/p>\n<p>Fichier 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 par d\u00e9faut\n\tMENU LABEL Linux Scripting Toolkits\n\tMENU default\n\tKERNEL menu.c32\n\tAPPEND pxelinux.cfg\/toolkit \/\/ passage au menu suivant<\/code><\/pre>\n<p>\nFichier pxelinux.cfg\/toolkit :<\/p>\n<pre><code class=\"plaintext\">prompt 0\ntimeout 100\nmenu title X5 PXE Boot Menu\nlabel mainmenu\n    menu label ^Retour au menu principal\n    kernel menu.c32\n    append pxelinux.cfg\/default\nlabel x5toolkit-auto \/\/ par d\u00e9faut - mode automatique\n        menu label installation automatique du toolkit x5\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 \/\/ pour le d\u00e9bogage - console\n        menu label shell du toolkit x5\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>\nLe noyau et l'initramfs \u00e0 ce stade constituent une image linux interm\u00e9diaire, qui sera utilis\u00e9e pour la pr\u00e9paration et la configuration principale du serveur.<\/p>\n<p>Comme vous pouvez le voir, le chargeur de d\u00e9marrage transmet de nombreux param\u00e8tres au noyau. Certains de ces param\u00e8tres sont utilis\u00e9s par le noyau lui-m\u00eame, tandis que d'autres peuvent \u00eatre utilis\u00e9s \u00e0 nos fins. Cela sera expliqu\u00e9 plus tard, mais pour l'instant, vous pouvez simplement retenir que tous les param\u00e8tres transmis seront disponibles dans l'image linux interm\u00e9diaire via \/proc\/cmdline.<\/p>\n<p>D'o\u00f9 les obtenir, le noyau et l'initramfs ?<br \/>\nVous pouvez choisir n'importe quelle distribution linux comme base. Voici ce \u00e0 quoi nous devons pr\u00eater attention lors du choix :<\/p>\n<ul>\n<li>l'image de d\u00e9marrage doit \u00eatre polyvalente (pr\u00e9sence de pilotes, possibilit\u00e9 d'installer des utilitaires suppl\u00e9mentaires);<\/li>\n<li>Il faudra probablement personnaliser l'initramfs.<\/li>\n<\/ul>\n<p>\nComment cela est-il fait dans notre solution pour X5 ? Nous avons choisi CentOS 7 comme base. Nous allons r\u00e9aliser cette astuce : pr\u00e9parer la future structure de l'image, l'archiver et cr\u00e9er l'initramfs, \u00e0 l'int\u00e9rieur duquel se trouvera notre archive du syst\u00e8me de fichiers. Lors du d\u00e9marrage de l'image, l'archive sera extraite dans la partition tmpfs cr\u00e9\u00e9e. Ainsi, nous obtiendrons une image live Linux minimale mais compl\u00e8te avec tous les utilitaires n\u00e9cessaires, compos\u00e9e de seulement deux fichiers : vmkernel et 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>\nDonc, nous avons sp\u00e9cifi\u00e9 le noyau et l'initramfs qui doivent \u00eatre charg\u00e9s. En cons\u00e9quence, \u00e0 ce stade, en chargeant l'image interm\u00e9diaire Linux via PXE, nous obtiendrons la console du syst\u00e8me d'exploitation.<\/p>\n<p>Super, mais maintenant il faut transf\u00e9rer le contr\u00f4le \u00e0 notre \"automatisation\".<\/p>\n<p>Cela peut \u00eatre fait comme suit.<\/p>\n<p>Supposons qu'apr\u00e8s le d\u00e9marrage de l'image, nous pr\u00e9voyons de transf\u00e9rer le contr\u00f4le au script mount.sh.<br \/>\nNous allons inclure le script mount.sh dans le d\u00e9marrage automatique. Pour cela, il faudra modifier l'initramfs :<\/p>\n<ul>\n<li>d\u00e9compresser l'initramfs (si nous utilisons la version d'initramfs mentionn\u00e9e ci-dessus, cela n'est pas n\u00e9cessaire)<\/li>\n<li>inclure dans le d\u00e9marrage automatique du code qui analysera les param\u00e8tres transmis via \/proc\/cmdline et redirigera le contr\u00f4le ;<\/li>\n<li>emballer l'initramfs.<\/li>\n<\/ul>\n<p>\nRemarque. Dans le cas de X5 toolkit, le contr\u00f4le de d\u00e9marrage est transmis au 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>Ainsi, l'image se charge, o\u00f9 le script mount.sh d\u00e9marre automatiquement. Ensuite, le script mount.sh analyse les param\u00e8tres transmis (script_cmd=) et lance le programme\/script n\u00e9cessaire.<\/p>\n<p>label toolkit-<b>auto<\/b><br \/>\nnoyau \u2026<br \/>\najouter \u2026 nfs_toolkit_script=scripts\/mount.sh <b>script_cmd=master-install.sh<br \/>\n<\/b><br \/>\nlabel toolkit-<b>shell<\/b><br \/>\nnoyau \u2026<br \/>\najouter \u2026 nfs_toolkit_script=scripts\/mount.sh <b>script_cmd=\/bin\/bash<\/b><\/p>\n<p><img decoding=\"async\" alt=\"Provisionnement Bare-Metal soi-m\u00eame, ou pr\u00e9paration automatique des serveurs depuis z\u00e9ro\" src=\"\/wp-content\/uploads\/2020\/03\/943eeb64fbf746feab5119ead5b1ca66.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nIci, \u00e0 gauche, se trouve le menu PXE, \u00e0 droite \u2013 le sch\u00e9ma de transfert de contr\u00f4le.<\/p>\n<p>Nous avons compris le transfert de contr\u00f4le. En fonction du choix dans le menu PXE, un script d'auto-configuration ou une console de d\u00e9bogage est lanc\u00e9.<\/p>\n<p>Dans le cas de l'auto-configuration, les r\u00e9pertoires n\u00e9cessaires sont mont\u00e9s depuis le serveur d'installation, qui contiennent :<\/p>\n<ul>\n<li>scripts ;<\/li>\n<li>les mod\u00e8les BIOS\/UEFI sauvegard\u00e9s de divers serveurs ;<\/li>\n<li>firmwares ;<\/li>\n<li>outils pour serveurs ;<\/li>\n<li>logs.<\/li>\n<\/ul>\n<p>\nEnsuite, le script mount.sh transmet le contr\u00f4le au script master-install.sh dans le r\u00e9pertoire des scripts.<\/p>\n<p>L'arborescence des scripts (l'ordre de leur ex\u00e9cution) ressemble \u00e0 peu pr\u00e8s \u00e0 ceci :<\/p>\n<ul>\n<li>master-install<\/li>\n<li>sharefunctions (fonctions g\u00e9n\u00e9rales)<\/li>\n<li>info (affichage d'informations)<\/li>\n<li>models (installation des param\u00e8tres d'installation en fonction du mod\u00e8le de serveur)<\/li>\n<li>prepare_utils (installation des utilitaires n\u00e9cessaires)<\/li>\n<li>fwupdate (mise \u00e0 jour du firmware)<\/li>\n<li>diag (diagnostic simple)<\/li>\n<li>biosconf (configuration du BIOS\/UEFI)<\/li>\n<li>clockfix (configuration de l'heure sur la carte m\u00e8re)<\/li>\n<li>srmconf (configuration de l'interface \u00e0 distance)<\/li>\n<li>raidconf (configuration des volumes logiques)<\/li>\n<\/ul>\n<p>\nun des :<\/p>\n<ul>\n<li>preinstall (transfert de contr\u00f4le au programme d'installation du syst\u00e8me d'exploitation ou de l'hyperviseur, par exemple ESXi)<\/li>\n<li>merged-install (d\u00e9marrage direct du d\u00e9ballage de l'image)<\/li>\n<\/ul>\n<p>\n<b>Nous savons maintenant :<\/p>\n<ul>\n<li>comment d\u00e9marrer le serveur via PXE ;<\/li>\n<li>comment transf\u00e9rer le contr\u00f4le vers notre propre script.<\/li>\n<\/ul>\n<p><\/b><br \/>\nContinuons. Les questions suivantes deviennent pertinentes :<\/p>\n<ul>\n<li>Comment identifier le serveur que nous pr\u00e9parons ?<\/li>\n<li>Avec quels outils et comment configurer le serveur ?<\/li>\n<li>Comment obtenir les param\u00e8tres pour un serveur sp\u00e9cifique ?<\/li>\n<\/ul>\n<p><\/p>\n<h3>Comment identifier le serveur que nous pr\u00e9parons ?<\/h3>\n<p>\nC'est simple \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>\nIci, vous avez tout ce dont vous avez besoin : fournisseur, mod\u00e8le, num\u00e9ro de s\u00e9rie. Si vous n'\u00eates pas s\u00fbr que ces informations sont disponibles sur tous les serveurs, vous pouvez les identifier par l'adresse MAC. Ou les deux m\u00e9thodes simultan\u00e9ment, si les fournisseurs des serveurs sont diff\u00e9rents et que sur certains mod\u00e8les, l'information sur le num\u00e9ro de s\u00e9rie est simplement absente.<\/p>\n<p>Sur la base des informations obtenues, nous montons les dossiers r\u00e9seau \u00e0 partir du serveur d'installation et chargeons tout le n\u00e9cessaire (outils, firmwares, etc.).<\/p>\n<h3>Avec quels outils et comment configurer le serveur ?<\/h3>\n<p>\nJe fournirai des utilitaires pour linux pour certains fabricants. Tous les utilitaires sont disponibles sur les sites officiels des fournisseurs.<\/p>\n<p><img decoding=\"async\" alt=\"Provisionnement Bare-Metal soi-m\u00eame, ou pr\u00e9paration automatique des serveurs depuis z\u00e9ro\" src=\"\/wp-content\/uploads\/2020\/03\/fab53d1fa6e9a222ec69248439551ad7.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPour les firmwares, je pense que tout est clair. Ils sont g\u00e9n\u00e9ralement fournis sous forme de fichiers ex\u00e9cutables compress\u00e9s. Le fichier ex\u00e9cutable contr\u00f4le le processus de mise \u00e0 jour du firmware et renvoie un code d'erreur.<\/p>\n<p>Le BIOS et l'IPMI sont g\u00e9n\u00e9ralement configur\u00e9s via des mod\u00e8les. Si n\u00e9cessaire, le mod\u00e8le peut \u00eatre modifi\u00e9 juste avant le d\u00e9marrage.<\/p>\n<p>Les utilitaires RAID de certains fournisseurs peuvent \u00e9galement \u00eatre configur\u00e9s selon un mod\u00e8le. Si ce n'est pas le cas, il faudra \u00e9crire un script de configuration.<\/p>\n<p>L'ordre de configuration du RAID est le plus souvent le suivant :<\/p>\n<ul>\n<li>Demandons la configuration actuelle.<\/li>\n<li>S'il y a d\u00e9j\u00e0 des volumes logiques \u2013 nous les supprimons.<\/li>\n<li>Voyons quels disques physiques sont pr\u00e9sents et combien il y en a.<\/li>\n<li>Cr\u00e9ons un nouveau volume logique. Interrompons le processus en cas d'erreur.<\/li>\n<\/ul>\n<p><\/p>\n<h3>Comment obtenir les param\u00e8tres pour un serveur sp\u00e9cifique ?<\/h3>\n<p>\nSupposons que les configurations de tous les serveurs seront stock\u00e9es sur le serveur d'installation. Dans ce cas, pour r\u00e9pondre \u00e0 notre question, il faut d'abord d\u00e9cider : comment transf\u00e9rer les param\u00e8tres vers le serveur d'installation.<\/p>\n<p>Au d\u00e9but, il est tout \u00e0 fait possible de se contenter de fichiers texte. (\u00c0 l'avenir, on peut utiliser un fichier texte comme m\u00e9thode de sauvegarde pour la transmission des param\u00e8tres). <\/p>\n<p>On peut \u00ab partager \u00bb un fichier texte sur le serveur d'installation et ajouter son montage dans le script mount.sh.<\/p>\n<p>Les lignes seront, par exemple, de ce type :<\/p>\n<p><\/p>\n<p>Ces lignes seront transmises dans un fichier par l'ing\u00e9nieur depuis son poste de travail. Ensuite, lors de la configuration du serveur, les param\u00e8tres pour ce serveur sp\u00e9cifique seront lus depuis le fichier.<\/p>\n<p>Cependant, \u00e0 long terme, il est pr\u00e9f\u00e9rable d'utiliser une base de donn\u00e9es pour stocker les param\u00e8tres, les \u00e9tats et les journaux d'installation des serveurs.<\/p>\n<p>Bien s\u00fbr, une seule base de donn\u00e9es ne suffira pas, et il faudra cr\u00e9er une partie cliente, qui transmettra les param\u00e8tres \u00e0 la base. Mettre cela en \u0153uvre est plus complexe que pour un fichier texte, mais en r\u00e9alit\u00e9, ce n'est pas aussi difficile qu'il y para\u00eet. Il est tout \u00e0 fait possible d'\u00e9crire soi-m\u00eame une version minimale du client, qui transmettra simplement des donn\u00e9es \u00e0 la base de donn\u00e9es. On pourra ensuite am\u00e9liorer le programme client en mode libre (rapports, impression d'\u00e9tiquettes, envoi de notifications, et tout autre chose qui pourra venir \u00e0 l'esprit).<\/p>\n<p>En faisant une certaine requ\u00eate dans la base et en sp\u00e9cifiant le num\u00e9ro de s\u00e9rie du serveur, nous obtiendrons les param\u00e8tres n\u00e9cessaires pour la configuration du serveur.<\/p>\n<p>De plus, nous n'aurons pas besoin de pr\u00e9voir des verrouillages pour un acc\u00e8s simultan\u00e9, comme c'est le cas avec un fichier texte.<\/p>\n<p>Nous pouvons enregistrer le journal de configuration dans la base de donn\u00e9es \u00e0 toutes les \u00e9tapes et contr\u00f4ler le processus d'installation via des \u00e9v\u00e9nements et des drapeaux des \u00e9tapes de pr\u00e9paration.<\/p>\n<p><b>Maintenant, nous savons comment :<\/p>\n<ul>\n<li>charger le serveur via PXE ;<\/li>\n<li>transf\u00e9rer le contr\u00f4le \u00e0 notre script ;<\/li>\n<li>identifier le serveur \u00e0 pr\u00e9parer par son num\u00e9ro de s\u00e9rie ;<\/li>\n<li>configurer le serveur avec les utilitaires appropri\u00e9s ;<\/li>\n<li>transmettre les param\u00e8tres \u00e0 la base de donn\u00e9es du serveur d'installation \u00e0 l'aide de la partie cliente.<\/li>\n<\/ul>\n<p>\nNous avons compris comment :<\/p>\n<ul>\n<li>le serveur \u00e0 installer re\u00e7oit les param\u00e8tres n\u00e9cessaires depuis la base de donn\u00e9es ;<\/li>\n<li>toute la progression de la pr\u00e9paration est enregistr\u00e9e dans la base (logs, \u00e9v\u00e9nements, drapeaux des \u00e9tapes).<\/li>\n<\/ul>\n<p><\/b><\/p>\n<h3>Qu'en est-il des diff\u00e9rents types de logiciels \u00e0 installer ? Comment installer un hyperviseur, copier une VM et configurer tout cela ?<\/h3>\n<p>\nDans le cas du d\u00e9ploiement d'une image de syst\u00e8me de fichiers (Linux) sur du mat\u00e9riel, c'est assez simple :<\/p>\n<ul>\n<li>Apr\u00e8s avoir configur\u00e9 tous les composants du serveur, nous d\u00e9ployons l'image.<\/li>\n<li>Nous installons le chargeur grub.<\/li>\n<li>Nous cr\u00e9ons un chroot et configurons tout ce qui est n\u00e9cessaire.<\/li>\n<\/ul>\n<p>\n<b>Comment passer le contr\u00f4le \u00e0 l'installateur du syst\u00e8me d'exploitation (avec l'exemple d'ESXi).<\/b><\/p>\n<ul>\n<li>Nous organisons le passage de contr\u00f4le de notre script \u00e0 l'installateur d'hyperviseur via un fichier de r\u00e9ponses automatiques (kickstart) :<\/li>\n<li>Nous supprimons les partitions actuelles sur le disque.<\/li>\n<li>Nous cr\u00e9ons une partition de 500 Mo.<\/li>\n<li>Nous la marquons comme amor\u00e7able.<\/li>\n<li>Nous la formatons en FAT32.<\/li>\n<li>Nous copions les fichiers d'installation d'ESXi \u00e0 la racine de celle-ci.<\/li>\n<li>Nous installons syslinux.<\/li>\n<li>Nous copions syslinux.cfg dans \/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>Nous copions mboot.c32 dans \/syslinux.<\/li>\n<li>Dans boot.cfg, il doit y avoir kernelopt=ks=ftp:\/\/\/ks_esxi.cfg<\/li>\n<li>Nous red\u00e9marrons le serveur.<\/li>\n<\/ul>\n<p>\nApr\u00e8s le red\u00e9marrage du serveur, l'installateur d'ESXi se chargera \u00e0 partir de son disque dur. Tous les fichiers n\u00e9cessaires \u00e0 l'installation seront charg\u00e9s en m\u00e9moire, et l'installation d'ESXi commencera conform\u00e9ment au fichier de r\u00e9ponses automatiques sp\u00e9cifi\u00e9.<\/p>\n<p>Voici quelques lignes du fichier de r\u00e9ponses automatiques ks_esxi.cfg :<\/p>\n<pre><code class=\"plaintext\">%firstboot --interpreter=busybox\n\u2026\n# Obtention du num\u00e9ro de s\u00e9rie\n\nSYSSN=$(esxcli hardware platform get | grep Serial | awk -F \" \" '{print $3}')\n\n# Obtention de 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# Connexion au serveur d'installation NFS\n\nesxcli storage nfs add -H is -s \/srv\/nfs_share -v nfsshare1\n\n# Copie des param\u00e8tres de configuration SSH, pour utilisation avec le 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# Copie d'ovftool, pour le d\u00e9ploiement de VM maintenant, plus peut-\u00eatre utile plus tard\n\ncp -R \/vmfs\/volumes\/nfsshare1\/ovftool \/vmfs\/volumes\/datastore1\/\n\n# D\u00e9ploiement de la 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# Obtention de la cha\u00eene avec les param\u00e8tres de notre serveur\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# G\u00e9n\u00e9ration d'un script de configuration r\u00e9seau\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# D\u00e9finition du param\u00e8tre guestinfo.esxihost.id, indiqu\u00e9 avec le num\u00e9ro 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# Mise \u00e0 jour des informations dans la base\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# R\u00e9cup\u00e9ration des param\u00e8tres SSH\n\nrm -rf \/etc\/ssh\nmv \/etc\/ssh.tmp \/etc\/ssh\n\n# Configuration du r\u00e9seau et red\u00e9marrage\n\nesxcli system hostname set --fqdn=esx-${G_NICK}.x5.ru\n\/vmfs\/volumes\/datastore1\/netconf.sh\nreboot\n<\/code><\/pre>\n<p>\n\u00c0 ce stade, l'hyperviseur est install\u00e9 et configur\u00e9, et les machines virtuelles ont \u00e9t\u00e9 copi\u00e9es.<\/p>\n<p>Comment configurer maintenant les machines virtuelles ?<\/p>\n<p>Nous avons un peu trich\u00e9 : durant l'installation, nous avons d\u00e9fini le param\u00e8tre guestinfo.esxihost.id = \"$SYSSN\" dans le fichier VM1.vmx, o\u00f9 nous avons indiqu\u00e9 le num\u00e9ro de s\u00e9rie du serveur physique.<\/p>\n<p>Maintenant, apr\u00e8s le d\u00e9marrage, la machine virtuelle (avec le paquet vmware-tools install\u00e9) peut acc\u00e9der \u00e0 ce param\u00e8tre :<\/p>\n<pre><code class=\"plaintext\">ESXI_SN=$(vmtoolsd --cmd \"info-get guestinfo.esxihost.id\")<\/code><\/pre>\n<p>\nC'est-\u00e0-dire que la VM pourra s'identifier (elle conna\u00eet le num\u00e9ro de s\u00e9rie de l'h\u00f4te physique), faire une requ\u00eate \u00e0 la base de donn\u00e9es du serveur d'installation et obtenir les param\u00e8tres \u00e0 configurer. Tout cela est formalis\u00e9 dans un script qui doit \u00eatre ex\u00e9cut\u00e9 automatiquement au d\u00e9marrage de la guestos vm (mais une seule fois : RunOnce).<\/p>\n<p><b>Maintenant, nous savons comment :<\/p>\n<ul>\n<li>charger le serveur via PXE ;<\/li>\n<li>transf\u00e9rer le contr\u00f4le \u00e0 notre script ;<\/li>\n<li>identifier le serveur \u00e0 pr\u00e9parer par son num\u00e9ro de s\u00e9rie ;<\/li>\n<li>configurer le serveur avec les utilitaires appropri\u00e9s ;<\/li>\n<li>transmettre les param\u00e8tres \u00e0 la base de donn\u00e9es du serveur d'installation via la partie client ;<\/li>\n<li>configurer diff\u00e9rents types de logiciels, y compris d\u00e9ployer l'hyperviseur esxi et configurer les machines virtuelles (et tout automatiquement).<\/li>\n<\/ul>\n<p>\nNous avons compris comment :<\/p>\n<ul>\n<li>le serveur \u00e0 installer re\u00e7oit les param\u00e8tres n\u00e9cessaires depuis la base de donn\u00e9es ;<\/li>\n<li>toute la progression de la pr\u00e9paration est enregistr\u00e9e dans la base (logs, \u00e9v\u00e9nements, drapeaux des \u00e9tapes).<\/li>\n<\/ul>\n<p><\/b><br \/>\n<u><b>R\u00e9sultat :<\/b><\/u><\/p>\n<p>Je pense que l'unicit\u00e9 de cette solution r\u00e9side dans sa flexibilit\u00e9, sa simplicit\u00e9, ses possibilit\u00e9s et son universalit\u00e9.<\/p>\n<p>Veuillez \u00e9crire dans les commentaires ce que vous en pensez.<br \/>\n<br \/>Source : <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.2 - 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\/fr\/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.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"fr_FR\" \/>\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\/fr\/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\udd47Provisionnement Bare-Metal par soi-m\u00eame, ou Pr\u00e9paration automatique des serveurs depuis z\u00e9ro | ProHoster","description":"Bonjour, je suis Denis et l'un de mes domaines d'activit\u00e9 est le d\u00e9veloppement de solutions d'infrastructure chez X5.","canonical_url":"https:\/\/prohoster.info\/fr\/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":"fr_FR","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\/fr\/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\/fr\/wp-json\/wp\/v2\/posts\/74905","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/comments?post=74905"}],"version-history":[{"count":1,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/74905\/revisions"}],"predecessor-version":[{"id":158713,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/posts\/74905\/revisions\/158713"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media\/74906"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/media?parent=74905"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/categories?post=74905"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/fr\/wp-json\/wp\/v2\/tags?post=74905"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}