## page created by wilecoyote
#LANGUAGE it
#format wiki
<
>
<>
<>
= Introduzione =
In questa guida viene schematicamente presentato '''DPKG''' ('''D'''ebian '''P'''ac'''K'''a'''G'''e), il sistema di gestione dei pacchetti di livello più basso predefinito in Ubuntu.
Verranno descritti i comandi contenuti nei pacchetti ''dpkg'' e ''dpkg-repack''.
== Cenni storici ==
Ai primordi della distribuzione [[https://www.debian.org/|Debian]], i programmi venivano distribuiti tramite semplici file archivio `.tar.gz`. Al pari di altre [[https://it.wikipedia.org/wiki/Linux|GNU/Linux]] dell'epoca, gli utenti dovevano [[AmministrazioneSistema/InstallareProgrammi/DaSorgenti|compilare]] manualmente ogni software che desideravano installare sui propri sistemi. Si rese necessario, quindi, implementare un metodo per gestire efficacemente i pacchetti installati sul sistema.
'''DPKG''' ha rappresentato il primo passo fondamentale per gestire i pacchetti in '''Debian'''. Creato da Ian Murdock nel gennaio 1994 come semplice script per la [[https://it.wikipedia.org/wiki/Shell_(informatica)|shell]], è stato successivamente traslato interamente in linguaggio Perl da Iarl Streeter, Matt Welsh e lo stesso Ian Murdock. Nello stesso anno, Ian Jackson ha poi curato la riscrittura in linguaggio '''C''' della parte principale del codice, conferendo a '''DPKG''' la sua forma attuale.
Sebbene oggi '''DPKG''' sia considerato uno strumento di basso livello, soppiantato nell'uso quotidiano da tool più evoluti come '''[[AmministrazioneSistema/InstallareProgrammi/Apt|APT]]''', rimane uno strumento prezioso per la risoluzione di problematiche complesse del sistema dei pacchetti.
= Installazione =
Il pacchetto ''dpkg'' è preinstallato nel sistema.<
>
Per implementare il suo funzionamento [[AmministrazioneSistema/InstallareProgrammi|installare]] il pacchetto [[apt://dpkg-dev|dpkg-dev]].
= Comandi =
{{{#!wiki note
Tutti i comandi di '''dpkg''' e quelli correlati che prevedono modifiche al sistema (installazione, rimozione, riparazione di pacchetti, ecc.) necessitano dei [[AmministrazioneSistema/PrivilegiDiAmministrazione|privilegi di amministrazione]].
Per l'installazione è pure richiesto lo scaricamento preventivo nella propria '''Home''' del pacchetto, o dei pacchetti, che si desidera installare.
}}}
##{{{#!wiki tip
##[[AmministrazioneSistema/InstallareProgrammi|Installando]] il pacchetto [[apt://apt-dpkg-ref|apt-dpkg-ref]] sarà disponibile nella cartella `/usr/share/doc/apt-dpkg-ref` una lista dei principali comandi e opzioni dei programmi '''dpkg''' e '''[[AmministrazioneSistema/InstallareProgrammi/Apt|apt]]'''.<
>
##Questa lista è disponibile in vari formati, come ad esempio file `pdf.gz` o `.html` (che possono essere aperti rispettivamente con un visualizzatore di documenti o con un [[InternetRete/Navigazione|browser]]), e può essere [[AmministrazioneSistema/ComandiBase#cp|copiata]] nella propria '''Home''' per essere consultata e/o stampata più comodamente.
##}}}
##Rimosso dai repo successivi alla 20.04
== Installazione e rimozione pacchetti ==
Di seguito vengono elencati i comandi più comuni per l'installazione e la rimozione dei pacchetti dal sistema:
||<:-2>'''Comandi'''||
||<27%> '''dpkg -i ''' ''nome_pacchetto'' || Installa un nuovo pacchetto. ||
|| '''dpkg --configure''' ''nome_pacchetto'' || Prova a riconfigurare un pacchetto installato con errori. ||
|| '''dpkg --configure''' ''-a'' || Prova a riconfigurare l'insieme dei pacchetti installati con errori. ||
|| '''dpkg -r''' ''nome_pacchetto'' || Rimuove un pacchetto senza rimuovere i relativi file di configurazione. ||
|| '''dpkg -P''' ''nome_pacchetto'' || Rimuove un pacchetto, compresi tutti i file di configurazione. ||
Per un elenco completo dei comandi e delle opzioni disponibili per '''dpkg''', digitare nel [[AmministrazioneSistema/Terminale|terminale]]:{{{
man dpkg
}}}
== Ricerca pacchetti o file ==
In questa sezione vengono elencati alcuni comandi utili alla ricerca dei pacchetti all'interno del database e delle informazioni riguardanti il contenuto di essi.
||<:-2>'''Comandi'''||
||<50%> '''dpkg -l''' ''nome_pacchetto_nel_pattern'' || Lista dei pacchetti individuati dalla stringa di ricerca. ||
|| '''dpkg -S''' ''nome_file'' || Dato un file, mostra il pacchetto che ha provveduto alla sua installazione nel sistema. ||
|| '''dpkg -L''' ''nome_pacchetto'' || Lista dei file presenti nel pacchetto. ||
|| '''dpkg-query --showformat='${binary:Package}\n' --show''' || Lista dei pacchetti che compongono il sistema. ||
== Forzature per sbloccare aggiornamenti ==
Questi comandi servono per forzare la rimozione o la reinstallazione dei pacchetti in caso di blocco dell'aggiornamento del sistema. Si raccomanda di usarli solo in caso di effettiva necessità.
||<:-2>'''Comandi'''||
||<27%> '''dpkg --force-remove-reinstreq -i''' ''nome_pacchetto da reinstallare'' || Forza la rimozione uno o più pacchetti installati preimpostando la reinstallazione. Per il corretto uso leggere [[#reinstallo|questa sezione]]. ||
|| '''dpkg --force-downgrade''' ''nome pacchetto'' || Sostituisce un pacchetto con una versione precedente. ||
|| '''dpkg --force-configure-any''' ''nome pacchetto'' || Configura qualsiasi pacchetto che potrebbe essere di aiuto a installare il pacchetto. ||
= Rimpacchettare i pacchetti installati =
Questa procedura può rivelarsi utile per copiare da un sistema ad un altro dei pacchetti non più disponibili da fonti terze, oppure per convertirli in un'architettura differente ove possibile.
0. [[AmministrazioneSistema/InstallareProgrammi|Installare]] il pacchetto [[apt://dpkg-repack|dpkg-repack]].
0. A seconda dei casi:
* Per creare il pacchetto digitare nel [[AmministrazioneSistema/Terminale|terminale]] il seguente comando:{{{
dpkg-repack
}}}
* Per creare un pacchetto e convertirlo nell'architettura desiderata, digitare nel [[AmministrazioneSistema/Terminale|terminale]] il seguente comando:{{{
dpkg-repack --arch=
}}}
sostituendo «`nome pacchetto`» con il nome del pacchetto da rimpacchettare e «`arch`» con «`i386`» per convertire a 32 bit oppure con «`amd64`» per convertire a 64 bit. È inoltre possibile listare i nomi di più pacchetti separati da uno spazio.
= Installazione pacchetti =
Questa procedura di installazione è utile per installare uno o più pacchetti salvati nel sistema in formato di file `.deb` (ad esempio dopo averli scaricati da Internet da fonti terze oppure salvati da un precedente backup). Non gestendo le eventuali dipendenze richieste, può talvolta richiedere un comando integrativo con '''[[AmministrazioneSistema/InstallareProgrammi/Apt|apt]]'''.
0. Per installare il pacchetto `.deb` digitare nel [[AmministrazioneSistema/Terminale|terminale]] il seguente comando: {{{
sudo dpkg -i /percorso/pacchetto.deb
}}}
sostituendo `/percorso/pacchetto.deb` con il nome del file `.deb` completo di percorso.<
>
{{{#!wiki tip
Qualora il terminale sia aperto nella stessa cartella dove è stato salvato il file, è possibile omettere il percorso completo, anteponendo `./` al nome del file.
}}}
Qualora invece si abbia necessità di installare più file `.deb` presenti in una determinata cartella, per installarli tutti insieme sarà sufficiente:{{{
sudo dpkg -i *.deb
}}}
{{{#!wiki important
Il comando precedente installa tutti i pacchetti presenti nella directory. Quindi occorre essere sicuri che siano presenti soltanto il/i pacchetto/i che si vuole effettivamente installare. Se necessario è possibile [[AmministrazioneSistema/ComandiBase#mkdir|creare]] una cartella apposita contenente i pacchetti desiderati, quindi [[AmministrazioneSistema/ComandiBase#cd|spostarsi]] all'interno di essa.
}}}
0. Se l'installazione termina indicando problemi di dipendenze, digitare inoltre il comando:{{{
sudo apt install -f
}}}
Per ulteriori metodi di installazione di singoli file `.deb` consultare questo [[AmministrazioneSistema/InstallareProgrammi#Pacchetti_deb|paragrafo]].
= Esempi di sblocco pacchetti =
Quelli che seguono sono alcuni esempi di comandi utili per sbloccare un sistema con uno o più pacchetti bloccati, a causa di installazioni e/o aggiornamenti non andati a buon fine o bloccati.
Le seguenti procedure possono richiedere di usare congiuntamente comandi di '''dpkg''', di '''[[AmministrazioneSistema/InstallareProgrammi/Apt|apt]]''' e di '''[[AmministrazioneSistema/ComandiBase#rm_e_rmdir|rm]]'''.
Sostituire nei comandi seguenti «``» con il nome del pacchetto di proprio interesse.
{{{#!wiki important
L'uso di queste procedure è sconsigliato nella gestione corrente del sistema. Un uso scorretto potrebbe causare dei danni irrimediabili al sistema.
}}}
{{{#!wiki important
Durante l'esecuzione delle procedure seguenti, alcuni comandi potrebbero mostrare degli avvisi relativi a rischi di danni al sistema. Trascurare tali avvisi e __non__ eseguire comandi diversi da quelli indicati.
}}}
== Ripulire configurazioni residue ==
Consultare questo [[AmministrazioneSistema/PulireUbuntu#Pulizia_delle_configurazioni_inutilizzate|paragrafo]].
== Sblocco pacchetto bloccato tramite rimozione ==
Questa procedura serve a sbloccare i pacchetti tramite rimozione forzata.
0. Ripulire la lista dei sorgenti del pacchetto:{{{
sudo rm -r /var/lib/apt/lists/*
}}}
0. Ripulire la lista file dei metadati del pacchetto:{{{
sudo rm -r /var/lib/app-info/yaml/*
}}}
0. Rimuovere le informazioni del pacchetto:{{{
sudo rm /var/lib/dpkg/info/*
}}}
0. Riconfigurare il sistema pacchetti:{{{
sudo dpkg --configure -a
}}}
0. Aggiornare il database dei pacchetti:{{{
sudo apt update
}}}
0. Aggiornare il sistema:{{{
sudo apt full-upgrade
}}}
<>
== Sblocco pacchetto danneggiato con reinstallazione ==
Questa procedura serve per sbloccare i pacchetti tramite reinstallazione forzata.
* Per i pacchetti disponibili nei repository [[Repository#Repository_ufficiali|ufficiali]] o [[Repository/NonUfficiali|di terze parti]]:
0. Rimuovere le informazioni del pacchetto:{{{
sudo rm /var/lib/dpkg/info/*
}}}
0. Forzare rimozione a scopo reinstallazione:{{{
sudo dpkg --remove --force-remove-reinstreq
}}}
0. Aggiornare il database dei pacchetti:{{{
sudo apt update
}}}
0. Reinstallare il pacchetto rimosso:{{{
sudo apt install --reinstall
}}}
* Per i pacchetti scaricati manualmente, è sufficiente [[AmministrazioneSistema/ComandiBase#cp|copiare]] il pacchetto `.deb` interessato nella directory `/var/cache/apt/archives` (sede della cache di '''apt''') e [[AmministrazioneSistema/InstallareProgrammi/Apt#Installazione_e_rimozione_pacchetti|reinstallarlo]].
== Forzare la corretta installazione ==
Questa procedura serve a reinstallare i pacchetti male installati.
0. Rimuovere la cache delle password:{{{
sudo rm /var/cache/debconf/passwords.dat
}}}
0. Rimuovere la cache dei templates:{{{
sudo rm /var/cache/debconf/templates.dat
}}}
0. Forzare la sovrascrittura dei contenuti del pacchetto:{{{
sudo dpkg -i --force-overwrite /var/cache/apt/archives/
}}}
sostituendo `` con l'intera dicitura identificativa del pacchetto.
0. Correggere eventuali problemi nel sistema pacchetti:{{{
sudo apt install -f
}}}
= Pacchetti aggiuntivi =
Pacchetti come ''deborphan'', ''debfoster'' e ''kleansweep'', con le loro relative funzioni, possono risultare utili alla scopo di mantenere il sistema pulito e a rimuovere i pacchetti orfani (cioè non più utili a soddisfare dipendenze di altri pacchetti). Per maggiori informazione consultare i manuali dei relativi programmi.
{{{#!wiki important
L'uso di queste applicazioni è sconsigliato agli utenti meno esperti. Un uso non corretto potrebbe causare dei danni irrimediabili al sistema.
}}}
= Digitazione rapida dei comandi comuni =
La [[AmministrazioneSistema/Terminale|riga di comando]] è uno strumento molto potente. Tuttavia per alcuni utenti potrebbe risultare scomodo digitare comandi anche lunghi oppure memorizzarli. Di seguito sono quindi descritti alcune semplici e utili funzioni di '''[[Programmazione/LinguaggioBash|Bash]]''', [[https://it.wikipedia.org/wiki/Shell_(informatica)|shell]] predefinita nella linea di comando di Ubuntu.
* '''Cronologia''': digitando i tasti direzionali superiore e inferiore sarà possibile accedere ai comandi digitati di recente. Questa funzionalità risulterà pertanto utile, ad esempio, se si esegue di frequente l'aggiornamento del sistema da terminale.
* '''Comandi rapidi''': è possibile rinominare i comandi più lunghi con altri più corti scelti dall'utente (ad esempio: `dki` invece di `sudo dpkg --install`). A tale fine modificare con un [[Ufficio/EditorDiTesto|editor di testo]] il file `~/.bashrc`, inserendo alla fine del testo delle righe come nel seguente esempio:{{{
alias dkp='dpkg-repack'
alias dki='sudo dpkg --install'
alias dkr='sudo dpkg --purge'
alias dkp='sudo dpkg --remove'.}}}
= Ulteriori risorse =
* [[http://manpages.ubuntu.com/manpages/focal/en/man8/dpkg.8.html|Manpage di dpkg per Ubuntu 20.04 LTS]]
* [[http://manpages.ubuntu.com/manpages/focal/en/man8/dpkg-repack.8.html|Manpage di dpkg-repack per Ubuntu 20.04 LTS]]
* [[http://guide.debianizzati.org/index.php/Dpkg| Dpkg (guida su Debianizzati)]]
* [[AmministrazioneSistema/ComandiBase|Guida all'uso dei comandi base]]
----
CategoryAmministrazione