Zo start je je Raspberry Pi vanaf usb of je netwerk

Door: koen-vervloesem | 04 mei 2017 07:20

Raspberry Pi
How To

Inhoudsopgave

  1. Inleiding
  2. Pagina 2

10 Mogelijke problemen met ethernet

Voor opstarten vanaf het netwerk is er een belangrijke beperking: dit werkt niet vanaf wifi, alleen vanaf de ingebouwde ethernetpoort. Maar sommige switches zijn te traag met hun reactie op de dhcp-aanvraag van de bootcode van de Pi. Bovendien duurt het soms lang voor de bootcode van een time-out is hersteld. Hoe meer computers er op je netwerk hangen, hoe sneller de Pi ontwaakt door een willekeurig netwerkpakket. Verder geldt hetzelfde als bij usb: je moet eerst je firmware upgraden. En op een Raspberry Pi 1, 2 of Zero kun je experimentele bootcode op de sd-kaart installeren.

11 Client en server

Om een Pi op te starten vanaf het netwerk, heb je een server nodig. Die server biedt het bestandssysteem met Raspbian aan een of meerdere Pi’s aan, die het bestandssysteem via het netwerk downloaden en ervan opstarten. Dat heeft heel wat voordelen. Een Pi met klassieke opstartmodus die bijvoorbeeld niet correct is uitgeschakeld, kan met een corrupte sd-kaart te maken krijgen en niet meer opstarten. Download je het bestandssysteem via het netwerk, dan kan dat probleem niet voorkomen. Bovendien kun je hetzelfde bestandssysteem delen met meerdere Pi’s: één keer upgraden is dan voldoende.

12 Client en bestandssysteem prepareren

Op de client installeer je Raspbian, upgrade je de firmware en schakel je de usb-modus in (zie stappen 3 en 4). Haal de sd-kaart (met een capaciteit van minimaal 16 GB) uit de client. Als server gebruiken we ook een Pi met Raspbian. Steek de sd-kaart in de server en start die op. Voer sudo raspi-config uit en breid het rootbestandssysteem uit zodat het de hele sd-kaart inneemt. Herstart de Pi en installeer het programma rsync met sudo apt-get install rsync. Maak daarna een nieuwe directory aan met sudo mkdir -p /nfs/client1. Kopieer je volledige Raspbian-systeem naar die directory met sudo rsync -xa --progress --exclude /nfs / /nfs/client1.

13 Statisch netwerk

Voer daarna stap 7 uit, maar met cd /nfs/client1 in plaats van cd /mnt/usb. Voer daarna stap 8 uit, maar voordat je de chroot verlaat, typ je nano /etc/rc.local en voeg je voor de regel met exit 0 de regel /etc/init.d/ssh start toe. Vraag daarna (als je de chroot hebt verlaten) het adres van je gateway op met ip route | grep default | awk '{print $3}' en voer ip -4 addr show dev eth0 | grep inet uit. Na inet krijg je het ip-adres van je server te zien en na brd het broadcastadres van je netwerk.

14 Netwerkaanpassingen

Voer sudo nano /etc/network/interfaces uit en vervang iface eth0 inet manual door iface eth0 inet static. Voeg voor die regel auto eth0 toe en erna address IPADRES, netmask 255.255.255.0 en gateway GATEWAY, met uiteraard de juiste ip-adressen. Schakel de dhcp-client uit met sudo systemctl disable dhcpcd, schakel het standaard netwerk in met sudo systemctl enable networking en herstart met sudo reboot. Voeg daarna het adres van je gateway, die ook je dns-server is, toe aan /etc/resolv.conf. Dat doe je met de opdracht echo "nameserver GATEWAY" | sudo tee /etc/resolv.conf, waarbij je uiteraard het juiste ip-adres invult. Maak het bestand daarna onveranderlijk met sudo chattr +i /etc/resolv.conf.

15 TFTP

