Como listar todos os pacotes instalados pelos PPAs?

23

Eu instalei muitos pacotes de muitos PPAs no meu sistema. Quero listar todos os pacotes instalados que são instalados pelos PPAs da barra de ativação, não repositórios.

Isso é possível através da linha de comando?

Avinash Raj
fonte
Possível duplicado? askubuntu.com/questions/43581/…
Mitch
Não. É diferente.
Avinash Raj
11
Não é um utilitário de linha de comando, mas muito útil é o Y PPA Manager . Lista, instala e remove pacotes dos PPAs.
21713 Jos
De um dado PPA: askubuntu.com/questions/5976/…
Ciro Santilli escreveu

Respostas:

23

O comando a seguir retorna o nome do pacote e seu ppa (se instalado a partir de um 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}'

Detalhes:

  • dpkg --get-selections fornece apenas os pacotes instalados após grep -v deinstall$
  • awk '{ print $1 }' retorna apenas o nome do pacote
  • perl -e '@a = <>; $a=join("", @a)' concatena todas as linhas retornadas por apt-cache policy
  • $a =~ s/\n(\S)/\n\n$1/g; adiciona uma nova linha entre cada seção do pacote
  • @packages = split("\n\n", $a); é uma matriz perl que contém todas as informações dos pacotes, um pacote por item.
  • foreach $p (@packages) {print "$1: $2\n" if $p =~ /^(.*?):.*?500 http:\/\/ppa\.launchpad\.net\/(.*?)\s/s} é um loop em que o pacote e o ppa são impressos se um ppa com prio 500 for encontrado na política.
Sylvain Pineau
fonte
Resposta / código curto, muito tempo para execução.
Radu Rădeanu
@Avinash: você testou minha resposta? Em caso afirmativo, você poderia aceitá-lo? Obrigado.
19414 Sylvain Pineau
7

aptitudeO comando abaixo mostra a lista de pacotes instalados para PPAs ativos em sources.list.

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

Referência: aptitude - Referência de termos de pesquisa

user.dz
fonte
11
Outra capacidade interessante de aptitude +1
Ravexina
3

De acordo com esta resposta e esta postagem , você pode obter uma lista de todos os pacotes de todos os PPAs instalados no seu sistema usando o seguinte código de base:

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 de acordo com esta resposta , você pode obter uma lista de todos os pacotes instalados no seu sistema usando:

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

Agora, vamos juntar essas duas idéias para obter uma lista de todos os pacotes instalados nos PPAs:

(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
fonte
3

A origem de um pacote instalado pode ser verificada usando apt-cache, por exemplo

$ 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

A saída de apt-cache policy <package_name> contém a fonte.

Pode-se usar o script a seguir para obter a lista de pacotes instalados pelos PPAs.

#!/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
fonte
11
Não funciona se você selecionou um espelho diferente. Por exemplo, eu tenhogir1.2-syncmenu-0.1 500 http://ubuntu.univ-nantes.fr/ubuntu/ saucy/main amd64 Packages
Sylvain Pineau 13/14
Nesse caso, google-chrome-stablenão é instalado a partir de um PPA; possui apenas um repositório separado.
Radu Rădeanu
Ok, eu vi isso. Mas você veio com um exemplo muito ruim, que pode fazer com que usuários iniciantes pensem que, se um pacote não for dos repositórios do Ubuntu, o pacote será de um PPA. A pergunta do OP é sobre CAE.
Radu Rădeanu
@ RaduRădeanu Consegui seus pontos e editei meu post. você está absolutamente correto.
souravc
Melhor agora, mesmo se houver um problema com o tempo de execução que é realmente muito longo.
Radu Rădeanu
1

Instale o sináptico . Você pode procurar pacotes por "origem" ou mesmo qualquer outro filtro personalizado.

ilias iliadis
fonte