Raspberry Pi:network boot
Raspberry Pi: Network boot (w/ debian 5)
Network boot realizzato con un server Debian Lenny (versione 5)
Questa Debian Lenny, gia` configurata come server, fornisce i servizi DHCP, NFS e TFTP, quest'ultimo in particolare, invocato da "inetd".
I pacchetti necessari dovrebbero essere: nfs-kernel-server dhcp3-server tftpd-hpa.
Preparazione
Occorre avviare il Raspberry Pi che s'intede utilizzare, verificando il numero "hardware address" della scheda di rete, un comando "ifconfig" lo mostra gia`, ed il seriale, che si ottiene leggendolo da "/proc/cpuinfo", un "cat /proc/cpuinfo" e` sufficiente a leggerlo.
raspbian lite
Scompattata lultima versione d'immagine raspberry pi, sono state copiate la "boot" in /var/lib/tftpboot/<seriale> e la root "/" in /opt/rpi/<seriale>, dove <seriale> e` il numero seriale del raspberry utilizzato.
- Download
aria2c https://downloads.raspberrypi.org/raspbian_lite_latest
- oggi e` "2018-03-13-raspbian-stretch-lite.zip".
- Unzip
unzip -x 2018-03-13-raspbian-stretch-lite.zip
- Mount
- Da qui, i comandi sono da eseguirsi come root
fdisk -l 2018-03-13-raspbian-stretch-lite.img
- Prendete nota dei numeri di "Boot Start" delle partizioni e montatele cosi`:
mount -t <filesystemtype> -o loop,offset=$((<start>*512)) <immagine> <punto di mount>
- Per esempio
mount -t ext4 -o loop,offset=$((98304*512)) 2018-03-13-raspbian-stretch-lite.img /mnt mount -t vfat -o loop,offset=$((8192*512)) 2018-03-13-raspbian-stretch-lite.img /mnt/boot
- Copia
- Nelle destinazioni, si devono copiare i files (io ho rispettato i permessi e non scrivo il comando perche` ho usato un file manager).
- in "/opt/rpi/<seriale>", copiate tutta la "root" (e` /mnt, dove avete montato il filesystem "/" dell'immagine), eliminando i files in "/boot" ma lasciando la directory.
- in "/var/lib/tftpboot/<seriale>, copiate il contenuto di "/mnt/boot"
- Modifica
- /var/lib/tftpboot/<seriale>/cmdline.txt
dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/nfs nfsroot=192.168.2.1:/opt/rpi/<seriale> rootfstype=ext3 rw ip=dhcp elevator=deadline rootwait
- Modifica
- /opt/rpi/<seriale>/etc/fstab
proc /proc proc defaults 0 0 192.168.2.1:/var/lib/tftpboot/<seriale> /boot nfs defaults 0 0
Ricordate di sostituire <seriale>.
NFS
Ho aggiunto queste righe al file "/etc/exports":
# Raspberry Pi (1) /opt/rpi/<seriale> 192.168.2.0/255.255.255.0(rw,no_subtree_check,no_root_squash,async) /var/lib/tftpboot/<seriale> 192.168.2.0/255.255.255.0(rw,no_subtree_check,no_root_squash,async)
Poi i comandi seguenti, ricaricano la configurazione e mostrano quali sono le "esportazioni":
exportfs -ra exportfs
DHCPD
Ho aggiunto queste righe al file "/etc/dhcp3/dhcpd.conf":
host rpi { hardware ethernet b8:27:eb:35:65:6a; # hardware address option tftp-server-name "192.168.2.1"; }
E il restart del demone (e` una debian 5, ricordate ?):
/etc/init.d/dhcp3-server restart
TFTP
Era gia` attivo, la riga e` nel file "/etc/inetd.conf":
#:BOOT: TFTP service is provided primarily for booting. Most sites # run this only on machines acting as "boot servers." tftp dgram udp wait root /usr/sbin/in.tftpd /usr/sbin/in.tftpd -s /var/lib/tftpboot
SD Card
Tranne la versione 3, per tutti i Raspberry Pi e` ncessario disporre di una SD Card formattata in fat32 con il file "bootcode.bin", che potete copiare dalla "/boot".
Un'esempio/promemoria di com'e` stata partizionata e feormattata la SD Card (report di "fdisk -l <sdcard>", e creazione filesystem):
# fdisk -l /dev/mmcblk0 Disk /dev/mmcblk0: 241.3 MiB, 252968960 bytes, 494080 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x3a2c78c6 Device Boot Start End Sectors Size Id Type /dev/mmcblk0p1 2048 494079 492032 240.3M b W95 FAT32 # mkfs.vfat /dev/mmcblk0
troubleshoot (risolvere i problemi)
- L'utente "pi" non ha permessi di scrittura nella propria "home" directory
sudo su chown pi:pi /home/pi chown pi:pi /homepi.bash* chown pi:pi /homepi.profile
- Raspberry Pi 3B+
- Gia` predisposto per l'avvio da rete se non trova una SD Card o altro, si avvia solo se trova il file "bootcode.bin" e lo cerca nella root del servizio "tftp".
- Copiare il file "bootcode.bin" nella "/var/lib/tftpboot" (se e` la directory del vostro tftp).
- Dopodiche`, si comporta come gli altri, cerca la [sotto]directory col nome del suo numero seriale ..