Raspberry Pi:network boot

Da raspibo.

Indice

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,vers=3    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 ..

Permessi/Proprietario della/nella "/boot"

L'errore e` capitato nell'upgrade del kernel:

...
Removing 'diversion of /boot/overlays/w1-gpio.dtbo to /usr/share/rpikernelhack/overlays/w1-gpio.dtbo by rpikernelhack'
dpkg-divert: error: unable to change ownership of target file '/boot/overlays/w1-gpio.dtbo.dpkg-divert.tmp': Invalid argument
...
Removing 'diversion of /boot/start.elf to /usr/share/rpikernelhack/start.elf by rpikernelhack'
dpkg-divert: error: unable to change ownership of target file '/boot/start.elf.dpkg-divert.tmp': Invalid argument
Removing 'diversion of /boot/start_cd.elf to /usr/share/rpikernelhack/start_cd.elf by rpikernelhack'
dpkg-divert: error: unable to change ownership of target file '/boot/start_cd.elf.dpkg-divert.tmp': Invalid argument
...

Correggere il "mount" della directory nel file "fstab" (/opt/rpi/<seriale>/etc/fstab):

proc            /proc           proc    defaults          0       0
192.168.4.1:/var/lib/tftpboot/<seriale>  /boot  nfs  defaults,vers=3  0  0

Riferimenti

Strumenti personali
Namespace

Varianti
Azioni
Navigazione
Strumenti