[ precedente ] [ Contenuti ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ successivo ]


The Debian GNU/Linux FAQ
Capitolo 6 - Fondamenti sul sistema di gestione dei pacchetti Debian


6.1 Cos'è un pacchetto Debian?

I pacchetti generalmente contengono tutti quei file necessari a implementare una serie di comandi o funzionalità. Ci sono due tipi di pacchetti Debian:

L'installazione di software attraverso il sistema dei pacchetti usa "dipendenze" che vengono progettate con cura dai manutentori dei pacchetti. Queste dipendenze sono documentate nel file control associato ad ogni pacchetto. Per esempio, il pacchetto contenente il compilatore C della GNU (gcc) "dipende" dal pacchetto binutils che include il linker e l'assemblatore. Se un utente tentasse di installare gcc senza avere prima installato binutils, il sistema di gestione dei pacchetti (dpkg) invierà un messaggio di errore avvertendo che necessita anche di binutils, e fermerà l'installazione di gcc. (Comunque, questa funzione può essere superata dall'utente tenace, si veda dpkg(8).) Si veda di più su Cosa significa dire che un pacchetto Dipende da, Raccomanda, Suggerisce, Va in conflitto con, Sostituisce o Fornisce un altro pacchetto?, Sezione 6.9 sotto.

Gli strumenti Debian per la gestione dei pacchetti possono essere usati per:


6.2 Qual è il formato di un pacchetto binario Debian?

Un "pacchetto" Debian, od un file archivio Debian, contiene i file eseguibili, le librerie e la documentazione associati ad un gruppo o suite di programmi correlati. Normalmente, un file archivio Debian ha un nome che termina in .deb.

L'interno di questi pacchetti binari Debian è descritto nella pagina di manuale deb(5). Questo formato interno è soggetto a modifiche (tra una release maggiore di Debian GNU/Linux), quindi per favore si usi sempre dpkg-deb(1) per manipolare file .deb.


6.3 Perché i nomi dei pacchetti Debian sono così lunghi?

Il nome dei pacchetti binari Debian è conforme alla seguente convenzione: <foo>_<NumeroVersione>-<NumeroRevisioneDebian>.deb

Si noti che si suppone che foo sia il nome del pacchetto. Come verifica, si può conoscere il nome del pacchetto associato ad un particolare archivio Debian (file.deb) in uno di questi modi:

La componente VVV è il numero di versione specificato dallo sviluppatore. Non ci sono standard qui, per cui il numero di versione può avere formati differenti come "19990513" e "1.3.8pre1".

La componente RRR è il numero di revisione Debian e viene specificata dallo sviluppatore Debian (o un singolo utente se sceglie di costruirsi il pacchetto da sé). Questo numero corrisponde al livello di revisione del pacchetto Debian, quindi un nuovo livello di revisione significa solitamente modifiche nel Makefile Debian (debian/rules), nel file di controllo Debian (debian/control), negli script di installazione o rimozione (debian/p*) oppure nei file di configurazione utilizzati con il pacchetto.


6.4 Cos'è un file di controllo Debian?

Le specifiche riguardanti il contenuto di un file di controllo Debian sono fornite nel "Debian Packaging manual", capitolo 4, si veda Quale altra documentazione esiste su e per un sistema Debian?, Sezione 11.1.

Brevemente, un esempio di file di controllo è mostrato di seguito per il pacchetto Debian hello:

     Package: hello
     Priority: optional
     Section: devel
     Installed-Size: 45
     Maintainer: Adam Heath <doogie@debian.org>
     Architecture: i386
     Version: 1.3-16
     Depends: libc6 (>= 2.1)
     Description: The classic greeting, and a good example
      The GNU hello program produces a familiar, friendly greeting.  It
      allows nonprogrammers to use a classic computer science tool which
      would otherwise be unavailable to them.
      .
      Seriously, though: this is an example of how to do a Debian package.
      It is the Debian version of the GNU Project's `hello world' program
      (which is itself an example for the GNU Project).

