Debian

Dipendenze del pacchetto Debian

Dipendenze del pacchetto Debian
Per le distribuzioni Linux come Debian GNU/Linux, esistono più di 60.000 diversi pacchetti software. Tutti loro hanno un ruolo specifico. In questo articolo spieghiamo come la gestione dei pacchetti gestisce in modo affidabile questo enorme numero di pacchetti software durante un'installazione, un aggiornamento o una rimozione per mantenere il sistema funzionante e completamente stabile.

Per Debian GNU/Linux, questo si riferisce agli strumenti apt, apt-get, aptitude, apt-cache, apt-depends, apt-rdepends, dpkg-deb e apt-mark.

Disponibilità di pacchetti software

Come già detto sopra, una distribuzione Linux è composta da tonnellate di diversi pacchetti software. Ad oggi il software è piuttosto complesso ed è per questo che è comune dividere il software in più pacchetti singoli. Questi pacchetti possono essere classificati per funzionalità o per ruolo come pacchetti binari, librerie, documentazione, esempi di utilizzo e raccolte specifiche della lingua e forniscono solo una parte selezionata del software. Non c'è una regola fissa per questo e la divisione viene fatta dal team di sviluppo di uno strumento o dal manutentore del pacchetto che si occupa del pacchetto software per la tua distribuzione Linux. Usando aptitude, la Figura 1 elenca i pacchetti che contengono le traduzioni per le diverse lingue per il browser web Mozilla Firefox.

Figura 1: aptitude-firefox.png

Questo modo di lavorare rende possibile che ogni pacchetto possa essere mantenuto da uno sviluppatore diverso o da un intero team. Inoltre, la suddivisione in singoli componenti permette ad altri pacchetti software di farne uso anche per i propri scopi. Una funzionalità richiesta può essere applicata e non ha bisogno di essere reinventata.

Organizzazione del pacchetto

Gli strumenti di gestione dei pacchetti sulla distribuzione Debian GNU/Linux si preoccupano costantemente che le dipendenze dei pacchetti installati siano completamente soddisfatte. Questo è particolarmente vero se un pacchetto software deve essere installato, aggiornato o cancellato sul o dal tuo sistema. I pacchetti mancanti vengono aggiunti al sistema o i pacchetti installati vengono rimossi dal sistema nel caso in cui non siano più necessari. La Figura 2 lo dimostra per la rimozione del pacchetto 'mc-data' utilizzando 'apt-get'. Il pacchetto 'mc-data' consiglia di rimuovere automaticamente anche il pacchetto 'mc', perché non ha più senso essere installato senza 'mc-data'.

Figura 2: apt-get-remove-mc.png

Contrassegni e bandiere sui pacchi

Durante il suo lavoro gli strumenti di gestione dei pacchetti rispettano i flag e i contrassegni del pacchetto impostati. Vengono impostati automaticamente o impostati manualmente dall'amministratore di sistema. In particolare questo comportamento si riferisce al flag 'pacchetto essenziale' che è impostato per i pacchetti che non devono essere rimossi. Prima di farlo viene emesso un chiaro avvertimento (vedi Figura 3).

Figura 3: apt-get-remove.png

Inoltre, vengono presi in considerazione i tre segni "automatico", "manuale" e "mantieni". Contrassegnano un pacchetto come installato automaticamente, installato manualmente o non deve essere aggiornato (mantieni la versione corrente). Un pacchetto software è contrassegnato come "automatico" o "manuale", ma non entrambi not.

Tra gli altri, il comando 'apt-mark' gestisce i marker e i flag utilizzando i seguenti sottocomandi:

Per elencare tutti i pacchetti installati manualmente impartire questo comando:

$ apt-mark showmanual
abiword
abs-guida
ack-grep
acl
acpi

$

Per mantenere una versione del pacchetto utilizzare il sottocomando 'hold'. L'esempio seguente mostra questo per il pacchetto 'mc'.

# apt-mark hold mc
mc messo in attesa
#

Il sottocomando 'showhold' elenca i pacchetti in attesa (nel nostro caso è solo il pacchetto 'mc'):

# apt-mark showhold
mc
#

Utilizzando un metodo alternativo chiamato 'apt pinning', i pacchetti sono classificati per priorità. Apt li applica per decidere come gestire questo pacchetto software e le versioni disponibili dal repository software.

Descrizione del pacchetto

Utilizzando un metodo alternativo chiamato 'apt pinning', i pacchetti sono classificati per priorità. Apt li applica per decidere come gestire questo pacchetto software e le versioni disponibili dal repository software.

