PREV
Capitolo 3 - Installazione
NEXT
Capitolo 5 - Configurazione della Rete

Torna all'indice

Capitolo 4. Configurazione di Sistema

Prima di poter configurare le parti piu'avanzate del sistema, e' indispensabile imparare come e' organizzato e quali comandi e' possibile utilizzare per la ricerca di file e programmi. E' altrettanto importante capire se sara' necessario compilare un kernel personalizzato e quali passi saranno necessari per farlo. Questo capitolo ha lo scopo di farvi familiarizzare con l'organizzazione del sistema e i file di configurazione. In seguito sara' possibile proseguire con la configurazione avanzata.


top

Torna all'indice

Panoramica sul Sistema

E' importante comprendere come il sistema Linux e' stato assemblato prima di immergersi nei vari aspetti della configurazione. Linux e' sensibilmente differente da DOS o Windows (o anche da un Macintosh); questa sezione ha il solo scopo di esporre le informazioni necessarie per poterlo facilmente configurare in base alle proprie esigenze.

Layout del File System

La prima differenza rilevante tra Slackware Linux e un sistema DOS o Windows e' il filesystem. Per prima cosa, non vengono utilizzate lettere per identificare le diverse partizioni. Sotto Linux esiste un' unica directory principale. Potete pensare ad essa come al drive C: del DOS. Ogni partizione viene montata in una directory separata che si diparte dalla directory principale, un po' come un hard disk in "perenne espansione". La directory principale viene denominata "root directory", ed e' indentificata da un singolo slash (/). Questo concetto puo' apparire strano, ma facilita notevolmente le cose qualora sia necessario aggiungere dello spazio. Ad esempio, ipotizziamo di aver terminato lo spazio disponibile sul disco che ospita la partizione /home. La maggior parte delle persone installa Slackware creando un' unica grande partizione root. Bene, poiche' ogni partizione puo' essere montata su una qualsiasi directory, e' sufficiente acquistare un nuovo hard disk e montarlo sulla directory /home. In questo modo si e' "appiccicato" un po' di spazio libero sul sistema, il tutto senza complicarsi la vita. Di seguito vengono riportate le descrizioni delle directory principali di Slackware.

/bin

I programmi essenziali per l'utente vengono conservati qui. Essi rappresentano il minimo necessario ad un utente per utilizzare il sistema. In questa directory sono collocati programmi come la shell e i comandi per il filesystem (ls, cp, e cosi via). La directory /bin solitamente non viene modificata dopo l'installazione. Di solito, se viene modificata, e' a causa di qualche aggiornamento software.

/boot

Contiene i file necessari al Linux Loader (LILO). Questa directory e' suscettibile di qualche piccola modifica dopo l'installazione.

/cdrom

E' bene ricordare che tutti i device sono montati in una subdirectory (chimata "mount point") della root. /cdrom e' il mount point del lettore CD-ROM .

/dev

Ogni cosa in Linux viene trattata come un file, perfino i dispositivi hardware come le porte seriali, gli hard disk e gli scanner. Per accedere a questi dispositivi e' necessaria la presenza di alcuni file particolari, denominati device node. Tutti i device node sono collocati nella directory /dev. Potete riscontrare questa struttura in diversi sistemi operativi simil-UNIX.

/etc

Questa directory ospita i file di configurazione del sistema. Tutto e' conservato qui: dai file di configurazione di X Window, al database utenti, fino agli script di inizializzazione del sistema. Gli amministratori di sistema acquisteranno con il tempo una certa familiarita' con questa directory.

/home

Linux e' un sistema operativo multiutente. Ad ogni utente viene assegnato un account e dello spazio riservato ai suoi file personali. Questa directory viene denominata la "home" dell'utente. /home e' la posizione predefinita dove vengono ospitate le directory home degli utenti (es.: /home/pippo e' la home dell'utente pippo).

/lib

Qui vengono posizionate le librerie di sistema per le operazioni di base. Le librerie C, il dynamic loader, le librerie ncurses e i moduli del kernel sono gli elementi piu' importanti che troviamo qui.

