Pregunta ¿Cómo saber de qué repositorio Ubuntu o Debian viene un paquete?


En un sistema basado en Debian, incluido Ubuntu, ¿cómo puede uno saber de qué repositorio se descargará un paquete, sin realmente comenzar la descarga? aptitude show y apt-cache info mostrará el sección (por ejemplo, metapaquete, base, gráficos), pero no el repositorio a la que pertenece un paquete (p. http://ppa.launchpad.net/mactel-support/ppa/ubuntu o http://us.archive.ubuntu.com/ubuntu/)

Al instalar el paquete, aparece el repositorio real durante la descarga (se imprime en la salida "descarga desde ..." de apt y programas similares), pero ¿cómo se puede obtener información en el repositorio que contiene el paquete (o un versión de un paquete) sin descargarlo e instalarlo primero?

Además, ¿cómo se puede determinar el repositorio de origen para un paquete que ya está instalado?


164


origen


encuentro esta una de las deficiencias de Apt; simplemente no es fácil decir desde qué repositorio proporciona un determinado paquete dentro de las herramientas del instalador del paquete. - quack quixote


Respuestas:


Corro apt-cache policy <package name>:

$ apt-cache policy wajig
wajig:
  Installed: 2.1
  Candidate: 2.1
  Version table:
 *** 2.1 0
        100 /var/lib/dpkg/status
     2.0.47 0
        500 file:/home/wena/.repo_bin/ squeeze/main i386 Packages
        500 ftp://ftp.is.co.za/debian/ squeeze/main i386 Packages

Eso significa que hay tres wajig paquetes:

  • Uno que está instalado (/var/lib/dpkg/status)

  • Uno que está disponible desde un repositorio local (file:/home/wena/.repo_bin/)

  • Uno que está disponible desde un repositorio remoto (ftp://ftp.is.co.za/debian), que también tiene la misma versión (2.0.47) como el que está en un repositorio local


Adicionalmente, apt-cache madison <package name> mostrará información similar en un formato tabular.

 wajig |        2.2 | mirror://mirrors.ubuntu.com/mirrors.txt/ precise/universe amd64 Packages
 wajig |        2.2 | mirror://mirrors.ubuntu.com/mirrors.txt/ precise/universe Sources

202



Pero no muestra de dónde vino el paquete instalado, ¿verdad? - Adobe
@Adobe En mi caso, el 2.1 la versión no está disponible desde ningún repositorio. Es de construcción local. - Tshepang
¿Cuál es el signo del paquete instalado? *** o /var/lib/dpkg/status ? - SuB
¿Tal vez ambos? No es seguro. - Tshepang
Cuando el paquete no está instalado, apt-cache policy dice: Installed: (none). - John McGehee


Aha! Aparentemente, el apropiado apt comando no es apt-cache info, pero en lugar, apt-cache showpkg.

$ apt-cache showpkg linux-generic
Package: linux-generic
Versions: 
2.6.31.19.32 (/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic-updates_main_binary-amd64_Packages) (/var/lib/apt/lists/security.ubuntu.com_ubuntu_dists_karmic-security_main_binary-amd64_Packages) (/var/lib/dpkg/status)
 Description Language: 
                 File: /var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic-updates_main_binary-amd64_Packages
                  MD5: 5d722da329763b9342d322f5a140005c

2.6.31.14.27 (/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic_main_binary-amd64_Packages)
 Description Language: 
                 File: /var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic_main_binary-amd64_Packages
                  MD5: 5d722da329763b9342d322f5a140005c


Reverse Depends: 
Dependencies: 
2.6.31.19.32 - linux-image-generic (5 2.6.31.19.32) 
2.6.31.14.27 - linux-image-generic (5 2.6.31.14.27) 
Provides: 
2.6.31.19.32 - 
2.6.31.14.27 - 
Reverse Provides: 

los File: línea proporciona la información del repositorio después del /var/lib/apt/lists/.

Ahi esta un informe de error que aptitude no puede mostrar el repositorio fuente, pero parece que en este momento la característica aún está en la lista de deseos.


27



Esa característica de aptitud todavía está en el whislist 8 años después y no sé por qué esta respuesta (apt-cache showpkg) no está marcado como el correcto. - Csaba Toth


Esto funciona para mí (muestra dónde está el paquete 2vcard):

$ grep 2vcard /var/lib/apt/lists/* | grep "Filename:"

/var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_karmic_universe_binary-i386_Packages:Filename: pool/universe/2/2vcard/2vcard_0.5-3_all.deb

Puede aplicar filtros adicionales para verificar versiones, etc., si hay varias versiones disponibles.


8



Pragmático. Me sorprende que esta información no sea accesible a través de ninguno de los frontales para dpkg, aunque. - gotgenes
@got Está disponible: superuser.com/questions/106794/... - Tshepang


Me pregunto por qué nadie mencionó aptitude. Lo uso todo el tiempo.

La aptitud es:

  • enviado por defecto con muchas distribuciones basadas en Debian. Se puede instalar en otra (como Ubuntu) a través de sudo apt install aptitude
  • no requiere privilegios administrativos (al menos para el siguiente comando)
  • tiene un buen ncurses GUI (pero la mayoría de las veces se usa sin él)
  • proporciona una salida realmente bonita. Para mostrar versiones de paquetes, use aptitude versions mando:

    me@wheezy:~$ aptitude versions kde-standard
    Package kde-standard:                        
    i A 5:77+deb7u1     stable              500
    p A 5:84            testing,unstable    130
    
  • no tiene Super Cow Powers

La letra al frente de cada cadena indica el estado del paquete, yo está instalado y pag se purga (o nunca se instala), estable, pruebas y inestable son definiciones de repositorio, el número al final es un prioridad de pin.

Una advertencia sobre las versiones recientes de aptitude vale la pena mencionar aquí: de forma predeterminada, muestra todos los paquetes, que incluyen el nombre que busca, así que use un regex magia un poco para buscar por el nombre estricto, por ejemplo aptitude versions ^kde-workspace$.


8



Bonito comando pero no lista el repositorio según lo solicitado. - bjhend
Actualmente lo hace. - TranslucentCloud
Tu no entiendes Se pueden instalar PPA adicionales. Es importante saber si un paquete proviene de dicho PPA. Como cuestión de hecho, eso es lo que estoy tratando de averiguar en este momento, si es así, puedo eliminar el PPA, reduciendo el riesgo de problemas. - reinierpost
Sí, tienes razón, con versions simplemente puede verificar los valores de fijación de apt de los paquetes dados, no los repos asociados. Sin embargo, sigue siendo útil si conoce todos sus repositorios y cómo están anclados. - TranslucentCloud


Lamentablemente, esta información no se registra durante la instalación del paquete. Puede hacer una aproximación decente si el repositorio aún está en la lista fuente y el repositorio aún tiene el paquete:

grep -l PKG /var/lib/apt/lists/*

apt-cache showpkgestá mostrando datos de la base de datos del repositorio (no de lo que está instalado) por lo que es otra forma de la misma información del grep.

Incluso Synaptic no puede decir (en la pantalla Origen) si deshabilita el repositorio y actualiza.


6





O, inspirado en Sunny, puedes probar:

# list installed restricted packages
for i in `dpkg --get-selections | awk '{ print $1 }'`; do egrep -lRI "^Filename: .*/${i}_[^/]+.deb" /var/lib/apt/lists/ | grep -q 'restricted' && echo $i; done

# list installed multiverse packages
for i in `dpkg --get-selections | awk '{ print $1 }'`; do egrep -lRI "^Filename: .*/${i}_[^/]+.deb" /var/lib/apt/lists/ | grep -q 'multiverse' && echo $i; done

PD. no es 100% exacto.


2