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.