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

168

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

Al instalar el paquete, el repositorio real aparece durante la descarga (se imprime en el resultado de "descargando de ..." de apt y programas similares), pero ¿cómo se puede obtener información sobre 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?

Gotgenes
fuente
1
Encuentro esta una de las deficiencias de Apt; no es fácil saber desde qué repositorio proporciona un paquete determinado dentro de las herramientas del instalador de paquetes.
quack quijote

Respuestas:

203

Yo 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 wajigpaquetes:

  • 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 ) que la de un repositorio local


Además, apt-cache madison <package name>mostrará información similar en 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
tshepang
fuente
Pero no muestra de dónde vino el paquete instalado, ¿verdad?
Adobe
2
@ Adobe En mi caso, la 2.1versión no está disponible desde ningún repositorio. Está construido localmente.
tshepang
2
¿Qué 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 policydice: Installed: (none).
John McGehee
28

¡Ajá! Al parecer, el buen aptorden no es apt-cache info, pero en cambio, 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: 

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

Hay un informe de error que aptitudeno puede mostrar el repositorio de origen , pero parece que en la actualidad la característica todavía está en la lista de deseos.

Gotgenes
fuente
Esa característica de aptitud todavía está en la lista de favoritos 8 años después y no sé por qué esta respuesta ( apt-cache showpkg) no está marcada como correcta.
Csaba Toth
8

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.

Soleado
fuente
Pragmático. Sin dpkgembargo, me sorprende que esta información no sea accesible a través de ninguno de los front-end .
gotgenes
@got Está disponible: superuser.com/questions/106794/...
Tshepang
8

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

La aptitud es:

  • enviado por defecto con muchas distribuciones basadas en Debian. Se puede instalar en otro (como Ubuntu) a través desudo apt install aptitude
  • no requiere privilegios administrativos (al menos para el siguiente comando)
  • tiene una buena ncursesGUI (pero la mayoría de las veces se usa sin ella)
  • proporciona una salida realmente bonita. Para mostrar versiones de paquetes, use el aptitude versionscomando:

    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 delante de cada cadena indica el estado del paquete, i está instalado y p está purgado (o nunca instalado), estable , prueba e inestable son definiciones de repositorio, el número al final es una prioridad de pin .

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

Nube translúcida
fuente
1
Buen comando pero no enumera el repositorio como se solicitó.
bjhend
En realidad lo hace .
TranslucentCloud
No entiendes Se pueden instalar PPA adicionales. Es importante saber si un paquete proviene de dicho PPA. De hecho, eso es lo que estoy tratando de resolver en este momento: si es así, puedo eliminar el PPA y reducir el riesgo de problemas.
reinierpost
Sí, tiene razón, versionssimplemente puede verificar los valores de fijación aptos de los paquetes dados, no los repositorios asociados. Sin embargo, sigue siendo útil si conoce todos sus repositorios y cómo se anclan.
TranslucentCloud
6

Lamentablemente, esta información no se registra durante la instalación del paquete. Puede hacer una suposición decente si el repositorio todavía está en la lista de fuentes y el repositorio todavía tiene el paquete:

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

apt-cache showpkg muestra datos de la base de datos del repositorio (no 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 la actualización.

canaca
fuente
2

O, inspirado por 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

Tim
fuente