Ogni pacchetto software viene fornito con la propria descrizione del pacchetto standardizzata. Tra gli altri campi questa descrizione specifica esplicitamente da quali ulteriori pacchetti dipende it. Gli strumenti specifici per la distribuzione estraggono queste informazioni dalla descrizione del pacchetto e calcolano e visualizzano le dipendenze per te, quindi. Il prossimo esempio usa il comando 'apt-cache show' per visualizzare la descrizione del pacchetto 'poppler-utils' (vedi Figura 4).

Figura 4: pacchetto-descrizione-poppler-utils.png

La descrizione del pacchetto contiene una sezione chiamata "Dipende". Questa sezione elenca gli altri pacchetti software più il numero di versione da cui dipende il pacchetto corrente. Nella Figura 4 questa sezione è incorniciata in rosso e mostra che 'poppler-utils' dipende dai pacchetti 'libpoppler64', 'libc6', 'libcairo2', 'libfreetype6', 'liblcms2-2', 'libstdc++6' e 'zlib1g'.

Mostra le dipendenze del pacchetto

Leggere la descrizione del pacchetto è il modo più difficile per capire le dipendenze del pacchetto. Successivamente, ti mostreremo come semplificare questo.

Esistono diversi modi per mostrare le dipendenze del pacchetto sulla riga di comando. Per un pacchetto deb come file locale, usa il comando 'dpkg-deb' con due parametri: il nome del file del pacchetto e la parola chiave 'Depends'. L'esempio seguente lo dimostra per il pacchetto "skypeforlinux-64".deb':

$ dpkg-deb -f Download/skypeforlinux-64.deb Dipende
gconf-service, libasound2 (>= 1.0.16), libatk1.0-0 (>= 1.12.4), libc6 (>= 2.17),
libcairo2 (>= 1.2.4), libcups2 (>= 1.4.0), libexpat1 (>= 2.0.1),
libfreetype6 (>= 2.4.2), libgcc1 (>= 1:4.1.1), libgconf-2-4 (>= 3.2.5),
libgdk-pixbuf2.0-0 (>= 2.22.0), libglib2.0-0 (>= 2.31.8), libgtk2.0-0 (>= 2.24.0),
libnspr4 (>= 2:4.9-2~), libnss3 (>= 2:3.13.4-2~), libpango-1.0-0 (>= 1.14.0),
libpangocairo-1.0-0 (>= 1.14.0), libsecret-1-0 (>= 0.7), libv4l-0 (>= 0.5.0),
libx11-6 (>= 2:1.4.99.1), libx11-xcb1, libxcb1 (>= 1.6), libxcomposite1 (>= 1:0.3-1),
libxcursor1 (>> 1.1.2), libxdamage1 (>= 1:1.1), libxext6, libxfixes3,
libxi6 (>= 2:1.2.99.4), libxrandr2 (>= 2:1.2.99.3), libxrender1, libxss1,
libxtst6, apt-transport-https, libfontconfig1 (>= 2.11.0), libdbus-1-3 (>= 1.6.18),
libstdc++6 (>= 4.8.1)
$

Per fare lo stesso con un pacchetto installato usa 'apt-cache'. Il primo esempio combina il sottocomando 'show' seguito dal nome del pacchetto. L'output viene inviato al comando 'grep' che filtra la riga 'Depends':

$ apt-cache mostra xpdf | grep Dipende
Dipende: libc6 (>= 2.4), libgcc1 (>= 1:4.1.1), libpoppler46 (>= 0.26.2),
libstdc++6 (>= 4.1.1), libx11-6, libxm4 (>= 2.3.4), libxt6
$

Il comando 'grep-status -F package -s Depends xpdf' riporterà le stesse informazioni.

Più specifico, il secondo esempio usa ancora 'apt-cache' ma con il sottocomando 'dipende', invece. Il sottocomando è seguito dal nome del pacchetto:

$ apt-cache dipende da xpdf
xpdf
Dipende: libc6
Dipende: libgcc1
Dipende: libpoppler46
Dipende: libstdc++6
Dipende: libx11-6
Dipende: libxm4
Dipende: libxt6
Raccomanda: poppler-utils
poppler-utils:i386
Raccomanda: poppler-data
Raccomanda: gsfonts-x11
Raccomanda: cups-bsd
cups-bsd:i386
Si scontra con:
Si scontra con:
Si scontra con:
Si scontra con:
Sostituisce:
Sostituisce:
Sostituisce:
Sostituisce:
Si scontra con: xpdf:i386
$

