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?



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

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.

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


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'

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

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.