Come posso controllare l'elenco delle dipendenze per un pacchetto deb


94

Come posso controllare l'elenco delle dipendenze per un pacchetto deb. Sto eseguendo Ubuntu 11.10 e da cui ho eseguito il backup di tutti i pacchetti deb var/cache/apt/archives. Voglio formattare il mio PC e reinstallare solo le applicazioni selezionate. Inoltre, come posso ottenere l'elenco dei pacchetti e delle dipendenze installati.


Per la tua seconda domanda vedi askubuntu.com/questions/17823/…
htorque,

Per l'elenco completo dei pacchetti installati utilizzaredpkg --get-selections | sed -n 's/[[:space:]]install$//p'
Tino

Risposte:


73

Oltre al dpkgmetodo, è possibile verificare le dipendenze dei pacchetti nel repository:

apt-cache depends package-name

EDIT aggiornato con la raccomandazione di @ Tino. Il commento di Tigran non si applica più.


3
Nota: funziona solo se il pacchetto è già installato.
Tigran Saluev,

@TigranSaluev Nota che dpkg -I packagefunziona solo per i pacchetti installati. apt-cachefunziona per tutti i pacchetti che sono noti dopo averlo fatto apt-get update.
Tino,

1
apt-cache depends packageè un modo migliore, in quel caso, in quanto showpkgnon dice se una dipendenza è una raccomandazione, un conflitto ecc., quindi è un po 'sconcertante. Per uno script dependscombinato con showpkgvedi unix.stackexchange.com/a/362866/23450
Tino

100

Questo ti mostrerà tutte le informazioni sul pacchetto:

dpkg -I package.deb

Che non funziona più su Ubuntu 14.04:dpkg -I splunkforwarder-6.3.3-f44afce176d0-linux-2.6-amd64.deb new debian package, version 2.0. size 15881308 bytes: control archive=3104 bytes. 153 bytes, 5 lines control 6058 bytes, 207 lines * postinst #!/bin/bash 2912 bytes, 93 lines * preinst #!/bin/bash Package: splunkforwarder Version: 6.3.3 Maintainer: Splunk Inc. <info@splunk.com> Architecture: amd64 Description: Splunk The platform for machine data.
Craig S. Anderson l'

@ CraigS.Anderson In esecuzione 14.04 qui e funziona perfettamente nel mio caso. Dovrebbe essere la risposta accettata IMHO.
magic_al

Non dimenticare di mettere /var/cache/apt/archives/prima del nome del pacchetto e utilizzare il completamento della scheda per trovare il nome completo del pacchetto con la versione, ad es dpkg -I /var/cache/apt/archives/elasticsearch_2.4.4_all.deb.
Jason R. Coombs il

1
Non vedo alcuna informazione sulla dipendenza
Nick,

È possibile aggiungere che il pacchetto può essere ottenuto senza (ri) installarlo (che è probabilmente un caso d'uso popolare) con sudo apt-get install --reinstall --download-only [package name].
Karl Richter,

2

apt-cache depends [Package-Name]funzionerà pure. Sebbene se si estrae il .debpacchetto dall'esterno dell'elenco delle fonti, cose come apt-cache showpkg [Package-Name] && apt-cache depends [Package-Name]potrebbero mostrare informazioni obsolete o non sincronizzarsi con il pacchetto installato effettivo, quindi dpkg -I [Package-Name]funzionerebbe meglio in quel caso.


2

Per il 14.04 e successivi:

dpkgnon ce -In'è più e devi usare dpkg-debper mostrare le informazioni sul pacchetto comprese le dipendenze:

dpkg-deb -I package.deb

1
Ciao Fabby, dpkg non ha attualmente l'opzione -I. Testato su Ubuntu 12.04 e 16.04. Devi invece usare dpkg-deb.
Rup Narayan,

Commento ritirato; risposta chiarita e votata
Fabby il

0

Ecco alcuni post-processing sciatti e probabilmente non molto ampi che puoi fare per dpkg -Iprodurre in output per ottenere elementi di dipendenza come un elenco:

Condensato per computer

# dpkg -I package.deb | python -c "import sys, re; t=re.split(r'\n(?= ?[\w]+:)|:', sys.stdin.read()); print '\n'.join([i.strip() for i in {key.strip(): value.strip() for key, value in zip(t[::2], t[1::2])}['Depends'].split(',')])"
#

Espanso per l'uomo:

dpkg -I package.deb | python -c "
    import sys, re;
    # Split keys and values into pairs (zipped together later)
    t=re.split(
        r'\n(?= ?[\w]+:)|:', 
        sys.stdin.read()
    ); 
    # Newline separate each dependency
    print '\n'.join([
        # Trim each dependency value
        i.strip() for i in {
            # Build assoc array from package metadata
            key.strip(): value.strip() 
            for key, value in zip(t[::2], t[1::2])
        }['Depends'].split(',')
    ])
"

Questo farà eco ai pacchetti che dipendono da 'foo.deb' e devono ancora essere installati: dpkg -I foo.deb | per i in $ (awk -F ',' '/ Depends: / {gsub (/: /, ","); for (i = 2; i <= NF; i ++) {gsub (/. * $ /, "", $ (i)); printf ("% s \ n", $ (i));}} '); do dpkg -s $ i &> / dev / null || echo $ i; fatto | tr '\ n' ''
Gregory Burd,

@GregoryBurd, sentiti libero di modificare la mia risposta / psot tutto ciò che vuoi, l'ho pubblicato come wiki della comunità per questo motivo ^ u ^
ThorSummoner

Quando eseguo questo comando su elasticsearch, viene emesso libc6\nadduser\n Installed-Size\n. Cioè, sembra corrispondere più della semplice linea Depends.
Jason R. Coombs il

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.