Comment lister tous les packages installés à partir des PPA?

23

J'ai installé de nombreux packages provenant de nombreux PPA sur mon système. Je veux répertorier tous les packages installés qui sont installés à partir des PPA du tableau de bord, pas les référentiels.

Est-ce possible via la ligne de commande?

Avinash Raj
la source
Duplicata possible? askubuntu.com/questions/43581/…
Mitch
Non, c'est différent.
Avinash Raj
1
Ce n'est pas un utilitaire de ligne de commande, mais le gestionnaire Y PPA est très utile . Répertorie, installe et supprime les packages des PPA.
Jos
À partir d'un AAE donné: askubuntu.com/questions/5976/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Réponses:

23

La commande suivante renvoie le nom du package et son ppa (s'il est installé à partir d'un ppa):

apt-cache policy $(dpkg --get-selections | grep -v deinstall$ | awk '{ print $1 }') | perl -e '@a = <>; $a=join("", @a); $a =~ s/\n(\S)/\n\n$1/g;  @packages = split("\n\n", $a); foreach $p (@packages) {print "$1: $2\n" if $p =~ /^(.*?):.*?500 http:\/\/ppa\.launchpad\.net\/(.*?)\s/s}'

Détails:

  • dpkg --get-selections ne donne que les packages installés après grep -v deinstall$
  • awk '{ print $1 }' renvoie uniquement le nom du package
  • perl -e '@a = <>; $a=join("", @a)' concatène toutes les lignes renvoyées par apt-cache policy
  • $a =~ s/\n(\S)/\n\n$1/g; ajoute une nouvelle ligne entre chaque section de package
  • @packages = split("\n\n", $a); est un tableau Perl contenant toutes les informations sur les packages, un package par élément.
  • foreach $p (@packages) {print "$1: $2\n" if $p =~ /^(.*?):.*?500 http:\/\/ppa\.launchpad\.net\/(.*?)\s/s} est une boucle où le paquet et le ppa sont imprimés si un ppa avec prio 500 est trouvé dans la politique.
Sylvain Pineau
la source
Réponse / code court, temps d'exécution très long.
Radu Rădeanu
@Avinash: avez-vous testé ma réponse? Si oui, pourriez-vous envisager de l'accepter? Merci.
Sylvain Pineau
7

aptitudeLa commande ci-dessous affiche la liste des packages installés pour les PPA actifs dans sources.list.

aptitude search '?narrow(?installed, ~Oppa)'

Référence: aptitude - Référence du terme recherché

user.dz
la source
1
Une autre capacité aptitude
intéressante
3

Conformément à cette réponse et à ce message , vous pouvez obtenir une liste de tous les packages de tous les PPA installés sur votre système en utilisant le code bash suivant:

for APT in $(find /etc/apt/ -name \*.list); do
  grep -o "^deb http://ppa.launchpad.net/[a-z0-9\-]\+/[a-z0-9\-]\+" $APT | while read ENTRY ; do
    USER=$(echo $ENTRY | cut -d/ -f4)
    PPA=$(echo $ENTRY | cut -d/ -f5)
    awk '$1 == "Package:" { if (a[$2]++ == 0) print $2; }' /var/lib/apt/lists/*$USER*$PPA*Packages
    done
done

Et conformément à cette réponse , vous pouvez obtenir une liste de tous les packages installés dans votre système en utilisant:

dpkg --get-selections | grep -v deinstall | cut -f1

Maintenant, joignons ces deux idées pour obtenir une liste de tous les packages installés à partir des PPA:

(for APT in $(find /etc/apt/ -name \*.list); do
  grep -o "^deb http://ppa.launchpad.net/[a-z0-9\-]\+/[a-z0-9\-]\+" $APT | while read ENTRY ; do
    USER=$(echo $ENTRY | cut -d/ -f4)
    PPA=$(echo $ENTRY | cut -d/ -f5)
    awk '$1 == "Package:" { if (a[$2]++ == 0) print $2; }' /var/lib/apt/lists/*$USER*$PPA*Packages
    done
done; dpkg --get-selections | grep -v deinstall | cut -f1) | sort | awk 'dup[$0]++ == 1'
Radu Rădeanu
la source
3

La source d'un paquet installé peut être vérifiée en utilisant apt-cache, par exemple

$ apt-cache policy oracle-java7-installer

oracle-java7-installer:
  Installed: 7u51-0~webupd8~7
  Candidate: 7u51-0~webupd8~7
  Version table:
 *** 7u51-0~webupd8~7 0
        500 http://ppa.launchpad.net/webupd8team/java/ubuntu/ precise/main i386 Packages
        100 /var/lib/dpkg/status

La sortie de apt-cache policy <package_name>contient la source.

On peut utiliser le script suivant pour obtenir la liste des packages installés à partir des PPA.

#!/bin/bash
echo "List of packages which are not installed from Ubuntu repository"
for i in `dpkg -l | grep "^ii" | awk '{print $2}'`
do
    j=`apt-cache policy "$i" | grep "ppa.launchpad.net"` 
    if [ $? -eq 0 ]; then
        echo "$i"
        #echo "$i $j"
    fi
done
souravc
la source
1
Cela ne fonctionne pas si vous avez sélectionné un autre miroir. Par exemple, j'aigir1.2-syncmenu-0.1 500 http://ubuntu.univ-nantes.fr/ubuntu/ saucy/main amd64 Packages
Sylvain Pineau
Dans ce cas, google-chrome-stablen'est pas installé à partir d'un PPA; il a juste un référentiel séparé.
Radu Rădeanu
Ok, j'ai vu ça. Mais vous êtes venu avec un très mauvais exemple qui peut faire penser aux utilisateurs novices que si un package ne provient pas de référentiels Ubuntu, alors le package provient d'un PPA. La question du PO concerne les AAE.
Radu Rădeanu
@ RaduRădeanu J'ai obtenu vos points et édité mon message. vous avez tout à fait raison.
souravc
Mieux maintenant, même s'il y a un problème avec le temps d'exécution qui est vraiment trop long.
Radu Rădeanu
1

Installez synaptique . Vous pouvez ensuite parcourir les packages par "origine" ou même tout autre filtre personnalisé.

ilias iliadis
la source