Debian Administration Primer

Francesco Dolcini
2 April 2002


Table of Contents


1. Introduzione

La presente guida vuole essere un ausilio a chi ha installato Debian GNU/Linux per la prima volta, e si ritrova spaesato rispetto ad altri sistemi operativi non-unix o rispetto ad altre distribuzioni Linux. Potete trovare qui http://www.debian.org/releases/stable/i386/install una guida alla installazione, e qui http://www.debian.org/distrib/ l'elenco dei modi in cui potete ottenere Debian.

Non mi soffermerò sugli aspetti generici di utilizzo di unix/linux, di una shell o di un editor. Per questi argomenti potete trovare tutte le informazioni che volete in internet. Come guida introduttiva vi consiglio http://www.pluto.linux.it/ildp/guide/PrgCulturale/prg.cult.html, avrete inoltre bisogno di un buon editor come vim, se desiderata un editor più intuitivo potete provare nano.

La presente guida non tratterà se non in maniera superficiale argomenti sui quali è già possibile trovare molta altra documentazione su http://www.debian.org/doc/ddp o che non sono strettamente relativi a Debian.

Non dimenticate di consultare le pagine man ($man nome_programma) e eventualmente info ($info nome_programma) per ulteriori e più approfondite spiegazioni.

Per correzioni, suggerimenti, o quant'altro scrivetemi a <pivi@linux.it>.

1.1. Convenzioni

Nomi di file: /etc/apt/sources.list

Comandi: dpkg -i nome_pacchetto.deb
Le parentesi quadre, [], denotano eventuali argomenti opzionali.
La barra, /, indica una scelta fra più possibili alternative.
I comandi preceduti da un $ possono essere eseguiti in una shell di un utente normale, i comandi preceduti da un # devono essere invece eseguiti dall'utente root.

Contenuto file di configurazione o parti di codice:

#!/bin/bash
#
...

Indirizzi EMail: <pivi@linux.it>

Url: http://www.debian.org


2. Installazione Software

Una delle cose che probabilmente vi troverete a fare più spesso è installare, rimuovere o aggiornare programmi. Debian permette di gestire questa operazione in una maniera comoda, efficiente, veloce e ordinata. Esistono vari tool che permettono di gestire queste operazioni, alla fine della lettura del paragrafo sarete in grado di cercarne di nuovi, magari con una comoda interfaccia grafica, se lo desiderate.

2.1. APT (Advanced Packaging Tool)

È il tool che fa realmente la differenza fra Debian e le altre distribuzioni linux. Permette di scaricare in maniera automatica il programma che desiderate, occupandosi di scaricare anche eventuali librerie necessarie, eliminare pacchetti, fare ricerche, etc.

2.1.1. sources.list

Attraverso /etc/apt/sources.list viene specificato ad Apt dove andare a recuperare i pacchetti (per risolvere problemi di dipendenze, per installare un nuovo pacchetto, per aggiornare un pacchetto esistente, etc). Possono essere url (ftp, http) o cdrom. I cd-rom vengono aggiunti con #apt-cdrom add, di uso totalmente intuitivo e guidato.

Per utilizzare il mirror Debian italiano (fortemente consigliato se siete in Italia) aggiungete le seguenti righe al file, subito dopo eventuali cdrom.

deb http://ftp.it.debian.org/debian/ stable main non-free contrib
deb http://ftp.it.debian.org/debian-non-US stable/non-US main contrib non-free
deb-src http://ftp.it.debian.org/debian/ stable main non-free contrib
deb-src http://ftp.it.debian.org/debian-non-US stable/non-US main contrib non-free

