Bagaimana cara membuat daftar semua paket yang diinstal dari PPA?


23

Saya menginstal banyak paket dari banyak PPA di sistem saya. Saya ingin mendaftar semua paket yang diinstal yang diinstal dari PPA launchpad, bukan repositori.

Apakah ini mungkin melalui command-line?


Kemungkinan Gandakan? askubuntu.com/questions/43581/…
Mitch

Tidak. Itu berbeda.
Avinash Raj

1
Bukan utilitas baris perintah, tetapi sangat berguna adalah Y PPA Manager . Daftar, instal, dan hapus paket dari PPA.
Jos

Jawaban:


23

Perintah berikut mengembalikan nama paket dan ppa-nya (jika diinstal dari 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}'

Detail:

  • dpkg --get-selections hanya memberikan paket yang diinstal setelah grep -v deinstall$
  • awk '{ print $1 }' hanya mengembalikan nama paket
  • perl -e '@a = <>; $a=join("", @a)' menyatukan semua baris yang dikembalikan oleh apt-cache policy
  • $a =~ s/\n(\S)/\n\n$1/g; menambahkan baris baru antara setiap bagian paket
  • @packages = split("\n\n", $a); adalah array perl yang berisi semua paket info, satu paket per item.
  • foreach $p (@packages) {print "$1: $2\n" if $p =~ /^(.*?):.*?500 http:\/\/ppa\.launchpad\.net\/(.*?)\s/s} adalah loop di mana paket dan ppa dicetak jika ppa dengan prio 500 ditemukan dalam polis.

Jawaban singkat / kode, waktu looong untuk eksekusi.
Radu Rădeanu

@Avinash: apakah Anda menguji jawaban saya? Jika demikian, bisakah Anda mempertimbangkan untuk menerimanya? Terima kasih.
Sylvain Pineau


3

Sesuai dengan jawaban ini dan posting ini , Anda bisa mendapatkan daftar semua paket dari semua AKP yang diinstal pada sistem Anda menggunakan kode bash berikut:

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

Dan sesuai dengan jawaban ini , Anda bisa mendapatkan daftar semua paket yang diinstal di sistem Anda menggunakan:

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

Sekarang, mari bergabung dengan dua ide ini untuk mendapatkan daftar semua paket yang diinstal dari 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

Sumber paket yang diinstal dapat diperiksa menggunakan apt-cache, misalnya

$ 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

Output apt-cache policy <package_name>berisi sumber.

Seseorang dapat menggunakan skrip berikut untuk mendapatkan daftar paket yang diinstal dari 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
Ini tidak berfungsi jika Anda memilih cermin yang berbeda. Misalnya saya punyagir1.2-syncmenu-0.1 500 http://ubuntu.univ-nantes.fr/ubuntu/ saucy/main amd64 Packages
Sylvain Pineau

Dalam hal google-chrome-stableini tidak diinstal dari PPA; hanya memiliki repositori terpisah.
Radu Rădeanu

Ok, saya melihat itu. Tapi Anda datang dengan contoh yang sangat buruk yang dapat membuat pengguna pemula berpikir bahwa jika suatu paket bukan dari repositori Ubuntu, maka paket tersebut dari PPA. Pertanyaan OP adalah tentang PPA.
Radu Rădeanu

@ RaduRădeanu Saya mendapatkan poin Anda dan Mengedit posting saya. Anda benar sekali.
souravc

Lebih baik sekarang, bahkan jika ada masalah dengan waktu eksekusi yang benar-benar looong.
Radu Rădeanu

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.