Les ingénieurs de centres de données sont souvent confrontés à la tùche de configuration initiale du serveur. De plus, le plus souvent, il est nécessaire de configurer non pas un ou deux équipements, mais plusieurs dizaines voire centaines. Chaque fois qu'un nouvel équipement nous arrive, nous devons non seulement le vérifier minutieusement avant de le mettre en service, mais également le configurer correctement pour qu'il fonctionne avec nos systÚmes internes.
Avant de procéder à la procédure plutÎt triviale de configuration du BIOS et de l'IPMI, nous devons nous assurer que chaque composant serveur dispose de la version de firmware requise. Dans la plupart des cas, à de rares exceptions prÚs, une version à jour est requise, disponible sur le site Web du fabricant de composants spécifiques. Aujourd'hui, nous allons vous dire comment nous avons eu l'idée d'utiliser le désormais populaire "framboise" pour accélérer le processus.
Quelle est la difficulté
Il semblerait que la tùche soit trÚs simple. Eh bien, prenons une distribution Linux en direct, déployez-la sur une clé USB, démarrez à partir de celle-ci et exécutez les procédures requises. Mais ce n'était pas là .
Le problÚme est que chaque fournisseur a ses propres méthodes et utilitaires pour mettre à jour le micrologiciel. De plus, tous ne sont pas capables de fonctionner correctement sous Linux. Certains composants, par exemple, le BIOS pour les serveurs SuperMicro, il est souhaitable de coudre sous MS-DOS. Pour certains composants, par exemple les cartes réseau Mellanox, dans certains cas, vous devez utiliser Windows et certains micrologiciels de support directement à partir de Linux.
Ainsi, nous devrons soit collecter une image multi-démarrage et l'écrire sur plusieurs dizaines de lecteurs flash, puis démarrer à partir d'elles pendant longtemps et de maniÚre persistante, soit trouver quelque chose de plus intéressant et plus rapide. Et c'est là que vient à l'esprit l'utilisation de cartes réseau de serveur avec prise en charge de PXE (Preboot eXecution Environment, prononcé pixie).
Nous prenons la "framboise", y déployons un serveur DHCP et TFTP, préparons les images nécessaires pour le chargement. Pour charger massivement plusieurs dizaines de serveurs, nous utilisons simplement temporairement un commutateur Gigabit 48 ports non géré et le tour est joué. Par défaut, la plupart des serveurs autorisent le démarrage PXE sans configuration supplémentaire, c'est donc idéal.
J'ai pris un excellent article comme base. de Romanenko_EugÚne, mais avec des corrections pour les fonctionnalités du Raspberry Pi et les tùches en cours de résolution. Commençons!
Confiture de framboise
La premiÚre fois que j'ai fait cela, la version la plus avancée du Raspberry Pi était la troisiÚme avec une carte réseau 100 Mbps. Ce n'est franchement pas suffisant pour la distribution de masse d'images lourdes, je recommande donc fortement d'utiliser le Raspberry Pi 4 actuellement disponible avec un port 1 Gb / s. Une autre recommandation est d'utiliser une carte mémoire rapide et volumineuse chaque fois que possible.
Maintenant à propos de la configuration initiale. Une interface graphique pour une telle chose n'est absolument pas nécessaire, vous pouvez donc télécharger la version Lite la plus simple du systÚme d'exploitation Raspberry Pi OS. Nous décompressons l'image et téléchargeons l'image sur la carte MicroSD de n'importe quelle maniÚre pratique, par exemple en utilisant dd:
sudo dd if=<_> of=/dev/mmcblk0 bs=1M
Pendant le processus de configuration, vous pouvez soit configurer de maniÚre traditionnelle en connectant un clavier et un moniteur, soit via SSH. Pour que le service SSH fonctionne au démarrage, créez un fichier vide nommé ssh dans la section / boot .
Ătant donnĂ© que le port rĂ©seau sera utilisĂ© pour le fonctionnement DHCP, vous pouvez soit utiliser une connexion Wi-Fi pour accĂ©der Ă Internet, soit connecter une autre carte rĂ©seau au Malinka via USB. En voici un, par exemple:
Maintenant, nous lançons le Raspberry Pi, le connectons à Internet et mettons à jour les référentiels et les packages logiciels:
sudo apt update
sudo apt upgrade
Puisque j'utilise une autre carte rĂ©seau, celle intĂ©grĂ©e doit ĂȘtre dĂ©finie sur une adresse IP statique. Ouvrez la configuration:
sudo nano /etc/dhcpcd.conf
Ajoutez les lignes suivantes:
interface eth0 static ip_address=192.168.50.1/24
Ici, eth0 est la carte réseau intégrée du Raspberry Pi. C'est à l'aide de celui-ci que la distribution des adresses IP et le chargement du réseau seront effectués. Maintenant, installez le serveur tftp:
sudo apt install tftpd-hpa
AprĂšs l'installation, ouvrez le fichier de configuration:
sudo nano /etc/default/tftpd-hpa
Nous apportons la ligne Ă la forme suivante:
TFTP_OPTIONS="--secure -l -v -r blksize"
En général, on peut tout laisser tel quel, mais tester à chaque fois sur une machine séparée n'est parfois pas trÚs pratique. Les options -l -v -r blksize vous permettent de tester tout cela dans une VM VirtualBox sans aucun problÚme, en résolvant un problÚme de compatibilité. Nous installons maintenant un serveur DHCP pour distribuer les adresses IP:
sudo apt install isc-dhcp-server
Ouvrez le premier fichier de configuration isc-dhcp-server:
sudo nano /etc/default/isc-dhcp-server
Nous indiquons explicitement l'interface sur laquelle le serveur DHCP est censé fonctionner:
INTERFACESv4="eth0"
Maintenant, ouvrez la deuxiĂšme configuration dhcpd.conf :
sudo nano /etc/dhcp/dhcpd.conf
Nous définissons les paramÚtres de serveur nécessaires, le sous-réseau à distribuer, et passons également le nom du fichier de chargeur:
default-lease-time 600; max-lease-time 7200; ddns-update-style none; authoritative; subnet 192.168.50.0 netmask 255.255.255.0 { range 192.168.50.2 192.168.50.250; option broadcast-address 192.168.50.255; option routers 192.168.50.1; filename "pxelinux.0"; }
Nous sauvegardons le fichier et maintenant nous devons télécharger le bootloader, les modules nécessaires et former le menu PXE. Commençons par télécharger un ensemble de chargeurs Syslinux, dans mon cas la version 5.01 est la plus pratique:
wget https://mirrors.edge.kernel.org/pub/linux/utils/boot/syslinux/syslinux-5.01.zip
Déballage:
unzip syslinux-5.01.zip
Nous devons maintenant trouver et extraire le module memdisk , qui peut charger des images ISO entiÚres dans la RAM, le chargeur pxelinux.0 et le reste des modules comboot . Nous exécutons séquentiellement les commandes qui trouveront et copieront tout ce qui se trouve dans le répertoire / srv / tftp:
find ./ -name "memdisk" -type f|xargs -I {} sudo cp '{}' /srv/tftp/
find ./ -name "pxelinux.0"|xargs -I {} sudo cp '{}' /srv/tftp/
find ./ -name "*.c32"|xargs -I {} sudo cp '{}' /srv/tftp/
AprÚs cette opération, nous devons créer un fichier de configuration directement pour le menu affiché sur l'écran PXE. Accédez à notre annuaire:
cd /srv/tftp
Créez un répertoire nommé pxelinux.cfg et accédez-y:
sudo mkdir pxelinux.cfg
cd pxelinux.cfg
Nous créons un fichier de configuration:
sudo nano default
à titre d'exemple, prenons l'excellente distribution GRML en direct et téléchargeons-la via PXE. Voici un exemple de configuration terminée:
UI vesamenu.c32 PROMPT 0 MENU TITLE Raspberry Pi PXE Server MENU BACKGROUND bg.png LABEL bootlocal menu label Boot from HDD kernel chain.c32 append hd0 0 timeout 0 TEXT HELP Boot from first HDD in your system ENDTEXT LABEL grml menu label GRML Linux KERNEL grml/boot/grml32full/vmlinuz APPEND root=/dev/nfs rw nfsroot=192.168.50.1:/srv/tftp/grml/ live-media-path=/live/grml32-full boot=live lang=us nomce apm=power-off noprompt noeject initrd=grml/boot/grml32full/initrd.img vga=791 LABEL reboot menu label Reboot kernel reboot.c32 TEXT HELP Reboot server ENDTEXT
Cela vaut probablement la peine de s'arrĂȘter un peu ici et de comprendre ce que fait chaque ligne:
- UI vesamenu.c32 - utilisez le module vesamenu.c32 pour afficher le menu;
- PROMPT 0 - mettez en surbrillance l'élément de menu zéro;
- TITRE DU MENU Serveur PXE Raspberry Pi - définir le nom général du menu;
- MENU BACKGROUND bg.png - élément de design, utilisez bg.png comme image de fond.
L'image d'arriĂšre-plan peut ĂȘtre faite Ă l'avance. Par dĂ©faut, une image 640x480 avec une profondeur de couleur ne dĂ©passant pas 24 bits, au format PNG ou JPG, convient. Il doit ĂȘtre copiĂ© Ă l'avance dans / srv / tftp . Jetons maintenant un Ćil Ă chaque section. La premiĂšre section a Ă©tĂ© introduite pour plus de commoditĂ©. Si vous devez dĂ©marrer Ă partir du premier disque dur, nous enregistrons:
- LABEL bootlocal - nom de la section interne;
- étiquette de menu Boot from HDD - comment le menu utilisateur sera affiché;
- kernel chain.c32 - nous utilisons le module chain.c32, qui peut démarrer à partir de divers supports;
- append hd0 0 - indique explicitement que le chargement doit ĂȘtre effectuĂ© Ă partir de la premiĂšre partition du premier disque dur;
- timeout 0 - ici, vous pouvez soit définir un délai d'expiration en secondes, aprÚs quoi le téléchargement démarrera automatiquement, soit en spécifiant 0 pour supprimer le minuteur.
- TEXT HELP - indique le début du texte d'aide pour l'utilisateur;
- Démarrez à partir du premier disque dur de votre systÚme - texte d'indication;
- ENDTEXT - indique la fin du texte de l'indice.
Ă peu prĂšs de la mĂȘme maniĂšre, nous formons la section pour le rechargement. La seule diffĂ©rence sera l'appel au module reboot.c32, qui envoie en fait la voiture pour redĂ©marrer. Eh bien, avant d'examiner ce que fait la troisiĂšme section, qui charge la distribution GRML, parlons de ce qui sera rĂ©ellement chargĂ© et comment.
Tout est un fichier
L'image ISO elle - mĂȘme est disponible sur le site Web de cette distribution en direct. TĂ©lĂ©chargez-le et renommez-le pour plus de commoditĂ©, dans l'exemple, nous prendrons la version 32 bits:
wget https://download.grml.org/grml32-full_2020.06.iso
mv grml32-full_2020.06.iso grml.iso
Maintenant, nous devons forcer cette image à démarrer. D'une part, vous pouvez utiliser le module memdisk et le forcer à charger d'abord tout le contenu "brut" de l'image directement dans la RAM puis à transférer le contrÎle du démarrage. Mais cette méthode n'est bonne que pour les trÚs petites images, par exemple, il est pratique de démarrer MS-DOS de cette façon. Les grandes images prennent beaucoup de temps à se charger en mémoire et ne fonctionnent pas toujours correctement.
Par consĂ©quent, vous devez toujours "vider" l'image et ne transfĂ©rer que le noyau et livefs pour dĂ©marrer. Mais d'autres fichiers du disque peuvent ĂȘtre fournis au systĂšme sur demande Ă l'aide du serveur NFS. Cette approche fonctionne beaucoup plus rapidement et de maniĂšre plus adĂ©quate, mais nĂ©cessite des gestes supplĂ©mentaires, tels que l'installation d'un serveur NFS.
Cela se fait de maniÚre élémentaire:
sudo apt install nfs-kernel-server
Afin de ne pas créer un désordre de fichiers, créez un répertoire séparé pour grml:
sudo mkdir /srv/tftp/grml
Nous devrons monter l'ISO, donc nous nous occuperons du point de montage temporaire:
sudo mkdir /tmp/iso
Nous montons l'image. Le systÚme vous avertira que l'image est montée en mode lecture seule:
sudo mount -o loop grml.iso /tmp/iso
Copiez récursivement le contenu de l'image dans notre répertoire séparé:
sudo cp -R /tmp/iso/* /srv/tftp/grml
Pour éviter les problÚmes de droits d'accÚs, nous changeons de propriétaire et attribuons récursivement à ce répertoire les droits de la série "Free home, live who you want":
sudo chown -R nobody:nogroup /srv/tftp/grml/
sudo chmod -R 755 /srv/tftp/grml/
Il est maintenant facile d'indiquer au serveur NFS qu'il doit fournir le répertoire / srv / tftp / grml à n'importe quelle adresse IP de notre sous-réseau:
sudo nano /etc/exports
Nous enregistrons la ligne:
/srv/tftp/grml 192.168.50.0/24(rw,sync,no_subtree_check)
Mettez à jour la liste et redémarrez le serveur NFS:
sudo exportfs -a
sudo systemctl restart nfs-kernel-server
Maintenant, nous avons enfin la possibilitĂ© de diviser correctement le processus de tĂ©lĂ©chargement en deux Ă©tapes conditionnelles. La premiĂšre Ă©tape consiste Ă charger le noyau et le systĂšme de fichiers en direct. La deuxiĂšme Ă©tape consiste Ă extraire tous les autres fichiers via NFS. Il est temps de jeter un Ćil Ă la section restante:
- LABEL grml - nom de la section;
- étiquette de menu GRML Linux - affichage dans le menu;
- KERNEL grml / boot / grml32full / vmlinuz - spécifiez le chemin vers le noyau, par rapport à la racine / srv / tftp ;
- APPEND root = / dev / nfs rw nfsroot = 192.168.50.1: / srv / tftp / grml / live-media-path = / live / grml32-full boot = live lang = us nomce apm = power-off noprompt noeject initrd = grml /boot/grml32full/initrd.img vga = 791 - ici, nous disons que nous utilisons NFS, écrivons les chemins vers la racine conditionnelle, définissons quelques paramÚtres supplémentaires recommandés dans la documentation et indiquons le chemin relatif à initrd.
Il ne reste plus qu'à démarrer le serveur TFTP et DHCP séquentiellement et vous pouvez essayer de démarrer dans PXE. Si tout est fait correctement, vous verrez le menu créé:
En sélectionnant l'élément GRML Linux, appuyez sur Entrée et voyez que nous avons un processus de chargement d'image réussi:
Ainsi, nous avons la possibilitĂ© de dĂ©marrer en rĂ©seau la distribution GRML, qui est populaire parmi les administrateurs systĂšme. Mais qu'en est-il du mĂȘme MS-DOS et comment vous pouvez prĂ©parer indĂ©pendamment une image pour flasher le BIOS. Parlons de cela plus loin.
Sous DOS, nous faisons confiance
Le systĂšme d'exploitation des annĂ©es 80 du dernier millĂ©naire est-il toujours utilisĂ© au 21e siĂšcle? Aussi Ă©trange que cela puisse paraĂźtre, mais pour certaines tĂąches spĂ©cifiques, MS-DOS est toujours pertinent et trĂšs utile pour lui-mĂȘme. L'une de ces tĂąches consiste Ă mettre Ă jour le micrologiciel du BIOS sur les serveurs.
Prenons comme exemple une carte mÚre, par exemple Supemicro X11SSL-F et téléchargez la mise à jour du BIOS sur le site officiel. à l'intérieur, nous voyons un ensemble similaire de fichiers:
user@linux:~//X11SSLF0_B26> ls -l 16592 -rw-r--r-- 1 user users 169120 1 2015 AFUDOSU.SMC -rw-r--r-- 1 user users 5219 20 2003 CHOICE.SMC -rw-r--r-- 1 user users 22092 27 2014 FDT.smc -rw-r--r-- 1 user users 3799 15 2016 FLASH.BAT -rw-r--r-- 1 user users 3739 22 2019 Readme for UP X11 AMI BIOS.txt -rw-r--r-- 1 user users 16777216 25 23:48 X11SSLF0.B26
Nous voyons que nous avons dĂ©jĂ un fichier BAT prĂȘt Ă l'emploi qui nous permet de flasher le BIOS. Mais pour ce faire, vous devez avoir un serveur dĂ©jĂ chargĂ© dans MS-DOS. Maintenant, nous allons vous montrer exactement comment procĂ©der.
Tout d'abord, nous devons prĂ©parer une petite image brute du disque dur avec le systĂšme d'exploitation. CrĂ©ez une nouvelle machine virtuelle via Oracle VM VirtualBox avec un petit disque de 32 mĂ©gaoctets. Nous sĂ©lectionnons le format QCOW, aprĂšs toutes les manipulations, il peut ĂȘtre facilement converti en brut.
Vous savez sĂ»rement tous oĂč vous pouvez obtenir des images de disquettes avec MS-DOS, alors montez-les dans la machine virtuelle et exĂ©cutez l'installation:
Nous changeons les images de disquette dans le lecteur virtuel deux fois et aprÚs littéralement 20 secondes, nous avons une image qcow avec un nouveau systÚme d'exploitation MS-DOS 6.22:
Le moyen le plus simple maintenant de copier des fichiers sur ce disque est de le monter sur n'importe quelle autre machine virtuelle exécutant Windows ou Linux. AprÚs cette opération, nous remontons le disque sur la machine virtuelle MS-DOS et vérifions que les fichiers sont visibles:
Si vous le souhaitez, vous pouvez mĂȘme configurer le chargement automatique pour exĂ©cuter un fichier BAT afin que le BIOS soit automatiquement flashĂ©. Mais rappelez-vous qu'il s'agit d'une opĂ©ration potentiellement dangereuse et que vous le faites Ă vos risques et pĂ©rils. DĂ©sactivez maintenant la machine virtuelle et convertissez-la en image brute Ă l'aide de qemu-img.
qemu-img convert -f qcow -O raw DOS.qcow dos.img
Copiez l'image IMG résultante dans un répertoire séparé de notre serveur TFTP:
sudo mkdir /srv/tftp/dos
sudo cp dos.img /srv/tftp/dos
Ouvrez maintenant la configuration /srv/tftp/pxelinux.cfg/default pour la modifier et ajoutez un autre élément au menu:
LABEL DOS kernel memdisk initrd dos/dos.img append raw
Nous sauvegardons la configuration et maintenant nous avons un nouvel élément de menu dans le menu PXE, en sélectionnant lequel nous chargeons l'image créée:
De la mĂȘme maniĂšre, vous pouvez crĂ©er des images contenant Ă la fois des utilitaires et pour vous amuser avec d'anciens jeux DOS.
Dans Windows Veritas
Essayons maintenant de démarrer l'image en direct à partir de WinPE (environnement de préinstallation Windows). Le téléchargement d'une version complÚte n'est souvent tout simplement pas nécessaire, seul un nombre limité de fonctions suffit. Cette chose trouve une réelle utilité lors du flashage de certains appareils.
Le mĂȘme Mellanox, absorbĂ© par Nvidia il y a un an, sort l'utilitaire Mellanox Firmware Tools pour flasher ses cartes rĂ©seau dans diffĂ©rentes versions pour WinPE. Bien sĂ»r, il existe dĂ©jĂ diverses options MFT disponibles, mais Ă plusieurs reprises, nous avons Ă©tĂ© confrontĂ©s Ă la nĂ©cessitĂ© de coudre la version WinPE.
CrĂ©er votre propre image WinPE et intĂ©grer les logiciels nĂ©cessaires n'est pas une tĂąche trop difficile, mais son explication dĂ©passe le cadre de cet article. Pour maĂźtriser ce processus en dĂ©tail, vous pouvez visiter l'excellente ressource winpe.ru . Ă titre d'exemple, nous prendrons n'importe quel assemblage prĂȘt Ă l'emploi pour dĂ©montrer le processus de lancement.
Souvent, ces assemblages sont soit des images iso, soit des archives rar avec des images iso. Avant de choisir une telle image, nous devons obtenir le chargeur de démarrage approprié.
wimboot est un bootloader assez simple capable de charger des images au format wim (Windows Imaging Format). Il peut ĂȘtre utilisĂ© soit en conjonction avec syslinux, soit avec son frĂšre plus avancĂ©, iPXE... CrĂ©ez un rĂ©pertoire sĂ©parĂ© dans / srv / tftp :
sudo mkdir wimboot
cd wimboot
TĂ©lĂ©chargez le bootloader lui-mĂȘme:
wget https://github.com/ipxe/wimboot/releases/latest/download/wimboot
Il est maintenant temps de monter l'image. Créez un répertoire temporaire dans / tmp :
sudo mkdir winpe
Accédez au répertoire contenant l'image d'assemblage ISO téléchargée et exécutez:
sudo mount -o loop <_> /tmp/winpe
CrĂ©ez un rĂ©pertoire dans / srv / tftp , oĂč nous placerons les fichiers dont nous avons besoin:
sudo mkdir /srv/tftp/winpe
Maintenant, nous recherchons dans l'assemblage et copions 4 fichiers:
sudo cp BOOTMGR /srv/tftp/winpe
sudo cp bcd /srv/tftp/winpe
sudo cp boot.sdi /srv/tftp/winpe
sudo cp boot.wim /srv/tftp/winpe
Le problĂšme est petit - ajoutez la section suivante au fichier de configuration /srv/tftp/pxelinux.cfg/default :
LABEL WinPE menu label WinPE com32 linux.c32 wimboot/wimboot append initrdfile=winpe/BOOTMGR,winpe/bcd,winpe/boot.sdi,winpe/boot.wim
En fait, nous utilisons le module linux.c32 pour charger le bootloader,
Il est important de prendre en compte le fait que les fichiers sont téléchargés via TFTP, ce qui n'est pas trÚs rapide et pratique. En général, vous pouvez modifier légÚrement la configuration et les étirer d'une maniÚre différente. Mais pour de simples tùches utilitaires, cela suffit amplement.
Au lieu d'une conclusion
Il n'y a pas de savoir-faire dans cet article, mais lorsque le besoin s'en est fait sentir, le Raspberry Pi a fait un excellent travail. Elle nâa pas eu besoin de chercher une prise de courant supplĂ©mentaire, le port USB du serveur gratuit le plus proche Ă©tait parfait. Il n'y a aucun problĂšme supplĂ©mentaire Ă trouver une place dans un rack bondĂ© de globes oculaires. Il fonctionne exactement comme il se doit et ses petites dimensions vous permettent de toujours l'avoir Ă portĂ©e de main.
Il existe en fait de nombreux tutoriels sur le net pour configurer le netboot. Le seul problÚme est que différents moyens et différentes approches sont utilisés pour différentes images. Choisir la bonne approche peut parfois prendre beaucoup de temps, et j'espÚre vraiment que ce matériel aidera beaucoup de gens à gagner du temps lors de la résolution de diverses tùches liées à la nécessité de déployer rapidement PXE sur un ordinateur monocarte Raspberry Pi.