3 581
contributi
(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}} | ||
== 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]]. | |||
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. | |||
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. | |||
== 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 | 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> | ||
=== Esporta e importa la lista dei pacchetti === | |||
=== | |||
{{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]]. | ||
==== | ==== 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. | ||
==== | ==== 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>. | |||
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>) | ||
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> | |||
=== | [[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. | |||
=== | === 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 | === 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. | ||
=== 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 |
contributi