Frage Wie kann ich 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 wird das zeigen Sektion (z. B. Metapaket, Basis, Grafiken), aber nicht die 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 erscheint das eigentliche Repository während des Downloads (es wird in der "Download from ..." - Ausgabe von apt und ähnlichen Programmen ausgedruckt), aber wie kann man Informationen über das Repository erhalten, das das Paket enthält (oder einen bestimmten Version eines Pakets) ohne zuerst herunterladen und installieren?

Wie kann man außerdem das Quell-Repository für ein bereits installiertes Paket bestimmen?


164
2018-02-09 19:14


Ursprung


Ich finde dies eine der Mängel von Apt; Es ist nicht einfach zu sagen, aus welchem ​​Repository ein bestimmtes Paket innerhalb der Paketinstallationstools bereitgestellt wird. - quack quixote


Antworten:


ich renne apt-cache policy <package name>:

$ 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 gibt wajig Pakete:

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

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

  • Eine, die von einem Remote-Repository verfügbar ist (ftp://ftp.is.co.za/debian), die auch die gleiche Version (2.0.47) als derjenige in einem lokalen Repository


Zusätzlich, apt-cache madison <package name> zeigt ä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

202
2018-01-22 22:00



Aber es zeigt nicht, wo das installierte Paket herkommt, oder? - Adobe
@Adobe In meinem Fall, der 2.1 Version ist von keinem Repository verfügbar. Es ist lokal gebaut. - Tshepang
Was ist ein Zeichen für ein installiertes Paket? *** oder /var/lib/dpkg/status ? - SuB
Vielleicht beide? Nicht sicher. - Tshepang
Wenn das Paket nicht installiert ist, apt-cache policy sagt: Installed: (none). - John McGehee


Aha! Anscheinend das Richtige apt Befehl ist nicht apt-cache info, aber stattdessen, 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: 

Das File: Zeile stellt die Repository-Informationen nach dem /var/lib/apt/lists/.

Es gibt ein Fehlerbericht, dass aptitude kann das Quell-Repository nicht anzeigen, aber es scheint derzeit das Feature ist immer noch auf der Wunschliste.


27
2018-02-10 00:57



Dieses Fähigkeitsmerkmal ist noch 8 Jahre später auf Whistlist und ich weiß nicht, warum diese Antwort (apt-cache showpkg) ist nicht als richtig markiert. - Csaba Toth


Dies funktioniert für mich (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 prüfen, wenn mehrere Versionen verfügbar sind.


8
2018-02-09 19:41



Pragmatisch. Ich bin überrascht, dass diese Informationen nicht über die Frontends zugänglich sind dpkgobwohl. - gotgenes
@got Es ist verfügbar: superuser.com/questions/106794/ ... - Tshepang


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

Eignung ist:

  • standardmäßig mit vielen Debian-basierten Distributionen ausgeliefert. Kann auf andere (wie Ubuntu) via installiert werden sudo apt install aptitude
  • benötigt keine Administratorrechte (zumindest für den folgenden Befehl)
  • hat ein schönes ncurses GUI (aber die meiste Zeit ohne es verwendet)
  • bietet eine wirklich schöne Ausgabe. Um Versionen von Paketen anzuzeigen, verwenden Sie aptitude versions Befehl:

    me@wheezy:~$ 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, ich ist installiert und p wird gelöscht (oder nie installiert), stabil, testen und instabil sind Repository-Definitionen, die Zahl am Ende ist a Pin-Priorität.

Ein Vorbehalt bezüglich neuester Versionen von aptitude, die hier erwähnt werden sollten: Standardmäßig werden alle Pakete angezeigt, die den gesuchten Namen enthalten. Verwenden Sie daher a Regex mag ein wenig nach dem strengen Namen suchen aptitude versions ^kde-workspace$.


8
2018-01-12 11:32



Netter Befehl, aber das Repository wird nicht wie angefordert aufgelistet. - bjhend
Tatsächlich es tut. - TranslucentCloud
Du verstehst es nicht. Zusätzliche PPAs können installiert werden. Es ist wichtig zu wissen, ob ein Paket von einem solchen PPA stammt. In der Tat, das ist, was ich gerade versuche, herauszufinden - wenn es ist, kann ich die PPA entfernen, das Risiko von Problemen zu reduzieren. - reinierpost
Ja, du hast Recht, mit versions Sie können einfach die Apt-Pinning-Werte der angegebenen Pakete überprüfen, nicht die zugehörigen Repos. Es ist jedoch immer noch nützlich, wenn Sie alle Ihre Repos kennen und wissen, wie sie fixiert sind. - TranslucentCloud


Leider werden diese Informationen während der Paketinstallation nicht aufgezeichnet. Sie können eine vernünftige Schätzung machen, wenn sich das Repository noch in der Quellenliste befindet und das Repository noch das Paket enthält:

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

apt-cache showpkgzeigt Daten aus der Repository-Datenbank (nicht was installiert ist), es ist also eine andere Form der gleichen Informationen aus dem Grep.

Selbst Synaptic kann (im Origin-Bildschirm) nicht feststellen, ob Sie das Repository deaktivieren und aktualisieren.


6
2017-10-20 21:42





Oder, inspiriert von Sunny, können Sie versuchen:

# 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
2018-01-22 15:55