44
Università degli Studi di Milano Bicocca Dipartimento di Informatica, Sistemistica e Comunicazione Corso di laurea in Informatica Progetto e realizzazione di una distribuzione Linux a scopi didattici Relatore: Luca Bernardinello Co-relatore: Claudio Ferretti Relazione della prova finale di: Federico Valentini Matricola 726584 Anno Accademico 2012-2013

Progetto e Realizzazione di una distribuzione Linux a scopi didattici

Embed Size (px)

Citation preview

Università degli Studi di Milano BicoccaDipartimento di Informatica, Sistemistica e ComunicazioneCorso di laurea in Informatica

Progetto e realizzazione di una distribuzione Linux a scopi didattici

Relatore: Luca BernardinelloCo-relatore: Claudio Ferretti

Relazione della prova finale di:

Federico ValentiniMatricola 726584

Anno Accademico 2012-2013

Indice

1 Introduzione 1

1.1 Problema affrontato . . . . . . . . . . . . . . . . . . . . . . . . 1

1.2 Obiettivi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2

1.3 Che cos’e una distribuzione Live? . . . . . . . . . . . . . . . . 2

1.4 Panoramica distribuzioni Live esistenti . . . . . . . . . . . . . 3

1.4.1 Tiny Core Linux . . . . . . . . . . . . . . . . . . . . . 4

1.4.2 Kali Linux . . . . . . . . . . . . . . . . . . . . . . . . . 4

2 GNU/Linux: da ieri ad oggi 5

2.1 La storia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

2.2 Kernel: la sua architettura . . . . . . . . . . . . . . . . . . . . 7

3 Progettazione e costruzione di una distribuzione

a fini didattici 11

3.1 Introduzione a Linux From Scratch . . . . . . . . . . . . . . . 11

3.1.1 Che cos’e? . . . . . . . . . . . . . . . . . . . . . . . . . 11

3.1.2 Perche Linux From Scratch? . . . . . . . . . . . . . . . 12

3.1.3 Andare oltre Linux From Scratch . . . . . . . . . . . . 12

3.2 Preparazione dell’ambiente di lavoro . . . . . . . . . . . . . . 13

3.2.1 Prerequisiti . . . . . . . . . . . . . . . . . . . . . . . . 13

3.2.2 Creazione della partizione LFS . . . . . . . . . . . . . 15

3.2.3 Creazione del file system . . . . . . . . . . . . . . . . . 15

3.2.4 Montare la nuova partizione . . . . . . . . . . . . . . . 16

3.2.5 Pacchetti software e patches . . . . . . . . . . . . . . . 16

i

ii INDICE

3.2.6 Ultime preparazioni . . . . . . . . . . . . . . . . . . . . 17

3.3 Costruzione del sistema LFS . . . . . . . . . . . . . . . . . . . 19

3.3.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . 19

3.3.2 Costruzione di un sistema temporaneo . . . . . . . . . 20

3.3.3 Costruzione di LFS . . . . . . . . . . . . . . . . . . . . 21

3.3.4 Impostazione script d’avvio del sistema . . . . . . . . . 24

3.4 Personalizzazione del sistema : Beyond Linux From Scratch . . 29

3.4.1 Introduzione . . . . . . . . . . . . . . . . . . . . . . . . 29

3.4.2 Post LFS . . . . . . . . . . . . . . . . . . . . . . . . . 29

3.4.3 Una prima analisi . . . . . . . . . . . . . . . . . . . . . 31

3.4.4 Interfaccia grafica . . . . . . . . . . . . . . . . . . . . . 32

4 Conclusioni e sviluppo futuro 39

4.1 Problemi incontrati . . . . . . . . . . . . . . . . . . . . . . . . 39

4.2 Possibili sviluppi . . . . . . . . . . . . . . . . . . . . . . . . . 40

Bibliografia 41

Capitolo 1

Introduzione

1.1 Problema affrontato

Il problema affrontato in questo stage e stata la progettazione e la co-

struzione di un sistema GNU/Linux autonomo e funzionante partendo dalla

compilazione dei sorgenti che lo compongono.

Per fare cio ho utilizzato il libro Linux From Scratch1 di Gerard Beekmans

nel quale vengono fornite tutte le informazioni per la creazione di un sistema

Linux minimale da seguire passo a passo. [1]

Dopodiche la mia attenzione si e spostata verso il libro Beyond Linux From

Scratch2 il quale presenta tutta la parte di personalizzazione del proprio si-

stema precedentemente creato, in base alle proprie esigenze e all’obiettivo

che si vuole raggiungere. [2] La cosa interessante di quest’ultimo libro e che il

lettore risulta essere totalmente indipendente, ovvero puo approfondire solo

le parti che decide essere utili al fine di creare la propria distribuzione, che

sia un sistema utente oppure un router o un server.

La filosofia di quest’ultima guida e appunto: you only install what you need.

1http://www.linuxfromscratch.org2http://www.linuxfromscratch.org/blfs/

1

2 1. Introduzione

1.2 Obiettivi

L’obiettivo che mi sono prefissato e stata la creazione di una distribuzione

che possa essere utile in ambito accademico affrontando in particolare il caso

in cui uno studente si iscriva al corso di Informatica nell’Universita degli Stu-

di di Milano-Bicocca, anche se potenzialmente potrebbe essere allargata ad

un qualsiasi utente iscritto ad una facolta legata all’ambito dell’informatica.

Per questo motivo la mia idea e stata quella di creare una distribuzione

desktop molto snella e veloce ma d’altra parte anche completa della parte

software che ogni studente di informatica dovrebbe avere a sua disposizione

per affrontare il suo persorso di studi.

Analizzando tutti questi requisiti iniziali sono arrivato alla conclusione che

questa distribuzione Linux doveva essere di tipo LIVE-CD per potere essere

eseguita in maniera indipendente in qualsiasi PC portatile e/o fisso senza do-

ver ricorrere ad una installazione su hard disk in quanto questa distribuzione

dovrebbe essere vista dall’utente come un ambiente di lavoro e non come un

sistema operativo a se, anche se tecnicamente risulta essere tale.

1.3 Che cos’e una distribuzione Live?

“L’espressione LiveCD, Live CD o LiveDistro (per esteso distribuzione

live) viene genericamente utilizzata per indicare una distribuzione di un si-

stema operativo in grado di essere avviato in fase di boot del computer ed

eseguito senza richiederne l’installazione su hard disk.” [3]

L’utilizzo di una distribuzione live nel mio caso risulta molto piu conveniente

in quanto l’utente non avra problemi riguardanti l’installazione di un sistema

operativo (es. partizione del disco) inoltre potra anche utilizzare un software

per l’esecuzione di una macchina virtuale come ad esempio VirtualBox3,

gratuito ed open-source disponibile per la maggior parte dei sistemi operati-

3http://www.virtualbox.org/

1.4 Panoramica distribuzioni Live esistenti 3

vi attualmente in circolazione come Windows, Linux, Macintosh e Solaris.

1.4 Panoramica distribuzioni Live esistenti

Possiamo affermare che i primi sistemi operativi nati, come ad esempio

le prime versioni di MS-DOS e APPLE DOS, erano tecnicamente dei siste-

mi live in quanto venivano eseguiti su un supporto di archiviazione esterno,

ovvero i vecchi Floppy Disk.

Possiamo pero iniziare a parlare di vere e proprie distribuzioni live con l’av-

vento dei CD-ROM.

La prima distribuzione live che ebbe una notevole notorieta fu KNOPPIX4

sviluppata da Klaus Knopper e rilasciata nel 2000. Il principale utilizzo di

