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/
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 php5Inoltre è consigliabile installare udev dato che è alla base del funzionamento hot-plug dei sistemi Linux moderni.
apt-get install udev
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.
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:
qemu -k it -m 256M -hda $MBASE/debian/debian.ext2 -append "root=/dev/hda rw ide2=noprobe ide3=noprobe ide4=noprobe ide5=noprobe" -kernel $MBASE/kernel/linux/arch/x86/boot/bzImage
Nel caso volessimo effettuare prove con l'immagine generata senza modificarla è utile conoscere l'opzione -snapshot di qemu.
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.
make modules_install INSTALL_MOD_PATH=$MBASE/debian/debian/