Conclusions

Conclusions

PXE (Environnement d'exécution pré-bot) est un environnement client-serveur qui permet de démarrer et d'installer des systèmes d'exploitation sans avoir besoin de supports physiques. L'idée principale est assez simple: à un stade très précoce, un client obtient une adresse IP à partir d'un serveur DHCP et télécharge les fichiers nécessaires pour effectuer le processus de démarrage via le TFTP protocole (FTP trivial). Dans ce tutoriel, nous utiliserons le dnsmasq Application: il peut être utilisé comme serveur DHCP principal ou dans proxy dhcp MODE Si un autre serveur DHCP existe dans le réseau; Il fournit également le service TFTP utilisé pour transférer des fichiers.

Dans ce tutoriel, vous apprendrez:

  • Comment configurer pxelinux et créer un menu de démarrage
  • Comment extraire les fichiers d'une ISO et configurer la structure de fichiers appropriée
  • Comment configurer DNSMASQ en tant que serveur DHCP standard ou proxy
  • Comment configurer le serveur TFTP intégré dans DNSMASQ
  • Comment autoriser le trafic à travers les ports nécessaires à l'aide de UFW
Raspberry Pi en tant que serveur de démarrage PXE

Exigences et conventions logicielles utilisées

Exigences logicielles et conventions de ligne de commande Linux
Catégorie Exigences, conventions ou version logicielle utilisée
Système Raspberry Pi OS (auparavant connu sous le nom de Raspbian)
Logiciel DNSMASQ, PXELINUX, SYSLINUX-EFI
Autre Autorisation
Conventions # - nécessite que les commandes Linux sont exécutées avec des privilèges racine soit directement en tant qu'utilisateur racine, soit par l'utilisation de Sudo commande
$ - Exige que les commandes Linux sont exécutées en tant qu'utilisateur non privilégié régulier

Installation de packages

La première chose que nous devons faire est d'installer certains packages essentiels:

  • dnsmasq
  • pxelinux
  • syslinux-efi

DNSMASQ fournit à la fois le DHCP et le TFTP prestations de service; Pxelinux est un membre du chargeur de démarrage du syslinux famille, et est spécialement conçu pour l'environnement PXE; Le package syslinux-efi_ contient des bibliothèques nécessaires pour prendre en charge EFI clients. Pour installer les packages sur le Raspberry Pi OS, nous pouvons fonctionner:

$ sudo apt-get update && sudo apt-get install dnsmasq pxelinux syslinux-efi 

Structure de fichiers

Une fois les packages nécessaires installés, nous pouvons procéder et configurer la structure du fichier. Pour le bien de ce tutoriel, la racine de toute la configuration sera la / mnt / data / netboot répertoire, qui sera également utilisé comme TFTP root (défini à l'intérieur du fichier de configuration DNSMASQ); Tous les fichiers nécessaires seront stockés à l'intérieur.

Fichiers et modules syslinux

Nous voulons pouvoir prendre en charge le démarrage des clients dans Bios et EFI Le mode, donc la première chose que nous devons faire est de créer deux répertoires nommés d'après ces architectures à l'intérieur / mnt / data / netboot:

$ mkdir / mnt / data / netboot / bios, efi64 


Chaque architecture a besoin de bibliothèques syslinux spécifiques pour fonctionner. Nous les copie dans les répertoires appropriés:

$ cp \ / usr / lib / syslinux / modules / bios / ldlinux, Vesamenu, libcom32, libutil.C32 \ / USR / LIB / PXELINUX / PXELINUX.0 \ / mnt / data / netboot / bios $ cp \ / usr / lib / syslinux / modules / efi64 / ldlinux.e64 \ / usr / lib / syslinux / modules / efi64 / Vesamenu, libcom32, libutil.c32 \ / usr / lib / syslinux.EFI / EFI64 / SYSLINUX.efi \ / mnt / data / netboot / efi64 

Fichiers de distribution

À ce stade, nous devons créer le répertoire qui hébergera les distributions que nous voulons mettre à disposition dans notre menu de démarrage. Appelons ça botte:

$ mkdir / mnt / data / netboot / boot 

Dans ce tutoriel, comme exemple, nous travaillerons avec une image Debian Netinstall. Pour plus de commodité, je supposerai une ISO précédemment vérifiée (jetez un œil à notre article sur la vérification de l'intégrité et de la signature d'une image de distribution avec GPG si vous souhaitez savoir comment vérifier l'intégrité et la signature d'une image de distribution) pour être disponible sur le système de fichiers RPI dans le / mnt / data / isos annuaire.

Nous créons le chemin approprié à l'intérieur / mnt / data / netboot / boot, Nommer les répertoires après l'architecture, le nom et la version du système que nous voulons fournir dans notre menu (dans ce cas AMD64 - Debian 10):

$ mkdir -p / mnt / data / netboot / boot / amd64 / debian / 10 

Ce choix de chemin est arbitraire, alors n'hésitez pas à créer le vôtre. À ce stade, nous devons monter la distribution ISO et copier les fichiers dans le répertoire de destination. Pour monter l'ISO, nous courons:

$ Sudo Mount -o Loop -T ISO9660 / MNT / DATA / ISOS / DEBIAN-10.4.0-AMD64-NETINST.ISO / Média 

Une fois l'ISO monté, ses fichiers seront accessibles sous /médias. J'aime utiliser rsync pour les copier:

$ sudo rsync -av / media / / mnt / data / netboot / boot / amd64 / debian / 10 

Une fois les fichiers copiés, nous pouvons déclencher l'ISO:

$ sudo umount / média 

À l'étape suivante, nous verrons comment créer un menu de démarrage à l'aide de la syntaxe syslinux.

Création du menu de démarrage

Maintenant que nous avons les fichiers de distribution en place, nous pouvons créer le menu de démarrage. à l'intérieur de notre Root TFTP, (/ mnt / data / netboot Dans notre cas), nous créons le pxelinux.CFG annuaire:

$ mkdir / mnt / data / netboot / pxelinux.CFG 

À l'intérieur de pxelinux.CFG répertoire nous créons un fichier appelé défaut et collez la configuration suivante à l'intérieur:

Titre du menu PXE Menu de démarrage par défaut Vesamenu.C32 Label Menu local Boot Boot From Local Drive LocalBoot 0xffff menu Démarrer AMD64 Titre du menu AMD64 Menu Démarrer Debian Menu Titre.AMD / VMLINUZ APPEND VGA = 788 INITRD = :: BOOT / AMD64 / DEBIAN / 10 / INSTALLATION.AMD / GTK / Initrd.GZ --- Étiquette de menu d'installation de l'étiquette silencieuse ^ Installer le noyau :: Boot / AMD64 / Debian / 10 / Installer.AMD / VMLINUZ APPEND VGA = 788 INITRD = :: BOOT / AMD64 / DEBIAN / 10 / INSTALLATION.AMD / Initrd.GZ --- fin du menu du menu silencieux fin 

La configuration ci-dessus générera un menu imbriqué construit en suivant le chemin du répertoire que nous avons créé à l'intérieur du botte annuaire. Encore une fois, celui ci-dessus n'est qu'un exemple. Vous pouvez créer et structurer le menu comme vous le souhaitez; Tout ce que vous avez à faire est d'utiliser la syntaxe appropriée, comme expliqué dans la page dédiée Syslinux Wiki.

Le menu contient une entrée pour permettre à l'utilisateur de démarrer à partir du disque dur local, un sous-menu avec le AMD64 étiquette et deux entrées pour la distribution Debian, installgui et installer. Le premier lance l'installateur de distribution en mode graphique, le second en mode textuel qui semble utiliser ncurses bibliothèques.

Comment pouvons-nous connaître les paramètres exacts à utiliser dans le NOYAU et AJOUTER lignes? Nous pouvons jeter un œil à la configuration du menu qui existe à l'intérieur du contenu de distribution que nous avons extrait de l'ISO. Dans notre cas, par exemple, / mnt / data / netboot / boot / amd64 / debian / 10 / isoinux / menu.CFG. Malheureusement, toutes les distributions n'utilisent pas la même syntaxe, nous devons donc faire attention et adapter la configuration au besoin.

Une chose que nous avons dû nous adapter à partir de la configuration d'origine, c'est le chemin du chemin du vmlinuz et initrd.gz des dossiers. N'oubliez pas que nous accédons à ces fichiers via TFTP!

Normalement, le chemin des fichiers est interprété comme relatif au répertoire racine TFTP, mais dans la configuration ci-dessus, comme vous pouvez l'observer, nous avons utilisé le :: syntaxe (par exemple nous avons écrit :: boot / amd64 / debian / 10 / installer.AMD / VMLINUZ Pour référencer l'image du noyau). Pourquoi nous avons fait ça?

Depuis que nous avons créé deux répertoires qui maintiennent les bibliothèques qui soutiennent bios et efi64 mode et nous voulons utiliser la même configuration de menu pour les deux, nous devons lier le pxelinux.CFG répertoire dans les deux, donc nous devons référencer le TFTP Root d'une manière «absolue». Le :: Le symbole nous permet de faire exactement ceci: c'est un moyen de référencer le chemin absolu vers la racine TFTP.

Supposer que notre répertoire de travail actuel est / mnt / data / netboot, Pour lier la configuration du menu dans les répertoires mentionnés ci-dessus, nous pouvons émettre la commande suivante:

$ ln -rs pxelinux.CFG BIOS && ln -rs pxElinux.CFG EFI64 


Ici, nous avons utilisé le -r option du LN commande pour créer relatif liens symboliques. À ce stade, notre arbre d'annuaire devrait ressembler à ça:

/ mnt / data / netboot ├fique.C32 │ ├fique.C32 │ ├fique.c32 │ ├fique.0 │ ├fique.CFG ->… / pxelinux.CFG │ └fique.C32 ├── Boot │ └fique.e64 │ ├fique.C32 │ ├fique.c32 │ ├fique.CFG ->… / pxelinux.CFG │ ├fique.efi │ └fique.C32 └fique.CFG └fiques par défaut 

Nous pouvons maintenant configurer dnsmasq.

Configurer dnsmasq

Le fichier de configuration DNSMASQ est / etc / dnsmasq.confli. Certains des paramètres qui peuvent être placés à l'intérieur sont commentés; On peut trouver plus d'informations à leur sujet dnsmasq manuel. Nous ne considérerons que ceux nécessaires à notre configuration.

Désactiver la fonctionnalité DNS

La première chose que nous voulons faire est de désactiver le service DNS intégré dans DNSMASQ: nous n'avons besoin que des fonctionnalités DHCP et TFTP offertes par l'application. Pour atteindre notre objectif, nous pouvons utiliser le port Option: il est utilisé pour déterminer quel port doit être utilisé pour le DNS; définir sa valeur sur 0 désactive le service. Nous pouvons ajouter les instructions à la fin du fichier de configuration.

port = 0 

Spécifiez l'interface réseau pour les demandes DHCP

La deuxième chose que nous voulons faire est de spécifier l'interface réseau qui sera utilisée pour écouter les demandes DHCP. Dans notre cas, cette interface est ETH0, Alors nous écrivons:

interface = eth0 

Si nous ne voulons pas utiliser une interface spécifique, nous pouvons spécifier une adresse IP, en utilisant le adhésion à l'écoute option à la place.

Spécification du mode IP Range / Proxy

Cette étape de configuration est très importante et change en fonction de notre configuration réseau.

Si le service DHCP fourni par DNSMASQ est le seul Dans le réseau, dans cette étape, nous devons simplement configurer la plage d'adresses IP qui seront affectées aux clients, et éventuellement un temps de location Par exemple:

DHCP-Range = 192.168.0.100 192.168.0.200,12h 

Dans la ligne ci-dessus, la gamme des adresses IP disponibles est définie en séparant les limites inférieures et supérieures par une virgule. Dans ce cas, nous avons défini une gamme qui va de 192.168.0.100 pour 192.168.200; Nous avons également réglé un temps de location de 12h.

Le deuxième cas est probablement le plus courant dans une configuration standard / maison, où généralement le service DHCP est fourni par un routeur. Si tel est le cas, DNSMASQ doit être réglé pour s'exécuter en mode proxy afin d'éviter les conflits. Dans ces cas, nous pouvons écrire:

DHCP-Range = 192.168.0.0, proxy 

Nous avons entré deux éléments séparés par une virgule: le premier est le adresse du sous-réseau (192.168.0.0), le second est le mot-clé «proxy».

Activer le serveur TFTP

À ce stade, nous devons activer le dnsmasq Serveur TFTP intégré: nous l'utiliserons pour servir les fichiers nécessaires aux clients pour démarrer. Tout ce que nous avons à faire pour accomplir cette tâche est d'ajouter la ligne suivante dans le fichier de configuration:

Activer TFTP 

Nous devons également définir le répertoire qui doit être utilisé comme Root TFTP. Ce répertoire, comme nous en avons déjà discuté, hébergera les fichiers partagés. Dans notre cas, ce répertoire est / mnt / data / netboot (Le par défaut est / var / ftpd):

tftp-root = / mnt / data / netboot 

Définir le fichier de démarrage en fonction de l'architecture client

Le pxelinux Bootloader est capable de travailler à la fois en mode EFI et BIOS, nous devons donc trouver un moyen de servir le fichier approprié en fonction du mode utilisé par le client. La question est de savoir comment le client communique ces informations?

DHCP utilise une série d'options pour l'échange d'informations: option 93 (Client-Arch) est utilisé pour transmettre des informations sur l'architecture client. Le tableau ci-dessous affiche les valeurs numériques et chaînes de l'option et les architectures qu'ils font référence:

Valeur d'option Valeur de chaîne Architecture
0 x86pc Intel x86pc
1 PC98 NEC / PC98
2 IA64_EFI Efi itanium
3 Alpha Dec alpha
4 Arc_x86 Arc x86
5 Intel_lean_client Client Intel Lean
6 IA32_EFI EFI IA32
7 BC_EFI EFI BC
8 Xscale_efi Efi xscale
9 X86-64_efi EFI x86-64

Pour spécifier quel fichier doit être fourni pour le mode approprié utilisé par le client, nous pouvons utiliser le service PXE option. Pour x86pc Nous pouvons saisir la ligne suivante:

PXE-Service = x86pc, "Pxelinux (BIOS)", BIOS / Pxelinux 


Nous avons fourni trois valeurs séparées par une virgule à l'option: la première est le type de système client (x86pc), le second est le texte du menu Et le troisième est le fichier qui sera téléchargé par le client pour effectuer le démarrage. Le chemin du fichier est par rapport à la racine TFTP. Dans ce cas, il se trouve à l'intérieur du bios répertoire que nous avons créé auparavant et s'appelle pxelinux.0: le nom doit être signalé sans le .0 extension, comme vous pouvez le voir ci-dessus.

Pour le EFI x86-64 Mode, à la place, nous ajoutons:

pxe-service = x86-64_efi, "pxelinux (efi)", efi64 / syslinux.EFI 

Journalisation de configuration

Une autre chose qui est utile à activer est dnsmasq journalisation, afin de garder une trace de l'activité DHCP et TFTP. Pour accomplir cette tâche, nous ajoutons le quai instruction à notre configuration et définissez le fichier qui doit être utilisé pour stocker les messages avec le facilité de rondins instruction:

journal log-facilité = / var / log / dnsmasq.enregistrer 

Enregistrer la configuration et le redémarrage du service

À ce stade, notre configuration devrait ressembler à ceci:

port = 0 interface = ETH0 DHCP-Range = 192.168.0.0, proxy activer-tftp tftp-root = / mnt / data / netboot pxe-service = x86pc, "pxelinux (bios)", bios / pxelinux pxe-service = x86-64_efi, "pxelinux (efi)", efi64 / syslinux.EFI Log-Queries Log-Facility = / var / log / dnsmasq.enregistrer 

Nous pouvons enregistrer les modifications que nous avons apportées à la / etc / dnsmasq.confli fichier, et enfin redémarrer le dnsmasq service:

$ sudo systemctl redémarrer dnsmasq 

Configuration du pare-feu

Pour que notre configuration fonctionne correctement, nous devons également autoriser le trafic entrant via notre pare-feu via certains ports spécifiques. Dans ce tutoriel, je suppose l'utilisation du ufw l'extrémité avant. Les ports que nous devons autoriser le trafic entrant sont:

  • 67 / UDP
  • 69 / UDP
  • 4011 / UDP

Pour permettre le trafic, nous pouvons exécuter la commande suivante:

$ sudo ufw permettre 67 / udp $ sudo ufw permettre 69 / udp $ sudo ufw permettre 4011 / udp 

Démarrage

À ce stade, si la machine client est connectée au réseau via Ethernet et que l'option de démarrage PXE est choisie comme «source» de démarrage (assurez-vous que la fonctionnalité est activée!), nous devrions pouvoir voir le menu de démarrage PXE:

Le menu PXE Boot

Une fois que nous avons sélectionné AMD64 -> Debian -> Installation graphique Les fichiers appropriés seront téléchargés et l'installateur debian devrait apparaître:

Installateur graphique Debian

Il est maintenant possible de procéder à l'installation.

Conclusions

Dans ce didacticiel, nous avons vu comment effectuer les étapes nécessaires pour tourner un Raspberry Pi dans un serveur de démarrage PXE: nous avons vu comment installer et configurer DNSMASQ et le chargeur de démarrage PxELinux; Nous avons également appris à créer un menu Syslinux et la structure de fichiers appropriée; Enfin, nous avons vu quels ports s'ouvrir pour que la configuration fonctionne. Les doutes? Des questions? N'hésitez pas à commenter et à demander de l'aide!

Tutoriels Linux connexes:

  • Comment se connecter à un serveur FTP à l'aide de Python
  • Configuration du serveur FTP sur Linux
  • Liste des clients FTP et installation sur Ubuntu 22.04 Linux…
  • Liste des clients FTP et installation sur Ubuntu 20.04 Linux…
  • Comment configurer le serveur et le client FTP / SFTP sur Almalinux
  • OpenLitespeed comme proxy inversé
  • Tutoriel de configuration de Squid Proxy sur Linux
  • Comment exécuter le Raspberry Pi OS dans une machine virtuelle avec…
  • Choses à installer sur Ubuntu 20.04
  • Installez le proxy Tor sur Ubuntu 20.04 Linux