Sostituite a stable la release Debian che usate. Ad oggi esistono 3 tree di sviluppo della distribuzione mantenuti, "stable" (Debian 2.2 Potato), "testing" (la futura Debian 3.0 Woody) e "unstable" (Sid, la release di sviluppo e quindi la piu' aggiornata e la meno stabile). Se usate stable aggiungete anche

deb http://security.debian.org stable/updates main contrib non-free

per i repentini aggiornamenti di sicurezza presenti però solo in stable.

I pacchetti vengono scaricati dal primo archivio che contiene la versione più aggiornata, ad esempio se avete nell'ordine i cd di potato e poi il mirror Debian italiano, quando installate un pacchetto verrà scaricato dal cd in caso sia presente la setssa versione, da internet nel caso sui cd fosse presente una versione meno recente.

Apt mantiene anche una cache dei pacchetti scaricati in /var/cache/apt/archive/ in modo da potere riprendere un eventuale download interrotto a metà oppure di reinstallare in seguito un pacchetto scaricato precedentemente e magari rimosso per qualche motivo.

Se navigate con un browser gli archivi potete capire la struttura delle directory di un mirror debian.

$man sources.list

2.1.2. apt-get

#apt-get update

Risincronizza il database locale dei pacchetti con gli archivi remoti, necessario eseguirlo ogni volta che vengono aggiornati gli archivi (praticamente ogni volta che installate un nuovo pacchetto se usate testing o unstable).

#apt-get upgrade/dist-upgrade [-u]

Aggiorna la distribuzione, dist-upgrade e' necessario se passate da una release debian ad un altra (es. da stable a testing). Upgrade aggiorna semplicemente i pacchetti installati, mentre dist-upgrade cerca di risolvere eventuali problemi di dipendenze (es. un pacchetto da aggiornare ha delle dipendenze diverse rispetto al pacchetto precedentemente installato) Personalmente su una workstation personale eseguireri sempre un dist-upgrade senza preoccuparmi molto. L'opzione [-u] mostra a schermo i nomi dei pacchetti che verranno aggiornati prima di scaricarli.

#apt-get install nome_pacchetto

Installa nome_pacchetto nel sistema scaricandolo dal primo archivio che lo contiene indicato in sources.list

#apt-get [--purge] remove nome_pacchetto

Rimuove il pacchetto, l'opzione [--purge] rimuove anche eventuali file di configurazione e tutto il rimuovibile.

$apt-get [--build] source nome_pacchetto

Scarica i sorgenti di un pacchetto (devono essere presenti i deb-src in sources.list) e se è presente l'opzione [--build] compila i sorgenti e crea il pacchetto .deb.

#apt-get build-dep nome_pacchetto

Scarica e installa i pacchetti necessari a compilare nome_pacchetto (es. scarica i pacchetti -dev delle librerie necessarie).
(Opzione non presente nelle release precedenti a Woody).

#apt-get clean

Cancella l'archivo dei pacchetti scaricati in /var/cache/apt/archives/ che tende a crescere a dismisura in particolare se aggiornate spesso una distribuzione testing o unstable. (vedi anche apt-get autoclean)

2.1.3. apt-cache

$apt-cache [--names-only] search stringa

Serve a ricercare un pacchetto che contiene nel nome o nella descrizione la parola stringa, con il parametro opzionale [--names-only<rbracket> la ricerca viene effettuata solo nel nome.

$apt-cache show nome_pacchetto

Mostra le informazioni sul pacchetto: descrizione, dipendenze, nome mantainer, etc. Comodo per verificare cosa contiene un pacchetto che avete trovato con $apt-cache search

2.2. dpkg

Il tool che viene chiamato da apt per gestire effettivamente i pacchetti.

#dpkg -i nome_pacchetto.deb

Installa uno o piu' pacchetti (accettta wildcard come parametri, es. #dpkg -i ~/dev/*.deb) scaricati a mano o magari non appartenenti a debian (es. opera).

#dpkg [--purge] remove nome_pacchetto

vedi relativo comando di APT.

#dpkg-reconfigure [--priority=medium/critical/high/low] nome_pacchetto

Riconfigura un pacchetto usando debconf, il tool di configurazione dei pacchetti debian, rifacendo sostanzialmente le domande che vengono fatte durante l'installazione del pacchetto stesso in un momento successivo. [--priority] specifica da quale priorità fare domande, prendendo i default stabiliti dal mantainer del pacchetto per le priorità inferiori).
(es. #dpkg-reconfigure debconf riconfigura debconf)

$dpkg -S pattern

Cerca tutti i file che corrispondono a pattern fra i pacchetti installati. Utile se volete sapere a che pacchetto appartiene un certo file.

$dpkg -l pattern

Elenca tutti i pacchetti corrispondenti a pattern, proteggete il pattern con '' per evitare che eventuali wildcards vengono interpretate dalla shell invece che da dpkg.
(es. $dpkg -l '*libc*')

Per visualizzare i soli pacchetti installati, e non anche i pacchetti rimossi o purgati in precedenza mandate l'output di dpkg in pipe a grep ^i.
(es. $dpkg -l '*libc*'|grep ^i)

$dpkg -L nome_pacchetto

Elenca tutti i file appartenenti a nome_pacchetto.

#dpkg -C

Controlla che non ci siano pacchetti rimasti non configurati a seguito di qualche situazione imprevista, come la mancanza improvvisa di corrente durante un upgrade, o anche situazioni meno spiacevoli.

2.3. Front-end testuali

dselect è un front-end per dpkg. Necessario in fase di installazione, personalmente comunque cerco di non usarlo in quanto è troppo macchinoso. Per ulteriori informazioni http://www.debian.org/releases/stable/i386/dselect-beginner

aptitude

aptitude è un front-end per apt, anch'esso testuale, più intuitivo di dselect a mio parere.

2.4. Installare software non presente in Debian

È possibili che vi troviate ad avere bisogno di un software che non è presente in Debian, oppure che è presente solo in una release successiva che voi non usate o avete bisogno di una versione più aggiornata. Ci sono vari modi per risolvere questo sistema, e sicuramente una volta che sarete utenti esperti riterrete questi semplici consigli banali.

Pacchetti non ufficiali

Il modo più veloce per risolvere il problema, se siete fortunati, è trovare qualcuno che abbia fatto il pacchetto deb del programma che cercate per la vostra specifica release, che per qualche motivo non è però incluso nella release Debian che state usando. Potete quindi limitarvi a scaricare il pacchetto e installarlo con dpkg -i oppure aggiungendo nel vostro sources.list la riga dove è contenuto l'archivio per apt. Un sito dove guardare è sicuramente questo: http://www.internatif.org/bortzmeyer/debian/apt-sources/

Ricompilare dai sorgenti

Un'altra maniera è ricompilare i sorgenti del programma desiderato e installarli seguendo le istruzioni presenti di solito nel file INSTALL. In genere i programmi verranno installati in /usr/local/. Il problema di questo approccio è che si perde il controllo di cosa è effettivamente installato nel sistema e dove sono tenuti i file dei progammi che avete installato, soprattutto se i programmi che vengono aggiunti cosi sono molti. Inoltre potrebbero esserci problemi ad installare in seguito un eventuale pacchetto .deb che ha fra le dipendenze un pacchetto installato da voi precedentemente dai sorgenti.


Note: in realtà se un pacchetto ha delle dipendenze in una distribuzione stable sono certamente presenti anche le librerie necessarie

Installare da una release di Debian più aggiornata

Se usate woody e avete bisogno di un pacchetto da sid, a meno di problemi di dipendenze di librerie (il pacchetto richiede magari alcune librerie più aggiornate di quelle presenti nella release che state usando) potete tranquillamente scaricarlo e installarlo con dpkg -i.

Ricreare il pacchetto deb.

Se il programma non è presente in debian potete leggervi la documentazione su come pacchettizare un programma presente a http://www.debian.org/doc/maint-guide/, avrete comunque ovviamente bisogno di tutte le librerie che il programma richiede, che dovrete installare in qualche maniera se non fosse presente il pacchetto deb. Inoltre non è di certo una operazione agevole per una persona alle prime armi con linux.

Se il programma di cui avete bisogno è presente in una release Debian più recente, ma non potete installarlo direttamente perchè compilato con delle librerie troppo recenti, che però il programma non richiede necessariamente, potete, dopo avere aggiunto le apposite righe deb-src di unstable o testing in sources.list eseguire $apt-get [--build-package] source nome_pacchetto come spiegato in questo paragrafo.


3. Avvio del sistema

Come accendete il vostro calcolatore, a seconda del tipo di macchina vi ritroverete davanti o il banale BIOS di un PC x86 oppure altre cose più esoteriche a seconda della macchina che usate, potreste anche non vedere nulla se state usando una macchina senza scheda video (nel caso dovreste avere almeno una console seriale). Fatto questo la ROM del vostro calcolatore passerà il controllo a un bootloader (Lilo probabilmente, ma potrebbe essere anche silo, milo, palo, etc.) che provederà a caricare il kernel in memoria. Una volta che il kernel sarà stato caricato in memoria e avrà inizializzato le proprie strutture dati lancerà init.
In questo paragrafo cercheremo di adattare alle nostre esigenze quando avviene dal momento in cui init viene lanciato al momento in cui appare la richiesta di login.
Non verrà trattato l'uso del bootloader in Debian in quanto non presenta nessuna particolarità, le modalità in cui la vostra macchina viene avviata e passa il controllo al kernel sono invece specifiche della vostra architettura. Le problematiche relative al kernel sono invece trattate nel paragrafo Kernel.

Per capire esattamente come funziona init e come sono gestiti gli script di avvio in Debian consultate i seguenti documenti:

$man init
$man inittab
/usr/share/doc/sysvinit/
/etc/init.d/README
/etc/rcS.d/README
http://www.debian.org/doc/debian-policy/ch-opersys.html#s-sysvinit
http://www.linuxdoc.org/HOWTO/From-PowerUp-To-Bash-Prompt-HOWTO.html

3.1. Init in breve

Una volta avviato init legge il proprio file di configurazione /etc/inittab/, se trova un runlevel di default (es. id:2:initdefault:) entra in quello, altrimenti domanda all'utente di specificarlo. Per prima cosa vengono eseguiti gli script in /etc/rcS.d/, vengono poi eseguiti gli script specifici del runlevel contenuti in /etc/rcN.d/ dove N è il numero del runlevel (semplificando e approssimando i runlevel sono in pratica 7, da 0 a 6). Nelle directory /etc/rc?.d/ sono contenuti esclusivamente link simbolici a script presenti in /etc/init.d/, preceduti da una S o da una K, rispettivamente a seconda se il programma/demone deve essere avviato o fermato (lanciato con il parametro start oppure stop), e da un numero che indica l'ordine di esecuzione, in maniera crescente (viene quindi eseguito prima uno script con numero 11 che uno con 50). Per rendere la cosa più chiara facciamo un esempio: se in /etc/rc2.d/ è presente un link simbolico a /etc/init.d/cron con nome /etc/rc2.d/S89cron vuol dire che verrà avviato /etc/init.d/cron start verso la fine del boot (il massimo è 99) dopo che tutti gli script con numero inferiore a 89 sono stati avviati e prima che vengano avviati script con numero maggiore a 89.

In debian il runlevel di default è il 2, altri runlevel hanno significati particolari, 0 è l'halt della macchina, 6 il reboot, 1 uno speciale runlevel minimale chiamato single user mode, senza supporto di rete o multiutenza.

È possibile specificare il runlevel al boot passando un parametro init=runlevel al kernel attraverso il bootloader. Se il file /etc/inittab è assente il sistema parte automaticamente in single user.

init avvia anche varie istanze di getty, il programma che mostra la richiesta di login sul terminale, oltre a permettere altre cose come connessioni via modem, via console seriale, etc. ...

3.2. Gestione script avvio

update-rc.d

Permette di installare e rimuovere i link agli script in /etc/init.d/ presenti nei vari runlevel.

#update-rc.d ]-n[ ]-f[ nome_script remove

rimuove i link simbolici a nome_script da tutti i runlevel, l'opzione [-f] è necessaria se nome_script e' ancora presente in /etc/init.d/ [-n] non esegue nulla, effettua una simulazione di quello che accadrebbe

#update-rc.d nome_script defaults

inserisce i link simbolici a nome_script nei corretti runlevel usando i defaults per il numero di avvio e arresto (20)

#update-rc.d nome_script start 50 2 3 . stop 99 0 1 6 .

inserisce un link simbolico a nome_script come Start nei runlevel 2 e 3, al numero 50 (come se faceste #ln -s /etc/init.d/nome_script /etc/rc3.d/S50nome_script) e come Stop nei runlevel 0,1,6 al numero 99. Il numero di start e stop puo' essere combinato a piacere, intervallandolo da un '.', permettendo di realizzare qualsiasi combinazione di arresto e avvio in maniera rapida.

rcconf

Permette di eseguire le stesse cose di update-rc.d con una interfaccia testuale, la differenza principale e' che tiene traccia del numero di avvio dei link simbolici dei programmi che elimina, in modo da poterli ripristinare e fare in modo che vengano eseguiti al momento corretto del boot senza doverseli scrivere o ricordare.


4. Kernel

Molto probabilmente prima o poi vi ritroverete a sostituire il kernel di default, perchè è uscita una nuova feature che aspettavate con ansia, per fare funzionare il vostro ultimo stupendo masterizzatore usb, per correggere un bug, etc. ...

A seconda del problema che volete risolvere potete optare per installare con apt l'immagine di un kernel precompilato, trovabile facilmente cercando kernel-image con apt-cache, ricompilare il vostro kernel nella maniera tradizionale, oppure compilare il kernel alla Debian-maniera.

Ricordatevi sempre di aggiornare il vostro bootloader se create l'immagine del kernel nella maniera tradizionale. Inoltre ricordatevi che il funzionamento del kernel dipende anche da vari programmi in user-space come mod-utils ad esempio. In particolare se passate da una major release ad un altra assicuratevi che non ci siano problemi di questo tipo.

Prima di continuare con la lettura è fondamentale che leggiate questo documento, http://www.pluto.linux.it/ildp/HOWTO/Kernel-HOWTO.html, magari nella versione inglese http://www.linuxdoc.org/HOWTO/Kernel-HOWTO.html che attualmente risulta più aggiornata o un documento equivalente che tratti gli argomenti generici di compilazione di un kernel, la configurazione, i moduli, etc.


Note: per utilizzare #make menuconfig ricordatevi di installare il necessario pacchetto -dev delle librerie ncurses (#apt-get install libncurses-dev)

4.1. maniera tradizionale

Non ci sono particolari precauzioni da seguire se non quelle specificate in qualunque documento spieghi la compilazione di un kernel. Mettete l'albero dei sorgenti del kernel scaricato da http://www.kernel.org o con apt da un pacchetto kernel-source in /usr/src/linux/ o /usr/local/src/linux/ e eseguite le operazioni che eseguireste con una qualasiasi altra distribuzione.

4.2. make-kpkg

Alcuni motivi per usare make-kpkg, fermo restando che non esiste nessuna controindicazione ad usare il emtodo tradizionale.


Note: per effettuare queste le operazioni descritte in questo paragrafo dovete essere root

Installate l'albero dei sorgenti del kernel in /usr/src/linux/ o creato un link simbolico /usr/src/linux alla directory contenente i sorgenti del kernel. (#ln -l /usr/src/linux-2.4.18 /usr/src/linux)

Per prima cosa, se state ricompilando nuovamente un kernel precedentemente compilato eliminate i vecchi moduli in /lib/modules/x.y.z dove x.y.z sono il numero di versione del kernel che state ricompilando. Questo perchè il vostro nuovo kernel potrebbe avere meno moduli del precedente e quindi si potrebbero creare dei casini dovuti alla presenza della stessa parte di codice sia come modulo sia compilata all'interno del kernel monolitico.

Entrate nella directory dove avete i sorgenti, supponiamo /usr/src/linux/, configurate il kernel, con #make menuconfig ad esempio, una volta terminato uscite e salvate la vostra configurazione. Cancellate i file binary rimasti da una eventuale precedente compilazione con

#make-kpkg clean

Eseguite

#make-kpkg --revision nome-kernel-mio.numero-mia-release kernel_image

terminata la fase di compilazione trovate in ../kernel-image-x.y.z_nome-kernel-mio.numero-mia-release_ARCH.deb il deb del vostro nuovo kernel. Potreste avere bisogno di moduli del kernel opzionali, ad esempio se avete un portatile con pcmcia dovrete installare il pacchetto pcmcia-source, e decomprimere il file /usr/src/pcmcia-cs.tar.gz. Vi ritroverete quindi in /usr/src/modules/pcmcia-cs/ tutti i sorgenti che vi servono.

A questo punto, sempre dalla directory contenente i sorgenti del kernel che state compilando, eseguite

#make-kpkg --revision nome-kernel-mio.numero-mia-release modules_configure

e poi

#make-kpkg --revision nome-kernel-mio.numero-mia-release modules_image

terminata la fase di compilazione trovate in ../pcmcia-modules-x.y.z_RELPCMCIA+nome-kernel-mio.numero-mia-release_ARCH.deb il deb.

Se avete altre cose in /usr/src/modules/ dovreste trovarvi in maniera simile i deb in /usr/src/

A questo punto basta che installiate i deb con #dpkg -i e dpkg dovrebbe proveddere a aggiornare il vostro bootloader in modo che al successivo reboot abbiate il vostro kernel perfettamente funzionante.

4.3. Moduli

modconf

#modconf

permette di decidere quali moduli del kernel caricare al boot del sistema operativo tramite una comoda interfaccia testuale. Può essere usato anche in maniera non interattiva da linea di comando, leggete la pagina man per ulteriori informazioni


5. Configurazione

Una piccola guida alla configurazione/riconfigurazione della vostra linux-box. Non vuole essere esaustiva e fa riferimento ai casi più tipici a mio avviso. Se avete schede pcmcia la parte relativa alla configurazione della vostra scheda è diversa da quanto qui descritto, dovete modificare i file di configurazione in /etc/pcmcia/*.opts (se avete una scheda di rete pcmcia dovete modificare il file /etc/pcmcia/network.opts)

5.1. Configurazione rete

cambiare hostname

modificare la impostazioni della vostra scheda