/lost+found

All'avvio del sistema, viene controllato se il filesystem contiene errori. Se vengono individuati errori viene lanciato il programma fsck per tentare di corregerli. Le parti corrette del filesystem vengono scritte nella directory /lost+found.

/mnt

Questa directory ha lo scopo di servire come mount point temporaneo per gli hard disk o i drive rimuovibili.

/opt

Pacchetti software opzionali. L'idea alla base della directory /opt e' che ogni pacchetto software venga installato in /opt/<pacchetto software>, in modo da facilitare una successiva eliminazione del pacchetto stesso. Slackware distribuisce alcuni pacchetti installati in /opt (come ad esempio KDE in /opt/kde), ma si e' liberi di installare qualunque cosa in /opt.

/proc

Questa e' una directory particolare. E' un filesystem virtuale che non risiede realmente sul disco, ma fornisce un mezzo di comunicazione con il kernel. Le informazioni che il kernel rende disponibili sono conservate sotto forma di "file" nella directory /proc. E' possibile inoltre inviare informazioni al kernel attraverso alcuni di questi "file". Si provi ad esempio ad eseguire cat /proc/cpuinfo.

/root

L'amministratore di sistema e' chiamato utente "root".La home directory dell'utente root e' posizionata in /root e non in /home come per gli altri utenti del sistema. La ragione e' semplice. Cosa accadrebbe se /home fosse una partizione diversa da / e non fosse possibile montarla per qualche motivo? All'utente root sarebbe difficile eseguire il login per riparare il problema, dal momento che la sua home directory e' collocata sul filesystem danneggiato.

/sbin

I programmi essenziali per l'utente root e per l'avvio del sistema sono conservati in questa directory. Sono programmi destinati ad essere eseguiti dall'utente root, e non dal normale utente.

/tmp

La locazione per i file temporanei. Tutti gli utenti hanno accesso in lettura e scrittura su questa directory.

/usr

E' solitamente la directory piu' grande in un sistema Linux, e contiene quasi tutto: i programmi, la documentazione, il codice sorgente del kernel e il sistema X Window. E' in questa directory che verranno installati la maggioranza dei programmi.

/var

In questa directory sono collocati i file di log del sistema, la cache di dati e i file di lock dei vari programmi. Questa e' la directory utilizzata per conservare tutte quelle informazioni che cambiano frequentemente.

A questo punto si dovrebbe essere in possesso di una certa dimestichezza con la struttura del filesystem. La prossima sezione illustrera' alcuni metodi per trovare file specifici in modo efficiente evitando noiose ricerche manuali.


top

Torna all'indice

Ricerca dei file

A questo punto e' noto il contenuto di ogni directory, tuttavia e' ancora difficile trovare cio' che si sta cercando. Ovvero e' possibile cercare directory per directory, ma esistono metodi decisamente piu' veloci. In Slackware ci sono quattro comandi fondamentali per la ricerca.

which

Il primo e' il comando which(1). which viene impiegato per localizzare velocemente un programma in quanto esegue una semplice ricerca attarverso il tuo PATH e restituisce la prima occorrenza del programma cercato con il relativo percorso assoluto. Facciamo un esempio

$ which bash

/bin/bash

Da cio' si deduce che bash e' situato nella directory /bin. Si tratta di un comando di ricerca molto limitato, poiche' ricerca solamente all'interno del tuo PATH.

whereis

Il comando whereis(1) funziona in modo analogo al comando which, ma e' in grado di cercare anche pagine di manuale e file sorgenti. Una ricerca whereis per bash dovrebbe ritornare il seguente output:

$ whereis bash

bash: /bin/bash /usr/bin/bash /usr/man/man1/bash.1.gz

Questo comando non solo mostra la posizione del programma bash, ma anche dove e' situata la documentazione in linea relativa. Anche questo comando risulta limitato, per esempio, nel caso in cui si volesse cercare un file di configurazione.

find

