Chrottiamo dentro il development_rootfs:
# chroot /opt/i586-gentoo-uclibc-linux /bin/bash --login |
Creiamo il nuovo environment e carichiamo le relative variabili di ambiente necessarie per procedere:
# env-update # source /etc/profile |
Attenzione: d'ora in poi ogni comando che troverete nel corso di questo documento si riferirà all'ambiente chroottato. Pertanto, se accedete al vostro host di sviluppo via ssh, dovranno ogni volta essere ripetute sequenze di comando illustrate sopra: cioè assicurarsi che /proc/ ed /usr/portage/ siano bindati dentro il development_rootfs, effettuare il chroot, lanciare env-update e caricare /etc/profile. Per non dover ripetere questi comandi ogni volta che ci si logga sulla macchina di sviluppo risulta molto comodo utilizzare screen, maggiori informazioni alla url http://www.gnu.org/software/screen/.
Modifichiamo il file /etc/make.conf per adattarlo alle nostre esigenze (qui viene utilizzato nano, ma potete utilizzare qualsiasi altro editor ascii):
# nano -w /etc/make.conf |
Il file che abbiamo utilizzato su un sistema vortex86 dovrebbe contenere pressapoco questo:
# These settings were set by the catalyst build script
# that automatically built this stage
# Please consult /etc/make.conf.example for a more detailed example
USE="bitmap-fonts minimal uclibc mmx -opengl"
CHOST="i586-gentoo-linux-uclibc"
CFLAGS="-march=i586 -Os -pipe -fomit-frame-pointer -mmmx"
CXXFLAGS="${CFLAGS}"
FEATURES="buildpkg"
UCLIBC_CPU="586MMX" |
Molto importanti sono le USE flag e le variabili d'ambiente sottostanti:
USE flag minimal: consente di compilare ed installare una versione minimale degli ebuild, vengono trascurate pagine di manuale, file di contorno, esempi, etc.;
USE flag uclibc: configura portage per utilizzare le uClibc invece che le glibc;
USE flag mmx: utilizza le estensioni mmx;
variabile d'ambiente FEATURES: la opzione buildpkg informa portage di creare un paccchetto tgz dopo aver compilato un ebuild;
Eseguire i seguenti comandi per assicurarsi che il link simbolico /etc/make.profile punti al profile usr/portage/profiles/uclibc/x86 :
# rm /etc/make.profile # ln -s /usr/portage/profiles/uclibc/x86 /etc/make.profile |
Avviare lo script di bootstrap: le opzioni -p -v sono preventive e consentono di visionare la lista dei pacchetti che portage emergerà:
# cd /usr/portage/scripts # ./bootstrap.sh -p -v # ./bootstrap.sh |
Se durante l'esecuzione dello script di bootstrap vi imbattete in qualceh errore del tipo "Failure compiling uclibc (gcc-config error: Could not run/locate "gcc")?" , utilizzate questo workaround:
# gcc-config 1 # source /etc/profile # ./bootstrap.sh |
Emergere l'ebuild system per il nostro development_rootfs:
# emerge -e system |
Nel momento in cui viene scritto questo documento pare ci siano alcuni problemi relativi a questa fase, il primo problema riguarda python: se ottenete un messaggio di errore del tipo !!! ERROR: dev-python/python-fchksum-1.7.1 failed., potete utilizzare il seguente workaround:
# emerge python # emerge -e system |
Un altro problema riscontrato riguarda l'ebuild groff, pare che non si riesca a compilarlo durante l'emerge -e system, questo problema è riportato sul bugzilla ufficiale alla url http://bugs.gentoo.org/show_bug.cgi?id=98187. Visto che, al momento in cui scriviamo, il bug non è stato ancora risolto, abbiamo deciso di fare in modo che l'ebuild non venga considerato da portage, questo si ottiene aggiungendo la riga sottostante al file /etc/portage/profile/package.provided (sostituite groff-1.19-r2 con la versione presente nel vostro albero del portage, se il file non esiste, createlo):
sys-apps/groff-1.19.1-r2 |
Se il comando emerge -e system è andato a buon fine, vuol dire che il vostro development_rootfs è pronto, passiamo per tanto alla creazione dell'embedded_rootfs.