questa distribuzione era di rescue per sistemi che risultavano danneggiati ma

trovo largo utilizzo anche come sistema desktop per un’utenza media e diede

anche la possibilita di scegliere se essere usato in modalita live da cd/dvd

oppure di essere installata in maniera persistente su hard-disk

Da qui in poi si ebbe un notevole susseguirsi di nuove distribuzioni live uti-

lizzabili per i piu variegati scopi, da sistemi per l’analisi forense a sistemi

specializzati in rilevamenti di vulnerabilita, da sistemi adatti allo sviluppo

software ad antivirus in grado di ripulire un sistema corrotto.

Segue una breve descrizione di due distribuzioni Live basate su kernel Li-

nux per fare capire al lettore la potenza e la elasticita che questo sistema

operativo puo offrire partendo da una distribuzione minimale ed in grado di

essere avviata in uno spettro di macchine molto ampio, ad una distribuzione

molto completa e versatile utilizzata in ambito di sicurezza.

4http://www.knoppix.org/

4 1. Introduzione

1.4.1 Tiny Core Linux

Tiny Core Linux 5 e sicuramente una delle distribuzioni Linux piu mini-

mali mai create. Se viene messo a confronto risulta essere da 1400

a 1100

della

dimensione dei maggiori sistemi operativi utilizzati.

Nonostante la sua dimensione ridottissima (il core pesa indicativamente 10MB

e viene eseguito completamente in RAM) risulta essere una distribuzione

molto stabile e molto customizzabile per quanto riguarda la parte software

(esiste un App Browser che permette diverse tipologie di installazioni per

garantire sempre un ambiente il piu ottimizzato possibile) e risulta anche

molto veloce e altrettanto supportato a livello di sviluppo e rilasci, il che fa

di questa distribuzione un ottimo strumento di recovery ma anche di desktop

environment.

1.4.2 Kali Linux

Una qualsiasi persona interessata all’ambiente legato alla sicurezza in-

formatica avra perlomeno sentito parlare di Backtrack6, una distribuzione

basata sulla struttura di Ubuntu7/Debian8 che aveva come obiettivo quello

di racchiudere in un unico sistema tutti i principali software e tools che un

tester di sicurezza necessitava.

Dalle ceneri di questo progetto e nato Kali Linux9, distribuzione che al gior-

no d’oggi conta piu di 300 tools di penetration testing divisi per tipologia:

dall’analisi di vulnerabilita ai tools di exploitation, dallo sniffing agli attacchi

a rete wireless fino al reverse engineering e agli stress testing.

5http://www.tinycorelinux.net6http://www.backtrack-linux.org/7http://www.ubuntu-it.org/8http://www.debian.org/index.it.html9http://www.kali.org/

Capitolo 2

GNU/Linux: da ieri ad oggi

2.1 La storia

Gli inizi

Ideato da Linus Torvalds, Linux vide uscire la sua prima versione nel

settembre del 1991 come variante di Minix, un sistema operativo creato a

fini didattici dal professore Andrew S. Tanenbaum dell’Universita Vrije

di Amsterdam. [4]

Immediata fu la decisione, da parte di Linus, di rendere disponibile il codi-

ce sorgente del sistema operativo appena creato e questo diede vita ad una

comunita costantemente impegnata a verificare i codici sorgenti, apportare

modifiche e produrre miglioramenti.

Le prime versione del kernel Linux erano molto instabili e non poteva consi-

derarsi ancora un sistema operativo completamente autonomo in quanto di-

pendeva ancora da Minix per la compilazione dei sorgenti. Inoltre mancavano

molte funzionalita che risultavano disponibili nei sistemi UNIX di allora come

ad esempio il supporto dei Floopy Disk, un meccanismo di autenticazione e

la gestione della memoria virtuale.

5

6 2. GNU/Linux: da ieri ad oggi

I primi sviluppi

Con il passare dei primi rilasci Linux acquisto una notevole popolarita

tra gli sviluppatori e la comunita inizio a crescere in maniera esponenziale

sistemando i principali bug che ancora lo caratterizzavano.

In questo momento Linux inizio ad essere considerato per la prima volta una

vera e propria alternativa ai sistemi operativi gia esistenti, quali Windows,

Unix e Solaris.

Anche se questo sistema operativo si stava man mano consolidando e sta-

va creando intorno a se una realta propria, il suo utilizzo trovava riscontro

perlopiu in realta accademiche in quanto le procedure di installazione e con-

figurazione risultavano molto complesse e poco adatte ad un generico utente

desktop.

La crescita

Durante la fine degli anni ’90, il kernel di Linux arrivo alla versione 2.2 e

porto numerose novita quali: supporto TCP/IP, multiprogrammazione, ge-

stione memoria virtuale, supporto audio e file system e gestione della rete

che permetteva l’analisi del traffico a livello di singoli pacchetti.

Tutti questi miglioramenti non furono decisivi per entrare nel mercato de-

sktop in quanto l’utenza preferiva un prodotto caratterizzato dall’estetica e

da una interfaccia grafica curata, piuttosto che da un set di configurazioni

kernel alle quali potenzialmente non avrebbe mai messo mano.

Questi sviluppi pero portarono molto interesse da parte di aziende quali IBM,

Compact e Oracle che iniziarono a credere in questo progetto, chiedendo pero

una maggiore compatibilita per sistemi di fascia alta e anche sistemi embed-

ded.

Tutto questo arrivo con la nuova versione 2.4 del kernel Linux.

2.2 Kernel: la sua architettura 7

L’arrivo delle distribuzioni

Nonostante la notorieta di Linux stesse crescendo in maniera esponenziale,

il mercato dei PC risultava ancora dominato da Microsoft e Apple in quanto

chi voleva installarsi Linux doveva scaricare i sorgenti, editare manualmente i

file di configurazione, provvedere personalmente alla compilazione del kernel

e installarsi la componente software.

Chiaramente tutto questo insieme di tecnicismi scoraggiava gran parte degli

utenti desktop e fu anche una spinta per gli sviluppatori di creare una pro-

cedura di installazione il piu user friendly possibile.

A questo punto iniziarono a nascere le distribuzioni di Linux (al momento

contiamo piu di 300 progetti in sviluppo1), ovvero delle versioni complete di

pacchetti software e solitamente provviste anche di interfaccia grafica, quindi

dedicate ad ambienti desktop.

2.2 Kernel: la sua architettura

Con il termine kernel indichiamo un software che costituisce il nucleo

di un sistema operativo, il quale ha compito di mediare l’accesso, da parte

dei processi in esecuzione su un calcolatore, all’hardware, in modo sicuro ed

indipendente.

Il kernel di Linux e un kernel monolitico, ovvero definisce un’interfaccia

sull’hardware in grado di implementare tutti i servizi richiesti dal sistema

operativo che possono essere raggruppati in questi gruppi:

• Gestione dei processi

• Comunicazione tra processi

• Gestione della memoria

• Gestione del file system

1http://lwn.net/Distributions/

8 2. GNU/Linux: da ieri ad oggi

• Gestione dell’I/O

• Gestione della rete

http://upload.wikimedia.org/wikipedia/commons/thumb/5/5b/Linux kernel map.png/800px-Linux kernel map.png

Il gestore dei processi e la parte del kernel responsabile per la gestio-

ne dei processi, dalla loro creazione alla esecuzione fino alla loro rimozione

dal sistema mentre il sottoinsieme comunicazione tra processi permette

ai processi sia di scambiarsi informazioni tramite piu tipologie di protocolli

sia di condividere informazioni tra di loro.

Il gestore della memoria gestisce l’accesso in memoria da parte dei pro-

