## 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