Comment puis-je lister tous les paquets que j'ai installés à partir d'un référentiel particulier?

51

Comment puis-je lister tous les paquets que j'ai installés à partir d'un référentiel particulier?

Comment puis-je lister tous les paquets installés qui ne sont pas disponibles dans les archives principales d'Ubuntu, et aussi voir de quels référentiels ils proviennent? (Si je connaissais la réponse à cette question, je pourrais consulter cette liste pour un nom particulier de PPA afin de connaître la réponse à ma première question.)

Marius Gedminas
la source
Comme il ne semble pas exister un outil de ligne de commande pour cela (malheureusement), j'accepterai l'une des réponses de l'interface graphique.
Marius Gedminas

Réponses:

24

Développez l'élément "Logiciels installés" dans le Centre logiciel Ubuntu. Vous verrez une liste de tous les différents référentiels que vous avez activés. En cliquant sur le dépôt vous montrera les paquets que vous avez installés à partir de chacun.

texte alternatif

andrewsomething
la source
Je crains que cette option ne soit disponible que dans Ubuntu 10.10 ou est-ce que je manque quelque chose? My Software Center n'affiche pas les sources sous ce menu.
lovinglinux
2
Dans ma version, j'ai un menu déroulant "Installé" en haut. Lorsque je sélectionne cette option, je peux choisir les différentes sources (noyau, pour achat, PPA ...)
Alexis Wilke
Dans Ubuntu 16.04, cette page n'est plus disponible. Cependant, Synaptic a une fonctionnalité similaire - cliquez sur "Origine" en bas à gauche.
Josh
26

Il semble n'y avoir aucun enregistrement de l'origine d'un paquet installé .

Si vous êtes en mesure d’obtenir l’emplacement à partir duquel un package du même nom serait téléchargé, il est disponible via apt-cache policy. Le script suivant (plutôt moche) me convient:

LC_ALL=C dpkg-query --showformat='${Package}:${Status}\n' -W '*' \
  | fgrep ':install ok installed' \
  | cut -d: -f1 \
  | (while read pkg; do 
       inst_version=$(apt-cache policy $pkg \
                                | fgrep Installed: \
                                | awk '{ print $2 }'); 
       origin=$(apt-cache policy "$pkg" \
                          | fgrep " *** ${inst_version}" -C1 \
                          | tail -n 1 \
                          | cut -c12-); 
       echo $pkg $origin; 
     done)

Notez qu'il est assez fragile, car il émet des hypothèses sur le résultat de apt-cache policy, qui pourraient changer d'une version à l'autre ...

Riccardo Murri
la source
Oui, cela signifierait essentiellement écrire un outil à partir de zéro. Et je pense que l'analyse de / var / lib / apt / lists avec Perl ou Python serait plus rapide et plus robuste.
Marius Gedminas
Fonctionne normalement ici, en 2018 :) Merci!
N0rbert
J'ai développé une solution similaire testée sur Ubuntu et Debian.
Famzah
23

Ouvrez le Gestionnaire de paquets Synaptic et cliquez sur le bouton "Origine" en bas à gauche de la barre latérale. Il listera vos sources. Sélectionnez une source pour voir les packages disponibles / installés.

lovinglinux
la source
4

Ce script répertorie les packages installés et disponibles dans PPA:

#!/bin/sh
# Give PPA name as an argument, e.g. ppa:oibaf/graphics-drivers

name1="$(echo "$1"|cut -d: -f2|cut -d/ -f1)"
name2="$(echo "$1"|cut -d/ -f2)"

awk '$1 == "Package:" { if (a[$2]++ == 0) print $2; }' \
/var/lib/apt/lists/*"$name1"*"$name2"*Packages |
xargs dpkg-query -W -f='${Status} ${Package}\n' 2>/dev/null  | awk '/^[^ ]+ ok installed/{print $4}'

J'ai appliqué ceci .

BTW En ce qui concerne le retrait du PPA, utilisez le programme ppa-purge; J'ai créé une version améliorée de celui-ci ici .

Jarno
la source
3

Sous Quantal (12.10), l'espace dans la ligne d'origine doit être supprimé.

LC_ALL=C dpkg-query --showformat='${Package}:${Status}\n' -W '*' \
 | fgrep ':install ok installed' \
 | cut -d: -f1 \
 | (while read pkg; do 
   inst_version=$(apt-cache policy $pkg \
                            | fgrep Installed: \
                            | cut -d: -f2-); 
   origin=$(apt-cache policy "$pkg" \
                      | fgrep " ***${inst_version}" -C1 \
                      | tail -n 1 \
                      | cut -c12-); 
   echo $pkg $origin; 
 done)
Graham Dunn
la source