cessi e assegna ad ognuno di loro uno spazio di indirizzamento virtuale in

memoria.

La gestione del file system fa si che l’utente possa navigare ed accedere

ai vari file e directory dislocati lungo l’albero relativo, mentre quando una

2.2 Kernel: la sua architettura 9

chiamata del sistema deve accedere ad un file sfrutta il file system virtuale,

un’interfaccia che permette di accedere al file system (esempio ext2 e NFS ).

Linux fornisce anche una gestione della rete, cioe un insieme di servizi

mirati allo scambio di dati tra piu elaboratori connessi ad una rete. [5]

10 2. GNU/Linux: da ieri ad oggi

Capitolo 3

Progettazione e costruzione di

una distribuzione

a fini didattici

3.1 Introduzione a Linux From Scratch

3.1.1 Che cos’e?

Linux From Scratch1 nasce da un’idea di Gerard Beekmans, il quale

decise di scrivere una guida dove venisse affrontato tutto il percorso di in-

stallazione e personalizzazione di un sistema Linux partendo dai sorgenti che

lo compongono.

Dopo i primi appunti che prese durante questa sua analisi, inizio a scri-

verne un libro e ottenne un notevole successo. Cosi creo attorno a se una

cerchia di collaboratori ed una fitta comunita di appassionati che porta-

no avanti questo progetto, rilasciando costantemente nuove versioni (l’ulti-

ma versione al giorno d’oggi e la 7.4, rilasciata nel settembre 2013) e ren-

dendo tutto questo materiale completamente gratuito e scaricabile dal sito

http://www.linuxfromscratch.org/

1http://www.linuxfromscratch.org/

11

123. Progettazione e costruzione di una distribuzione

a fini didattici

3.1.2 Perche Linux From Scratch?

Una delle piu frequenti domande che viene posta agli utenti di LFS2 e il

perche una persona debba intraprendere un percorso cosi lungo e impegnativo

per costruirsi una propria distribuzione Linux quando al giorno d’oggi ne

esistono gia centinaia e centinaia disponibili gratuitamente sul web e adatte

alla maggior parte degli scopi.

Il perche della mia scelta e dovuto principalmente all’interesse personale verso

questo sistema operativo e questo tipo di lavoro, ovvero analisi di GNU/Linux

e progettazione di una distribuzione autonoma e funzionante, mi ha permesso

di approfondire molto questo sistema operativo per capire in effetti come esso

lavori.

Un’ altra motivazione che puo spingere un utente ad affrontare questo tipo

di percorso e che quando installiamo una distribuzione creata da terzi, si

accetta di installare anche pacchetti software e tools che molto spesso non

vengono neanche utilizzati, costringendoci ad una perdita di spazio sul disco

fisso e ad un conseguente calo di prestazioni.

Utilizzando LFS e possibile creare distribuzioni perfettamente funzionanti

che occupano all’incirca 100MB.

3.1.3 Andare oltre Linux From Scratch

L’obiettivo fondamentale di LFS e quello di creare una distribuzione

GNU/Linux minimale ma al tempo stessa autonoma e funzionante.

Arrivato a questo punto l’utente dovra iniziare ad effettuare delle scelte,

ovvero configurare ed installare tutti i pacchetti per costruirsi la propria di-

stribuzione, che sia un server oppure un sistema desktop, l’idea di fondo e:

installa solo quello che ti serve.

Per aiutare l’utente ad affrontare questo percorso di customizzazione del pro-

prio sistema LFS e disponibile la guida Beyond Linux From Scratch di

Randy McMurchy.

2abbreviazione di Linux From Scratch

3.2 Preparazione dell’ambiente di lavoro 13

Questa guida ha una modalita di lettura molto diversa rispetto a LFS in

quanto non si presenta come un percorso lineare da seguire dall’inizio alla

fine ma il lettore deve ricercare direttamente le sezioni che lo riguardano (per

esempio security, disk management o graphics libraries) e procedere alle con-

figurazioni, compilazioni ed installazioni dei pacchetti scelti.

3.2 Preparazione dell’ambiente di lavoro

3.2.1 Prerequisiti

Un sistema LFS viene costruito partendo da una distribuzione GNU/Li-

nux gia presente nella propria macchina (nel mio caso Lubuntu3 13.10, d’ora

in poi chiamato sistema host), il quale viene utilizzato come sistema d’ap-

poggio tramite l’utilizzo di un compilatore, linker e shell per la costruzione

del nostro sistema LFS.

Nella guida e presente un paragrafo introduttivo4 dove vengono introdotti i

pacchetti software che il sistema host deve aver installato per procedere con

la costruzione di LFS, i quali risultano essere nel mio caso:

• Autoconf-2.69

• Automake-1.14

• Bash-3.2

• Binutils-2.17

• Bison-2.3

• Bzip2-1.0.4

• Coreutils-6.9

3http://lubuntu.net/4http://www.linuxfromscratch.org/lfs/view/stable/prologue/hostreqs.html

143. Progettazione e costruzione di una distribuzione

a fini didattici

• Diffutils-2.8.1

• Findutils-4.2.31

• Gawk-4.0.1

• GCC-4.1.2

• Glibc-2.5.1

• Grep-2.5.1a

• Gzip-1.3.12

• Linux Kernel-2.6.32

• M4-1.4.10

• Make-3.81

• Patch-2.5.4

• Perl-5.8.8

• Sed-4.1.5

• Tar-1.18

• Texinfo-4.9

• Xz-5.0.0

Per facilitare il lettore, sempre in questo paragrafo, viene fornito uno

script bash in grado di controllare nel proprio sistema host se tutti que-

sti pacchetti sono gia installati correttamente, altrimenti bisogna procede-

re con l’installazione dei pacchetti mancanti per continuare la procedura di

preparazione dell’ambiente di lavoro.

3.2 Preparazione dell’ambiente di lavoro 15

3.2.2 Creazione della partizione LFS

L’ambiente ideale per la creazione di un sistema LFS, come qualsiasi altro

sistema operativo, e una partizione dedicata vuota in grado di ospitarlo.

La guida ci informa che la grandezza minima della partizione in grado di

contenere i tarballs dei sorgenti e le loro compilazioni e 2.8 GB, mentre se

si ha gia l’intenzione di creare un sistema operativo completo di interfacce

grafiche e software aggiuntivo sta all’utente dare una stima iniziale della

partizione (nel mio caso ho optato per una partizione di 20GB).

Un buona idea, sempre suggerita dalla guida, e quella di costruire una piccola

partizione swap5 secondo i seguenti criteri:

• da 1 fino a 2 volte la ram: per memorie ram comprese tra 256MB e

768MB

• pari o inferiori alla ram: per memorie ram superiori ad 1GB

altrimenti e anche possibile utilizzare la stessa partizione swap del siste-

ma host gia presente nella proprio elaboratore.

La mia scelta e stata quella di creare una partizione swap dedicata di di-

mensione pari alla ram, cioe di 1GB. [6]

3.2.3 Creazione del file system

Ora che la partizione e stata creata, bisogna procedere con la creazione

del file system, un’architettura che comprende tutti i metodi di organizza-

zione dei file e delle directory in un dispositivo di archiviazione.

Per quanto riguarda i sistemi GNU/Linux vengono adottati file system di

tipo ext2, ext3 e ext4.

Quest’ultimo tipo fa parte dei cosiddetti Journaled File System, una ti-

pologia di file system di ultima generazione in grado di gestire dischi fissi di

5estensione della memoria Ram attraverso l’utilizzo di una porzione del disco fisso,

tecnica utile per la gestione della memoria virtuale da parte di un sistema operativo

