Jak mogę sprawdzić listę zależności dla pakietu deb


93

Jak mogę sprawdzić listę zależności dla pakietu deb. Używam Ubuntu 11.10 i wykonałem kopię zapasową wszystkich pakietów deb z var/cache/apt/archives. Chcę sformatować komputer i ponownie zainstalować tylko wybrane aplikacje. W jaki sposób mogę uzyskać listę zainstalowanych pakietów i zależności.


Drugie pytanie znajduje się na askubuntu.com/questions/17823/...
htorque,

Aby zobaczyć pełną listę zainstalowanych pakietów, użyjdpkg --get-selections | sed -n 's/[[:space:]]install$//p'
Tino

Odpowiedzi:


72

Oprócz dpkgmetody możesz sprawdzić zależności pakietów w repozytorium:

apt-cache depends package-name

EDYCJA Zaktualizowano zgodnie z zaleceniem @ Tino. @ Komentarz Tigrana nie ma już zastosowania.


3
Uwaga: działa to tylko wtedy, gdy pakiet jest już zainstalowany.
Tigran Saluev

@TigranSaluev Uwaga: dpkg -I packagedziała tylko w przypadku zainstalowanych pakietów. apt-cachedziała dla wszystkich pakietów, które są znane po zakończeniu apt-get update.
Tino

1
apt-cache depends packagejest lepszym sposobem, w takim przypadku, ponieważ showpkgnie mówi, czy zależność jest zaleceniem, konfliktem itp., więc jest to nieco zagadkowe. Skrypt dependspołączony z showpkgpatrz unix.stackexchange.com/a/362866/23450
Tino

100

Spowoduje to wyświetlenie wszystkich informacji o pakiecie:

dpkg -I package.deb

To już nie działa na 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

@ CraigS.Anderson Uruchamianie 14.04 tutaj i działa idealnie w moim przypadku. Powinna być zaakceptowana odpowiedź IMHO.
magic_al

Nie zapomnij wstawić /var/cache/apt/archives/przed nazwą pakietu i użyć klawisza uzupełniania, aby znaleźć pełną nazwę pakietu wraz z wersją, np dpkg -I /var/cache/apt/archives/elasticsearch_2.4.4_all.deb.
Jason R. Coombs

1
Nie widzę żadnych informacji o zależnościach
Nick

Możesz dodać, że pakiet można uzyskać bez (ponownego) instalowania go (co jest prawdopodobnie popularnym przypadkiem użycia) sudo apt-get install --reinstall --download-only [package name].
Karl Richter,

2

apt-cache depends [Package-Name]będzie również działać. Chociaż jeśli .debpakiet źródłowy pochodzi spoza listy źródeł, rzeczy takie jak apt-cache showpkg [Package-Name] && apt-cache depends [Package-Name]mogą wyświetlać nieaktualne informacje lub mogą nie być zsynchronizowane z faktycznie zainstalowanym pakietem, dlatego dpkg -I [Package-Name]w takim przypadku najlepiej by działały.


2

W przypadku wersji 14.04 i nowszych:

dpkgjuż go nie ma -Ii musisz użyć, dpkg-debaby wyświetlić informacje o pakiecie, w tym zależności:

dpkg-deb -I package.deb

1
Cześć Fabby, dpkg nie ma obecnie opcji -I. Testowane na Ubuntu 12.04 i 16.04. Zamiast tego musisz użyć dpkg-deb.
Rup Narayan

Komentarz wycofany; odpowiedź wyjaśniona i przegłosowana
Fabby

0

Oto trochę niechlujny i prawdopodobnie niezbyt obejmujący post-processing, który możesz zrobić, dpkg -Iaby uzyskać elementy zależności w postaci listy:

Skondensowane dla komputerów

# 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(',')])"
#

Rozszerzony dla ludzi:

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(',')
    ])
"

Spowoduje to wyświetlenie echa pakietów zależnych od „foo.deb”, które nie zostały jeszcze zainstalowane: dpkg -I foo.deb | dla i w $ (awk -F ',' '/ Depends: / {gsub (/: /, ","); dla (i = 2; i <= NF; i ++) {gsub (/. * $ /, "", $ (i)); printf ("% s \ n", $ (i));}} '); do dpkg -s $ i &> / dev / null || echo $ i; zrobione | tr '\ n' ''
Gregory Burd

@GregoryBurd, Nie krępuj się edytować moją odpowiedź / psot, jak chcesz, dlatego opublikowałem ją jako wiki społeczności z tego powodu ^ u ^
ThorSummoner

Kiedy uruchamiam to polecenie przy wyszukiwaniu elastycznym, emituje ono libc6\nadduser\n Installed-Size\n. Oznacza to, że wydaje się pasować nie tylko do linii Depends.
Jason R. Coombs

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.