Come dire da quale repository Ubuntu o Debian arriva un pacchetto?


168

Su un sistema basato su Debian, incluso Ubuntu, come si può sapere da quale archivio verrà scaricato un pacchetto, senza iniziare effettivamente il download? aptitude showe apt-cache infomostrerà la sezione (ad es. metapacchetto, base, grafica), ma non il repository a cui appartiene un pacchetto (ad es. http://ppa.launchpad.net/mactel-support/ppa/ubuntu o http: // us .archive.ubuntu.com / ubuntu / ).

Quando si installa il pacchetto, durante il download appare il repository effettivo (viene stampato nell'output "download from ..." da programmi apt e simili), ma come si possono ottenere informazioni sul repository contenente il pacchetto (o uno specifico versione di un pacchetto) senza scaricarlo e installarlo prima?

Inoltre, come si può determinare il repository di origine per un pacchetto che è già installato?


1
trovo questa una delle carenze di Apt; non è facile dire da quale repository fornisce un determinato pacchetto all'interno degli strumenti di installazione dei pacchetti.
Quack Quixote

Risposte:


203

Corro 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

Ciò significa che ci sono tre wajigpacchetti:

  • Uno installato ( /var/lib/dpkg/status)

  • Uno disponibile da un repository locale ( file:/home/wena/.repo_bin/)

  • Uno disponibile da un repository remoto ( ftp://ftp.is.co.za/debian), che ha anche la stessa versione ( 2.0.47 ) di quello in un repository locale


Inoltre, apt-cache madison <package name>verranno visualizzate informazioni simili in un formato tabulare.

 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

Ma non mostra da dove proviene il pacchetto installato, vero?
Adobe,

2
@Adobe Nel mio caso, la 2.1versione non è disponibile da nessun repository. È costruito localmente.
Tshepang,

2
Che cos'è il segno del pacchetto installato? ***o /var/lib/dpkg/status?
SuB,

Forse entrambi? Non sono sicuro.
Tshepang,

Quando il pacchetto non è installato, apt-cache policydice: Installed: (none).
John McGehee,

28

Aha! Apparentemente, il aptcomando corretto non è apt-cache info, ma invece 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: 

La File:riga fornisce le informazioni sul repository dopo il /var/lib/apt/lists/.

Esiste una segnalazione di bug che aptitudenon può visualizzare il repository di origine , ma al momento sembra che la funzione sia ancora nella lista dei desideri.


Quella caratteristica attitudinale è ancora sulla lista bianca 8 anni dopo e non so perché questa risposta ( apt-cache showpkg) non sia contrassegnata come corretta.
Csaba Toth,

8

Questo funziona per me (mostra dove si trova il pacchetto 2vcard):

$ 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

È possibile applicare un filtro aggiuntivo per verificare le versioni, ecc., Se sono disponibili più versioni.


Pragmatico. Sono sorpreso che queste informazioni non siano accessibili attraverso nessuno dei front-end dpkg, però.
gotgenes,


8

Mi chiedo perché nessuno ne abbia parlato aptitude. Io lo uso per tutto il tempo.

L'attitudine è:

  • fornito di default con molte distribuzioni basate su Debian. Può essere installato su altri (come Ubuntu) tramitesudo apt install aptitude
  • non richiede privilegi di amministratore (almeno per il comando seguente)
  • ha una bella ncursesinterfaccia grafica (ma la maggior parte del tempo usata senza di essa)
  • fornisce un risultato davvero carino. Per mostrare le versioni dei pacchetti, utilizzare il aptitude versionscomando:

    me@wheezy:~$ aptitude versions kde-standard
    Package kde-standard:                        
    i A 5:77+deb7u1     stable              500
    p A 5:84            testing,unstable    130
    
  • non ha Super Cow Cower

La lettera davanti a ogni stringa indica lo stato del pacchetto, i è installato e p viene eliminato (o mai installato), stable , testing e unstable sono definizioni di repository, il numero alla fine è una priorità pin .

Un avvertimento sulle recenti versioni di aptitude merita di essere menzionato qui: per impostazione predefinita mostra tutti i pacchetti, che includono il nome che cerchi, quindi usa un po 'di regex magic per cercare con il nome rigoroso, ad esempio aptitude versions ^kde-workspace$.


1
Bel comando ma non elenca il repository come richiesto.
Bjhend,

In realtà lo fa .
TranslucentCloud

Tu non capisci PPA aggiuntivi possono essere installati. È importante sapere se un pacchetto proviene da tale PPA. È un dato di fatto, è quello che sto cercando di capire in questo momento - se lo è, posso rimuovere il PPA, riducendo il rischio di problemi.
reinierpost,

Sì, hai ragione, con versionspuoi semplicemente controllare i valori di pin di apt dei pacchetti indicati, non i repository associati. È comunque utile se conosci tutti i tuoi repository e come sono bloccati.
TranslucentCloud

6

Purtroppo, queste informazioni non vengono registrate durante l'installazione del pacchetto. Puoi fare un'ipotesi decente se il repository è ancora nell'elenco dei sorgenti e il repository ha ancora il pacchetto:

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

apt-cache showpkg sta mostrando i dati dal database del repository (non ciò che è installato), quindi è un'altra forma delle stesse informazioni dal grep.

Perfino Synaptic non può dire (nella schermata Origin) se disabiliti il ​​repository e aggiorni.


2

Oppure, ispirato a Sunny, puoi provare:

# 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. non preciso al 100%.

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.