L'elenco sopra è piuttosto lungo e può essere abbreviato utilizzando l'interruttore '-i' (abbreviazione di '-important'):

$ apt-cache dipende -i xpdf
xpdf
Dipende: libc6
Dipende: libgcc1
Dipende: libpoppler46
Dipende: libstdc++6
Dipende: libx11-6
Dipende: libxm4
Dipende: libxt6
$

Il comando 'apt-rdepends' fa lo stesso ma con le informazioni sulla versione se specificato nella descrizione:

$ apt-rdipende da xpdf
Lettura degli elenchi dei pacchetti... Fatto
Costruzione dell'albero delle dipendenze
Lettura delle informazioni sullo stato... Fatto
xpdf
Dipende: libc6 (>= 2.4)
Dipende: libgcc1 (>= 1:4.1.1)
Dipende: libpoppler46 (>= 0.26.2)
Dipende: libstdc++6 (>= 4.1.1)
Dipende: libx11-6
Dipende: libxm4 (>= 2.3.4)
Dipende: libxt6
libc6
Dipende: libgcc1

$

Il comando 'aptitude' funziona anche con gli switch. Per le dipendenze, usa lo switch '~R' seguito dal nome del pacchetto. La Figura 5 mostra questo per il pacchetto 'xpdf'. La lettera 'A' nella seconda colonna dell'output di 'aptitude' identifica il pacchetto come installato automaticamente.

Figura 5: attitudine-rdipende.png

Le dipendenze dei pacchetti possono essere un po' complicate. Potrebbe essere utile mostrare graficamente le dipendenze dei pacchetti. Utilizzare il comando 'debtree' seguito dal nome del pacchetto per creare una rappresentazione grafica delle dipendenze del pacchetto. Lo strumento "punto" del pacchetto Graphviz trasforma la descrizione in un'immagine come segue:

$ debitore xpdf | punto -Tpng > grafico.png

Nella Figura 6 si vede l'immagine PNG creata che contiene il grafico delle dipendenze.

Figura 6: punto.png

Mostra le dipendenze inverse

Fino ad ora abbiamo mostrato di aver risposto alla domanda quali pacchetti sono necessari per un pacchetto. C'è anche il contrario: le cosiddette dipendenze inverse. I prossimi esempi trattano del pacchetto così come dei pacchetti che dipendono da esso. L'esempio numero uno usa 'apt-cache' con il sottocomando 'rdepends' come segue:

$ apt-cache dipende da xpdf
xpdf
Dipende dall'inverso:
|ottava-doc
xpdf:i386
libfontconfig1:i386
|xmds-doc
xfe
wiipdf
|vim-latexsuite
pitone-scapysca
| rubino-tioga
|python-tables-doc
|page-crunch
|ottava-doc
|muttprint-manuale
mozplugger
mlpost
libmlpost-ocaml-dev

$

I pacchi che dipendono da altri pacchi sono contrassegnati con un simbolo di pipa. Questi pacchetti non devono essere installati sul tuo sistema ma devono essere elencati nel database dei pacchetti.

Il prossimo esempio usa 'aptitude' per elencare i pacchetti che hanno un riferimento reale al pacchetto 'xpdf' (vedi Figura 7).

Figura 7: ricerca attitudinale.png

Convalida l'installazione per i pacchetti mancanti

'Apt-get' offre il sottocomando 'check' che permette di convalidare l'installazione. Se vedi il seguente output non mancano i pacchetti:

# apt-get check
Lettura degli elenchi dei pacchetti... Fatto
Costruzione dell'albero delle dipendenze
Lettura delle informazioni sullo stato... Fatto
#

Conclusione

Trovare le dipendenze dei pacchetti funziona bene con gli strumenti giusti. Usarli correttamente ti aiuta a capire perché i pacchetti sono installati e quali potrebbero mancare.

Link e riferimenti

Recensione del mouse wireless Microsoft Sculpt Touch
Ho letto di recente del Microsoft Scolpisci il tocco mouse wireless e ho deciso di acquistarlo. Dopo averlo usato per un po', ho deciso di condividere...
Trackpad e puntatore del mouse su schermo AppyMouse per tablet Windows
Gli utenti di tablet spesso mancano il puntatore del mouse, soprattutto quando sono abituati a usare i laptop laptop. Gli smartphone e i tablet touchs...
Il pulsante centrale del mouse non funziona in Windows 10
Il tasto centrale del mouse ti aiuta a scorrere lunghe pagine web e schermate con molti dati. Se si ferma, finirai per usare la tastiera per lo scorri...