Comment savoir à partir de quel référentiel Ubuntu ou Debian provient un paquet?

168

Sur un système basé sur Debian, y compris Ubuntu, comment peut-on savoir dans quel référentiel le paquet sera téléchargé, sans commencer le téléchargement? aptitude showet apt-cache infomontrera la section (par exemple, métapaquet, base, graphismes), mais pas le référentiel auquel un paquet appartient (par exemple, http://ppa.launchpad.net/mactel-support/ppa/ubuntu ou http: // us .archive.ubuntu.com / ubuntu / ).

Lors de l’installation du paquet, le référentiel actuel apparaît pendant le téléchargement (il est imprimé dans la sortie "download from ..." d’apt et de programmes similaires), mais comment obtenir des informations sur le référentiel contenant le paquet (ou un fichier spécifique)? version d'un package) sans l' avoir préalablement téléchargée et installée?

De plus, comment déterminer le référentiel source d'un package déjà installé?

Gotgenes
la source
1
Je trouve celui-ci des lacunes d'Apt; il est simplement difficile de déterminer à partir de quel référentiel fournit un certain package dans les outils d'installation de packages.
Quack Quichotte

Réponses:

203

Je cours 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

Cela signifie qu'il existe trois wajigpackages:

  • Celui qui est installé ( /var/lib/dpkg/status)

  • Celui qui est disponible à partir d'un référentiel local ( file:/home/wena/.repo_bin/)

  • Celui qui est disponible à partir d'un référentiel distant ( ftp://ftp.is.co.za/debian), qui possède également la même version ( 2.0.47 ) que celle d'un référentiel local


En outre, apt-cache madison <package name>affichera des informations similaires dans un format tabulaire.

 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
la source
Mais cela ne montre pas d'où vient le paquet installé, n'est-ce pas?
Adobe
2
@Adobe Dans mon cas, la 2.1version n'est disponible dans aucun référentiel. C'est construit localement.
Tshepang
2
Quel est le signe du paquet installé? ***ou /var/lib/dpkg/status?
SuB
Peut-être les deux? Pas certain.
Tshepang
Lorsque le package est pas installé, apt-cache policydit: Installed: (none).
John McGehee
28

Aha! Apparemment, la aptcommande appropriée n'est pas apt-cache info, mais au lieu de cela 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:ligne fournit les informations du référentiel après le /var/lib/apt/lists/.

Il existe un rapport de bogue qui aptitudene peut pas afficher le référentiel source , mais il semble actuellement que la fonctionnalité est toujours sur la liste de souhaits.

Gotgenes
la source
Cette fonctionnalité d'aptitude est toujours sur la liste blanche 8 ans plus tard et je ne sais pas pourquoi cette answer ( apt-cache showpkg) n'est pas marquée comme étant la bonne.
Csaba Toth
8

Cela fonctionne pour moi (indique où se trouve le paquet 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

Vous pouvez appliquer un filtrage supplémentaire pour vérifier les versions, etc., si plusieurs versions sont disponibles.

Ensoleillé
la source
Pragmatique. Je suis surpris que cette information ne soit accessible par aucun des côtés avant dpkg, cependant.
Gotgenes
@got Il est disponible: superuser.com/questions/106794/…
tshepang
8

Je me demande pourquoi personne n'a mentionné aptitude. Je l'utilise tout le temps.

L'aptitude est:

  • livré par défaut avec de nombreuses distributions basées sur Debian. Peut être installé sur d’autres (comme Ubuntu) viasudo apt install aptitude
  • ne nécessite pas de privilèges d'administrateur (au moins pour la commande ci-dessous)
  • a une belle ncursesinterface graphique (mais la plupart du temps utilisée sans elle)
  • fournit une très jolie sortie. Pour afficher les versions de packages, utilisez la aptitude versionscommande:

    me@wheezy:~$ aptitude versions kde-standard
    Package kde-standard:                        
    i A 5:77+deb7u1     stable              500
    p A 5:84            testing,unstable    130
    
  • n'a pas de super pouvoirs de vache

La lettre devant chaque chaîne indique l’état du paquet, i est installé et p est purgé (ou n’a jamais été installé), stable , testing et unstable sont des définitions de référentiel, le nombre final étant une priorité pin .

Une mise en garde concernant les versions récentes d’aptitude vaut la peine d’être mentionnée ici: par défaut, il affiche tous les paquets, y compris le nom que vous recherchez, utilisez donc un peu la magie des expressions rationnelles pour effectuer une recherche par nom strict, par exemple aptitude versions ^kde-workspace$.

Nuageux
la source
1
Belle commande mais elle ne répertorie pas le référentiel comme demandé.
bjhend
En fait c'est le cas .
TranslucentCloud
Tu ne comprends pas. Des PPA supplémentaires peuvent être installés. Il est important de savoir si un package provient d'un tel PPA. En fait, c’est ce que j’essaie de comprendre en ce moment. Si c’est le cas, je peux retirer le CAE, réduisant ainsi le risque de problèmes.
reinierpost
Oui, vous avez raison, versionsvous pouvez simplement vérifier les valeurs d’épinglage apt des paquets donnés, pas les dépôts associés. Cela reste utile si vous connaissez toutes vos pensions et leur mode d’épinglage.
TranslucentCloud
6

Malheureusement, ces informations ne sont pas enregistrées lors de l'installation du package. Vous pouvez deviner de manière décente si le référentiel est toujours dans la liste des sources et qu'il contient toujours le package:

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

apt-cache showpkg affiche les données de la base de données du référentiel (pas ce qui est installé), donc c'est une autre forme de la même information provenant du grep.

Même Synaptic ne peut pas dire (dans l'écran Origin) si vous désactivez le référentiel et mettez à jour.

Kanaka
la source
2

Ou, inspiré par Sunny, vous pouvez essayer:

# 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. pas précis à 100%.

Tim
la source