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

168

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 showund apt-cache infozeigt den 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 es zuerst herunterzuladen und zu installieren?

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

gotgenes
quelle
1
Ich finde, dass dies einer der Mängel von Apt ist. Es ist einfach nicht leicht zu erkennen, aus welchem ​​Repository ein bestimmtes Paket in den Paketinstallations-Tools bereitgestellt wird.
Quack Quijote

Antworten:

203

Ich laufe 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 heißt, es gibt drei wajigPakete:

  • 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 ) wie die in einem lokalen Repository hat


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

 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
Tshepang
quelle
Aber es zeigt nicht, woher das installierte Paket kommt, oder?
Adobe
2
@Adobe In meinem Fall ist die 2.1Version in keinem Repository verfügbar. Es ist vor Ort gebaut.
Tshepang
2
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 policysagt: Installed: (none).
John McGehee
28

Aha! Anscheinend ist der richtige aptBefehl 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 File:Zeile enthält die Repository-Informationen nach dem /var/lib/apt/lists/.

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

gotgenes
quelle
Diese Funktion steht auch 8 Jahre später noch auf der Whislist und ich weiß nicht, warum diese Antwort ( apt-cache showpkg) nicht als die richtige markiert ist.
Csaba Toth
8

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.

Sonnig
quelle
Pragmatisch. Ich bin überrascht, dass diese Informationen über keines der Frontends zugänglich sind dpkg.
Gotgenes
@got Es ist erhältlich: superuser.com/questions/106794/...
tshepang
8

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

Eignung ist:

  • Wird standardmäßig mit vielen Debian-basierten Distributionen ausgeliefert. Kann über auf andere (wie Ubuntu) installiert werdensudo apt install aptitude
  • erfordert keine Administratorrechte (zumindest für den folgenden Befehl)
  • hat eine nette ncursesGUI (wird aber meistens ohne benutzt)
  • liefert eine wirklich hübsche Ausgabe. Verwenden Sie den folgenden aptitude versionsBefehl, um Versionen von Paketen anzuzeigen:

    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. I ist installiert und p ist gelöscht (oder nie installiert). Stable , testing und unstable sind Repository-Definitionen. Die Zahl am Ende hat 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 , um beispielsweise nach dem strengen Namen zu suchen aptitude versions ^kde-workspace$.

TranslucentCloud
quelle
1
Netter Befehl, aber das Repository wird nicht wie angefordert aufgelistet.
15.
Eigentlich tut es .
TranslucentCloud
Du verstehst nicht. Zusätzliche PPAs können installiert werden. Es ist wichtig zu wissen, ob ein Paket von einem solchen PPA stammt. Genau das versuche ich gerade herauszufinden - wenn ja, kann ich die PPA entfernen und so das Risiko von Problemen verringern.
reinierpost
Ja, Sie haben Recht, versionsSie können einfach die passenden Pinning-Werte der angegebenen Pakete überprüfen, nicht die zugehörigen Repos. Es ist dennoch nützlich, wenn Sie alle Ihre Repos kennen und wissen, wie sie festgehalten werden.
TranslucentCloud
6

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 dem grep handelt.

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

Kanaka
quelle
2

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.

Tim
quelle