web-dev-qa-db-fra.com

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

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 show et apt-cache info afficheront le section (par exemple, métapaquet, base, graphismes), mais pas le référentiel auquel un package appartient (par exemple, http: //ppa.launchpad .net/mactel-support/ppa/ubuntu ou http://us.archive.ubuntu.com/ubuntu/ ).

Lors de l’installation du package, 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 package (ou un fichier spécifique)? version d'un paquet) sans le télécharger et l'installer d'abord?

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

166
gotgenes

Je lance 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 packages wajig:

  • 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 depuis 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


De plus, 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
201
Tshepang

Aha! Apparemment, la commande apt appropriée n'est pas apt-cache info, mais plutôt 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 ligne File: fournit les informations sur le référentiel après le /var/lib/apt/lists/.

Il y a un rapport de bogue selon lequel aptitude ne peut pas afficher le référentiel source , mais il semble que la fonctionnalité soit encore sur la liste de souhaits.

28
gotgenes

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.

8
Sunny

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 un autre (comme Ubuntu) via Sudo apt install aptitude
  • ne nécessite pas de privilèges d'administrateur (au moins pour la commande ci-dessous)
  • a une jolie interface graphique ncurses (mais utilisée la plupart du temps sans elle)
  • fournit une très jolie sortie. Pour afficher les versions de packages, utilisez la commande aptitude versions:

    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 le statut du package, i est installé et p est purgé (ou jamais installé), stable, test et instable sont des définitions de référentiel, le nombre final est 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 regex magic pour chercher par le nom strict, par exemple aptitude versions ^kde-workspace$.

8
TranslucentCloud

Malheureusement, ces informations ne sont pas enregistrées lors de l'installation du package. Vous pouvez deviner 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.

6
kanaka

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%.

2
Tim