Dipendenze del pacchetto Debian

Dipendenze del pacchetto Debian
Per distribuzioni Linux come Debian GNU/Linux, esistono più di 60.000 diversi pacchetti software. Tutti hanno un ruolo specifico. In questo articolo spieghiamo in che modo la gestione dei pacchetti gestisce in modo affidabile questo numero enorme 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-dipende, APT-Rdipends, DPKG-DEB e APT-Mark.

Disponibilità di pacchetti software

Come già detto sopra, una distribuzione Linux è costituita da tonnellate di diversi pacchetti software. A partire da oggi il software è piuttosto complesso, ed è per questo che è comune dividere il software in diversi pacchetti singoli. Questi pacchetti possono essere classificati per funzionalità o per ruolo come pacchetti binari, librerie, documentazione, esempi di utilizzo e raccolte specifiche per la lingua e fornire solo una parte selezionata del software. Non esiste una regola fissa per questo e la divisione è fatta dal team di sviluppo di uno strumento o dal manutentore del pacchetto che si occupa del pacchetto software per la distribuzione di Linux. Usando l'attitudine, la Figura 1 elenca i pacchetti che contengono le traduzioni per le diverse lingue per il Webbrowser Mozilla Firefox.

Figura 1: Attitude-Firefox.png

Questo modo di lavorare rende possibile che ogni pacchetto possa essere mantenuto da uno sviluppatore diverso o come un intero team. Inoltre, la divisione in singoli componenti consente ad altri pacchetti software di utilizzarla anche per i propri scopi. È possibile applicare una funzionalità richiesta e non è necessario reinventare.

Organizzazione del pacchetto

Gli strumenti di gestione dei pacchetti sulla distribuzione di Debian GNU/Linux si prendono costantemente cura che le dipendenze dei pacchetti installati siano completamente soddisfatti. Questo è particolarmente vero se un pacchetto software è pensato per essere installato, aggiornato o eliminato sul tuo sistema. I pacchetti mancanti vengono aggiunti al sistema o i pacchetti installati vengono rimossi dal sistema nel caso in cui non siano più richiesti. La Figura 2 lo dimostra per la rimozione del pacchetto "MC-DATA" usando "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

Marchi e bandiere del pacchetto

Durante il suo lavoro gli strumenti di gestione dei pacchetti rispettano i flag e i segni del pacchetto che sono impostati. Sono impostati automaticamente o impostati manualmente dall'amministratore di sistema. Soprattutto questo comportamento si riferisce al "pacchetto essenziale" della bandiera impostato per i pacchetti che non dovrebbero essere rimossi. Viene emesso un chiaro avviso prima di farlo (vedi Figura 3).

Figura 3: Apt-get-REMOVE.png

Inoltre, sono presi in considerazione i tre segni "automatici", "manuale" e "hold". Segnano un pacchetto come installato automaticamente, installato manualmente o non devono essere aggiornati (tieni premuto la versione corrente). Un pacchetto software è contrassegnato "automatico" o "manuale" ma non entrambi.

Tra gli altri, il comando "Apt-Mark" gestisce i segni e le bandiere usando i seguenti sottocombi:

  • Auto: impostare un pacchetto come installato automaticamente
  • Hold: tieni premuto la versione corrente del pacchetto
  • Manuale: impostare un pacchetto come installato manualmente
  • Showauto: mostra i pacchetti installati automaticamente
  • Showmanual: mostra i pacchetti installati manualmente
  • Showhold: elenca i pacchetti in attesa
  • Unhold: rimuovi il flag Hold per il pacchetto dato

Per elencare tutti i pacchetti installati manualmente questo comando:

$ showmanual $-mark
Abiword
ABS-Guide
Ack-Grep
ACL
acpi
..
$

Per tenere una versione del pacchetto usa il sottocomando "Hold". L'esempio seguente mostra questo per il pacchetto "MC".

# Apt-Mark Hold MC
MC impostato in attesa
#

Il sottocomando "Showhold" elenca i pacchetti che sono in attesa (nel nostro caso è il pacchetto "MC", solo):

# Apt-Mark Showhold
MC
#

Utilizzando un metodo alternativo intitolato "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 intitolato "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 una descrizione del pacchetto standardizzata. Tra gli altri campi questa descrizione specifica esplicitamente su quali ulteriori pacchetti dipende. Strumenti specifici per la distribuzione Estrarre queste informazioni dalla descrizione del pacchetto e calcolare e visualizzare le dipendenze per te, quindi. L'esempio successivo utilizza il comando "Apt-Cache Show" per visualizzare la descrizione del pacchetto del pacchetto "Popler-Utils" (vedi Figura 4).