163. Progettazione e costruzione di una distribuzione

a fini didattici

grandi dimensioni e ridurre i danni causati da malfunzionamenti, come ad

esempio i cali di tensione, utilizzando tecnologie derivate dai database. [7]

Per la creazione di un file system ext4 nella partizione dedicata a LFS si

esegue il seguente comando:

mkfs −v −t ext4 /dev/<xxx>

Poi viene inizializzata la partizione swap nel seguente modo:

mkswap /dev/<yyy>

3.2.4 Montare la nuova partizione

A questo punto occorre scegliere un punto di mounting per la nuova

partizione creata lanciando il seguente comando:

export LFS=/mnt/ l f s

Subito dopo rendiamo effettiva la creazione del punto di mounting :

mkdir −pv $LFS

mount −v −t ext4 /dev/<xxx> $LFS

dove 〈xxx〉 indica il nome della partizione di LFS creata precedendmente.

3.2.5 Pacchetti software e patches

A questo punto la guida suggerisce tutti i pacchetti e patches necessari

per la costruzione di un sistema Linux minimale, facendo particolarmente

attenzione all’utilizzo delle versioni testate in quanto non viene garantito un

ambiente sicuro e funzionante se l’utente sceglie nuove versioni di software

rilasciate dopo la release di LFS corrente.

Il prossimo passo e quello di creare una cartella dentro la partizione LFS in

grado di accogliere tutti i pacchetti che si andranno a scaricare e settare i

giusti permessi per potervi accedere ed effettuare le compilazioni:

mkdir −v $LFS/ sourc e s

chmod −v a+wt $LFS/ sourc e s

3.2 Preparazione dell’ambiente di lavoro 17

Il metodo piu semplice per scaricare tutti i sorgenti e quello di utilizzare

una wget-list6 che contiene gli url dei pacchetti e lanciarlo con il seguente

comando:

wget − i wget− l i s t −P $LFS/ sourc e s

3.2.6 Ultime preparazioni

Siccome in questa guida verra molto spesso utilizzata la variabile $LFS

che contiene il path del punto di mounting, nel mio caso /mnt/lfs, e sempre

buona regola controllare lo stato della variabile (specie quando il calcolatore

viene riavviato).

Creazione della directory $LFS/tools

Questa directory e fondamentale in quanto verra utilizzata per dei tools

temporanei utili durante la costruzione di LFS che pero non faranno parte del

sistema LFS alla fine della sua costruzione, quindi e una buona norma creare

questa directory ed eliminarla solo dopo aver completato tutta la procedura

di installazione descritta dalla guida.

Aggiunta dell’utente LFS

A questo punto e fortemente consigliata la creazione di un nuovo uten-

te con privilegi limitati, in modo da poter proteggere il sistema in caso di

comandi errati che, se venissero eseguiti con privilegi di amministrazione

(root-user) potrebbero compromettere l’intera stabilita dell’ambiente e del

sistema LFS durante la sua costruzione.

Quindi viene creato un gruppo chiamato lfs che conterra l’utente anch’esso

chiamato lfs, si imposta una password, si settano i privilegi necessari nelle

directories utilizzate durante la costruzione di LFS ed infine si effettuera un

login come utente lfs.

6http://www.linuxfromscratch.org/lfs/view/stable/wget-list

183. Progettazione e costruzione di una distribuzione

a fini didattici

groupadd l f s

useradd −s / bin /bash −g l f s −m −k /dev/ n u l l l f s

passwd l f s

chown −v l f s $LFS/ t o o l s

chown −v l f s $LFS/ sourc e s

su − l f s

Configurazione dell’ambiente

Nei sistemi Linux, dopo il login di un utente, la shell legge le sue confi-

gurazioni nei file .bash profile e .bashrc.

Nel caso di LFS la shell andrebbe a leggere le configurazioni di inizializzazione

nel sistema host, quindi viene utilizzato il seguente escamotage:

cat > ˜/ . b a s h p r o f i l e << ”EOF”

exec env − i HOME=$HOME TERM=$TERM PS1=’\u :\w\$ ’ / bin /bash

EOF

In questo modo, tramite il comando exec env ... /bin/bash, viene

avviata una nuova shell con nessuna variabile d’ambiente del sistema host ad

eccezione di HOME, TERM e PS1.

A questo punto creiamo anche un nuovo file .bashrc:

cat > ˜/ . bashrc << ”EOF”

s e t +h

umask 022

LFS=/mnt/ l f s

LC ALL=POSIX

LFS TGT=$ (uname −m)− l f s−l inux−gnu

PATH=/t o o l s / bin : / bin : / usr / bin

export LFS LC ALL LFS TGT PATH

EOF

• set +h: disabilita la funzione hash della shell bash

3.3 Costruzione del sistema LFS 19

• unmask 022: i nuovi files e/o directories saranno accessibili in modalita

scrittura solo dal proprietario, mentre saranno accessibili da tutti in

modalita lettura ed esecuzione

• LFS=/mnt/lfs: imposta la variabile $LFS nel punto di mounting im-

postato precedentemente

• LC ALL=POSIX: controlla la corretta locazione di alcuni programmi

• LFS TGT=$(uname -m)-lfs-linux-gnu: imposta la descrizione della

macchina per la costruzione del cross-compiler e del linker

• PATH=/tools/bin:/bin:/usr/bin: setta la variabile PATH con il nuo-

vo path creato /tools/bin

Infine per avere l’ambiente pronto per la sua costruzione occorre lanciare

il seguente comando per inizializzare le nuove impostazioni appena create:

source ˜/ . b a s h p r o f i l e

3.3 Costruzione del sistema LFS

3.3.1 Introduzione

In questo capitolo verranno descritte le principali e piu significative parti

incontrate durante questo mio percorso di progettazione e realizzazione di un

sistema LFS, tralasciando i dettagli di compilazione dei singoli pacchetti e

focalizzando l’attenzione sui passi fondamentali e sulle principali problema-

tiche che ho affrontato.

Questa costruzione del sistema LFS verra suddivisa in due step:

• costruzione di una nuova toolchain (compilatore, assemblatore, linker,

librerie e qualche tool) indipendente dal sistema host

• utilizzare la toolchain per installare gli altri tools necessari

203. Progettazione e costruzione di una distribuzione

a fini didattici

3.3.2 Costruzione di un sistema temporaneo

L’obiettivo di questa sezione e quello di creare un’area temporanea che sia

in grado di contenere al suo interno una buona serie di strumenti totalmente

isolati dal sistema host (toolchain).

Binutils e GCC

Il primo obiettivo e quello di installare Binutils e GCC.

Binutils7 e una collezione di tools per sistemi GNU/Linux tra i quali spic-

cano per ordine di importanza il linker e l’assemblatore.

GCC invece e un compilatore multi-target. Nato per C oggi dispone di vari

front-end per vari linguaggi come C++, Java e Objective-C e fa parte ormai

delle maggiori distribuzioni del sistema GNU/Linux.

Glibc

Il passo successivo e la configurazione ed installazione di glibc, la libreria

standard di C, ricordando che in questo caso la compilazione verra affrontata

dalla toolchain precedentemente creata e non dal sistema host (notiamo che

il sistema LFS inizia gradualmente il suo percorso di indipendenza).

Infine, come ultimo passaggio, la toolchain verra linkata dinamicamente8

alla glibc appena costruita.

Altri pacchetti

Dopo la costruzione di Binutils, GCC e Glibc si continua con una serie

di pacchetti da installare, suggeriti dalla guida di LFS.

L’installazione di questi pacchetti comporta l’estrazione dei sorgenti, la confi-

