webentwicklung-frage-antwort-db.com.de

Wie kann man feststellen, aus welchem ​​Ubuntu oder Debian-Repository ein Paket stammt?

Wie kann man auf einem Debian-basierten System, einschließlich Ubuntu, feststellen, aus welchem ​​Repository ein Paket heruntergeladen wird, ohne den Download tatsächlich zu starten? aptitude show und apt-cache info zeigen das Abschnitt (z. B. Metapaket, Basis, Grafiken), aber nicht das Repository, zu dem ein Paket gehört (z. B. http: //ppa.launchpad) .net/mactel-support/ppa/ubuntu oder http://us.archive.ubuntu.com/ubuntu/ ).

Bei der Installation des Pakets wird das tatsächliche Repository während des Downloads angezeigt (es wird in der Ausgabe "Herunterladen von ..." von apt und ähnlichen Programmen ausgedruckt). Wie kann man jedoch Informationen über das Repository erhalten, das das Paket enthält (oder ein bestimmtes Repository)? Version eines Pakets) ohne zuerst herunterladen und installieren?

Wie kann das Quellrepository für ein bereits installiertes Paket ermittelt werden?

166
gotgenes

Ich führe apt-cache policy <package name> aus:

$ apt-cache policy wajig
wajig:
  Installed: 2.1
  Candidate: 2.1
  Version table:
 *** 2.1 0
        100 /var/lib/dpkg/status
     2.0.47 0
        500 file:/home/wena/.repo_bin/ squeeze/main i386 Packages
        500 ftp://ftp.is.co.za/debian/ squeeze/main i386 Packages

Das bedeutet, dass es drei wajig Pakete gibt:

  • Eine, die installiert ist (/var/lib/dpkg/status)

  • Eine, die in einem lokalen Repository verfügbar ist (file:/home/wena/.repo_bin/)

  • Eine, die in einem Remote-Repository (ftp://ftp.is.co.za/debian) verfügbar ist, das zufällig auch die gleiche Version ( 2.0.47 ) hat wie die Version in einem lokalen Repository


Darüber hinaus zeigt apt-cache madison <package name> ähnliche Informationen in einem Tabellenformat an.

 wajig |        2.2 | mirror://mirrors.ubuntu.com/mirrors.txt/ precise/universe AMD64 Packages
 wajig |        2.2 | mirror://mirrors.ubuntu.com/mirrors.txt/ precise/universe Sources
201
Tshepang

Aha! Anscheinend ist der richtige apt-Befehl nicht apt-cache info, sondern apt-cache showpkg.

$ apt-cache showpkg linux-generic
Package: linux-generic
Versions: 
2.6.31.19.32 (/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic-updates_main_binary-AMD64_Packages) (/var/lib/apt/lists/security.ubuntu.com_ubuntu_dists_karmic-security_main_binary-AMD64_Packages) (/var/lib/dpkg/status)
 Description Language: 
                 File: /var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic-updates_main_binary-AMD64_Packages
                  MD5: 5d722da329763b9342d322f5a140005c

2.6.31.14.27 (/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic_main_binary-AMD64_Packages)
 Description Language: 
                 File: /var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic_main_binary-AMD64_Packages
                  MD5: 5d722da329763b9342d322f5a140005c


Reverse Depends: 
Dependencies: 
2.6.31.19.32 - linux-image-generic (5 2.6.31.19.32) 
2.6.31.14.27 - linux-image-generic (5 2.6.31.14.27) 
Provides: 
2.6.31.19.32 - 
2.6.31.14.27 - 
Reverse Provides: 

Die Zeile File: enthält die Repository-Informationen nach dem /var/lib/apt/lists/.

Es gibt einen Fehlerbericht, dass aptitude das Quell-Repository nicht anzeigen kann , aber es scheint, dass die Funktion derzeit noch auf der Wunschliste steht.

28
gotgenes

Das funktioniert bei mir (zeigt wo das 2vcard Paket ist):

$ grep 2vcard /var/lib/apt/lists/* | grep "Filename:"

/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic_universe_binary-i386_Packages:Filename: pool/universe/2/2vcard/2vcard_0.5-3_all.deb

Sie können zusätzliche Filter anwenden, um Versionen usw. zu überprüfen, wenn mehrere Versionen verfügbar sind.

8
Sunny

Ich frage mich, warum niemand aptitude erwähnt hat. Ich benutze es die ganze Zeit.

Eignung ist:

  • wird standardmäßig mit vielen Debian-basierten Distributionen ausgeliefert. Kann über Sudo apt install aptitude auf andere (wie Ubuntu) installiert werden
  • erfordert keine Administratorrechte (zumindest für den folgenden Befehl)
  • hat eine nette ncurses GUI (wird aber meistens ohne verwendet)
  • liefert eine wirklich hübsche Ausgabe. Verwenden Sie zum Anzeigen von Paketversionen den Befehl aptitude versions:

    [email protected]:~$ aptitude versions kde-standard
    Package kde-standard:                        
    i A 5:77+deb7u1     stable              500
    p A 5:84            testing,unstable    130
    
  • hat keine Super Cow Powers

Der Buchstabe vor jeder Zeichenfolge gibt den Status des Pakets an. i ist installiert und p ist gelöscht (oder nie installiert), stabil, Test und instabil sind Repository-Definitionen, die Zahl am Ende ist eine PIN-Priorität .

Eine Einschränkung in Bezug auf neuere Versionen von aptitude, die hier erwähnt werden sollte: Standardmäßig werden alle Pakete angezeigt, die den von Ihnen gesuchten Namen enthalten. Verwenden Sie also ein wenig regex magic, um nach dem strengen Namen zu suchen, beispielsweise aptitude versions ^kde-workspace$.

8

Leider werden diese Informationen während der Paketinstallation nicht aufgezeichnet. Sie können eine Vermutung anstellen, ob sich das Repository noch in der Quellliste befindet und das Repository noch das Paket enthält:

grep -l PKG /var/lib/apt/lists/*

apt-cache showpkg zeigt Daten aus der Repository-Datenbank an (nicht die installierte), sodass es sich um eine andere Form der gleichen Informationen aus grep handelt.

Sogar Synaptic kann (im Origin-Bildschirm) nicht erkennen, ob Sie das Repository und das Update deaktivieren.

6
kanaka

Oder, inspiriert von Sunny, probieren Sie:

# list installed restricted packages
for i in `dpkg --get-selections | awk '{ print $1 }'`; do egrep -lRI "^Filename: .*/${i}_[^/]+.deb" /var/lib/apt/lists/ | grep -q 'restricted' && echo $i; done

# list installed multiverse packages
for i in `dpkg --get-selections | awk '{ print $1 }'`; do egrep -lRI "^Filename: .*/${i}_[^/]+.deb" /var/lib/apt/lists/ | grep -q 'multiverse' && echo $i; done

ps. nicht 100% genau.

2
Tim