web-dev-qa-db-fra.com

Trouver les paquets installés depuis un certain dépôt avec aptitude

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?

38
Boldewyn

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:)

17
ssice

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!)
    • recherche aptitude: ?archive(___) ou ~A___
    • format d'aptitude: %t
    • apt_preferences: release a=___
    • Exemples Ubuntu: natty-backports, trusty-security, stable
  • Origin:
    • recherche aptitude: ?origin(___) ou ~O___
    • format d'aptitude: n/a
    • apt_preferences: release o=___
    • Exemples Ubuntu: Canonical, Google, Inc., LP-PPA-dockbar-main, Ubuntu
  • toutes les autres lignes
    • aptitude: n/a
18
Christophe

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.

15
Anonymous

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.

6
Boldewyn

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 .

2
max

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
2
coreyh

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.

0
Animism