gurazione manuale, la compilazione e l’installazione di ognuno di loro, tramite

7http://www.gnu.org/software/binutils/8Il dynamic linking e uno standard dei sistemi GNU/Linux che consiste nel linkare

una funzione di una libreria ad un programma che ne necessita, tramite l’utilizzo di un

reference al nome della libreria, avendo dei notevoli risparmio in termini di spazio

3.3 Costruzione del sistema LFS 21

le linee guida date dal manuale.

Quando tutti questi pacchetti saranno effettivamente installati, il sistema

LFS acquisira un maggiore grado di indipendenza dal sistema host, in quanto

sara completamente indipendente, fatta eccezione del kernel in esecuzione.

Importante modifica all’utente lfs

Arrivati a questo punto e importante ricordare che la directory

$LFS/tools appartiene all’utente lfs, creato precedentemente, utente che esi-

ste solo nel sistema host.

Se non si provvede a sistemare questo problema, i file contenuti in quel-

la directory risultano appartenere ad un id che non e presente nel sistema.

Questo puo essere rischioso in quanto un utente creato successivamente po-

trebbe trovarsi associato lo stesso id e quindi ritrovarsi ad avere privilegi che

in realta non gli spettano.

Tutto cio puo essere risolto semplicemente assegnando all’amministratore

root i privilegi necessari tramite il seguente comando:

chown −R root : root $LFS/ t o o l s

3.3.3 Costruzione di LFS

Introduzione

Ora si inizia con la costruzione vera e propria del sistema LFS.

Si entrera nell’ambiente tramite chroot, si sistemano gli ultimi preparativi

e si iniziera con l’installazione di tutti i pacchetti fondamentali per popolare

il sistema.

La compilazione e l’installazione di questi pacchetti non verranno trattate in

questo scritto, in quanto risulterebbe poco utile ai fini di questa tesi e molto

ripetitivo nei confronti del lettore.

223. Progettazione e costruzione di una distribuzione

a fini didattici

Entrare nell’ambiente di installazione

Come anticipato nel paragrafo precendente, per entrare dentro questo

ambiente viene utilizzato il chroot.

Il chroot, nei sistemi Unix, e un’operazione che e in grado di cambiare il no-

do root, appartenente ad un processo padre ed ai suoi processi figli (change

root). In questo modo i processi coinvolti non potranno operare al di fuori

dell’area designata, limitando cosi i potenziali danni che nel nostro caso ri-

guardano il sistema host.

Per entrare dentro l’ambiente chroot basta eseguire il seguente comando:

chroot ”$LFS” / t o o l s / bin /env − i \HOME=/root \TERM=”$TERM” \PS1=’\u :\w\$ ’ \PATH=/bin : / usr / bin : / sb in : / usr / sb in : / t o o l s / bin \/ t o o l s / bin /bash −−l o g i n +h

In questo modo vengono resettate tutte le variabili d’ambiente, fatta ec-

cezione per HOME, TERM, PS1 e PATH e da questo punto in poi non ci sara piu

modo di utilizzare la variabile $LFS=/mnt/lfs in quanto il path contenuto

nella variabile risultera essere la root dell’ambiente chroot.

Popolazione del file system

In questa fase avviene la vera e propria creazione dell’albero delle direc-

tory che fara parte del sistema LFS:

mkdir −pv /{bin , boot , e t c /{opt , s y s c on f i g } ,home , l i b ,mnt , opt , run}mkdir −pv /{media/{ f loppy , cdrom} , sbin , srv , var}i n s t a l l −dv −m 0750 / root

i n s t a l l −dv −m 1777 /tmp /var /tmp

mkdir −pv / usr /{ , l o c a l /}{bin , inc lude , l i b , sbin , s r c }mkdir −pv / usr /{ , l o c a l /} share /{doc , in fo , l o c a l e ,man}mkdir −v / usr /{ , l o c a l /} share /{misc , terminfo , zone in fo }mkdir −pv / usr /{ , l o c a l /} share /man/man{1 . . 8}f o r d i r in / usr / usr / l o c a l ; do

ln −sv share /{man, doc , i n f o } $d i r

done

case $ (uname −m) in

x86 64 ) ln −sv l i b / l i b 64 && ln −sv l i b / usr / l i b 64 && ln −sv l i b / usr / l o c a l / l i b 6 4 ; ;

e sac

mkdir −v /var /{ log , mail , spoo l }ln −sv /run /var /run

ln −sv /run/ lock /var / lock

mkdir −pv /var /{opt , cache , l i b /{misc , l o c a t e } , l o c a l }

3.3 Costruzione del sistema LFS 23

Creazione file passwd e group

Affinche l’utente root possa eseguire un login, e necessario creare il file

/etc/passwd che contiene tutte le informazioni sugli utenti del sistema. Si

procede con la creazione in questo modo:

cat > / e tc /passwd << ”EOF”

root : x : 0 : 0 : root : / root : / bin /bash

bin : x : 1 : 1 : bin : / dev/ n u l l : / bin / f a l s e

nobody : x : 9 9 : 9 9 : Unpr iv i l eged User : / dev/ n u l l : / bin / f a l s e

EOF

Inoltre e necessario creare anche il file /etc/group che contiene tutti i

gruppi di utenti presenti nel sistema:

cat > / e tc /group << ”EOF”

root : x : 0 :

bin : x : 1 :

sys : x : 2 :

kmem: x : 3 :

tape : x : 4 :

t ty : x : 5 :

daemon : x : 6 :

f l oppy : x : 7 :

d i sk : x : 8 :

lp : x : 9 :

d i a l o u t : x : 1 0 :

audio : x : 1 1 :

v ideo : x : 1 2 :

utmp : x : 1 3 :

usb : x : 1 4 :

cdrom : x : 1 5 :

mail : x : 3 4 :

nogroup : x : 9 9 :

EOF

Per quanto riguarda la gestione dei gruppi in un sistema GNU/Linux,

non esistono particolari standard di creazione, viene solo raccomandato di

utilizzare un GID (Group-Id) per il gruppo root e bin rispettivamente pari

a 0 e 1.

243. Progettazione e costruzione di una distribuzione

a fini didattici

Compilazione ed installazione dei restanti pacchetti

Dopo queste ultime configurazioni effettuate, ritorna una parte del libro

(come descritto della sezione 5.2.4 - Altri pacchetti) dove si chiede all’utente

la configurazione manuale, la compilazione e l’effettiva installazione di una

serie di pacchetti che popoleranno il sistema LFS minimale che si andra a

costruire.

Ricordo che in questa parte della guida ogni passaggio e descritto in maniera

molto precisa, per garantire il minor margine di errore che si puo verificare

durante procedure di questo genere.

Pulizia finale

Arrivati a questo punto, come gia accennato in precedenza nel paragra-

fo 4.6.1 Creazione della directory $LFS/tools, verra effettuata una piccola

modifica all’ambiente chroot:

chroot ”$LFS” / usr / bin /env − i \HOME=/root TERM=”$TERM” PS1=’\u :\w\$ ’ \PATH=/bin : / usr / bin : / sb in : / usr / sb in \/ bin /bash −−l o g i n

La ragione di cio e che la directory tools contiene pacchetti che non ver-

ranno piu utilizzati, si invita infatti all’utente di provvedere alla cancellazione

di quest’ultima.

3.3.4 Impostazione script d’avvio del sistema

Ultime configurazioni

La costruzione del sistema LFS sta per giungere al termine e in questo

punto della guida vengono affrontati i passi per sistemare le ultime configu-

razioni necessarie e per rendere avviabile il sistema.

