RPI Pxe Server

De Wiki LOGre
Aller à : navigation, rechercher


Introduction

Pour des raisons de confidentialite, typiquement dans un cybercafe ou sur une machine etrangere, on peut vouloir booter un ordinateur sur un autre OS autre que celui deja installe. Une solution simple est de booter un live-CD ou un USB-live disk seulement il arrive frequemment que les Bios de ces PCs soient verrouilles pour n autoriser que le boot sur le disque dur local et parfois booter par Ethernet. Le but du server Pxe sur RaspPi est de permettre en quelque minute le boot du PC sur un periph USB.

Prerequis

  • Une carte Raspberry avec un Raspbian installe
  • Un cable ethernet pour relier le RPI au PC

Installation

L installation part du principe que l adresse IP du RPI qui va servir le PXE est 192.168.0.1

  • Si le RPI n est pas connecte par ethernet on active l interface ethernet et on lui attribue une adresse IP :
pi@raspberrypi:~$ sudo ifconfig eth0 up 192.168.0.1
  • On verifie que l interface est bien active :
pi@raspberrypi:~$ ifconfig eth0

doit donner un resultat du genre

eth0      Link encap:Ethernet  HWaddr b8:27:eb:0e:5e:e3
          inet addr:192.168.0.1  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:889 errors:0 dropped:0 overruns:0 frame:0
          TX packets:994 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:55658 (54.3 KiB)  TX bytes:901366 (880.2 KiB)
  • On install le packet PXE
pi@raspberrypi:~$ sudo apt-get install pxe
  • Il est possible que le apt-get install echoue en indiquant que le server TFTP n a pas reussi a demarrer. Cela vient generalement du fait que le server veut du IPv6 alors qu il n y en a pas par defaut sur le RPI. Un moyen de contourner cette difficulte est de modifier la configuration du server TFTP pour utiliser l IPv4
pi@raspberrypi:~$ sudo vi /etc/default/tftpd-hpa

et remplacer la ligne

TFTP_OPTIONS="--secure"

par

TFTP_OPTIONS="-4 --secure"
  • Relancer l installation du package, qui devrait cette fois ci reussir !
  • Nous allons maintenant configurer le serveur PXE
pi@raspberrypi:~$ sudo vi /etc/pxe.conf
  • Passer default_address a 192.168.0.1
interface=eth0
default_address=192.168.0.1
  • passer use_broadcast a 1
# enable broadcast?
use_broadcast=1
  • passer tftp_dbase a /srv/tftp pour etre coherent avec la configuration du serveur TFTP
# tftpd base dir
tftpdbase=/srv/tftp
  • On relance PXE
pi@raspberrypi:~$ sudo /etc/init.d/pxe restart
  • On edite le fichier de configuration du serveur DHCP
pi@raspberrypi:~$ sudo vi /etc/dhcp/dhcpd.conf

pour configurer l attribution d adresse IP et indiquer l addresse du serveur PXE au PC

subnet 192.168.0.0 netmask 255.255.255.0 {
       range 192.168.0.70 192.168.0.100;
       filename "pxelinux.0";
       next-server 192.168.0.1;
       option subnet-mask 255.255.255.0;
       option broadcast-address 192.168.0.255;
       option routers 192.168.0.1;
}
  • Il faut ensuite copier dans le repertoire /srv/tftp du serveur TFTP les fichiers qui seront transmis au PC
pi@raspberrypi:~$ cp pxe_payload.tar.gz /srv/tftp
pi@raspberrypi:~$ cd /srv/tftp
pi@raspberrypi:~$ tar -zxvf pxe_payload.tar.gz
chain.c32
ldlinux.c32
libcom32.c32
libutil.c32
menu.cfg
pxelinux.0
pxelinux.cfg/
pxelinux.cfg/default
vesamenu.c32
pi@raspberrypi:~$ rm -rf pxe_payload.tar.gz
pi@raspberrypi:~$ cd -
  • On install un client TFTP pour verifier si l on arrive a recuperer les fichiers
pi@raspberrypi:~$ sudo apt-get install tftp-hpa

On lance le client et on recupere le fichier

pi@raspberrypi:~$ tftp 192.168.0.1
> get pxelinux.0
> quit
pi@raspberrypi:~$ ls -lrt

Le dernier fichier de la liste devrait etre pxelinux.o

Utilisation

  • Sur le RPI lancer le serveur TFTP, DHCP etc
pi@raspberrypi:~$ sudo /etc/init.d/networking stop
pi@raspberrypi:~$ sudo ifconfig eth0 up 192.168.0.1
pi@raspberrypi:~$ sudo /etc/init.d/isc-dhcp-server restart
pi@raspberrypi:~$ sudo /etc/init.d/tftpd-hpa restart
pi@raspberrypi:~$ sudo /etc/init.d/pxe restart
Stopping ISC DHCP server: dhcpd.
Starting ISC DHCP server: dhcpd.
Restarting HPA's tftpd: in.tftpd.
Restarting pxe: pxe.
  • S assurer que les services tournent
pi@raspberrypi:~$ netstat -atup
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 *:ssh                   *:*                     LISTEN      2509/sshd
udp        0      0 *:bootps                *:*                                 3085/dhcpd
udp        0      0 *:tftp                  *:*                                 3100/in.tftpd
udp        0      0 *:30289                 *:*                                 3085/dhcpd
udp        0      0 192.168.0.1:ntp         *:*                                 2009/ntpd
udp        0      0 localhost:ntp           *:*                                 2009/ntpd
udp        0      0 *:ntp                   *:*                                 2009/ntpd
  • Brancher le RPI en ethernet sur le PC eteint
  • Brancher un periph USB disposant d une installation Linux avec un Grub
  • Allumer le PC et eventuellement entrer dans le bios pour demander le boot sur Ethernet
  • Le PC devrait afficher un menu proposant de booter sur le peripherique USB

Debug

  • L outil tcpdump permet de suivre les echanges entre le RPI et le PC
pi@raspberrypi:~$ sudo apt-get install tcpdump
pi@raspberrypi:~$ tcpdump
Capture d ecran de l echange vu par tcp dump entre le RPI implementant le PXE server et un PC
  • En cas de soucis avec la recuperation de pxelinux.0 sur le serveur TFTP essayez la commande suivante pour donner plus de droits d access
sudo chmod -R 777 /srv/tftp

Ameliorations

  • Tel que presentes sur le wiki les services TFTP,DHCP et PXE doivent etre lances manuellement sur le RPI. Idealement il faudrait qu ils soient actifs au demarrage
  • Utiliser un hardware plus basique qu un RPI

References