Sistemas mixtos
- 1. Introducción
- 2. Editar sources.list
- 3. Configuración de /etc/apt/preferences y /etc/apt/apt.conf.d/local
- 4. Conocer información sobre un sistema mixto
1. Introducción
Frecuentemente tenemos la necesidad de instalar una nueva versión de un paquete dado, pero dicho paquete no está disponible para la rama Debian que estamos usando.
El caso más frecuente es probablemente aquel en una instalación de testing, en la cual necesitamos (o sufrimos de versionitis) instalar también paquetes presentes en la rama de desarrollo unstable o experimental, o también el hecho de querer usar un repositorio con paquetes particulares, pero compilados para una rama diferente a la nuestra.
APT puede ser nuestro fiel amigo en estas circunstancias, permitiendo el uso de fuentes de ramas diferentes (y satisfacer las dependencias) sin obligarnos a una actualización del sistema entero y sin tener que enloquecer para resolver las dependencias, conflictos e inconsistencias varias.Esta característica es llamada también apt-pinning, nombre dado por el pin que se le otorga en el archivo de preferencias, como veremos a continuación.
Lo que haremos en esta guía será utilizar paquetes Debian provenientes de:
- testing + unstable + experimental + multimedia
pero los pasos son fácilmente realizables también para otras situaciones como:
- unstable + experimental
- stable + testing
- stable + unstable
- stable + testing + unstable
- etc...
Nota: No se debe abusar de apt-pinning. La finalidad de este articulo es tener un sistema testing al que podemos instalar ocasionalmente algunos paquetes de Sid o Experimental. Abusar a capricho instalando muchos paquetes de diferentes ramas puede hacer un sistema totalmente inestable.
2. Editar sources.list
Como primera medida realizamos una copia de seguridad de nuestro /etc/apt/sources.list, hecho esto lo editamos con nuestro editor favorito y agregamos los repositorios que utilizaremos:
### Debian oficial -- Testing
deb http://ftp.fr.debian.org/debian/ testing main contrib non-free
### Debian oficial -- Testing Seguridad.
deb http://security.debian.org/ jessie/updates main contrib non-free
#Multimedia testing
deb http://www.deb-multimedia.org testing main non-free
### Debian oficial -- Sid
deb http://ftp.us.debian.org/debian unstable main contrib non-free
### Debian oficial -- Experimental
deb http://ftp.fr.debian.org/debian experimental main
Guardamos el archivo y ejecutamos en consola:
# apt update
Nota: Recordar que si es una instalación nueva y agregáis el repositorio deb-multimedia debéis añadir la llave publica
3.Configuración de /etc/apt/preferences y /etc/apt/apt.conf.d/local
Llegados a este punto debemos preparar dos archivos que no están presentes en nuestro sistema Debian: se trata de los archivos /etc/apt/preferences y /etc/apt/apt.conf.d/local, que serán los encargados de instruir a APT sobre como gestionar las dependencias de los paquetes, informándolo de como debe comportarse en caso de conflictos u otros problemas.
Creamos el archivo /etc/apt/preferences:
# nano /etc/apt/preferences
Y agregamos las siguientes directivas:
Package: *
Pin: release o=Unofficial Multimedia Packages
Pin-Priority: 950
Package: *
Pin: release a=testing
Pin-Priority: 850
Package: *
Pin: release n=sid
Pin-Priority: 800
Package: *
Pin: release a=experimental
Pin-Priority: 750
El pinning puede ser redirigido a un archivo, un origen, la versión de un paquete, un componente, etc...
Con "0=" se especifica el origen; es decir, la distribución del paquete, con "a=" la rama (oldstable, stable, testing, unstable y experimental) y con "n=" el código de la rama (Wheezy, Jessie, Stretch, sid, experimental).
Los números de prioridad tienen además un significado añadido, que a continuación se comenta. Llamando P a dicho número, tenemos:
- P»1000: se fuerzan versiones de paquetes, aunque estas sean inferiores.
- 990«P«=1000: siempre que la versión instalada no sea más reciente, el paquete es instalado, aunque no provenga de la rama principal.
- 500«P«=990: siempre que el paquete instalado sea más antiguo y que no exista una versión en la rama principal, se instalará la versión.
- 100 P <=500: El paquete se instala siempre y cuando no exista el mismo paquete en cualquiera de las otras ramas. Tampoco se instala en caso de tener una versión del paquete instalada que sea más reciente..
- 0«P«=100: la versión solo se instala si no hay ninguna versión del paquete instalado.
- P«0: no se instala la versión.
A raíz de estos resultados, cabría preguntarse: ¿Es viable hacer una des-actualización en Debian?. Respuesta: teóricamente sí, aunque en la práctica es complicado y lo más probable es que traiga de su mano complicaciones. Ha de notarse que el sistema de paquetes de Debian está preparado para actualizar paquetes, no para des-actualizarlos.
Si aun así, por simple curiosidad, quieres saber como se podría des-actualizar un paquete o la distribución entera, bastaría con indicar que la versión del paquete o la rama deseada tenga una prioridad superior a 1000.
Este dato es rastreado de modo inequívoco por APT cuando "hurga" el interior de los directorios "release" presente en todos los repositorios oficiales.
Ahora creamos el archivo /etc/apt/apt.conf.d/local:
# nano /etc/apt/apt.conf.d/local
Agregamos lo siguiente:
APT::Default-Release "testing";
APT::Cache-Limit 55000000;
Apt::Get::Purge;
APT::Clean-Installed;
APT::Get::Fix-Broken;
APT::Get::Fix-Missing;
APT::Get::Show-Upgraded "true";
Hacemos nuevamente la actualización de la base de datos de paquetes:
# apt update
De ahora en adelante tendremos dos posibilidades para instalar un paquete:
El método "normal" que utiliza paquetes provenientes de la versión impuesta por defecto (en este caso testing) en /etc/apt/apt.conf.d/local
# apt install nombre_paquete
O como segunda opción, usando la opción -t , que realizará la instalación del paquete deseado para la versión especificada, resolviendo las dependencias automáticamente.
# apt install -t version_de_debian nombre_paquete
4. Conocer información sobre un sistema mixto:
Antes que nada hay que instalar el paquete apt-show-versions:
# apt install apt-show-versions
Para saber cuántos paquetes tenemos por cada rama:
apt-show-versions -b|awk 'BEGIN{FS="/"}NF==2{a[$2]++}NF!=2{a["no oficial"]++}END{for (i in a) print i, a[i]}'
Para saber qué paquetes tenemos en ciertas rama:
apt-show-versions -b|awk 'BEGIN{FS="/"}$2=="rama"'