Le parti piu importanti che andranno ad essere sviluppate sono:

• General Network Configuration9:

9http://www.linuxfromscratch.org/lfs/view/stable/chapter07/network.html

3.3 Costruzione del sistema LFS 25

serie di configurazioni per abilitare l’utilizzo di una o piu schede di rete

nel caso il sistema che si sta costruendo abbia necessita di connettersi

ad Internet

• Customizing the /etc/hosts file10:

anche queste configurazioni trattano la connessione ad Internet, in par-

ticolare viene focalizzata l’attenzione sul file /etc/host, un servizio di

sistema che ha la funzione di tradurre nomi human-friendly in indirizzi

IP

• Device and Module Handling on an LFS System11:

una rassegna di informazioni, piu o meno importanti, riguardante la

gestione dei device da parte del kernel Linux

• Creating Custom Symlinks to Devices12:

sezione molto legata a quella precedente, che pero fa riferimento a soft-

ware aggiuntivo che potrebbe essere aggiunto un domani dall’utente

(esempio software multimediale), mettendolo subito a consapevolezza

della gestioni di periferiche quali CD-ROM e DVD.

Rendere avviabile il sistema LFS

Ora rimangono da affrontare le parti conclusive della guida, ovvero tutte

le configurazioni che servono per rendere il sistema avviabile.

Verra installato il pacchetto LFS-Bootscripts-2013082113, che contiene al

suo interno tutti gli script necessari all’avvio e allo spegnimento del sistema,

poi a seguire verra configurato: il nome del sistema operativo (system-hostname),

l’orologio di sistema e la console Linux.

10http://www.linuxfromscratch.org/lfs/view/stable/chapter07/hosts.html11http://www.linuxfromscratch.org/lfs/view/stable/chapter07/udev.html12http://www.linuxfromscratch.org/lfs/view/stable/chapter07/symlinks.html13http://www.linuxfromscratch.org/lfs/view/stable/chapter07/bootscripts.html

263. Progettazione e costruzione di una distribuzione

a fini didattici

Crezione del file /etc/fstab

Fstab e un file presente nei sistemi GNU/Linux che elenca i dischi e le

partizioni presenti evidenziandone le caratteristiche e com’essi si integrano

al file system.

Per la creazione di questo file si procede nel seguente modo:

cat > / etc / f s t ab << ”EOF”

# Begin / etc / f s t ab

# f i l e system mount−point type opt ions dump f s ck

# order

/dev/<xxx> / < f f f > d e f au l t s 1 1

/dev/<yyy> swap swap pr i=1 0 0

proc /proc proc nosuid , noexec , nodev 0 0

s y s f s / sys s y s f s nosuid , noexec , nodev 0 0

devpts /dev/ pts devpts g id=5,mode=620 0 0

tmpfs /run tmpfs d e f a u l t s 0 0

devtmpfs /dev devtmpfs mode=0755 , nosuid 0 0

# End / etc / f s t ab

EOF

dove 〈xxx〉, 〈yyy〉 e 〈fff〉 verranno rimpiazzati dagli opportuni valori del

nostro sistema LFS.

Compilazione del kernel Linux-3.10.10

Questa risulta essere sicuramente una delle parti piu delicate del percorso

che ho affrontato, ovvero la compilazione del kernel Linux.

Come ho gia descritto in precedenza, il kernel puo essere considerato come il

cuore del sistema operativo, ovvero e un insieme di funzioni essenziali che

lega insieme le risorse hardware dell’elaboratore, la gestione della memoria

primaria e la gestione delle periferiche.

Nel mio caso non ho seguito esclusivamente la sezione dedicata nella guida14

ma ho anche cercato su dei forum dedicati a Linux From Scratch l’esperienza

dei vari utenti per cercare di riassumere la compilazione del kernel nel minor

numero di passaggi e che avesse un riscontro positivo nel mio caso personale.

14http://www.linuxfromscratch.org/lfs/view/stable/chapter08/kernel.html

3.3 Costruzione del sistema LFS 27

Questa e l’esatta successione di comandi che ho utilizzato per la compi-

lazione del kernel Linux:

# copy , untar and s e t pe rmi s s i ons

cp / sourc e s / l inux −3 . 0 . 0 . ta r . xz / usr / s r c /

cd / usr / s r c

ta r l inux −3 . 0 . 0 . ta r . xz

chmod −R 0:0 l inux −3.0 .0

# bu i ld the ke rne l

cd l inux −3.0 .0

make mrproper

make d e f c o n f i g

make menuconfig

# i n s t a l l the ke rne l and a s s o c i a t e d f i l e s

make

make m o d u l e s i n s t a l l

cp −v arch /x86/ boot /bzImage / boot /vmlinuz−3.0.0− l f s −7.0

cp −v System . map / boot /System . map−3.0 .0

cp −v . c o n f i g / boot / con f i g −3.0 .0

• La prima parte dei comandi riguarda essenzialmente l’estrazione dei

sorgenti del kernel nella directory /usr/src e la sua modifica di per-

messi per permetterne la corretta compilazione.

• make mrproper: ci si assicura che l’albero del kernel sia completamente

pulito preparandolo alla sua compilazione.

• make defconfig: crea un config-file basato sulle configurazioni di de-

fault presenti per la propria architettura di sistema.

• make menuconfig: lancia un menu di configurazione, dotato di user-

interface nel quale l’utente puo scegliere quali configurazioni abilitare

oltre quelle di default create nel passaggio precedente.

Nel mio caso ho abilitato queste:

283. Progettazione e costruzione di una distribuzione

a fini didattici

Device Drivers -> Generic Driver Options -> Maintain a

devtmpfs filesystem to mount at /dev

Device Drivers -> Network device support -> Wireless LAN ->

Intel PRO/Wireless 3945ABG/BG Network Connection (iwl3945)

• make, make modules install: compila ed installa il kernel piu i suoi

moduli.

• cp: gli ultimi tre comandi copiano dei file sotto la directory /boot.

Il primo riavvio e le prime impressioni

Si e arrivati dunque alla fine, dove tutto il software di LFS risulta essere

installato. Ora se riavviamo il calcolatore si puo scegliere di avviare il siste-

ma LFS tramite il boot iniziale e finalmente vederlo all’opera. Chiaramente

ancora risulta essere un sistema minimale in quanto non dispone di interfacce

grafiche e di qualsiasi tipo di software aggiuntivo.

Linux From Scratch ha portato a termine il suo compito, cioe e stato creato

un sistema GNU/Linux minimale dal quale l’utente potra portare avanti il

proprio progetto.

A questo punto la mia attenzione si e spostata verso un altro manuale,

Beyond Linux From Scratch15 che ho gia introdotto all’inizio di que-

sta relazione, per continuare il mio percorso di personalizzazione e a dar vita

ad un sistema operativo che sia utile a fini accademici, nel conseguimento di

un titolo in discipline informatiche.

Nel prossimo capitolo descrivero questo percorso, analizzando tutte le prin-

cipali scelte che ho dovuto affrontare analizzando varie tipologie di software

aggiuntivo che si dovranno installare per dar vita ad una nuova distribuzione

GNU/Linux.

15http://www.linuxfromscratch.org/blfs

3.4 Personalizzazione del sistema : Beyond Linux From Scratch 29

3.4 Personalizzazione del sistema : Beyond

Linux From Scratch

3.4.1 Introduzione

Your distro, your rules : da questo momento in poi inizia il vero percorso

di creazione e personalizzazione della propria distribuione.

Beyond Linux From Scratch fornisce un ottimo approccio guidando l’u-

tente nel percorso che dovra affrontare con una serie di capitoli che trattano