Il comando find(1) permette la ricerca di qualunque cosa. Volendo ricercare su tutto il sistema la posizione del file xinitrc, si puo' utilizzare la seguente linea di comando:

$ find / -name xinitrc

./var/X11R6/lib/xinit/xinitrc

find impieghera' un po a terminare la ricerca poiche' dovra' attraversare tutto l'albero delle directory a partire dalla directory root. E se il comando viene lanciato come utente normale, probabilmente si otterra' alcuni messaggi di errore relativi alle directory alle quali solo root ha accesso in lettura. Tuttavia find, seppur lento, e' molto efficace nella ricerca dei file richiesti. Se solo potesse essere un po' piu' veloce...

locate

Il comado locate(1) ricerca su tutto il filesystem proprio come il comando find, ma la ricerca viene fatta su un database piuttosto che sul filesystem vero e proprio. Il database e' configurato per essere aggiornato automaticamente alle 4:40AM, in tal modo e' possibile avere una lista aggiornata dei file presenti sul sistema. E' possibile lanciare manualmente updatedb(1) per aggiornare il database (prima di lanciare updatedb e' necessario eseguire su per divenire l'utente nobody). Di seguito un esempio di locate in azione:

$ locate xinitrc #non e' necessario partire dalla directory root(/)

/var/X11R6/lib/xinit/xinitrc /var/X11R6/lib/xinit/xinitrc.fvwm2 /var/X11R6/lib/xinit/xinitrc.openwin /var/X11R6/lib/xinit/xinitrc.twm

Si ottiene di piu' di quello che si stava cercando e anche piu' velocemente. Con questi comandi si e' ora in grado di scovare qualsiasi cosa si desideri all'interno del proprio sistema Linux.


top

Torna all'indice

La Directory /etc/rc.d

I file di inizializzazione del sistema sono posizionati nella directory /etc/rc.d.Slackware usa una struttura in stile BSD per i file di inizializzazione. Ad ogni processo o runlevel viene asseganto un proprio file rc. Tutto cio' permette di avere una struttura organizzata e di facile manutenzione. Ci sono diverse categorie di file di inizializzazione, quelli per l'avviamento del sistema, per i runlevel, per l'inizializzazione della rete e per la compatibilita' System V. Come tradizione, ogni altra cosa viene destinata alla categoria "Altro".


top

Torna all'indice

Avviamento del sistema

Il primo programma lanciato sotto Slackware assieme al kernel Linux e' il processo init(8). Questo programma legge il file /etc/inittab(5) (per stabilire come inizializzare il sistema), che a sua volta esegue lo script /etc/rc.d/rc.S che prepara il sistema al fine di entrare nel runlevel prescelto. Il file rc.S abilita la memoria virtuale, monta i filesystem, ripulisce alcune directory di log, inizializza i dispositivi Plug & Play, carica i moduli del kernel, configura i dispositivi PCMCIA, attiva le porte seriali e lancia gli script di inizializzazione System V (se presenti). Ovviamente rc.S ha un numero elevato di compiti, ma di seguito viene riportato un elenco degli script in /etc/rc.d che rc.S utilizzara' per completare il suo lavoro:

rc.S

Questo e' lo script di inizializzazione principale

rc.modules

Carica i moduli del kernel. La scheda di rete, il supporto per il PPP (Point to Point Protocol) e altre funzionalita'. Se lo script individua la presenza di rc.netdevice verra' lanciato anche quest'ultimo.

rc.pcmcia

Verifica e configura ogni dispositivo PCMCIA presente sul sistema. Questo script e' di maggior utilita' per gli utenti di computer portatili, probabilmente in possesso di un modem o una scheda di rete PCMCIA.

rc.serial

Configura le porte seriali lanciando gli opportuni comandi setserial.

rc.sysvinit

Cerca gli script System V per il runlevel prescelto e li lancia. Vedere oltre per maggiori dettagli.


top

Torna all'indice

Script di Inizializzazione dei Runlevel

