Todavía hay muchas cuestiones en Debian que están pobremente documentadas, o directamente no documentadas. Un caso típico es conocer con exactitud desde qué repositorio proviene un paquete específico. Una pregunta muy lógica, especialmente cuando el sistema operativo en cuestión cuenta con paquetes provenientes de múltiples repositorios. Cierto paquete está causando problemas y quisiéramos saber desde qué repositorio provino.
Vamos directamente a un ejemplo
Este sistema Devuan cuenta con tres kernels Linux diferentes, cuyas versiones son 3.16, 4.6 y 4.9 respectivamente:
root@devuan:/home/emi# ll /boot/vmlinuz* -rw-r--r-- 1 root root 3024992 mar 7 21:32 /boot/vmlinuz-3.16.0-4-686-pae -rw-r--r-- 1 root root 3427984 jul 13 2016 /boot/vmlinuz-4.6.0-0.bpo.1-686 -rw-r--r-- 1 root root 3541216 abr 11 14:01 /boot/vmlinuz-4.9.0-0.bpo.2-686
En Debian y derivados, los kernels Linux son provistos por el paquete linux-image
.
Quisiéramos saber desde qué repositorio proviene el paquete linux-image-4.6.0-0.bpo.1-686
, el cual provee el kernel Linux 4.6.
En muchos blogs y foros en Internet, sugieren utilizar los comandos dpkg -s
(informa el estado de un paquete específico) o apt-cache policy
(muestra información detallada acerca de la prioridad de selección de un paquete específico). Veamos las salidas de ambos comandos:
root@devuan:/home/emi# dpkg -s linux-image-4.6.0-0.bpo.1-686 Package: linux-image-4.6.0-0.bpo.1-686 Status: install ok installed Priority: optional Section: kernel Installed-Size: 131448 Maintainer: Debian Kernel Team <Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo. >; Architecture: i386 Source: linux Version: 4.6.3-1~bpo8+1 Depends: kmod, linux-base (>= 4.3~), initramfs-tools (>= 0.110~) | linux-initramfs-tool Recommends: firmware-linux-free, irqbalance Suggests: linux-doc-4.6, debian-kernel-handbook, grub-pc | extlinux Breaks: initramfs-tools (<< 0.110~) Description: Linux 4.6 for older PCs The Linux kernel 4.6 and modules for use on PCs with one or more processors not supporting PAE. Homepage: https://www.kernel.org/
root@devuan:/home/emi# apt-cache policy linux-image-4.6.0-0.bpo.1-686 linux-image-4.6.0-0.bpo.1-686: Instalados: 4.6.3-1~bpo8+1 Candidato: 4.6.3-1~bpo8+1 Tabla de versión: *** 4.6.3-1~bpo8+1 0 100 /var/lib/dpkg/status
En ninguna de las salidas se hace mención alguna acerca del origen del paquete: ¿desde qué repositorio proviene este bendito paquete? En general estas herramientas suelen incluir dicha información, pero este no es el caso.
Examinando manualmente el archivo /var/lib/dpkg/status
(el cual contiene los estados de los paquetes disponibles) tampoco se obtiene referencia alguna acerca del repositorio desde donde proviene dicho paquete.
¿Qué significa ésto? Que se trata de un paquete que no existe en ninguno de los repositorios configurados actualmente en el sistema:
root@devuan:/home/emi# cat /etc/apt/sources.list | grep "deb " # deb http://ar.mirror.devuan.org/merged/ jessie main deb http://ar.mirror.devuan.org/merged/ jessie main deb http://ar.mirror.devuan.org/merged/ jessie-security main deb http://ar.mirror.devuan.org/merged/ jessie-updates main deb http://ar.mirror.devuan.org/merged/ jessie-backports main deb http://security.debian.org jessie/updates main
Es posible comprobar que el apquete no existe (o no se encuentra) buscando en los repositorios actuales:
root@devuan:/home/emi# apt-cache search linux-image-4.6.0-0.bpo.1-686 root@devuan:/home/emi# apt-cache search linux-image-4.9.0-0.bpo.2-686 linux-image-4.9.0-0.bpo.2-686-pae-dbg - Debugging symbols for Linux 4.9.0-0.bpo.2-686-pae linux-image-4.9.0-0.bpo.2-686-pae-unsigned - Linux 4.9 for modern PCs linux-image-4.9.0-0.bpo.2-686-unsigned - Linux 4.9 for older PCs linux-image-4.9.0-0.bpo.2-686 - Linux 4.9 for older PCs (signed) linux-image-4.9.0-0.bpo.2-686-pae - Linux 4.9 for modern PCs (signed)
Sí, en cambio, se encuentra el paquete linux-image-4.9.0-0.bpo.2-686
, tal como se observa en la salida.
Este es el caso, por ejemplo, de paquetes .deb
instalados manualmente utilizando dpkg
.
Pero bien, si no hemos hecho cambios en la configuración de los repositorios del sistema y este paquete fue instalado desde el gestor de paquetes (apt-get
) ¿cómo puede ser que este paquete no existe en ningún repositorio?
Lo que ocurre en estos casos, es que el paquete en cuestión existió en alguno de los repositorios en algún momento, y más tarde fue eliminado. Una búsqueda rápida en Google puede dar cuenta de ésto:
linux-image-4.6.0-0.bpo.1-686-pae: Bug in cpufreq driver
Con este ejemplo quise demostrar un caso excepcional, para entender que a veces las cosas pueden fallar o las recetas que encontramos en Internet pueden ser insuficientes. Y hace falta conocer y profundizar sobre el funcionamiento básico del gestor de paquetes, para que estas experiencias no nos tomen por sorpresa.
Un ejemplo donde sí funciona
Veamos ahora que, en la mayoría de los casos, la salida del comando apt-cache policy
suele dar correctamente la información sobre el origen de un paquete:
El paquete linux-image-3.16.0-4-686-pae
está instalado en la versión "3.16.39-1+deb8u2", la cual proviene del repositorio "jessie-security/main":
root@devuan:/home/emi# apt-cache policy linux-image-3.16.0-4-686-pae linux-image-3.16.0-4-686-pae: Instalados: 3.16.39-1+deb8u2 Candidato: 3.16.39-1+deb8u2 Tabla de versión: *** 3.16.39-1+deb8u2 0 500 http://ar.mirror.devuan.org/merged/ jessie-security/main i386 Packages 500 http://security.debian.org/ jessie/updates/main i386 Packages 100 /var/lib/dpkg/status 3.16.39-1 0 500 http://ar.mirror.devuan.org/merged/ jessie/main i386 Packages 3.16.7-ckt25-2 0 500 http://ar.mirror.devuan.org/merged/ jessie-updates/main i386 Packages
El paquete linux-image-4.9.0-0.bpo.2-686
está instalado en la versión "4.9.18-1~bpo8+1", la cual proviene del repositorio "jessie-backports/main":
root@devuan:/home/emi# apt-cache policy linux-image-4.9.0-0.bpo.2-686 linux-image-4.9.0-0.bpo.2-686: Instalados: 4.9.18-1~bpo8+1 Candidato: 4.9.18-1~bpo8+1 Tabla de versión: *** 4.9.18-1~bpo8+1 0 500 http://ar.mirror.devuan.org/merged/ jessie-backports/main i386 Packages 100 /var/lib/dpkg/status
Referencias
man dpkg man apt-cache man apt-get man sources.list
Fuente: linuxito