Boot del sistema
Chiaramente un problema da affrontare consiste nel trasferire sul
target l'immagine del sistema operativo generata. Il sistema d'esempio
parte a regime da compact flash mentre durante la fase iniziale può
essere fatto il boot via rete o da chiavetta USB
Boot via rete
Il boot via rete viene fatto sfruttando la modalità PXE.
- Il programma che effettua il boot del kernel Linux usato
comunemente è syslinux. Questo
in realtà è un progetto molto più ampio che permette il boot del
kernel da diversi dispositivi. Nel nostro caso siamo interessati alla
modalità PXE appunto implementata da pxelinux.0.
- Il sistema target deve essere configurato per fare il boot da
rete. Questo si ottiene agendo sul BIOS dello stesso.
- Il primo step del boot da rete per il sistema target è
l'ottenimento del proprio indirizzo IP e dei parametri (indirizzo
server, nome del file, etc.) necessari. Per questo viene utilizzato il
protocollo DHCP. Bisogna configurare un server che implementi tale
servizio sulla rete. Un'esempio di configurazione è contenuto nel file
dhcpd.conf.
- L'immagine del bootloader e del kernel verranno scaricate tramite
il protocollo TFTP, per questo dobbiamo configurare un tale
server. Sotto Debian dobbiamo utilizzare tftp-ha.
- Deve essere preparato un file di configurazione per pxelinux. Il
sistema supportato da tale bootloader è molto versatile e permette di
distinguere la configurazione in base a vari parametri del sistema
target. Nel caso più semplice basta una singola configurazione mettendo
il file default nella directory
pxelinux.cfg.
- Dobbiamo preparare un'immagine del kernel con i driver necessari
al boot del sistema target. Tale immagine, bzImage, va posta
nella directory del server TFTP.
- Dobbiamo preparare un root file system esportato tramite
NFS. Anche in questo caso è utile utilizzare busybox per
avere un sistema minimale.
E' interessante notare che tale metodo è molto comodo anche in fase
di sviluppo dato che ci permette di modificare il kernel e il root
file-system finale che girano sulla macchina target ma caricandoli
automaticamente (e, nel caso del file-system, vedendo immediatamente
le modifiche) dal host, rendendo così il ciclo di sviluppo molto
veloce. L'unica cosa che dobbiamo fare è puntare il root-file system
nel file di configurazione di pxelinux.0 a
$MBASE/debin/debian. Una volta che abbiamo adattato il kernel e
il root-file system (aggiungendo pacchetti, modificando la
configurazione, aggiungendo driver etc.) possiamo ritornare al
capitolo precedente e generare l'immagine finale per la compact flash.
Boot da chiavetta USB
Per preparare il boot da chiavetta è necessario:
- Configurare il boot da chiavetta USB nel BIOS del sistema target.
- Creare sulla chiavetta una partizione di tipo Linux. Su questa
partizione è necessario creare un file-system che supporta pienamente
le funzionalità Unix e il cui supporto è compilato nel kernel
utilizzato. La scelta migliore è probabilmente ext3. Su tale
file-system va copiato il contenuto del root file-system già preparato.
- L'immagine del kernel bzImage viene di norma messa nella
directory /boot.
- Come bootloader verrà utilizzato grub. I file che
compongono tale componente possono essere presi dal sistema host e
sono copiati in /boot/grub. In questa stessa directory va posto
il file di configurazione menu.lst.
- Per ultimo è necessario scrivere il MBR della chiavetta USB. La
procedura richiede attenzione per non andare a rovinare il MBR di
un'eventuale altra device SCSI. Quindi il primo passo è capire qual'è
la device utilizzata sul sistema host e creare un file device.map che mappa un numero di dispositivo
logico di grub ad una device SCSI fisica. Nell'esempio linkato la
chiavetta USB appare come /deb/sdf e viene mappata nel numero
3. Ora si può lanciare la shell di grub:
grub --device-map=device.map
e procedere a inizializzare il MBR della chiavetta coi comandi
root(hd3,0) e setup(hd3).
Preparazione del sistema finale
Sul file-system per il boot iniziale dovremmo avere a disposizione
quantomeno:
- Uno strumento per partizionare la compact flash (fdisk).
- Il programma per generare il file system sulla compact flash
(mke2fs).
- Un metodo per copiare l'archivio contenente il file-system
finale. Ad esempio via rete da una share NFS (in questo caso basta il
comando mount).
- Il tool per scompattare l'archivio, anche in questo caso c'è già
tutto quello che ci serve in busybox.
- La shell del bootloader grub e i file di corredo.