Sistemas Mixtos

A raíz de un artículo anterior acerca de los repositorios Debian, surgieron dudas acerca de cómo tener un sistema mixto, así que acá está esta humilde guía.

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 + Marillat (multimedia/video) + Rarewares.org (multimedia/audio)

pero los pasos son fácilmente realizables también para otras situaciones como:

  • unstable + experimental
  • stable + testing
  • stable + unstable
  • stable + testing + unstable
  • etc...

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.br.debian.org/debian/ testing main contrib non-free

### Debian oficial -- Testing Seguridad.
deb http://security.debian.org/ testing/updates main contrib

### Debian oficial -- Sid
deb http://ftp.br.debian.org/debian/ unstable main contrib non-free

###  Debian oficial -- Experimental
deb http://ftp.de.debian.org/debian/ experimental main contrib

### Multimedia -- Audio -- Rarewares
deb http://www.rarewares.org/debian/packages/unstable ./

### Multimedia -- Video -- Marillat
deb http://www.debian-multimedia.org stable main
deb http://www.debian-multimedia.org unstable main

Guardamos el archivo y ejecutamos en consola:

#apt-get update

Llegados a este punto debemos preparar dos archivos que no están presentes en nuestro sistema Debian: se trata de los archivos preferences y apt.conf, 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 o=xmixahlx
Pin-Priority: 900

Package: *
Pin: release a=testing
Pin-Priority: 850

Package: *
Pin: release a=unstable
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 "o=" se especifica el origen; es decir, la distribución del paquete, con "a=" la rama (sarge, sid, stable, etc...).

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

  • 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 desactualizació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 desactualizarlos.

Si aun así, por simple curiosidad, quieres saber como se podría desactualizar 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.

Ejemplos:

Ejemplo 1)

# cd /var/lib/apt/lists
# cat www.rarewares.org_debian_packages_unstable_._Release

cuya salida será:

Archive: unstable
Origin: xmixahlx
Label: xmixahlx_rarewares-unstable
Architecture: i386

# cat www.debian-multimedia.org_dists_unstable_Release

Origin: Unofficial Multimedia Packages
Label: Unofficial Multimedia Packages
Suite: unstable
Version: None
Codename: sid
Date: Sat, 28 Jun 2008 10:21:17 UTC
Architectures: alpha amd64 armel hppa ia64 i386 mipsel powerpc sparc
Components: main
Description: This repository is mostly non-free
..............

Otro:

#cat security.debian.org_dists_testing_updates_Release

Origin: Debian
Label: Debian-Security
Suite: testing
Version: None
Codename: lenny
Date: Sat, 28 Jun 2008 09:30:14 UTC
Architectures: amd64 alpha arm armel hppa i386 ia64 mips mipsel powerpc s390 sparc
Components: updates/main updates/contrib updates/non-free
Description: Debian testing Security Updates
.................

Donde:

  • Archive o Suite = nos indica la rama a que pertenecen los paquetes (stable, testing. etc.);
  • Components = indica el tipo de componente (main, contrib, non-free);
  • Origin = especifica el propietario del repositorio;
  • Label = identifica el repositorio;
  • Architectures = la arquitectura de los paquetes contenidos en el repositorio (i386, sparc, etc.).

Ahora creamos el archivo apt-conf que como habíamos comentado antes, falta a la fiesta!

# nano /etc/apt/apt.conf

Agregamos lo siguiente:

APT::Default-Release "testing";
APT::Cache-Limit 15000000;
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-get update

De ahora en adelante tendremos dos posibilidades para instalar un paquete:

  1. El método "normal":
  2. # apt-get install nombre_paquete

    que utiliza paquetes provenientes de la versión impuesta por defecto (en este caso testing) en apt.conf.

  3. O como segunda opción, usando la opción '-t':
  4. # apt-get install -t version_de_debian nombre_paquete

    que realizará la instalación del paquete deseado para la versión especificada, resolviendo las dependencias automáticamente.



Los aportes para mejorar y completar esta guía son siempre bienvenidos

Referencias y ampliación: