Ultimi preparativi
Sistemazione variabile d'ambiente $LFS
Abbiamo già usato la variabile d'ambiente LFS e continueremo ad usarla nel corso del lavoro. È fondamentale che questa variabile sia sempre definita ad ogni inzio di ripresa dell'attività. Deve essere impostata al punto di mount scelto per la partizione LFS e deve essere controllato che sia stata definita correttamente con il comando:
echo $LFS
Secondo la scelta inizialmente fatta, sullo schermo dovrebbe apparire il percorso del punto di mount della partizione:
/mnt/lfs
Se così non fosse bisognerebbe reimpostarla con:
export LFS=/mnt/lfs
Avere definito questa variabile è molto utile perché viene facilitata la scrittura di comandi che coinvolgono il percorso della partizione LFS. La shell, infatti, quando processerà la linea di comando sostituirà automaticamente $LFS con /mnt/lfs (o con ciò che è stato impostato nella variabile).
Non dimenticare di verificare che $LFS sia definita qualora si lasci e si rientri nell'ambiente di lavoro corrente (come quando si fa un su verso root o un altro utente).
Creazione delle cartelle $LFS/tools e $LFS/unpack
Tutti i programmi che verranno compilati nel corso della prossima sezione (n.5) dovranno essere tenuti separati da quelli che saranno compilati nella sezione successiva (n.6). Per questo motivo viene creata una cartella transitoria con il seguente comando, eseguito come utente root:
mkdir -v $LFS/tools
I programmi compilati in questa cartella sono solo dei tools temporanei e non faranno parte del sistema LFS finale. Tenendoli in una directory separata, potranno essere facilmente eliminati quando non serviranno più. Questa collocazione, inoltre, impedirà loro di finire nelle directory di produzione del computer ospite, come potrebbe accadere accidentalmente nel corso delle compilazioni. Subito dopo creeremo una cartella di lavoro che servirà per scompattare e compilare i vari pacchetti. Da utente lfs, con il comando seguente:
mkdir -v $LFS/sources/unpack
Per completare il lavoro occorrerà creare anche un link simbolico /tools sul sistema ospite in modo che punti direttamente a /mnt/lfs. Eseguire allora questo comando, sempre come utente root:
ln -sv $LFS/tools /
Si potrà subito verificare che nell'elenco dei file della radice / si trova anche questa riga:
lrwxrwxrwx 1 root root 14 gen 12 18:37 tools -> /mnt/lfs/tools
Questo link simbolico permetterà di compilare i pacchetti temporanei, che chiameremo complessivamente toolchain, in modo che faccia sempre riferimento alla directory /tools. Ciò significa che compilatore, assemblatore e linker lavoreranno sia nella prossima sezione (5), quando si utilizzeranno ancora strumenti del sistema ospite, sia nella sezione successiva (n.6), quando si accederà tramite chroot alla partizione LFS.
Per saperne di più sul comando ln consultare il manuale interno, tramite i comandi:
info coreutils ln man ln
Creazione dell'utente lfs
Quando si accede al sistema come utente root, si può sempre correre il rischio di danneggiare o distruggere il sistema. Perciò è meglio che la costruzione dei pacchetti venga effettuata da un utente senza privilegi. Si potrebbe usare il proprio username, ma per impostare un ambiente di lavoro pulito fin dall'inizio è meglio creare un nuovo utente chiamato lfs come membro di un nuovo gruppo (chiamato ugualmente lfs) e usare questo utente durante il processo di installazione. Per raggiungere lo scopo diamo, come utente root, i 2 comandi seguenti:
groupadd lfs useradd -s /bin/bash -g lfs -m -k /dev/null lfs
Questo è il significato delle opzioni nella seconda linea di comando:
Forniamo adesso il nuovo utente lfs della sua password, tramite il comando dato sempre da utente root:
passwd lfs
Questo consentirà di accedere in login come utente lfs, altrimenti soltanto root potrebbe effettuare uno swhitch sull'utenza lfs.
Infine facciamo in modo che l'utente lfs sia proprietario delle cartelle $LFS/tools, $LFS/sources, $LFS/unpack con i tre comandi seguenti:
chown -v lfs $LFS/tools chown -v lfs $LFS/sources chown -v lfs $LFS/sources/unpack
E adesso per collaudare il tutto effettuiamo un accesso come utente lfs tramite il comando:
su - lfs
Configurazione dell'ambiente
Per lavorare meglio è opportuno creare i due file .bash_profile e .bashrc che servono per la configurazione dell'ambiente.
cat > ~/.bash_profile << "EOF" exec env -i HOME=$HOME TERM=$TERM PS1='\u:\w\$ ' /bin/bash EOF
e serve per impostare la shell di login. Quando si accede come utente lfs, di solito la shell iniziale è una shell di login che si forma leggendo prima il file /etc/profile del sistema ospite (il quale probabilmente contiene alcune impostazioni e variabili d'ambiente) e poi il file .bash_profile (che, se esiste, contiene ulteriori impostazioni).
Il comando exec env -i.../bin/bash, appena introdotto con il nuovo file .bash_profile sostituisce la shell in esecuzione con una nuova con un ambiente completamente vuoto, tranne che per le variabili HOME, TERM e PS1. Questo garantisce che nessuna variabile d'ambiente non voluta e potenzialmente pericolosa si infiltri dal sistema ospite nell'ambiente costruito. La tecnica qui usata raggiunge l'obiettivo di assicurare un ambiente pulito.
cat > ~/.bashrc << "EOF" set +h umask 022 LFS=/mnt/lfs LC_ALL=POSIX LFS_TGT=$(uname -m)-lfs-linux-gnu PATH=/tools/bin:/bin:/usr/bin export LFS LC_ALL LFS_TGT PATH EOF
e serve, invece, per impostare una shell normale. Questo tipo di shell si forma leggendo il contenuto del file .bashrc anzichè quello di /etc/profile e di .bash_profile.
Il comando set +h disabilita la funzione hash della shell bash. Normalmente la funzione hash viene usata da bash per ricordare i percorsi completi dei file eseguibili ed evitare di cercare ripetutamente nel PATH per trovare lo stesso eseguibile. Invece i nuovi tool dovrebbero essere utilizzati non appena vengono installati. Disattivando la funzione hash, la shell cercherà sempre nel PATH quando un programma sta per essere eseguito. In questo modo, la shell troverà i nuovi tool compilati in $LFS/tools non appena essi sono disponibili senza correre il rischio di utilizzare una precedente versione dello stesso programma in una posizione diversa.
Impostare la maschera di creazione file dell'utente (umask) a 022 garantisce che i nuovi file e directory creati possano essere scrivibili solo dal loro proprietario, ma siano leggibili ed eseguibili da chiunque (supponendo che vengano usati i modi di default dalla chiamata di sistema open(2), i nuovi file finiranno per avere i permessi con la modalità 644 e le directory con la modalità 755).
La variabile LFS dovrebbe venire impostata sul punto di mount scelto.
La variabile LC_ALL controlla la localizzazione di certi programmi, facendo sì che i loro messaggi seguano le convenzioni di uno specifico paese. Se il sistema ospite usa una versione di Glibc più vecchia della 2.2.4, avere LC_ALL impostata a qualcosa di diverso da POSIX o C (durante questo capitolo) può causare problemi se si esce dall'ambiente chroot e vi si vuole rientrare successivamente. Impostare LC_ALL a POSIX o C (i due sono equivalenti) assicura che ogni cosa funzioni come ci si aspetta nell'ambiente chroot.
Mettendo /tools/bin all'inizio nel PATH standard, farà sì che tutti i programmi installati nella sezione n.5 verranno trovati dalla shell immediatamente dopo la loro installazione. Questo, combinato con la disabilitazione dell'hashing, limita il rischio che vecchi programmi vengano usati dall'ospite quando gli stessi programmi sono già disponibili nell'ambiente creato nella sezione n.5.
Per caricare il profilo appena creato occore dare subito il seguente comando:
source ~/.bash_profile
Molti credono di diminuire le proprie colpe mettendo in rilievo i difetti degli altri.
Hegel