diverse tematiche alle quali l’utente puo appellarsi o meno, a sua discrezione

in base al percorso che vuole seguire.

Le sezioni di maggior rilievo in questa guida sono le seguenti:

• Security

• Programming

• Networking

• X and Windows Manager

• Multimedia

• Desktop Environment (Gnome, Xfce, Kde)

3.4.2 Post LFS

L’unica sezione di Beyond Linux From Scratch che utilizza un metodo

di approccio come Linux From Scratch e After LFS Configuration Issues 16,

una sezione che il lettore dovra analizzare dall’inizio alla fine per sistemare le

ultime configurazioni per poi ottenere una maggiore liberta di progettazione

del proprio sistema che andra a ritrovare negli altri capitoli che compongono

questa guida.

Gli ultimi contenuti che dovranno essere affrontati sono i seguenti:

16http://www.linuxfromscratch.org/blfs/view/stable/postlfs/config.html

303. Progettazione e costruzione di una distribuzione

a fini didattici

• Creating a Custom Boot Device:

informazioni per la creazione di un disco di ripristino (rescue-disk)

• Configuring for Adding Users:

come gestire la creazione di nuovi utenti in sistemi GNU/Linux

• About System Users and Groups:

gestione degli utenti e gruppi secondo il Linux Standard Base17

• About Devices:

panoramica sulla gestione delle periferiche

• The Bash Shell Startup Files:

configurazioni sui i file di startup sulla shell /bin/bash

• The /etc/vimrc and /.vimrc Files:

configurazioni per l’utilizzo di Vim18, text-editor di LFS

• Customizing your Logon with /etc/issue:

personalizzazione del messaggio di logon del sistema

• The /etc/shells File:

creazione del file /etc/shell utile per la gestione dei privilegi di un

utente per GDM19 o per demoni FTP20

• Random Number Generation:

programma di gestione dei numeri casuali utile per programmi come

OpenSSH21

17http://www.linuxfoundation.org/collaborate/workgroups/lsb18http://www.vim.org/19Gnome Display Manager: nei sistemi Gnome permette il login di un utente utilizzando

un’interfaccia grafica nel quale inserire username e password.20File Transfer Protocol: e un protocollo per la trasmissione dei dati via web.21Open Secure Shell: insieme di programmi che permetton l’utilizzo di sessioni

crittografate secondo il protocollo SSH

3.4 Personalizzazione del sistema : Beyond Linux From Scratch 31

• Compressing Man and Info Pages:

compressione dei file di documentazione presenti nel sistema per otti-

mizzare lo spazio presente sul disco fisso

• lsb release-1.4:

script che permette di ottenere informazioni sullo stato della propria

distribuzione secondo il Linux Standard Base

3.4.3 Una prima analisi

E’ bene a questo punto fermarsi un attimo e fare il punto della situazione

prima di continuare con l’installazione di software extra, per evitare di tor-

nare indietro ad eliminare pacchetti installati, i quali di solito dipendono da

altri pacchetti (dipendenze) aumentando esponenzialmente i tempi di pulizia

del proprio sistema.

L’idea

L’idea principale che mi ha condotto ad affrontare un percorso del genere,

e stata la progettazione di un sistema GNU/Linux adatto ai principali scopi

di uno studente di informatica, nel mio caso, iscritto all’Universita degli

Studi di Milano-Bicocca.

Il pensiero principale e quello di dotare ogni studente, dal momento della sua

immatricolazione, di un ambiente di lavoro il piu completo e flessibile, in

grado di accompagnarlo durante questo percorso di studi.

L’idea infatti si puo concretizzare con la creazione di una distribuzione molto

snella in grado di poter essere avviata nel maggior numero di calcolatori

presenti al giorno d’oggi (anche i piu datati) tramite un’esecuzione di tipo

live oppure tramite virtualizzazione.

Una volta entrati in questo ambiente, lo studente avra a disposizione una

serie di tools/programmi, guide e materiale didattico catalogate secondo il

suo piano di studi in modo da poter essere velocemente utilizzabile.

323. Progettazione e costruzione di una distribuzione

a fini didattici

Caratteristiche fondamentali

A questo punto del lavoro, ho pensato di soffermarmi ed analizzare un

po’ piu in dettaglio tutte le principali caratteristiche che il sistema operativo

necessitava:

• Completo:

deve garantire la presenza di tutto, o perlomeno della maggior parte

del materiale (software e non), in modo da garantire allo studente un

ottimo strumento che lo accompagnera nel suo percorso di studi.

• Compatibile:

deve essere garantita una compatibilita ad ampio spettro per la maggior

parte dei calcolatori portatili.

• Semplice e performante:

il sistema dev’essere molto leggero in quanto pensato ad un’esecuzio-

ne live o virtualizzata ed anche molto semplice e intuitivo, per non

scoraggiare gli utenti non abituati ad ambienti Unix e derivati.

3.4.4 Interfaccia grafica

X Windows System

Nato nel 1984, X Windows System (detto anche semplicemente X ) e uno

dei gestori grafici piu diffusi e viene addirittura considerato uno standard per i

sistemi Unix e Unix-like (XOrg22 e l’implementazione open-source ufficiale).

Possiamo considerare X come la base sulla quale costruire l’interfaccia grafica

utente, infatti prima di poter installare un semplice gestore di finestre e

opportuno avere un server X funzionante.

La caratteristica fondamentale di questo gestore e l’implementazione di tutte

le funzioni di base che servono per la creazione di ambienti GUI23 ovvero

22http://www.x.org/wiki/23Graphical User Interface: interfaccia grafica tramite la quale un utente interagisce con

un sistema tramite l’utilizzo di strumenti piu convenzionali

3.4 Personalizzazione del sistema : Beyond Linux From Scratch 33

disegnare e muovere le finestre nello schermo ed interagire con l’hardware di

input ovvero mouse e tastiera.

Sara poi compito di un windows manager quello di implementare lo stile

visivo, ovvero come poi il sistema operativo si presentera davanti all’utente.

Desktop Environment

Un ambiente desktop, o Desktop Environment e un insieme di elementi

in grado di gestire l’interfaccia grafica utente.

E’ composto, nella maggior parte dei casi, dai seguenti client X :

• icone

• finestre

• barre degli strumenti

• sfondi e widget

• set applicazioni e servizi di default (es. browser e client email)

Come descritto in precedenza questa distribuzione dovra risultare sem-

plice e performante, ed adatta anche a utenti che non hanno familiarita con

ambienti Unix quindi la scelta di un ambiente grafico l’ho considerata come

una delle scelte piu importanti durante questo percorso.

Ho cercato di analizzare la maggior parte dei desktop-environment piu co-

nosciuti, cercando di confrontarli fra loro, mettendone in evidenza i pro e i

contro e tenendo conto anche della mia esperienza personale, in quanto uten-

te Linux da qualche anno.

Quest’analisi che ho condotto mi ha portato a scegliere LXDE come desktop-

environment in quanto riassume in se la maggior parte delle caratteristiche

che stavo cercando.

LXDE

“Il ’Lightweight X11 Desktop Environment’ e un ambiente desktop estre-

mamente veloce , performante e con un buon risparmio energetico. Gestito

343. Progettazione e costruzione di una distribuzione

a fini didattici

da una comunita internazionale di sviluppatori, si presenta con una bella in-

terfaccia, supporto multi-lingua, tasti di scelta rapida standard e funzionalita

aggiuntive come la navigazione a schede dei file. LXDE utilizza meno CPU e

RAM di altri ambienti desktop. E ’progettato appositamente per i computer

