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?
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?
Respuestas:
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 paqueteperl -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.aptitude
El 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
aptitude
+1
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'
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
gir1.2-syncmenu-0.1 500 http://ubuntu.univ-nantes.fr/ubuntu/ saucy/main amd64 Packages
google-chrome-stable
no se instala desde un PPA; tiene solo un repositorio separado.
Instalar sináptico . Luego puede buscar paquetes por "origen" o incluso cualquier otro filtro personalizado.