Dpkg: differenze tra le versioni

9 745 byte aggiunti ,  31 mar 2015
introduzione, riorganizzazione, estensione voci, aggiunti warnings
(dpkg-deb, dpkg-query, architetture, importa ed esporta lista pacchetti (con stato))
(introduzione, riorganizzazione, estensione voci, aggiunti warnings)
Riga 1: Riga 1:
{{Stub}}{{Versioni_compatibili}}
{{Stub}}{{Versioni_compatibili}}
{{Box| Scrittura della pagina in corso... |}}


== Introduzione ==
== Introduzione ==
Dpkg è il package manager di Debian, che si occupa dell'installazione, della configurazione e della rimozione di tutto il software disponibile nella forma di [[pacchetto|pacchetti deb]]. Ogni pacchetto ha delle dipendenze, in forma di altri pacchetti che devono essere presenti nel sistema, che sono controllati e installati automaticamente da [[APT]], una suite di programmi che si avvale di <code>dpkg</code> come package manager e aggiunge funzionalità per rendere trasparente la gestione delle dipendenze e lo scaricamento dei pacchetti dai [[repository]].


== Pacchetti installati ==
Normalmente infatti l'utente utilizza soltanto uno dei tanti programmi che fanno parte di APT, come per esempio [[apt-get]], senza ricorrere direttamente a <code>dpkg</code>, riservato agli utenti più esperti e per esigenze specifiche. Questa guida vuole offire soltanto una panoramica generale agli usi più comuni di questo potente strumento, ma non ha alcuna pretesa di esaustività e si rimanda alle pagine di manuale per tutti gli altri dettagli.


