¿Cómo enumerar todos los paquetes que se instalan desde PPA?

23

Instalé muchos paquetes de muchos PPA en mi sistema. Quiero enumerar todos los paquetes instalados que se instalan desde PPA de launchpad, no repositorios.

¿Es esto posible a través de la línea de comandos?

Avinash Raj
fuente
¿Posible duplicado? askubuntu.com/questions/43581/…
Mitch
No, es uno diferente.
Avinash Raj
1
No es una utilidad de línea de comandos, pero es muy útil el Administrador Y PPA . Enumera, instala y elimina paquetes de PPA.
Jos
Desde un PPA dado: askubuntu.com/questions/5976/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Respuestas:

23

El siguiente comando devuelve el nombre del paquete y su ppa (si está instalado desde 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}'

Detalles:

  • dpkg --get-selections da solo los paquetes instalados después grep -v deinstall$
  • awk '{ print $1 }' solo devuelve el nombre del paquete
  • perl -e '@a = <>; $a=join("", @a)' concatena todas las líneas devueltas por apt-cache policy
  • $a =~ s/\n(\S)/\n\n$1/g; agrega una nueva línea entre cada sección del paquete
  • @packages = split("\n\n", $a); es una matriz perl que contiene todos los paquetes de información, un paquete por artículo.
  • foreach $p (@packages) {print "$1: $2\n" if $p =~ /^(.*?):.*?500 http:\/\/ppa\.launchpad\.net\/(.*?)\s/s} es un bucle donde se imprimen el paquete y el ppa si se encuentra un ppa con prio 500 en la política.
Sylvain Pineau
fuente
Respuesta corta / código, tiempo de ejecución muy largo.
Radu Rădeanu
@Avinash: ¿probaste mi respuesta? Si es así, ¿podrías aceptarlo? Gracias.
Sylvain Pineau
7

aptitudeEl siguiente comando muestra la lista de paquetes instalados para PPA activos en sources.list.

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

Referencia: aptitud - Referencia del término de búsqueda

user.dz
fuente
1
Otra capacidad genial de aptitude +1
Ravexina
3

De acuerdo con esta respuesta y esta publicación , puede obtener una lista de todos los paquetes de todos los PPA instalados en su sistema utilizando el siguiente código 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

Y de acuerdo con esta respuesta , puede obtener una lista de todos los paquetes instalados en su sistema usando:

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

Ahora, vamos a unir estas dos ideas para obtener una lista de todos los paquetes que se instalan desde 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
fuente
3

La fuente de un paquete instalado se puede verificar utilizando apt-cache, por ejemplo

$ 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 salida de apt-cache policy <package_name>contiene la fuente.

Se puede usar el siguiente script para obtener la lista de paquetes instalados desde 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
fuente
1
No funciona si seleccionó un espejo diferente. Por ejemplo, tengogir1.2-syncmenu-0.1 500 http://ubuntu.univ-nantes.fr/ubuntu/ saucy/main amd64 Packages
Sylvain Pineau
En este caso google-chrome-stableno se instala desde un PPA; tiene solo un repositorio separado.
Radu Rădeanu
Ok, ya vi eso. Pero llegó con un ejemplo realmente malo que puede hacer que los usuarios novatos piensen que si un paquete no es de repositorios de Ubuntu, entonces el paquete es de un PPA. La pregunta del OP es sobre PPA.
Radu Rădeanu
@ RaduRădeanu Recibí tus puntos y edité mi publicación. Tienes toda la razón.
souravc
Mejor ahora, incluso si hay un problema con el tiempo de ejecución que es realmente demasiado largo.
Radu Rădeanu
1

Instalar sináptico . Luego puede buscar paquetes por "origen" o incluso cualquier otro filtro personalizado.

ilias iliadis
fuente