¿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?



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

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.

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


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'

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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.