Come elencare tutti i pacchetti installati dai PPA?


23

Ho installato molti pacchetti da molti PPA sul mio sistema. Voglio elencare tutti i pacchetti installati che sono installati dai PPA del launchpad, non dai repository.

È possibile tramite la riga di comando?



No, è diverso.
Avinash Raj,

1
Non è un'utilità della riga di comando, ma molto utile è Y PPA Manager . Elenca, installa e rimuove i pacchetti dai PPA.
Jos

Risposte:


23

Il seguente comando restituisce il nome del pacchetto e il suo ppa (se installato da 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}'

Dettagli:

  • dpkg --get-selections dà solo i pacchetti installati dopo grep -v deinstall$
  • awk '{ print $1 }' restituisce solo il nome del pacchetto
  • perl -e '@a = <>; $a=join("", @a)' concatena tutte le linee restituite da apt-cache policy
  • $a =~ s/\n(\S)/\n\n$1/g; aggiunge una nuova riga tra ciascuna sezione del pacchetto
  • @packages = split("\n\n", $a); è un array perl contenente tutte le informazioni sui pacchetti, un pacchetto per articolo.
  • foreach $p (@packages) {print "$1: $2\n" if $p =~ /^(.*?):.*?500 http:\/\/ppa\.launchpad\.net\/(.*?)\s/s} è un ciclo in cui vengono stampati il ​​pacchetto e il ppa se nella politica viene trovato un ppa con prio 500.

Risposta / codice breve, tempo di esecuzione troppo lungo.
Radu Rădeanu,

@Avinash: hai provato la mia risposta? in tal caso, per favore, potresti accettarlo? Grazie.
Sylvain Pineau,


3

In conformità con questa risposta e questo post , puoi ottenere un elenco di tutti i pacchetti da tutti i PPA installati sul tuo sistema usando il seguente codice bash:

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

E in accordo con questa risposta , puoi ottenere un elenco di tutti i pacchetti installati nel tuo sistema usando:

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

Ora, uniamo queste due idee per ottenere un elenco di tutti i pacchetti installati dai 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

L'origine di un pacchetto installato può essere verificata utilizzando apt-cache, ad esempio

$ 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

L'output di apt-cache policy <package_name>contiene la fonte.

È possibile utilizzare il seguente script per ottenere l'elenco dei pacchetti installati da 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
Non funziona se hai selezionato un altro mirror. Per esempio hogir1.2-syncmenu-0.1 500 http://ubuntu.univ-nantes.fr/ubuntu/ saucy/main amd64 Packages
Sylvain Pineau il

In questo caso google-chrome-stablenon è installato da un PPA; ha solo un repository separato.
Radu Rădeanu,

Ok, l'ho visto. Ma sei arrivato con un esempio davvero negativo che può indurre gli utenti meno esperti a pensare che se un pacchetto non proviene da repository Ubuntu, allora il pacchetto proviene da un PPA. La domanda del PO riguarda i PPA.
Radu Rădeanu,

@ RaduRădeanu Ho ottenuto i tuoi punti e ho modificato il mio post. hai assolutamente ragione.
souravc,

Meglio ora, anche se c'è un problema con il tempo di esecuzione che è davvero troppo lungo.
Radu Rădeanu,

1

Installa Synaptic . È quindi possibile sfogliare i pacchetti in base a "origine" o anche a qualsiasi altro filtro personalizzato.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.