Figura 4: pacchetto-descrizione-popler-otils.png

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

Mostra le dipendenze del pacchetto

Leggere la descrizione del pacchetto è il modo difficile per capire le dipendenze del pacchetto. Successivamente, ti mostreremo come semplificarlo.

Esistono diversi modi per mostrare le dipendenze del pacchetto dalla riga di comando. Per un pacchetto Deb come file locale utilizzare il comando "dpkg -deb" con due parametri: il nome del file del pacchetto e la parola chiave "dipende". L'esempio seguente lo dimostra per il pacchetto 'SkypeForlinux-64.Deb ':

$ dpkg-deb -f downloads/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 per un pacchetto installato, utilizzare '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 "dipende":

$ APT-Cache Show 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 pack -s dipende xpdf' segnalerà le stesse informazioni.

Più specifico, il secondo esempio utilizza nuovamente "Apt-Cache" ma con il sottocomando "dipende", invece. Il sottocomando è seguito dal nome del pacchetto:

$ APT-Cache dipende XPDF
xpdf
Dipende: libc6
Dipende: libgcc1
Dipende: LibpOppler46
Dipende: libstdc ++ 6
Dipende: libx11-6
Dipende: libxm4
Dipende: libxt6
Consiglia: Popler-Utils
Popler-Utils: I386
Consiglia: Data Popler
Consiglia: GSFONTS-X11
Consiglia: Cups-BSD
Coppe-BSD: i386
Si scontra con:
Si scontra con:
Si scontra con:
Si scontra con:
Sostituisce:
Sostituisce:
Sostituisce:
Sostituisce:
Si scontrano con: xpdf: i386
$

L'elenco sopra è piuttosto lungo e può essere abbreviato usando lo switch "-i" (breve per '-importante'):

$ 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-Rdipends" fa lo stesso ma con le informazioni sulla versione se specificato nella descrizione:

$ apt-rdipends xpdf
Leggere gli elenchi dei pacchetti ... fatto
Costruire l'albero di dipendenza
Leggere le 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
..
$

Anche la "attitudine" del comando funziona con gli switch. Per le dipendenze, utilizzare lo switch '~ r' seguito dal nome del pacchetto. La Figura 5 mostra questo per il pacchetto 'XPDF'. La lettera "A" nella seconda colonna dell'uscita di "attitudine" identifica il pacchetto come installato automaticamente.

Figura 5: attitudini-Rdipends.png

Le dipendenze del pacchetto possono essere un po 'difficili. Può aiutare a mostrare graficamente le dipendenze del pacchetto. Utilizzare il comando "Debtree" seguito dal nome del pacchetto per creare una rappresentazione grafica delle dipendenze del pacchetto. Lo strumento 'Dot' dal pacchetto Graphviz trasforma la descrizione in un'immagine come segue:

$ debtree xpdf | dot -tpng> grafico.png

Nella Figura 6 si vede l'immagine PNG creata che contiene il grafico della dipendenza.

Figura 6: punto.png

Mostra le dipendenze inversa

Fino ad ora abbiamo visualizzato abbiamo risposto alla domanda quali pacchetti sono richiesti per un pacchetto. C'è anche il contrario - le cosiddette dipendenze inverse. I prossimi esempi riguardano il pacchetto e i pacchetti che dipendono da esso. L'esempio numero uno utilizza "Apt-Cache" con il sottocomando "Rdipends" come segue:

$ APT-Cache Rdipends XPDF
xpdf
Il contrario dipende:
| Octave-Doc
XPDF: i386
libfontconfig1: i386
| XMDS-Doc
xfe
Wiipdf
| Vim-LatexSuite
Python-Scapy
| Ruby-tioga
| Python-Tables-Doc
| Page-Crunch
| Octave-Doc
| Muttprint-manual
Mozplugger
mlpost
libmlpost-ocml-dev
..
$

Pacchetti, che dipendono da altri pacchetti sono contrassegnati con un simbolo del tubo. Questi pacchetti non devono essere installati sul sistema ma devono essere elencati nel database dei pacchetti.

L'esempio successivo utilizza "attitudine" per elencare i pacchetti che hanno un duro riferimento al pacchetto "xpdf" (vedi Figura 7).

Figura 7: Attitude-Search.png

Convalida l'installazione per i pacchetti mancanti

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

# Apt-get Check
Leggere gli elenchi dei pacchetti ... fatto
Costruire l'albero di dipendenza
Leggere le informazioni sullo stato ... fatto
#

Conclusione

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

Collegamenti e riferimenti

  • Axel Beckert, Frank Hofmann: Das Debian-Paketmanagement-Buch, https: // www.dpmb.org/