Dopo l'esecuzione degli script di sistema, init procede all'inizializzazione del runlevel prescelto. Un runlevel descrive lo stato che il sistema assumera'. In sostanza il runlevel dice a init se il sistema accettera' il login di piu' utenti o se sara' ammesso un solo utente; se saranno necessari o meno i servizi di rete e se dovra' essere lanciato il sistema X Window o agetty(8) per la gestione dei login. I file riportati di seguito definiscono i differenti runlevel presenti in Slackware Linux.

rc.0

Arresta il sistema (runlevel 0). Di default e' un link simbolico a rc.6.

rc.4

Modalita' multiutente (runlevel 4), con login grafico (tipo KDM, GDM o XDM).

rc.6

Riavvio del sistema (runlevel 6).

rc.K

Avvio in modalita' utente singolo (runlevel 1).

rc.M

Modalita' multiutente (runlevel 2 e 3), con il login standard in modalita' testuale. Questo e' il runlevel di default in Slackware.


top

Torna all'indice

Inizializzazione dei Servizi di Rete

I runlevel 2, 3 e 4 prevedono l'avvio dei servizi di rete tramite i seguenti script:

rc.inet1

Creato da netconfig, questo file si occupa di configurare le interfacce di rete.

rc.inet2

Viene lanciato dopo rc.inet1 e avvia i servizi di base per il networking.

rc.atalk

Avvia i servizi AppleTalk.

rc.httpd

Avvia il server web Apache.

rc.samba

Avvia il servizio di condivisione file e stampanti per Windows.

rc.news

Avvia il server delle news.


top

Torna all'indice

Compatibilita' System V

La compatibilita' del processo init con System V e' stata introdotta in Slackware 7.0. Generalmente le distribuzioni Linux utilizzano questo stile invece del classico stile BSD. Sostanzialmente ad ogni runlevel e' assegnata una directory per gli script di init, mentre lo stile BSD prevede un singolo script per ogni runlevel.

Lo script rc.sysvinit cerchera' ogni script System V posizionato all'interno della directory /etc/rc.d e lo lancera' automaticamente se il runlevel e' appropriato. Cio' e' utile per alcuni pacchetti software commerciali che installano script di init stile System V e script per l'init stile BSD.

Altri File

Gli script descritti di seguito sono gli altri script di inizializzazione del sistema. Tipicamente vengono lanciati da uno degli script principali di cui sopra ed e' pertanto sufficiente editarne il contenuto.

rc.cdrom

Se abilitato, questo script cerchera' un CD-ROM in uno dei drive per montarlo automaticamente sotto /cdrom.

rc.gpm

Avvia un servizio di utilita' generale per il mouse che consente di copiare e incollare testo nella console Linux.

rc.ibcs2

Abilita il supporto per la Intel Binary Compatibility. Questosupporto e' necessario soltanto nel caso in cui si preveda di utilizzare programmi compilati per SCO UNIX o per l'uso di altre funzionalita' per Intel UNIX. Non e' indispensabile per utilizzare programmi Linux.

rc.font

Carica il font preferito per la console.

rc.local

Contiene tutti i comandi di avvio specifici per il proprio sistema.

Lo script risulta vuoto subito dopo l'installazione in quanto e' riservato all'amministrazione locale del sistema. Lo script viene eseguito dopo che tutte le altre inizializzazioni hanno avuto luogo.Per abilitare uno script e' sufficiente aggiungere il permesso di esecuzione sullo script stesso utilizzando il comando chmod. Per disabilitare lo script rimuovere il permesso di esecuzione.Per maggiori dettagli sull'utilizzo del comando chmod,consultare la sezione denominata Permessi nel capitolo 9.


top

Torna all'indice

Scegliere un kernel

Il kernel e' quella parte del sistema che fornisce il supporto per gli accessi hardware, il controllo dei processi e tutti gli altri aspetti del sistema. Il kernel quindi contiene il supporto per i dispositivi hardware e sceglierne uno appropriato risulta un passo importante nella configurazione del sistema

