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é?
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
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.
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.
Je me demande pourquoi personne n'a mentionné aptitude
. Je l'utilise tout le temps.
L'aptitude est:
Sudo apt install aptitude
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$
.
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.
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%.