cloud con basse specifiche hardware, come i netbook, i dispositivi MID (Mo-

bile ad esempio) o computer datati.24 ”

Procedendo con l’installazione di LXDE verranno installati i seguenti pac-

chetti:

• gpicview : visualizzatore di immagini

• lxappearance: componente per la configurazione di temi, icone e font

• lxde-common: impostazioni per integrare le varie componenti di lxde

• lxde-icon-theme: tema di icone per lxde

24http://lxde.org/

3.4 Personalizzazione del sistema : Beyond Linux From Scratch 35

• lxlauncher : lanciatore ideato principalmente per i netbook

• lxmenu-data: file per adeguare specifiche a freedesktop.org

• lxpanel : pannello per il desktop di lxde

• lxrandr : gestore per lo schermo

• lxsession-lite: gestore per le fasi di spegnimento/riavvio/sospensione

• lxtask : task-manager molto veloce

• lxterminal : un emulatore di terminale

• menu-cache: demone che genera il menu di lxde

• openbox : il windows-manager di lxde, veloce e molto personalizzabile

• pcmanfm: file-manager predefinito di lxde

Per l’installazione di LXDE, Beyond Linux From Scratch offre una sezione

molto ben strutturata: LXDE DESKTOP25.

Per quanto possa sembrare un procedimento non troppo lungo in realta ogni

pacchetto da installare richiede quasi sempre delle dipendenze (all’inizio non

presenti in un sistema LFS minimale) e molto spesso queste dipendenze a

loro volta hanno bisogno di altre dipendenze e cosı via: si crea un vero e

proprio albero delle dipendenze da risolvere.

Come esempio riporto un ramo di dipendenze del pacchetto lxde icon theme-

0.5.0 :

lxde icon theme −0.5 .0

|−−−> GTK−2.24.22

|−−−> gdk pixbuf −2.30.1

|−−−> l i b j p e g−turbo −1.3 .0

|−−−> NASM−2.10.09

25http://www.linuxfromscratch.org/blfs/view/svn/lxde/lxde-desktop.html

363. Progettazione e costruzione di una distribuzione

a fini didattici

La prima veste grafica

Dopo aver installato lxde come desktop-environment e possibile scaricare

ed installare un’infinita di temi grafici direttamente da internet26.

Per questa distribuzione ho cercato una veste grafica non troppo elaborata e

un wallpaper che rispecchiasse il progetto che ho portato avanti.

Per dare al lettore un’idea finale del sistema operativo completo di interfaccia

grafica, allego un paio di screenshot del desktop.

26http://gnome-look.org/ e uno dei siti con il maggior numero di temi grafici in rete

3.4 Personalizzazione del sistema : Beyond Linux From Scratch 37

I primi software aggiuntivi

Ora l’attenzione si sposta verso la suite di software che il sistema operativo

dovra offrire all’utente.

In questo caso ho preferito suddividere il software aggiuntivo in due categorie:

• Software generico:

in questa categoria intendo tutta la suite di software che un utente deve

avere in un sistema operativo, a prescindere da quale esso sia. Quindi

editor di testo, gestore archivi, visualizzatore di immagini e cosi via.

• Software specifico:

in questa invece fa parte tutta la suite di software mirata alla finalita

del progetto, ovvero utili ad uno studente che intraprende il percorso

accademico di una laurea in informatica presso l’Universita degli Studi

di Milano-Bicocca.

La categoria del software generico e facilmente risolvibile tramite un rapi-

do sguardo a qualche distribuzione GNU/Linux famosa (Ubuntu27 per esem-

27http://www.ubuntu.com/

383. Progettazione e costruzione di una distribuzione

a fini didattici

pio) per farsi un elenco dei software base che una qualsiasi distribuzione deve

avere.

Invece per quanto riguarda il software specifico bisognerebbe avviare una pic-

cola indagine, tra gli iscritti al corso di informatica ed i relativi docenti, dove

viene chiesta una lista di software che questo sistema operativo deve offrire,

suddivisa per anno accademico e area didattica.

Capitolo 4

Conclusioni e sviluppo futuro

Arrivati a questo punto e giusto che mi soffermi sulle ultime conclusioni

del progetto portato avanti fin’ora.

Linux From Scratch e uno strumento molto affascinante ed oltre ad aiu-

tare un utente alla creazione di una propria distribuzione, che risulta unica

nel suo genere, ha anche un altra finalita molto importante: capire tutti i

meccanismi che stanno dietro ad un sistema operativo potente come Linux.

Seguendo poi i consigli di Beyond Linux From Scratch ho approfondito

ed ampliato le mie conoscenze verso un’infinita di personalizzazioni e confi-

gurazioni che Linux offre.

Un altro particolare interessante e stato quello di trovare una comunita di

persone sparse in tutto il mondo molto interessate a nuove persone che si

affacciano sul mondo Linux, disposte ad interagire su problematiche piu o

meno note che vengono fuori durante una progettazione di un sistema Linux,

mantenendo cosi una community molto attiva.

4.1 Problemi incontrati

In questa sezione voglio far presente una lista di problemi piu importanti

che per ragioni di tempistiche non sono stati sistemati ed eventualmente una

riflessione personale:

39

40 4. Conclusioni e sviluppo futuro

• Configurazione della connessione wifi : sono riuscito a connettermi in

rete soltanto tramite connessione ethernet utilizzando il protocollo DH-

CP1, mentre non sono riuscito a completare la configurazione corretta

per l’utilizzo del wifi (e presente un thread aperto dei problemi che ho

riscontrato in linuxquestions.org2)

• Riconoscimento periferica usb e lettore cd

• Scorrimento ad un dito touchpad notebook

• Gestore aggiornamenti dei pacchetti : tema molto delicato che non trova

molto spazio nelle guide ufficiali di LFS e BLFS, ma rimanda ad altro

materiale da analizzare in un secondo momento3

4.2 Possibili sviluppi

Come accennato precedentemente, sarebbe molto interessante iniziare

un’indagine verso studenti e docenti per fare in modo che contribuiscano

a creare una suite di software e materiali utili al fine di ottenere una distri-

buzione il piu completa possibile.

Ottenuto questo potrebbe iniziare un periodo di test nel quale un certo nu-

mero di studenti inizieranno ad utilizzare un prototipo del sistema operativo

per affrontare poi un percorso di ottimizzazione e raffinamento della versione

finale che potra essere rilasciata per un range di utenti ancora piu ampio.

1Dynamic Host Configuration Protocol: protocollo che permette l’acquisizione di

indirizzi IP in maniera dinamica2http://www.linuxquestions.org/questions/linux-from-scratch-13/[blfs-7-4]-wifi-wlan0-

interface-didn’t-recognize-4175486558/3http://www.linuxfromscratch.org/lfs/view/development/chapter06/pkgmgt.html

Bibliografia

[1] Gerard Beekmans. Linux From Scratch - Version

7.4

http://www.linuxfromscratch.org/lfs/

[2] Randy McMurchy - Beyond Linux From Scratch -

Version 7.4

http://www.linuxfromscratch.org/blfs/

[3] Definizione di Live Cd - fonte: Wikipedia

[4] Tanenbaum, A.S.: MINIX: A UNIX Clone with

Source Code, Proc. Uniforum Conf., pp. 185-195,

1987.

[5] H. Deitel, P. Deitel, D. Choffnes - Sistemi operativi

- terza edizione Pearson (Prentiche Hall), pp. 710-

714.

[6] SwapFaq: https://help.ubuntu.com/community/SwapFaq

[7] Anatomy of Linux journaling file systems

http://www.ibm.com/developerworks/library/

l-journaling-filesystems/

41