PXE : Démarrer un Raspberry Pi sur un NAS Synology

Grâce au PXE (Pre-boot eXecution Environment), nous allons démarrer un Raspberry Pi depuis le réseau en récupérant l’image d’un système d’exploitation présent sur un NAS Synology. Nous vous proposons un pas-à-pas pour amorcer votre Raspberry Pi et exécuter un système d’exploitation sur un NAS Synology. Si le sujet vous semble compliqué, ce guide devrait vous aider à comprendre et mettre en place ce système de démarrage à travers un réseau.

PXE : Raspberry Pi & NAS Synology

Les cartes micro-SD ont beau s’améliorer, elles restent tout de même fragiles et pas toujours rapides. Depuis un moment, j’avais dans l’idée d’utiliser mon Raspberry-Pi en mode kiosque pour de la supervision (ou juste pour de la navigation internet). Comme je dispose d’un NAS Synology, je me suis lancé ! Attention, l’amorçage PXE nécessite l’utilisation d’un réseau filaire RJ45. Les débits et la stabilité des connexions Wi-Fi posent très souvent des soucis.

Pré-requis Synology

Tout d’abord, il faut que DHCP soit activé et utilisé sur le NAS. Il faudra donc désactiver celui de votre Box si ce n’est pas déjà fait. Si vous ne le faites pas, vous risquez de rencontrer des erreurs dans l’attribution des adresses IP… voire une incapacité d’en récupérer.

Le paquet DHCP Server (ou Serveur DHCP) doit être téléchargé et installé depuis le Centre de Paquet.

Toujours sur le NAS Synology, il faut se rendre dans le menu Fournisseur et positionner une option PXE comme ceci :

  • Nom : PXEClient
  • Code à saisir : 43
  • Valeur à saisir : Raspberry Pi Boot

 

Il faut aussi activer au niveau des Services de fichiers, le NFS et la prise en charge de la version 4 :

 

Nous allons aussi modifier la taille des paquets en lecture et écriture pour le NFS, pour cela il faut cliquer sur Paramètres avancés et sélectionner 32KB.

Pour la fonctionnalité PXE, c’est aussi un pré-requis, mais on y reviendra par la suite, ca fait partie du DHCP.

Coté Raspberry Pi

On va faire simple et utiliser l’utilitaire Raspberry Pi Imager pour écrire l’image sur la carte micro-SD. On lance donc l’utilitaire « Raspberry Pi Imager » :

Dans système d’exploitation, on va choisir la version 64 bits lite. Il faut sélectionner le menu « Raspberry Pi OS (other) »

On choisit ensuite l’image Raspberry Pi OS Lite (64-bit)

On sélectionne ensuite la carte micro-SD et on clique sur ÉCRIRE

On confirme par OUI

La phase d’écriture se déroule…

Puis la phase de vérification

Et enfin on attend le message de fin pour retirer la carte micro-SD.

On insert la carte micro-SD dans le lecteur du Raspberry-Pi et on attend … (resize du FS et reboot). Il est temps de configurer le système pour qu’il puisse booter en réseau, pour cela, passer la commande suivante :

sudo echo program_usb_boot_mode=1 | sudo tee -a /boot/config.txt

Cela ajoute la ligne « program_usb_boot_mode=1 » à la fin du fichier /boot/config.txt On redémarre et on vérifie que la modification s’applique bien

vcgencmd otp_dump | grep 17:

Et on s’assure que le résultat est bien « 0x3020000a » ou « 3020000a »

Optionnel : Changer la disposition clavier, changer le mot de passe par défaut et lancer sshd au démarrage.

Pour cela on exectue la commande suivante :

sudo raspi-config

  • Pour le mot de passe : Menu 1 (System Options) puis sous-menu S3 (Password)
  • Pour SSH : Menu 3 (Interface Options) puis sous-menu P2 (SSH)
  • Pour le clavier : Menu 5 ( Localisation Options) puis sous-menu L3 (Keyboard)

On peut à présent éteindre le Raspberry-Pi et retirer la carte micro-SD pour la connecter au Synology (via un adaptateur bien sûr !)

Retour sur le Synology

Nous allons, dans un premier temps, configurer et activer le service tftp. Il faut se rendre dans le panneau de configuration et créer un dossier partagé nommé par exemple « tftp ».

Dans ce répertoire partagé, nous allons créer un sous répertoire qu’on nomme, par exemple : raspios. Ce répertoire sera l’équivalent de la partition boot de la carte micro-SD.

On va donc synchroniser (rsync) la partition de boot de la carte micro-SD vers ce sous-répertoire raspios. Pour cela il faut ouvrir une session SSH sur le NAS avec le compte admin. A vous de voir quel utilitaire prendre pour se connecter :

ssh admin@adresseipdunas -p portTCP (-p si vous avez changé le port TCP par défaut qui est le 22)

On synchronise :

admin@nas:~$ sudo rsync -axv --progress /volumeUSB2/usbshare2-1/ /volume1/tftp/raspios/

Dans mon cas la partition de boot de la carte micro-SD est montée sur /volumeUSB2/usbshare2-1/ car j’ai un disque externe monté sur volumeUSB1, donc à adapter selon votre configuration. A présent, nous allons activer le service tftp et définir la racine de ce service. Pour cela, il faut aller dans le Panneau de configuration > Service de fichiers > Avancé et dans la zone TFTP cocher la case « activer le service TFTP » et selectionner le répertoire /tftp/raspios.

Voilà, pour la partie boot c’est terminé. Nous allons voir à présent pour la racine (/) du système. Pour cela, il faut créer un répertoire partagé que nous nommerons par exemple « raspios ».

Et nous allons affecter les autorisations NFS suivantes :

Dans ce répertoire, nous allons synchroniser la partition principale (root ou encore /) de la carte SD :

~# sudo rsync -axv --progress /volumeUSB2/usbshare2-2/ /volume1/raspios/

Il faut ensuite modifier le fichier ftab comme ceci <

~# sudo vi /volume1/raspios/etc/fstab
proc /proc proc defaults 0 0
192.168.1.1:/volume1/tftp/raspios /boot nfs defaults,proto=tcp 0 1
# a swapfile is not a swap partition, no line here
# use dphys-swapfile swap[on|off] for that

On se positionne dans le répetoire /volume1/tftp/raspios/ pour modifier le fichier cmdline.txt

~# cd /volume1/tftp/raspios/

/volume1/tftp/raspios$ cp cmdline.txt cmdline.txt.bak

Et on remplace la ligne dans cmdline.txt par
console=serial0,115200 smsc95xx.macaddr=aa:bb:cc:dd:ee:ff console=tty1 root=/dev/nfs rootfstype=nfs nfsroot=192.168.1.1:/volume1/raspios,proto=tcp,rsize=32768,wsize=32768 rw ip=dhcp rootwait elevator=deadline

Et voilà ! il ne reste plus qu’à démarrer votre Raspberry-Pi avec un cable RJ45 branché.

Si vous souhaitez faire la même chose depuis un ordinateur (Windows par exemple), il existe aussi un autre excellent tuto ici… toujours en français. Avec un PC, l’amorçage PXE est embarqué dans le BIOS/UEFI… donc pas besoin de stockage physique dans l’ordinateur.