Je suis à la recherche de quelque chose d'analogue à cette question: Zypper: Comment puis-je afficher tous les paquetages d'un certain référentiel?
Étant donné que je suis sous Ubuntu, j'ai besoin d'une solution basée sur aptitude: comment obtenir une liste de paquets installés à partir d'un certain référentiel?
En utilisant aptitude, afin de rechercher les paquets installés en dehors de la branche stable, vous pouvez utiliser:
aptitude search "?narrow(?installed,?not(?archive(stable)))"
Pour voir les versions ainsi que les noms de paquet (et non les descriptions), vous pouvez utiliser la commande avec l'option de formatage (-F
en abrégé), comme suit.
aptitude search -F "%p %V %v" "?narrow(?installed,?not(?archive(stable)))"
Pour plus de formats, veuillez consulter la page de manuel (voici la documentation avec les options disponibles ).
Cela fonctionne par exemple dans Debian si vous avez installé des paquets en dehors de Squeeze (en exécutant, par exemple, apt-get install -t sid package-name
.
Vous pouvez voir d'où provient un paquet installé via apt-cache policy
, l'utilisation est la suivante:
apt-cache policy <package-name>
Par exemple, mon paquet python-numpy rend la sortie suivante:
$ LANG=C apt-cache policy python-numpy
python-numpy:
Installed: 1:1.6.2-1
Candidate: 1:1.6.2-1.2
Version table:
1:1.7.0-1 0
1 http://ftp.es.debian.org/debian/ experimental/main AMD64 Packages
1:1.6.2-1.2 0
500 http://ftp.es.debian.org/debian/ sid/main AMD64 Packages
*** 1:1.6.2-1 0
100 /var/lib/dpkg/status
1:1.4.1-5 0
990 http://ftp.es.debian.org/debian/ squeeze/main AMD64 Packages
990 http://ftp.de.debian.org/debian/ squeeze/main AMD64 Packages
Cela signifie que je suis une version derrière la branche actuelle de sid/main, donc j'ai une version old-sid installée. Je vois que je n'ai pas la version stable car elle est encore 1.4.1-5
et je suis actuellement à 1.6.2-1
.
Au moment de la soumission, ce paquet était déjà mis à jour:)
Après avoir lu la page d’information d’aptitude et une douzaine de tentatives, j’ai enfin compris:
aptitude search '?narrow(?installed,?not(?archive(testing)) ?archive(unstable))'
ou équivalent) :
aptitude search '~S ~i (!~Atesting ~Aunstable)'
Il recherchera les paquets installés à partir d'archives instables de tous les dépôts . Vous devez filtrer les paquets de votre archive par défaut (tester dans l'exemple ci-dessus).
Si vous souhaitez filtrer les packages installés à partir de www.debian-multimedia.org/unstable:
aptitude search '~S ~i (!~Atesting ~Aunstable ?origin("Unofficial Multimedia Packages"))
Édition: Les "archives", "origine", etc. sont déduites du fichier Release
du référentiel. Malheureusement, tous les outils ne peuvent pas examiner toutes ces lignes et utilisent une syntaxe différente pour les utiliser. Vous pouvez trouver ces fichiers sous la forme /var/lib/apt/lists/*Release
. Ou tapez simplement apt-cache policy
pour avoir un aperçu. apt-cache a changé son format de sortie: les versions ultérieures utilisent le style apt_preferences.
Suite:
ou Archive:
(ancien nom!) ?archive(___)
ou ~A___
%t
release a=___
natty-backports
, trusty-security
, stable
Origin:
?origin(___)
ou ~O___
release o=___
Canonical
, Google, Inc.
, LP-PPA-dockbar-main
, Ubuntu
Examinez l’étiquette Origine (telle que o = Debian) pour chacun de vos référentiels actuels:
apt-cache policy | sed -n 's/.*o=\([^,]\+\).*/\1/p' | uniq
Ensuite, recherchez des paquets provenant (ou non) d'une origine particulière:
aptitude search "?installed?origin(Debian)"
aptitude search "?installed?not(?origin(Debian))"
C'est ne pas approprié pour un audit de sécurité car il repose sur chaque référentiel pour fournir ses propres informations sur l'origine, mais il peut s'avérer utile pour résoudre les problèmes d'origine des packages présents dans plusieurs référentiels.
Pour être complet: sur les systèmes Ubuntu, vous pouvez également utiliser Synaptic pour cette tâche. Dans la colonne de gauche, vous pouvez filtrer les paquets en fonction de leur origine.
J'ai trouvé ceci:
aptitude search "?origin (<repository>) ?installed"
Vous pouvez également trouver une liste de termes de recherche supportés par "aptitude search" ici .
Tout d’abord, recherchez le (s) fichier (s) approprié (s) pour le référentiel d’intérêt dans/var/lib/apt/lists. Cela devrait être possible de le faire par programme, mais je n’ai pas eu besoin de le faire.
En utilisant google chrome comme exemple, essayez ceci:
SEARCH_PATTERN=dl.google.com_linux_chrome # adjust to suit your needs
for PKG in $( grep-dctrl -sPackage . /var/lib/apt/lists/${SEARCH_PATTERN}_*_Packages | sed 's/^Package: //' )
do
if dpkg -s "${PKG}" 2> /dev/null 1> /dev/null
then
echo ${PKG}
fi
done
et je reçois la sortie:
google-chrome-stable
dpkg -s renvoie 0 si le paquet est installé et différent de zéro sinon. Aux fins de référence future, la sortie de
grep-dctrl -sPackage . /var/lib/apt/lists/${SEARCH_PATTERN}_*_Packages
était
Package: google-chrome-beta
Package: google-chrome-stable
Package: google-chrome-unstable
Les autres réponses sont en fait incorrectes, car le paramètre à ?archive()
est une expression régulière. Donc, ?archive(stable)
correspond à stable
et unstable
. Pour exclure uniquement stable
, vous devez ancrer le motif regex:
aptitude search -F "%p %V %v %t" '?any-version(?installed ?not(?archive("^stable$")))'
Pour exclure plusieurs référentiels:
aptitude search -F "%p %V %v %t" '?any-version(?installed ?not(?archive("^(xenial|xenial-updates)$")))'
Notez également que certains packages appartiennent à plusieurs référentiels, par exemple. xenial-security,xenial-updates
. ?archive()
évalue le modèle regex par rapport à chaque référentiel, afin que ?archive("^xenial-updates$")
corresponde à tous les packages appartenant à xenial-updates
, même s'il appartient également à d'autres référentiels.