=== Ricerca ===
Si sconsiglia caldamente l'uso di questo strumento per l'installazione e la rimozione di pacchetti, salvo sia impossibile effettuare la stessa operazione con [[APT]], in quanto non gestisce le dipendenze e ciò potrebbe compromettere il funzionamento del sistema. Invece può essere impiegato senza rischi per ricerche sul contenuto dei pacchetti installati o in generale per visualizzare informazioni a essi relative, in genere agendo come frontend per le opzioni più comuni di <code>dpkg-query</code> e <code>dpkg-deb</code>, anch'essi contenuti nel pacchetto '''dpkg''', essenziale per il funzionamento di Debian.


Per i comandi relativi a un pacchetto precedentemente installato, <code>dpkg</code> agisce come un frontend alle opzioni più comuni di <code>dpkg-query</code>.
== Pacchetti installati ==
In questa sezione sono raccolte tutte le azioni che possono essere svolte sui pacchetti precedentemente installati, in genere tramite [[APT]].


=== Ricerche ===
Cerca il pacchetto che ha installato il file, utile per risalire al pacchetto di un eseguibile di cui non si ricorda la provenienza:
Cerca il pacchetto che ha installato il file, utile per risalire al pacchetto di un eseguibile di cui non si ricorda la provenienza:
<pre>$ dpkg --search /percorso/file</pre>
<pre>$ dpkg --search /percorso/file</pre>
Riga 24: Riga 25:
<pre>$ dpkg --list "pattern"</pre>
<pre>$ dpkg --list "pattern"</pre>
(forma abbreviata: <code>-l</code>)
(forma abbreviata: <code>-l</code>)
Per esempio per cercare tutti i pacchetti precedentemente installati contenenti la stringa "apt":
<pre>$ dpkg -l "*apt*"</pre>


Per usi più avanzati si consulti il manuale di <code>dpkg-query</code>.
Per usi più avanzati si consulti il manuale di <code>dpkg-query</code>.
=== Verifiche ===
Restituisce la lista dei pacchetti installati solo parzialmente o presenti in uno stato inconsistente, suggerendo le azioni da compiere per la risoluzione del problema:
<pre>$ dpkg --audit</pre>
(forma abbreviata: <code>-C</code>)
Verifica l'integrità di ciò che è stato installato da uno o più pacchetti (dopo aver controllato la consistenza dei metadati con il comando precedente):
<pre>$ dpkg --verify nomepacchetto</pre>
(forma abbreviata: <code>-V</code>)


=== Riconfigurazione ===
=== Riconfigurazione ===
Se si vogliono cambiare le impostazioni di un pacchetto installato e già configurato in fase di installazione, o per cui è possibile cambiare il default tramite <code>dpkg</code>, si può utilizzare <code>dpkg-reconfigure</code>:
Se si vogliono cambiare le impostazioni di un pacchetto installato e già configurato in fase di installazione, o per cui è possibile cambiare il default tramite <code>dpkg</code>, si può utilizzare <code>dpkg-reconfigure</code>:
<pre># dpkg-reconfigure nomepacchetto</pre>
<pre># dpkg-reconfigure nomepacchetto</pre>
Riga 34: Riga 46:
Rispetto agli altri eseguibili, tutti contenuti nel pacchetto '''dpkg''', questo è contenuto in '''debconf''', ma è anch'esso richiesto per il corretto funzionamento di Debian.
Rispetto agli altri eseguibili, tutti contenuti nel pacchetto '''dpkg''', questo è contenuto in '''debconf''', ma è anch'esso richiesto per il corretto funzionamento di Debian.


=== Rimozione forzata ===
=== Rimozione ===
{{Warningbox | Per rimuovere software installato tramite [[APT]] o <code>dpkg</code> si consiglia di ricorrere sempre ad APT, per esempio tramite [[apt-get]], perché gestisce anche le dipendenze. Utilizzare direttamente <code>dpkg</code> può invece lasciare il sistema in uno stato incoerente, anche se in genere non è permessa la rimozione di pacchetti da cui altri ancora dipendono, senza forzarla esplicitamente con un'opzione.}}
 
Rimuove un pacchetto, se non esistono altri pacchetti installati che dipendono da esso, ma senza rimuovere le sue dipendenze:
<pre># dpkg --remove nomepacchetto</pre>
(forma abbreviata: <code>-r</code>)
 
Dopo il comando precedente, per rimuovere le dipendenze automatiche del pacchetto, se non più richieste da altri, è necessario ricorrere ad [[APT]]:
<pre># apt-get autoremove</pre>
 
Rimuove il pacchetto e anche i relativi file di configurazione del sistema:
<pre># dpkg --purge nomepacchetto</pre>
(forma abbreviata: <code>-P</code>)
 
E di nuovo, per rimuovere le dipendenze automatiche non più necessarie:
<pre># apt-get --purge autoremove</pre>
utilizzando <code>--purge</code> per eliminare anche i relativi file di configurazione del sistema.
 
==== Rimozione forzata ====
{{Warningbox | Questa operazione è ancora più rischiosa della precedente, in quanto disattiva i controlli di sicurezza pensati per proteggere il sistema da uno stato incoerente e potenzialmente inusabile, in base all'importanza dei pacchetti coinvolti nella rimozione. Va effettuata soltanto se è strettamente necessario, e prestando estrema attenzione.}}
 
Per forzare la rimozione, anche in presenza di dipendenze che impediscono l'eliminazione del pacchetto, è necessario specificare l'opzione <code>--force-depends</code>. L'uso è caldamente sconsigliato, salvo si sia certi di quello che si sta facendo, si sia utenti esperti dell'uso di [[APT]] e non si riesce a rimuovere il pacchetto in altri modi.
 
Per esempio per forzare la rimozione, ignorando tutte le dipendenze:
<pre># dpkg --remove --force-depends nomepacchetto</pre>
In alternativa esiste un'altra opzione che consente di ignorare solo la dipendenza da un pacchetto (''nomedipendenza''):
<pre># dpkg --remove --ignore-depends=nomedipendenza nomepacchetto</pre>
Oppure soltanto le dipendenze da una lista di pacchetti (''dipendenza1'', ''dipendenza2'', ...):
<pre># dpkg --remove --ignore-depends=dipendenza1,dipendenza2,... nomepacchetto</pre>
 
In luogo di <code>--remove</code> si può utilizzare <code>--purge</code> se si vogliono eliminare anche i relativi file di configurazione del sistema. E in entrambi i casi è necessario poi ricorrere ad [[APT]] per le dipendenze automatiche non più necessarie, come già visto per la rimozione normale.
 
Per altre opzioni si rimanda al manuale di <code>dpkg</code>.


== Stato dei pacchetti ==
== Stato dei pacchetti ==
Dpkg può essere utilizzato per controllare i pacchetti installati e il loro stato (''install'', ''deinstall'', ''hold'', ''purge''), e anche per cambiarlo.


Restituisce tutti i pacchetti precedentementi installati, accompagnati dal loro stato (''install'', ''deinstall'', ''hold'', ''purge''):
Si noti che lo stato ''auto'' o ''manual'' (se il pacchetto era installato automaticamente o manualmente) non è registrato, in quanto <code>dpkg</code> non si occupa delle dipendenze e non può conoscere se un pacchetto è stato installato solo per soddisfarle.
 
=== Lista i pacchetti del sistema ===
Restituisce la lista tutti i pacchetti precedentementi installati, accompagnati dal loro stato:
<pre>$ dpkg --get-selections</pre>
<pre>$ dpkg --get-selections</pre>


Lo stato ''auto'' o ''manual'' (se il pacchetto era installato automaticamente o manualmente) non è registrato, in quanto <code>dpkg</code> non gestisce le dipendenze e non può conoscere se un pacchetto è stato installato solo per soddisfarle.
=== Esporta e importa la lista dei pacchetti ===
 
=== Esportare e importare la lista dei pacchetti installati ===
 
{{Warningbox | Quest'operazione è pericolosa e in caso di errori può causare il blocco e il malfunzionamento del sistema, rendendo necessaria anche una nuova installazione da zero. Non va eseguita se non si è utenti abbastanza esperti, e si consiglia l'uso di un ambiente minimale come una console virtuale.}}
{{Warningbox | Quest'operazione è pericolosa e in caso di errori può causare il blocco e il malfunzionamento del sistema, rendendo necessaria anche una nuova installazione da zero. Non va eseguita se non si è utenti abbastanza esperti, e si consiglia l'uso di un ambiente minimale come una console virtuale.}}


Si noti che questo meccanismo non funziona tra diverse versioni di Debian e nemmeno tra diverse architetture, o in presenza di diversi driver. È da utilizzare soltanto per ripristinare una configurazione precedente sullo stesso PC o al limite tra due PC quasi identici. Ed è raccomandabile che si tratti di una Debian stable senza altri repository, per via dei cambiamenti che potrebbero avvenire ai pacchetti delle altre [[release]].
Si noti che questo meccanismo non funziona tra diverse versioni di Debian e nemmeno tra diverse architetture, o in presenza di diversi driver. È da utilizzare soltanto per ripristinare una configurazione precedente sullo stesso PC o al limite tra due PC quasi identici. Ed è raccomandabile che si tratti di una Debian stable senza altri repository, per via dei cambiamenti che potrebbero avvenire ai pacchetti delle altre [[release]].


==== Esportare ====
==== Esporta ====
 
Per esportare la lista dei pacchetti installati è sufficiente una redirezione su un file (in questo caso <code>lista_pacchetti.txt</code>):
Per esportare la lista dei pacchetti installati è sufficiente una redirezione su un file (in questo caso <code>lista_pacchetti.txt</code>):
<pre>$ dpkg --get-selections > lista_pacchetti.txt</pre>
<pre>$ dpkg --get-selections > lista_pacchetti.txt</pre>
Riga 58: Riga 102:
Si devono salvare i due file .txt e conservarli, per quando si intende importare.
Si devono salvare i due file .txt e conservarli, per quando si intende importare.


==== Importare ====
==== Importa ====
 
Se si vuole importare tale stato in seguito, per replicare la configurazione precedentemente esportata sono sufficienti due comandi, nella stessa cartella dove si sono salvati i due file .txt nella fase di esportazione:
Se si vuole importare tale stato in seguito, per replicare la configurazione precedentemente esportata sono sufficienti due comandi:
<pre># dpkg --clear-selections
<pre># dpkg --clear-selections
# dpkg --set-selections < lista_pacchetti.txt</pre>
# dpkg --set-selections < lista_pacchetti.txt</pre>
Dove il primo comando imposta lo stato ''deinstall'' a tutti i pacchetti non essenziali installati nel sistema, per far sì che i pacchetti installati ma non presenti nella lista vengano rimossi, e il secondo importa la lista dei pacchetti da installare.
Dove il primo comando imposta lo stato ''deinstall'' a tutti i pacchetti non essenziali installati nel sistema, per far sì che i pacchetti installati ma non presenti nella lista vengano rimossi, e il secondo importa la lista dei pacchetti da installare.


Per rendere effettive le modifiche è necessario ricorrere ad APT:
Per rendere effettive le modifiche, iniziando l'installazione e la rimozione dei pacchetti, è necessario ricorrere ad [[APT]]:
<pre># apt-get dselect-upgrade</pre>
<pre># apt-get dselect-upgrade</pre>


E infine per riassegnare gli stati ''auto'' ai pacchetti installati:
E infine per riassegnare gli stati ''auto'' ai pacchetti che erano stati installati in automatico:
<pre># apt-mark auto $(cat lista_auto.txt)</pre>
<pre># apt-mark auto $(cat lista_auto.txt)</pre>


A questo punto, se tutto è andato a buon fine, sul PC sono installati tutti e soli i pacchetti presenti al momento dell'esportazione, con gli stessi stati.
A questo punto, se tutto è andato a buon fine, sul PC sono installati tutti e soli i pacchetti presenti al momento dell'esportazione, con gli stessi stati.
=== Cambiare lo stato dei pacchetti ===
È sufficiente creare manualmente la lista dei pacchetti di cui modificare lo stato, con quello nuovo da assegnare, per esempio bloccando futuri aggiornamenti con ''hold'', e poi importarla.
{{Warningbox | Si consiglia di utilizzare [[apt-mark]] per svolgere quest'operazione, perché molto più pratico e affidabile, riducendo la possibilità di errori.
Per esempio:
<pre># apt-mark hold nomepacchetto1 ...</pre>}}
Blocca il futuro aggiornamento di un pacchetto:
<pre># echo nomepacchetto hold | dpkg --set-selections</pre>
Rimuove il blocco del pacchetto:
<pre># echo nomepacchetto install | dpkg --set-selections</pre>
Blocca il futuro aggiornamento di più pacchetti:
<pre># printf "%s hold\n" nomepacchetto1 ... nomepacchettoN | dpkg --set-selections</pre>
Rimuove il blocco di più pacchetti:
<pre># printf "%s install\n" nomepacchetto1 ... nomepacchettoN | dpkg --set-selections</pre>
È possibile anche utilizzare ''install'' per programmare l'installazione di pacchetti, oppure ''deinstall'' per programmarne la disinstallazione, ma in tal caso per rendere effettive le modifiche è necessario impartire <code>apt-get dselect-upgrade</code>.


== Pacchetto deb ==
== Pacchetto deb ==
In questa sezione sono raccolte le opzioni operanti su un [[pacchetto|pacchetto deb]], per esempio uno scaricato manualmente senza passare da APT oppure uno recuperato dalla cache dei pacchetti installati in precedenza.


=== Visualizza informazioni ===
=== Visualizza informazioni ===
Per i comandi relativi a un pacchetto deb <code>dpkg</code> agisce come un frontend alle opzioni più comuni di <code>dpkg-deb</code>.


Per i comandi relativi a un pacchetto deb <code>dpkg</code> agisce come un frontend alle opzioni più comuni di <code>dpkg-deb</code>.
Visualizza informazioni sul pacchetto deb:
<pre>$ dpkg --info pacchetto.deb</pre>
(forma abbreviata: <code>-I</code>)


Mostra il contenuto del pacchetto deb:
Mostra il contenuto del pacchetto deb:
<pre>$ dpkg --contents pacchetto.deb</pre>
<pre>$ dpkg --contents pacchetto.deb</pre>
(forma abbreviata: <code>-c</code>)
(forma abbreviata: <code>-c</code>)
Visualizza informazioni sul pacchetto deb:
<pre>$ dpkg --info pacchetto.deb</pre>
(forma abbreviata: <code>-I</code>)


Estrae il contenuto del pacchetto deb nella cartella scelta:
Estrae il contenuto del pacchetto deb nella cartella scelta:
Riga 94: Riga 159:


=== Installazione ===
=== Installazione ===
{{Warningbox | L'installazione di software esterno ad [[APT]] costituisce un potenziale rischio per la sicurezza e la stabilità del sistema. Inoltre <code>dpkg</code> non si occupa di soddisfare le dipendenze, rendendo necessario ricorrere ad APT.
Si consiglia l'uso di [[gdebi]] per l'installazione di pacchetti esterni, che si occupa di soddisfare le dipendenze del pacchetto prima dell'installazione, fermo restando che i rischi per la sicurezza rimangono invariati.}}
Installa un pacchetto deb, senza installarne le dipendenze:
<pre># dpkg --install pacchetto.deb</pre>
(forma abbreviata: <code>-i</code>)
Il sistema potrebbe trovarsi in uno stato incoerente, ed è necessario risolvere le dipendenze non soddisfatte con [[APT]], per esempio con [[apt-get]]:
<pre># apt-get --fix-broken install</pre>


=== Creazione ===
[[Gdebi]] effettua l'operazione contraria, installando prima in automatico le dipendenze del pacchetto tramite APT e soltanto in seguito, se l'operazione è stata conclusa con successo, proceedendo con quella del pacchetto deb, riducendo le possibilità che il sistema rimanga in uno stato incoerente anche in presenza di errori.
 
==== Installazione forzata ====
{{Warningbox | Le istruzioni presentate in questa sezione possono compromettere il funzionamento del sistema, e l'uso è sconsigliato, salvo si sia utenti esperti nell'uso di [[APT]], si presti molta attenzione a quello che si sta facendo, e non ci sia altro modo di risolvere il proprio problema.}}
 
Se si vuole forzare una versione di un pacchetto che comporta il [[downgrade]], oppure ignorare delle dipendenze, è necessario ricorrere <code>dpkg</code>, specificando le opzioni <code>--force-*</code> relative, che si possono leggere sul manuale di <code>dpkg</code>.
 
Per esempio per forzare il [[downgrade]] di un pacchetto, dopo aver recuperato una versione precedente (NOTA: nessun controllo sulle dipendenze, il sistema potrebbe risultare inusabile, a seconda dell'importanza del pacchetto):
<pre># dpkg --install --force-downgrade pacchetto.deb</pre>
Ma si consiglia di ricorrere al [[pinning]], e quindi ad [[APT]], se è possibile.
 
Installa un pacchetto, anche se può rendere non funzionante un altro pacchetto:
<pre># dpkg --install --force-breaks pacchetto.deb</pre>
Può essere molto pericoloso, se entra in conflitto con uno dei pacchetti essenziali al funzionamento del sistema.
 
Al solito è necessario avvalersi di [[APT]] per sistemare le dipendenze:
<pre># apt-get --fix-broken install</pre>


== Architetture ==
== Architetture ==
A partire da Debian [[Wheezy]] è stato aggiunto il supporto ad architetture multiple, e <code>dpkg</code> si occupa di gestire quali architetture possono essere scelte per i pacchetti installati con [[APT]], se compatibili con il proprio hardware.


=== Informazioni sulle architetture ===
=== Visualizza informazioni ===
 
Visualizza l'architettura di default dei pacchetti Debian che saranno installati:
Visualizza l'architettura di default dei pacchetti Debian che saranno installati:
<pre>$ dpkg --print-architecture</pre>
<pre>$ dpkg --print-architecture</pre>
Riga 107: Riga 198:
<pre>$ dpkg --print-foreign-architectures</pre>
<pre>$ dpkg --print-foreign-architectures</pre>


=== Aggiungi e rimuovi architetture ===
=== Aggiungi nuova architettura ===
 
Aggiunge una nuova architettura:
Aggiunge una nuova architettura:
<pre># dpkg --add-architecture architecture</pre>
<pre># dpkg --add-architecture architecture</pre>
Per rendere le modifiche effettive per APT è necessario rieffettuare l'aggiornamento della lista di pacchetti disponibili.   
Per rendere le modifiche effettive per APT è necessario rieffettuare l'aggiornamento della lista di pacchetti disponibili.   


Per esempio:
=== Rimuovi architettura ===
Un caso comune per esempio è quello di aggiungere il supporto per gli eseguibili a 32 bit (architettura: ''i386'') su PC a 64 bit (architettura: ''amd64''):
<pre># dpkg --add-architecture i386
<pre># dpkg --add-architecture i386
# apt-get update</pre>
# apt-get update</pre>
Riga 120: Riga 211:
<pre># dpkg --remove-architecture architecture</pre>
<pre># dpkg --remove-architecture architecture</pre>
seguito dall'aggiornamento della lista dei pacchetti, per rendere effettive le modifiche.
seguito dall'aggiornamento della lista dei pacchetti, per rendere effettive le modifiche.
== Manuale ==
<code>man dpkg</code><br/>
<code>man dpkg-query</code><br/>
<code>man dpkg-deb</code><br/>
<code>man dpkg-reconfigure</code><br/>


{{Autori
{{Autori
3 581

contributi