Il campo Package fornisce il nome del pacchetto. Questo è il nome attraverso il quale il pacchetto può essere manipolato con gli strumenti dei pacchetti ed è solitamente simile ma non necessariamente lo stesso rispetto alla prima componente della stringa nel nome dell'archivio Debian.

Il campo Version fornisce sia il numero della versione dello sviluppatore, che (nell'ultima componente) il livello di revisione del pacchetto Debian di questo programma, come spiegato in Perché i nomi dei pacchetti Debian sono così lunghi?, Sezione 6.3.

Il campo Architecture specifica il chip per il quale questo particolare binario è stato compilato.

Il campo Depends fornisce una lista di pacchetti che devono essere installati per poter installare questo pacchetto con successo.

Installed-Size indica quanto spazio su disco occuperà il pacchetto installato. È progettato per essere usato dai front-end di installazione per poter mostrare se c'è abbastanza spazio disponibile su disco per installare il programma.

La riga Section fornisce la sezione dove questo pacchetto Debian è archiviato presso i siti FTP Debian. Questo è il nome di una sottodirectory (all'interno di una delle directory principali, si veda Cosa sono tutte quelle directory negli archivi FTP Debian?, Sezione 5.1) dove è archiviato il pacchetto.

Priority indica quanto è importante questo pacchetto per l'installazione, così che i software semi-intelligenti come dselect o apt possano ordinare il pacchetto dentro una categoria di pacchetti opzionali già installati per esempio. Si veda Cosa sono i pacchetti Required, Important, Standard, Optional, o Extra?, Sezione 6.7.

Il campo Maintainer fornisce l'indirizzo e-mail della persona che è attualmente responsabile per la manutenzione di questo pacchetto.

Il campo Description fornisce un breve riassunto delle funzionalità del pacchetto.

Per ulteriori informazioni riguardo tutti i campi possibili che può avere un pacchetto, si veda il Debian Packaging Manual, sezione 4., "Control files and their fields".


6.5 Cos'è un conffile Debian?

Conffiles è una lista di file di configurazione (solitamente situata in /etc) che il sistema di gestione dei pacchetti non sovrascriverà quando il pacchetto viene aggiornato. Questo assicura che i valori locali per il contenuto di questi file vengano conservati, ed è una caratteristica critica che permette l'aggiornamento di pacchetti su un sistema in esecuzione.

Per determinare esattamente quali file sono conservati durante un aggiornamento, si esegua:

     dpkg --status pacchetto

E si guardi sotto "Conffiles:".


6.6 Cosa sono gli script preinst, postinst, prerm e postrm di Debian?

Questi file sono script eseguibili che vengono automaticamente eseguiti prima o dopo che un pacchetto viene installato. Insieme ad un file chiamato control, tutti questi file sono parte della sezione "control" di un file Debian.

I singoli file sono:

preinst

Questo script viene eseguito prima che il pacchetto venga spacchettato dall'archivio Debian (".deb"). Molti script 'preinst' interrompono i servizi per i pacchetti che devono essere aggiornati fino a che la loro installazione o aggiornamento non sono completati (a seguito dell'esecuzione con successo dello script 'postinst').

postinst

Questo script tipicamente completa ogni configurazione richiesta dal pacchetto foo una volta che foo è stato spacchettato dal suo archivio Debian (".deb"). Spesso gli script 'postinst' richiedono all'utente degli input e/o lo avvertono che se accetta le impostazioni predefinite deve ricordarsi di tornare indietro e riconfigurare il pacchetto se la situazione lo richiede. Molti script 'postinst' eseguono poi tutti i comandi necessari ad avviare o riavviare un servizio una volta che il pacchetto è stato installato o aggiornato.

prerm

Questo script tipicamente ferma tutti i demoni associati ad un pacchetto. Viene eseguito prima della rimozione di file associati al pacchetto.

postrm

Questo script tipicamente modifica i collegamenti (link) od altri file associati a foo, e/o rimuove i file creati da quel pacchetto. (Si veda anche Cos'è un pacchetto virtuale?, Sezione 6.8.)

Attualmente tutti i file di controllo si possono trovare nella directory /var/lib/dpkg/info. I file attinenti al pacchetto foo iniziano con il nome "foo" ed hanno le estensioni "preinst", "postinst", ecc., a seconda della funzione. Il file foo.list nella stessa directory elenca tutti i file installati con il pacchetto foo. (Si noti che la localizzazione di questi file è propria di dpkg; non ci si dovrebbe fare affidamento.)


6.7 Cosa sono i pacchetti Required, Important, Standard, Optional, o Extra?

Ad ogni pacchetto Debian viene assegnata una priorità dai manutentori della distribuzione, come aiuto al sistema di gestione dei pacchetti. Le priorità sono:


6.8 Cos'è un pacchetto virtuale?

Un pacchetto virtuale è un nome generico che si applica ad ognuno di un gruppo di pacchetti, che fornisce simili funzionalità di base. Per esempio, entrambi i programmi tin e trn sono news reader, e dovrebbero quindi soddisfare qualsiasi dipendenza di un programma che richiede un news reader su di un sistema per poter lavorare o essere utile. Si dice quindi che entrambi forniscono il "pacchetto virtuale" chiamato news-reader.

Similmente, smail e sendmail forniscono entrambi la funzionalità di agente di trasporto posta (mail transport agent). Si dice quindi che fornisco il pacchetto virtuale "mail transport agent". Se uno dei due è installato, allora ogni pacchetto che dipende dall'installazione di un mail-transport-agent vedrà le proprie dipendenze soddisfatte dall'esistenza di questo pacchetto virtuale.

Debian fornisce un meccanismo che, se più di un pacchetto che fornisce lo stesso pacchetto virtuale è installato su di un sistema, allora l'amministratore di sistema può impostarne uno come pacchetto preferito. Il relativo comando è update-alternatives, ed è maggiormente descritto su Ad alcuni utenti piace mawk, ad altri piace gawk; ad alcuni piace vim, ad altri piace elvis; ad alcuni piace trn, ad altri piace tin; come supporta Debian le diversità?, Sezione 10.10.


6.9 Cosa significa dire che un pacchetto Dipende da, Raccomanda, Suggerisce, Va in conflitto con, Sostituisce o Fornisce un altro pacchetto?

Il sistema dei pacchetti Debian ha una serie di "dipendenze" dei pacchetti che sono pensate per indicare (con un singolo termine) il livello con cui un determinato Programma A può operare indipendentemente dall'esistenza di un Programma B su un dato sistema:

Informazioni più dettagliate sull'utilizzo di ognuno di questi termini possono essere trovate nel Packaging manual e nel Policy manual.


6.10 Cosa significa Pre-Depends?

"Pre-Depends" è una dipendenza speciale. Con la maggior parte dei pacchetti, dpkg spacchetterà il file di archivio (ovvero il suo file .deb) indipendentemente dal fatto che i file da cui dipende siano o meno sul sistema. Semplificando, spacchettare vuol dire che dpkg estrarrà i file da installare dall'archivio e li metterà al loro posto. Se quei pacchetti dipendono dall'esistenza di qualche altro pacchetto sul sistema, dpkg si rifiuterà di completare l'installazione (eseguendo l'azione "configura"), finché gli altri pacchetti non saranno installati.

Tuttavia, per alcuni pacchetti, dpkg si rifiuterà persino di spacchettarli finché certe dipendenze non vengono risolte. Tali pacchetti si dice che "Pre-dipendono" dalla presenza di altri pacchetti. Il progetto Debian forniva questo meccanismo per supportare un aggiornamento sicuro di sistemi dal formato a.out al formato ELF, dove l'ordine in cui i pacchetti venivano spacchettati era critico. Esistono altre situazioni di aggiornamenti estesi in cui questo metodo è utile, per esempio pacchetti con priorità richiesta e dipendenza da libC.

Come sopra, informazioni più dettagliate al riguardo possono essere reperite nel Packaging manual.


6.11 Cosa significa sconosciuto, installa, rimuovi, elimina e mantieni nello stato di un pacchetto?

Queste etichette "voglio" indicano il volere dell'utente riguardo ad un pacchetto (come indicato dalle azioni dell'utente nella sezione "Seleziona" di dselect o dal richiamo diretto dell'utente di dpkg).

I loro significati sono:


6.12 Come mantengo un pacchetto?

Esistono due maniere per mantenere (hold) pacchetti, con dpkg o con dselect.

Con dpkg, si deve solo esportare la lista delle selezioni dei pacchetti con:

     dpkg --get-selections \* > selections.txt

Poi modificare il file risultante selections.txt, modificare la riga contenente il pacchetto che si desidera mantenere, p.e. libc6, da questo:

     libc6                                           install

a questo:

     libc6                                           hold

Salvare il file e ricaricarlo dentro il database di dpkg con:

     dpkg --set-selections < selections.txt

Con dselect, si deve solo entrare nella schermata [S]eleziona ([S]elect, trovare il pacchetto che si desidera mantenere al suo stato attuale e premere il tasto '=' (o 'H'). Le modifiche diverranno attive immediatamente dopo che si è usciti dalla schermata [S]eleziona.


6.13 Come si installa un pacchetto sorgente?

I pacchetti sorgente Debian non possono realmente venire "installati", vengono solo spacchettati in qualsiasi directory si voglia per compilare i pacchetti binari che producono.

I pacchetti sorgente sono distribuiti sulla maggior parte dei mirror dove si possono ottenere i pacchetti binari. Se si imposta il proprio sources.list(5) di APT per includere le righe "deb-src" appropriate, si sarà in grado di scaricare facilmente qualsiasi pacchetto sorgente eseguendo

     apt-get source foo

Per aiutare nella reale compilazione del pacchetto sorgente, il pacchetto sorgente Debian fornisce il cosiddetto meccanismo di dipendenze di compilazione. Significa che il manutentore del pacchetto sorgente conserva una lista di altri pacchetti che sono richiesti per compilare il proprio pacchetto. Per vedere come questo sia utile, si esegua

     apt-get build-dep foo

prima di compilare il sorgente.


6.14 Come si compilano pacchetti binari da un pacchetto sorgente?

Si avrà bisogno di tutti i file foo_*.dsc, foo_*.tar.gz e foo_*.diff.gz per compilare il sorgente (nota: non c'è nessun .diff.gz per alcuni pacchetti nativi Debian).

Una volta che li si ha (Come si installa un pacchetto sorgente?, Sezione 6.13), se si ha il pacchetto dpkg-dev installato, il seguente comando:

     dpkg-source -x foo_versione-revisione.dsc

estrarrà il pacchetto in una directory denominata foo-versione.

Se si vuole solo compilare il pacchetto, si può entrare nella directory foo-versione e lanciare il comando

     dpkg-buildpackage -rfakeroot -b

per compilare il pacchetto (si noti che questo richiede anche il pacchetto fakeroot), e poi

     dpkg -i ../foo_versione-revisione_arch.deb

per installare il pacchetto appena compilato.


6.15 Come ci si crea pacchetti Debian da sé?

Per maggiori dettagli al riguardo si legga la New Maintainers' Guide, disponibile nel pacchetto maint-guide o su http://www.debian.org/doc/devel-manuals#maint-guide.


[ precedente ] [ Contenuti ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ successivo ]


The Debian GNU/Linux FAQ

versione 4.0.4+nmu1, 3 January 2010

Autori della FAQ Debian