Slackware fornisce circa sedici kernel precompilati tra i quali scegliere, ognuno con un set standard di driver piu' alcuni driver specifici. E' possibile utilizzare uno dei kernel precompilati oppure crearne uno personalizzato dal codice sorgente. In entrambe i casi sara' necessario accertarsi che il kernel utilizzato fornisca un adeguato supporto per l'hardware presente sul sistema.


top

Torna all'indice

La Directory /kernels sul CD-ROM Slackware

I kernel precompilati sono reperibili sul CD-ROM Slackware all'interno della directory /kernels oppure nella directory principale del sito FTP di Slackware. I kernel disponibili variano ad ogni nuova release, pertanto e' sempre opportuno fare riferimento alla documentazione presente in questa directory. La directory /kernels ha una subdirectory distinta per ogni kernel disponibile. La subdirectory viene sempre identificata con un nome identico al relativo dischetto di boot. In ognuna delle sottodirectory e' possibile trovere i seguenti file:

System.map

La mappatura di sistema per il kernel specifico

bzImage (o zImage)

L'effettiva immagine del kernel

config

Il file di configurazione per il kernel specifico

Per utilizzare un kernel e' sufficiente copiare i file System.map e config nella directory /boot, copiare l'immagine del kernel rinominandola in /vmlinuz, eseguire /sbin/lilo(8) per reinstallare LILO con il nuovo kernel e infine riavviare il sistema. Basta questo per installare un nuovo kernel.

I nomi di kernel che terminano con ".i" rappresentano kernel IDE, ovvero kernel che non includono il supporto SCSI al loro interno. I nomi di kernel che terminano con ".s" rappresentano invece kernel SCSI. Questi ultimi includono lo stesso supporto di tutti i kernel IDE piu' il supporto SCSI.


top

Torna all'indice

Compilazione di un kernel da codice sorgente

La domanda piu' frequente tra i nuovi utilizzatori e': "E' necessario compilare un kernel per il mio sistema?". La risposta piu' appropriata e': "Forse". Ci sono poche circostanze nelle quali e' necessario compilarsi un kernel specifico. Alla maggioranza degli utenti basta un kernel precompilato per avere un sistema funzionante. Qualora si voglia installare un kernel piu' aggiornato e non incluso in quelli gia' forniti con Slackware, oppure nel caso in cui i sorgenti del kernel sono stati patchati per ottenere il supporto ad un dispisitivo speciale non ancora previsto nativamente dal codice del kernel, allora diviene necessaria la compilazione.

Creare un kernel personalizzato non e' poi cosi difficile. Il primo passo e' quello di accertarsi di aver installato i sorgenti del kernel verificando di aver incluso in fase di installazione i pacchetti della serie K.

Sara' inoltre necessario accertarsi di aver incluso i pacchetti della serie D, in particolare il compilatore C, GNU make e le GNU binutils. Se si prevede di svolgere una qualunque attivita' di sviluppo, e' buona idea installare interamente tutta la serie di pacchetti D. Ora si e' pronti a compilare un kernel:

$ su -
Password: <passworddiroot>
# cd /usr/src/linux

Il primo passo consiste nel portare i sorgenti del kernel alla configurazione base. A tal scopo si utilizza il seguente comando:

# make mrproper

Ora e' possibile configurare il kernel per il proprio sistema. Il kernel attuale offre tre strade per la configurazione. La prima consiste nel tradizionale sistema testuale a domanda-risposta. Viene richiesto di rispondere a numerose domande e al termine viene creato il file di configurazione. Il problema di questo metodo e' che in caso di errore e' necessario ricominciare da principio. Il metodo che la maggior parte delle persone preferisce e' quello a menu' testuale. Infine e' possibile utilizzare un tool grafico di configurazione del kernel basato sul sistema X. Scegliere il metodo che si preferisce e lanciare il relativo comando:

# make config (metodo testuale a domanda-risposta)
# make menuconfig (metodo a menu' testuale)
# make xconfig (metodo grafico, occorre essere in X)


top
Torna all'indice

Il programma di configurazione del kernel basato su menu' testuale.

