Preparazione alla costruzione dell'ambiente di lavoro

Dopo aver formattato la partizione necessaria per il sistema LFS finale, il passo successivo consiste nel creare un ambiente con il software utile alla compilazione dei sorgenti. In pratica andremo a costruire un ambiente di lavoro con tutto l'occorrente per poter successivamente procedere alla compilazione vera e propia dei programmi che verrano inseriti nel sistema LFS finale.

Utilizzando questa tecnica siamo sicuri di quale versione di tale software stiamo utilizzando, ottenendo come risultato quello che effettivamente vogliamo. Sarebbe possibile utilizzare gli stumenti messi a disposizione dal sistema host, ma non avremmo un "buon ambiente di lavoro" come quello che ci siamo creati. Questo perchè, a differenza del sistema host, il mini ambiente disporrà di release software collaudate e che sono compatibili tra di loro.

Attraverso il comando chroot possiamo utilizzare una parte della radice del disco come se fosse propio la root. Ed è propio questa la tecnica utilizzata per poter avere un "ambiente di lavoro pulito", privo di variabili d'ambiente che potrebbero compromettere le successive compilazioni.

Per poter realizzare l' ambiente di sviluppo avremo bisogno di creare un nuovo utente al nostro sistema host. Questo utente, chiamato lfs, ci servirà per effettuare la compilazione dei tools, ovvero degli strumenti che faranno parte dell'ambiente di sviluppo e che utilizzeremo per compilare il sistema LFS vero e propio.

Normalmente, in ogni sistema linux, dopo il log on di un utente, la shell legge i files di inizializzazione /etc/profile del sistema host e successivamente  /.bash_profile. Per poter ottenere l'ambiente di lavoro pulito, bisogna utilizzare un espediente. Il file .bash_profile, dev'essere composto in questo modo :

# .bash_profile

exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash

Il comando exec env -i ... /bin/bash sostituisce la shell che stiamo utilizzando con una completamente nuova e con un ambiente privo di variabili di sistema, tranne che per HOME, TERM e PS1.

La nuova istanza della shell che otteniamo, chiamata non-login shell, non legge i file /etc/profile o  /.bash_profile, ma legge il file  /.bashrc. Ecco il file .bashrc che viene utilizzato nell'ambiente di lavoro e che viene letto dalla shell:

# .bashrc
# Source global definitions

set +h
umask 022
LFS=/mnt/lfs
LC_ALL=POSIX
PATH=/tools/bin:/bin:/usr/bin
export LFS LC_ALL PATH

Il comando set +h disabilita la funzione hash della shell bash. Normalmente l'hashing è una funzione molto utile: la shell bash utilizza una tabella hash per ricordarsi il percorso dei file eseguibili. In questo modo se viene eseguito un programma, la seconda volta che verrà eseguito, verrà risparmiato tempo, poichè il path dell'eseguibile si trova all'interno della tabella hash, evitando di ricercare il file all'interno del PATH14. Disabilitando l'hashing, ci assicuriamo che verranno utilizzati i tools più recenti dopo averli compilati. Se non disabilitiamo l'hashing, per es. verrebe utilizzato il comando make appartenente al sistama host e non l'ultimo compilato.

Il comando umask 022 assicura che i nuovi files e directory creati siano solo scrivibili dal propio creatore, ma leggibili ed eseguibili da tutti.

La variabile LFS è impostata sul punto di mount della partizione lfs.

La variabile LC_ALL controlla la localizazzione di alcuni programmi. Se non viene settata in POSIX, causerebbe dei problemi nel caso in cui il sistema host utilizza delle librerie meno recenti.

Infine la variabile PATH viene aggiornata con la nuova directory /tools/bin , che conterrà i tools utilizzati per compilare il sistema LFS. In questo modo siamo sicuri che verranno utilizzati gli ultimi tools che man mano compiliamo.



Footnotes

... PATH14
Variabile di sistema che contine il percorso dei file eseguibili del sistma GNU/Linux.
Daniele Salamina, Relazione di Laurea, Progettazione e realizzazione di una distribuzione GNU/Linux, Settembre 2004