Table des matières

Utiliser un Raspberry Pi comme serveur PXE sur la base d'une Raspbian Jessie Lite (Bêta-test) | en cours de rédaction

Cette page est largement inspirée de cet article http://nwcablingltd.com/?p=16

Je verrais pour tester avec une Raspbian Stretch Lite à l'occasion.

Prérequis

<note warning> Cette méthode est totalement expérimentale. Si vous souhaitez continuer et l'appliquer c'est à vos risques et périls. </note>

<note> Avec l'éditeur nano, pour enregistrer : Ctrl+O et pour quitter Ctrl+X. </note>

Préparation de la carte SD et y écrire l'image de Raspbian Lite

Il est nécessaire de :

https://www.raspberrypi.org/documentation/installation/installing-images/README.md

<note important> Comme j'ai un Raspberry Pi 1B, je suis parti sur cette base https://github.com/debian-pi/raspbian-ua-netinst/ plutôt que de partir sur NOOBS Lite https://www.raspberrypi.org/downloads/noobs/ ou sur l'image officielle Lite https://www.raspberrypi.org/downloads/raspbian/ qui sont elles compatibles pour tous les Raspberry Pi. </note>

Insérer la carte dans la Raspberry Pi et branchez la.

Préparation basique du Raspberry Pi et quelques configurations comme : changement du mot de passe de l'utilisateur pi, définition du mot de passe de l'utilisateur root, activer la connexion SSH

<note warning> Utiliser l'utilisateur root sur un serveur, même si cela facilite les manipulations, est fortement déconseillé. </note>

Une fois redémarré, il faudra se connecter avec l'utilisateur pi et le mot de passe est raspberry (rqspberry en qwerty).

Étendre l'espace disque de la carte SD, activer SSH et passer le clavier en français

raspi-config

Expand Filesystem

Enable SSH

Reboot : yes

Changer le mot de passe de l'utilisateur pi

sudo passwd pi

Définir le mot de passe root et activer SSH

sudo -i
passwd root

Éditer le fichier /etc/ssh/sshd_config :

Dans la rubrique # Authentification: commenter PermitRootLogin without-password et ajouter PermitRootLogin yes.

sudo apt-get install nano
sudo nano /etc/ssh/sshd_config
#PermitRootLogin without-password
PermitRootLogin yes

Faire la combinaison Ctrl+o pour enregistrer puis Ctrl+x pour sortir.

Configurer la langue et le fuseau horaire

dpkg-reconfigure locales
dpkg-reconfigure tzdata

Mettre à jour la listes des paquets et en installer quelques uns ... et nettoyer

apt-get update
apt-get dist-upgrade
apt-get install nano dnsmasq syslinux-common pxelinux nfs-kernel-server nfs-common
apt-get autoclean && apt-get autoremove

Mise en place du boot PXE avec comme exemple Ubuntu Mate 16.04 en 32 bit

<note> Les commandes peuvent se faire directement sur le Raspberry Pi ou bien en SSH. </note>

Création du dossier tftpboot et copie des fichiers nécessaires au boot

mkdir -p /srv/tftpboot/pxelinux.cfg
cp /usr/lib/PXELINUX/pxelinux.0 /srv/tftpboot/
cp /usr/lib/syslinux/memdisk /srv/tftpboot/
cp /usr/lib/syslinux/modules/bios/menu.c32 /srv/tftpboot/
cp /usr/lib/syslinux/modules/bios/ldlinux.c32 /srv/tftpboot/
cp /usr/lib/syslinux/modules/bios/libutil.c32 /srv/tftpboot/
cp /usr/lib/syslinux/modules/bios/libmenu.c32 /srv/tftpboot/

Création du dossier ubuntu qui va recevoir l'image ISO, récupération de l'image Ubuntu Mate 16.04.3 i386 et création du point de montage

mkdir -p /srv/tftpboot/ubuntu/
wget http://cdimage.ubuntu.com/ubuntu-mate/releases/16.04.3/release/ubuntu-mate-16.04.3-desktop-i386.iso -P /srv/tftpboot/ubuntu/
mkdir -p /srv/tftpboot/ubuntu/16.04

Édition du fichier fstab afin de monter l'ISO au boot

nano /etc/fstab

Ajouter la ligne suivante à la fin du fichier, enregistrer et fermer le fichier
/srv/tftpboot/ubuntu/ubuntu-mate-16.04.3-desktop-i386.iso /srv/tftpboot/ubuntu/16.04 udf,iso9660 user,loop 0 0

Pour tester le point de montage
mount –a

Pour voir le dossier listant les images ISO qui sont montées
ls -lash /srv/tftpboot/ubuntu/16.04/

Édition du fichier exports

nano /etc/exports

Ajouter la ligne
/srv/tftpboot/ubuntu/16.04/ *(ro,sync,no_wdelay,insecure_locks,no_root_squash,insecure)

<note> S'il y a une erreur à propos de portmapper, alors désinstaller les paquets suivants et les réinstaller :

apt-get purge rpcbind nfs-common nfs-kernel-server
apt-get install rpcbind nfs-common nfs-kernel-server

Il est alors nécessaire de refaire la modification du fichier exports </note>

Vérifier que le partage NFS est fonctionnel

showmount –e localhost

Créer et éditer le menu de démarrage du boot PXE

<note important> Dans ma box j'ai attribué l'adresse IP locale 192.168.0.25 au Raspberry Pi. La box donne l'adresse 192.168.0.1 comme porte de sortie. Il faut donc adapter cela à votre cas. </note>

nano /srv/tftpboot/pxelinux.cfg/default

Y ajouter ces lignes, enregistrer et fermer le fichier

DEFAULT menu.c32
PROMPT 0
MENU TITLE PXE Boot System
LABEL Ubuntu_16_04
MENU LABEL Ubuntu Live (16.04 32bit)
KERNEL /srv/tftpboot/ubuntu/16.04/casper/vmlinuz
APPEND root=/dev/nfs boot=casper netboot=nfs nfsroot=192.168.0.25:/srv/tftpboot/ubuntu/16.04/ initrd=/srv/tftpboot/ubuntu/16.04/casper/initrd.lz splash —

Éditer le fichier de configuration de dnsmasq

Normalement toutes les lignes du fichier de configuration de dnsmasq sont commentées par défaut avec un # devant toutes les lignes. Il suffit donc d'ajouter ces lignes à la fin du fichier.

<note important> Dans ma box j'ai attribué l'adresse IP locale 192.168.0.25 au Raspberry Pi. La box donne l'adresse 192.168.0.1 comme porte de sortie. Il faut donc adapter cela à votre cas. </note>

nano /etc/dnsmasq.conf

Y ajouter ces lignes, enregistrer et fermer le fichier

interface=eth0
dhcp-range=192.168.0.1,proxy
dhcp-boot=pxelinux.0
pxe-service=x86PC, “Linux”, pxelinux
enable-tftp
tftp-root=/srv/tftpboot
dhcp-boot=pxelinux.0,raspberrypi,192.168.0.25

Redémarrer alors dnsmasq

service dnsmasq restart

A ce point vous devriez être capable de booter en PXE et de sélectionner Ubuntu dans le menu qui démarrera en tant que live-CD. Ça a fonctionné pour moi, j'ai pu lancer le live-CD sur un ordinateur raccordé au réseau.