Generazione del root file-system

Per generare il root file-system è utilizzato il programma debootstrap. Questo permette, come dice il nome stesso, di creare un sistema di base Debian. E' possibile utilizzare la rete per scaricare i pacchetti oppure una copia locale. Per semplicità è stata copiata sul web server locale con ciascuno dei 3 DVD che compongono la distribuzione rispettivamente nelle directory 1,2 e 3 sotto /var/www/etch/

mkdir -p $MBASE/debian/debian
debootstrap etch $MBASE/debian/debian/ file:///var/www/etch/1/debian/

Modifica del root file-system tramite chroot

Il metodo più semplice per modificare il file-system è utilizzare una gabbia chroot. Per far questo bisogna mettere a posto alcuni aspetti del file-system appena generato.

mount -t proc proc $MBASE/debian/debian/proc/
echo 127.0.0.1 localhost localhost.localdomain > $MBASE/debian/debian/etc/hosts

una volta fatto questo è possibile rendere il sistema appena creato la root corrente:

chroot $MBASE/debian/debian/

come primo passo è consigliabile configurare il repository dei pacchetti Debian:

cat <<EOF > /etc/apt/sources.list
deb http://127.0.0.1/etch/1/ etch main contrib
deb http://127.0.0.1/etch/2/ etch main contrib
deb http://127.0.0.1/etch/3/ etch main contrib
CTRL-D
apt-get update

attenzione che in caso di utilizzo di un repository apt-secure locale si deve aggiungere, con apt-key add la chiave utilizzata per firmare il file Release onde evitare seccanti warning. Inoltre è consigliabile aggiungere anche il repository security.debian.org e fare immediatamente un update per tappare eventuali falle di sicurezza.

Adesso è possibile vedere la lista di pacchetti installati e cancellare quelli che non ci interessano. Dato che i pacchetti sono marcati come essential ci verrà chiesta la conferma della cancellazione. Attenzione alle dipendenze. Ovviamente in questa fase è possibile aggiungere ulteriori pacchetti (nel nostro esempio apache2, php5 e mc).

dpkg --get-selections
dpkg --purge laptop-detect man-db manpages traceroute tasksel-data tasksel groff-base
apt-get install apache2 php5
Inoltre è consigliabile installare udev dato che è alla base del funzionamento hot-plug dei sistemi Linux moderni.
apt-get install udev

Modifica del root file-system tramite qemu

Per avere una modalità più realistica rispetto al chroot è possibile utilizzare qemu per simulare una macchina x86. In questa sezione vedremo come usare il root file-system appena preparato tramite NFS dando così la possibilità all'utente di modificarlo a proprio piacimento. Per questo bisogna preparare un kernel che supporti la modalità NFS root, vedi la sezione sul kernel per maggiori dettagli in merito. Inoltre sul sistema host dobbiamo configurare il server NFS (agendo sul file /etc/exports) per esportare la directory $MBASE/debian/debian/ in lettura/scrittura e con le opzioni no_root_squash e insecure.

qemu -k it -m 256M -hda $MBASE/debian/debian.ext2 -append "root=/dev/nfs rw ip=::::mindeb:eth0:dhcp nfsroot=10.0.2.2:$MBASE/debian/debian ide2=noprobe ide3=noprobe ide4=noprobe ide5=noprobe" -kernel $MBASE/kernel/linux/arch/x86/boot/bzImage -net nic,model=ne2k_pci -net user

per com'è implementata l'opzione -kernel di qemu è necessario fornire un'immagine per il primo disco anche se poi non è effettivamente utilizzata. La generazione di debian.ext2 è spiegata nella prossima sezione.

Generazione del rootfs per il target finale

Prima di passare il root file-system sul target è opportuno eliminare quelle parti che non ci servono, come la documentazione, le pagine di manuale, la cache, etc. Per questo utilizziamo lo script gen.sh. Il risultato è la creazione in $MBASE/debian dei seguenti file:

Il file gen.sh può essere modificato per eliminare eventuali altri file che non riteniamo utili, per esempio se non abbiamo la necessità di fare l'upgrade e/o l'installazione di singoli pacchetti una volta che il sistema è sul campo possiamo cancellare le directory /var/lib/dpkg e /var/lib/apt.

Sviluppo di applicazioni

Il vantaggio di questa configurazione è che possiamo sviluppare comodamente su una piattaforma Debian Etch e infine trasferire l'applicazione sul sistema target (ovvero deve essere installata in $MBASE/debian/debian per far si che la script di generazione la includa nell'immagine finale). Dobbiamo solo verificare che le librerie di cui necessita la nostra applicazione sono installate sul file-system per il target.

Il kernel Linux

Il kernel è compilato con le modalità standard, l'importante è verificare che le opzioni necessarie per il boot del target (supporto IDE, USB mass storage, NFS root, supporto scheda di rete) siano compilate nell'immagine del nucleo bzImage. Gli altri moduli vanno installati nella directory della distribuzione per target:
make modules_install INSTALL_MOD_PATH=$MBASE/debian/debian/