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


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


Questo capitolo tratta alcuni aspetti dettagliati a basso livello della gestione dei pacchetti di Debian. Se si è principalmente interessati nell'uso degli strumenti relativi, si salti ai capitoli Gli strumenti di gestione dei pacchetti Debian, Capitolo 8 e Mantenere il sistema Debian aggiornato, Capitolo 9.


7.1 Cosa è un pacchetto Debian?

I pacchetti generalmente contengono tutti quei file necessari a implementare una serie di comandi o funzionalità correlate. 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 GNU (gcc) "dipende" dal pacchetto binutils che include il linker e l'assemblatore. Se un utente tenta di installare gcc senza avere prima installato binutils, il sistema di gestione dei pacchetti (dpkg) invia un messaggio di errore avvertendo che necessita anche di binutils, e ferma l'installazione di gcc. (Questa funzione può essere tuttavia aggirata dall'utente tenace, si veda dpkg(8).) Per maggiori informazioni, si veda Cosa significa dire che un pacchetto Dipende da, Raccomanda, Suggerisce, Va in conflitto con, Sostituisce, Rompe o Fornisce un altro pacchetto?, Sezione 7.9 più sotto.

Gli strumenti Debian per i pacchetti possono essere usati per:


7.2 Qual è il formato di un pacchetto binario Debian?

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

I dettagli di questo formato per i pacchetti binari Debian sono descritti nella pagina di manuale deb(5). Questo formato interno è soggetto a modifiche (tra diversi rilasci principali di Debian GNU/Linux), quindi usare sempre dpkg-deb(1) se si devono effettuare manipolazioni a basso livello di file .deb.


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

Il nome dei pacchetti binari Debian segue la seguente convenzione: <pippo>_<NumeroVersione>-<NumeroRevisioneDebian>_<ArchitetturaDebian>.deb

Si noti che pippo dovrebbe essere il nome del pacchetto. Come verifica, si può conoscere il nome del pacchetto associato ad un particolare file di archivio Debian (file.deb) in uno dei modi seguenti.

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

La parte RRR è il numero di revisione Debian e viene specificata dallo sviluppatore Debian (o il singolo utente se sceglie di crearsi 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.

La parte AAA identifica il processore per cui è stato compilato il pacchetto. È solitamente i386, che si riferisce ai chip compatibili con Intel 386 o versioni successive. Per altre possibilità si veda la struttura delle directory dei siti FTP di Debian in Cosa sono tutte quelle directory negli archivi FTP Debian?, Sezione 6.7. Per dettagli, si veda la descrizione delle "architetture Debian" nella pagina di manuale dpkg-architecture(1).


7.4 Cos'è un file di controllo Debian?

Le specifiche riguardanti il contenuto di un file di controllo Debian sono fornite nel manuale Debian Policy, sezione 5, si veda Quale altra documentazione esiste su e per un sistema Debian?, Sezione 12.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: il classico saluto e un buon esempio
      Il programma GNU hello produce un familiare e amichevole saluto. Consente
      ai non programmatori di usare un classico strumento informatico che
      altrimenti non sarebbe disponibile per loro.
      .
      A parte gli scherzi, questo è un esempio di come creare un pacchetto
      Debian.
      È la versione Debian del programma "hello world" del progetto GNU
      (che è esso stesso un esempio per il progetto GNU).

Il campo Package fornisce il nome del pacchetto. Questo è il nome attraverso il quale il pacchetto può essere manipolato con gli strumenti per i pacchetti ed è solitamente simile, ma non necessariamente identico, alla prima parte della stringa del nome del file archivio Debian.

Il campo Version fornisce sia il numero della versione dello sviluppatore originale, sia (nell'ultima parte) il livello di revisione del pacchetto Debian di questo programma, come spiegato in Perché i nomi dei pacchetti Debian sono così lunghi?, Sezione 7.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. È pensato per essere usato dai frontend di installazione in modo da poter mostrare se c'è abbastanza spazio disponibile su disco per installare il programma.

La riga Section fornisce la "sezione" in cui questo pacchetto Debian è archiviato presso i siti FTP Debian.

Priority indica quanto è importante questo pacchetto per l'installazione, così che i software semi-intelligenti come dselect o aptitude possano ordinare il pacchetto dentro una categoria di, ad esempio, pacchetti installati in modo opzionale. Si veda Cosa sono i pacchetti Essential, Required, Important, Standard, Optional o Extra?, Sezione 7.7.

Il campo Maintainer fornisce l'indirizzo di posta elettronica della persona che è attualmente responsabile della 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 manuale Debian Policy, sezione 5, "Control files and their fields" (vedere Quale altra documentazione esiste su e per un sistema Debian?, Sezione 12.1).


7.5 Cos'è un conffile Debian?

Conffiles è una lista di file di configurazione (solitamente situati 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 preservati, ed è una caratteristica critica che permette l'aggiornamento in loco di pacchetti su un sistema in esecuzione.

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

     dpkg --status pacchetto

e si guardi alla voce "Conffiles:".


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

Questi file sono script eseguibili che vengono automaticamente eseguiti prima o dopo l'installazione di un pacchetto. Insieme ad un file chiamato control, tutti questi file sono parte della sezione "control" di un file archivio 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 pippo una volta che pippo è stato spacchettato dal suo archivio Debian (".deb"). Spesso gli script "postinst" richiedono all'utente degli input 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 o altri file associati a pippo, o rimuove i file creati da quel pacchetto. (Si veda anche Cos'è un pacchetto virtuale?, Sezione 7.8.)

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


7.7 Cosa sono i pacchetti Essential, 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:

Se si fa un'installazione Debian predefinita verranno installati sul sistema tutti i pacchetti di priorità Standard o maggiore. Se si selezionano attività predefinite si otterranno anche pacchetti con priorità più bassa.

In aggiunta, alcuni pacchetti sono marcati come Essential (Essenziali) dato che sono assolutamente necessari per il corretto funzionamento del sistema. Gli strumenti di gestione dei pacchetti si rifiuteranno di rimuoverli.


7.8 Cos'è un pacchetto virtuale?

Un pacchetto virtuale è un nome generico che si applica ad ognuno dei componenti di un gruppo di pacchetti, che forniscono funzionalità di base simili. Per esempio, entrambi i programmi tin e trn sono newsreader e dovrebbero quindi soddisfare qualsiasi dipendenza di un programma che richiede un newsreader sul sistema, per poter funzionare 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. Si dice quindi che fornisco il pacchetto virtuale "mail transport agent". Se uno qualsiasi 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 in modo che, se più di un pacchetto che fornisce lo stesso pacchetto virtuale è installato su di un sistema, l'amministratore di sistema può allora impostarne uno come pacchetto preferito. Il relativo comando è update-alternatives ed è descritto più in dettaglio in Ad alcuni utenti piace mawk, ad altri gawk; ad alcuni piace vim, ad altri elvis; ad alcuni piace trn, ad altri tin; come supporta Debian le diversità?, Sezione 11.10.


7.9 Cosa significa dire che un pacchetto Dipende da, Raccomanda, Suggerisce, Va in conflitto con, Sostituisce, Rompe 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 a cui, su un dato sistema, un determinato Programma A può funzionare indipendentemente dall'esistenza di un Programma B.

Informazioni più dettagliate sull'utilizzo di ognuno di questi termini possono essere trovate nel manuale Policy, sezione 7.2 "Binary Dependencies" (vedere Quale altra documentazione esiste su e per un sistema Debian?, Sezione 12.1).


7.10 Cosa significa Pre-Depends?

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

Tuttavia, per alcuni pacchetti, dpkg si rifiuta persino di spacchettarli finché certe dipendenze non vengono risolte. Tali pacchetti si dice che "Pre-dipendono" dalla presenza di altri pacchetti. Il progetto Debian aveva fornito 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 la loro dipendenza da libC.

Come sopra, informazioni più dettagliate al riguardo possono essere reperite nel manuale Debian Policy.


7.11 Cosa significano sconosciuto, installa, rimuovi, elimina e blocca nello stato di un pacchetto?

Queste etichette dei "desiderata" indicano il volere dell'utente riguardo ad un pacchett (come indicato dalle azioni dell'utente nella sezione "Seleziona" di dselect o dall'invocazione diretta di dpkg).

I loro significati sono:


7.12 Come si blocca un pacchetto?

Esistono tre modi per bloccare (hold) pacchetti, con dpkg, aptitude o dselect.

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

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

Poi modificare il file risultante selezione.txt, cambiando la riga contenente il pacchetto che si desidera bloccare, per esempio libc6, da questo:

     libc6                                           install

a questo:

     libc6                                           hold

Salvare il file e ricaricarlo nel database di dpkg con:

     dpkg --set-selections < selezione.txt

Con aptitude, si può bloccare un pacchetto usando

     aptitude hold nome_pacchetto

e rimuovere il blocco con

     aptitude unhold nome_pacchetto

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


7.13 Come si installa un pacchetto sorgente?

I pacchetti sorgente Debian non possono realmente venire "installati", vengono solo spacchettati in qualsiasi directory in cui si vogliano 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 pippo

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

     apt-get build-dep pippo

prima di compilare il sorgente.


7.14 Come si compilano pacchetti binari da un pacchetto sorgente?

Il metodo consigliato è usare vari strumenti wrapper. Verrà mostrato come farlo usando gli strumenti devscripts. Installare questo pacchetto se non è ancora stato fatto.

Ora, come prima cosa recuperare il pacchetto sorgente:

     apt-get source pippo

e spostarsi nell'albero dei sorgenti:

     cd pippo-*

Poi installare le dipendenze di compilazione necessarie (se ce ne sono):

     sudo apt-get build-dep pippo

Creare quindi una versione dedicata della propria compilazione (in modo da non confondersi successivamente quando Debian stessa rilascerà una nuova versione)

     dch -l local 'Bla bla bla'

Da ultimo compilare il proprio pacchetto

     debuild -us -uc

Se tutto ha funzionato a dovere, dovrebbe essere ora possibile installare il proprio pacchetto eseguendo

     sudo dpkg -i ../*.deb

Se si preferisce fare le cose a mano, e non si vuole usare devscripts, seguire la procedura seguente:

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

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

     dpkg-source -x pippo_versione-revisione.dsc

estrarrà il pacchetto in una directory chiamata pippo-versione.

Se si vuole solo compilare il pacchetto, si può entrare nella directory pippo-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 ../pippo_versione-revisione_arch.deb

per installare il pacchetto appena compilato.


7.15 Come ci si creano pacchetti Debian da sé?

Per maggiori dettagli al riguardo si legga la New Maintainers' Guide, disponibile nel pacchetto maint-guide o suhttp://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 ] [ 16 ] [ successivo ]


The Debian GNU/Linux FAQ

versione 5.0.3, 16 October 2014

Gli autori sono elencati in Autori delle FAQ di Debian