Installeer daarna een dhcp-server: sudo apt-get install dnsmasq. Voer dan sudo rm /etc/resolvconf/update.d/dnsmasq uit. Nu moeten we ervoor zorgen dat de dhcp-server het bestandssysteem aan de clients doorstuurt. Voer sudo nano /etc/dnsmasq.conf uit en voeg de volgende regels bovenaan het bestand toe: port=0, dhcp-range=BROADCAST,proxy (met in plaats van BROADCAST je broadcastadres), log-dhcp, enable-tftp, tftp-root=/tftpboot en pxe-service=0, Raspberry Pi Boot". Sla het bestand op met Ctrl+O en sluit nano af met Ctrl+X. Maak de tftp-directory aan met sudo mkdir /tftpboot en geef die de juiste gebruikersrechten met sudo chmod 777 /tftpboot. Schakel dnsmasq in met sudo systemctl enable dnsmasq.

16 NFS-server

Kopieer het bootbestandssysteem met cp -r /boot/* /tftpboot. Het rootbestandssysteem hebben we eerder al gekopieerd, maar moeten we nog beschikbaar stellen. Installeer een nfs-server met sudo apt-get install nfs-kernel-server. Exporteer nu het rootbestandssysteem met echo "/nfs/client1 *(rw,sync,no_subtree_check,no_root_squash)" | sudo tee -a /etc/exports. Activeer en herstart rpcbind met sudo systemctl enable rpcbind en sudo systemctl restart rpcbind en doe hetzelfde met de nfs-server: sudo systemctl enable nfs-kernel-server en sudo systemctl restart nfs-kernel-server. Voer dan nano /tftpboot/cmdline.txt uit en vervang de configuratie vanaf root= door root=/dev/nfs nfsroot=IPADRES:/nfs/client1 rw ip=dhcp elevator=deadline rootwait.

17 Client opstarten

Voer nu sudo nano /nfs/client1/etc/fstab uit en verwijder de regels met /dev/mmcblkp1 en /dev/mmcblkp2. Alleen de regel met het proc-bestandssysteem mag blijven staan. Sla je wijzigingen op met Ctrl+O en sluit nano af met Ctrl+X. Herstart je server met sudo reboot. Zodra dat is gebeurd, verbind je de client met het netwerk en sluit je de stroomkabel aan. Na ongeveer tien seconden zouden de ledjes op het bordje moeten aangaan. Als alles goed gaat, start je Pi nu op van de kernel in /tftpboot op je server en koppelt die daarna ook het bestandssysteem in /nfs/client1 op je server aan.

18 Troubleshooting

Als je client na een minuutje of zo nog niet online is, installeer dan op de server tcpdump met sudo apt-get install tcpdump en start het programma om te kijken of je een dhcp-pakketje van de client te zien krijgt: sudo tcpdump -i eth0 port bootpc. Als je de client opstart, zou je op de server de boodschap DHCP/BOOTP, Request from ... moeten zien. Lukt dat al, sluit het programma dan af met Ctrl+C en kijk met tail -f /var/log/daemon.log naar foutmeldingen. Overigens kun je tftp ook gebruiken als je al een dhcp-server hebt draaien. Verwijder dan in /etc/dnsmasq.conf de regel die begint met dhcp-range= en voer het ip-adres van je server in de instellingen van je router in bij TFTP-server.

1 Reactie(s) op: Zo start je je Raspberry Pi vanaf usb of je netwerk

  • Om te reageren moet je ingelogd zijn. Nog geen account? Registreer je dan en praat mee!
  • 2 december 2018 13:41 ivomols
    Ik krijg bij het kopiëren van Raspbian de foutmelding dat de ruimte op de drive op is. Toch heb ik 100MB partitie. Kan ik dit olossen?
    Wanneer je een reactie plaatst ga je akoord
    met onze voorwaarden voor reacties.

Wanneer je een reactie plaatst ga je akoord
met onze voorwaarden voor reacties.