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 updateLlegados 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/preferencesy 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_._Releasecuya salida será:
Archive: unstable
Origin: xmixahlx
Label: xmixahlx_rarewares-unstable
Architecture: i386
# cat www.debian-multimedia.org_dists_unstable_ReleaseOrigin: 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_ReleaseOrigin: 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.confAgregamos 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 updateDe ahora en adelante tendremos dos posibilidades para instalar un paquete:
- El método "normal":
- O como segunda opción, usando la opción '-t':
# apt-get install nombre_paqueteque utiliza paquetes provenientes de la versión impuesta por defecto (en este caso testing) en apt.conf.
# apt-get install -t version_de_debian nombre_paqueteque 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