Gli utenti inesperti troveranno che menuconfig e' il metodo piu' semplice da utilizzare. Sono previste schermate di aiuto per chiarimenti sulle varie parti del kernel. Dopo la fase di configurazione e l'uscita dal programma, lo stesso provvedera' alla scrittura dei necessari file di configurazione. Ora e' possibile preparare la directory dei sorgenti per la compilazione:

# make dep
# make clean

Il passo successivo e' la compilazione vera e propria del kernel. Per prima cosa e' possibile provare ad eseguire il comando make zImage. Tale comando potrebbe fallire se il kernel risultasse troppo grande, ma non ci si deve allarmare in quanto e' ancora possibile compilare il kernel con il comando make bzImage

# make zImage (provare prima questo)
# make bzImage (se il precedente fallisce provare quest'altro)

Questa operazione puo' impiegare molto tempo a seconda dalla velocita' della propria CPU. Durante il processo di compilazione verranno visualizzati i messaggi del compilatore. Dopo la compilazionde del kernel sara' necessario compilare anche tutte le parti configurate come modulo.

# make modules

E' ora possibile installare il kernel e i moduli appena compilati. Per installare il kernel su un sistema Slackware occorre lanciare i seguenti comandi:

# make modules_install
# mv /vmlinuz /vmlinuz.old
# cat arch/i386/boot/zImage > /vmlinuz
# mv /boot/System.map /boot/System.map.old
# cp System.map /boot/System.map

Sostituire zImage con bzImage se l'immagine del kernel creata e' molto voluminosa. E' ora necessario editare /etc/lilo.conf e aggiungere una sezione per poter eseguire il boot del vecchio kernel qualora il nuovo non dovesse funzionare. Dopodiche' lanciare /sbin/lilo per reinstallare il nuovo settore di boot e quindi riavviare il sistema con il nuovo kernel.


top

Torna all'indice

Utilizzo dei Moduli del Kernel

I moduli del kernel non sono altro che i driver dei dispositivi che e' possibile inserire all'interno del kernel in esecuzione. I moduli consentono di estendere il supporto per l'hardware del sistema senza che sia necessario selezionare un kernel diverso o compilarne uno personalizzato.

I moduli possono anche essere caricati o scaricati in qualunque momento anche mentre il sistema e' in esecuzione. Questo aspetto facilita l'upgrade di driver specifici da parte degli amministratori di sistema. Senza riavviare la macchina e' infatti possibile compilare un modulo, scaricare quello vecchio e caricare quello nuovo.

I moduli sono situati all'interno della directory /lib/modules/<versione kernel>. E' possibile caricarli all'avvio utilizzando il file rc.modules, il quale e' molto ben commentato e offre esempi pratici per la maggior parte dei componenti hardware. Per vedere una lista dei moduli attualmente caricati utilizzare il comando lsmod(1):

# lsmod
Module        Size    Used by
parport_pc    7220    0
parport       7844    0  [parport_pc]

Come si vede, nell'esempio e' caricato soltanto il modulo per la porta parallela. Per rimuovere un modulo si utilizza il comando rmmod(1). Un modulo puo' essere caricato attraverso i comandi modprobe(1) e insmod(1). modprobe e' piu' sicuro in quanto carichera' anche i moduli dai quali dipende a sua volta il modulo che si desidera caricare. La maggior parte degli utenti non avra' mai bisogno di caricare o scaricare manualmente i moduli. Solitamente per la gestione dei moduli e' possibile utilizzare l'autoloader del kernel. Per attivare l'autoloader e' sufficiente rimuovere il commento dalla linea /sbin/kerneld(8) nel file rc.modules. L'autoloader si occupera' di caricare e scaricare i moduli all'occorrenza, ovvero nel caso in cui si tenta di accedere ad un dispositivo.

Maggiori informazioni sull'argomento possono essere reperite sulle pagine del manuale di ognuno dei comandi sopra descritti e all'interno del file rc.modules.


top
Torna all'indice

PREV
Capitolo 3 - Installazione
NEXT
Capitolo 5 - Configurazione della Rete