Apt pinning para principiantes

¿Corres Debian? ¿Estás molesto por el hecho de que Debian estable siempre parece estar desactualizado?

Mostraré una forma para tener un sistema en el que apt mezcla fuentes de estable, testing e inestable. Esto permitirá mantener un sistema estable en su mayor parte, pero que permite obtener las últimas geniales versiones de aquellos paquetes en los que estés más interesado.

¿Por qué hacer esto? Estable está soportado por el Equipo de Seguridad. Testing e inestable no lo están. Para servicios que no son críticos, como tu programa de correo o tu gestor de ventanas, esto no es algo tan importante, dado que las nuevas versiones probablemente tendrán características en las que estás interesado. Es para obtener esos paquetes para los que resulta perfecto poder hacer pinning a una versión más reciente que la estable.

El primer paso es establecer /etc/apt/sources.list para que incluya la típica sección para estable, más las fuentes testing e inestable que deseas.

Un sources.list sencillo podría ser éste:

  #Stable

  deb http://ftp.rediris.es/debian stable main non-free contrib

  #Testing

  deb http://ftp.rediris.es/debian testing main non-free contrib

  #Unstable

  deb http://ftp.rediris.es/debian unstable main non-free contrib  deb-src http://ftp.rediris.es/debian unstable main non-free contrib  

Probablemente podrías querer añadir espejos adicionales, security.debian.org o más líneas deb-src.

El siguiente paso es crear el fichero /etc/apt/preferences. Aquí es donde el pinning tiene lugar. Normalmente la versión más alta de un paquete disponible, generalmente la disponible en inestable, gana. Pero vamos a controlar eso.

Un fichero de preferencias sencillo podría parecer así:

  Package: *  Pin: release a=stable  Pin-Priority: 700

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

  Package: *  Pin: release a=unstable  Pin-Priority: 600  

Nótense los valores descendentes. Ahora estable tiene la prioridad pin más alta, así que sus paquetes serán instalados preferentemente antes que los de testing o inestable.

Mi auténtico fichero de preferencias es el que ves encima.

Podrías encontrarte con éste error:

  # apt-get update

  Now we are ready to apt-get update. This will add the new repositories to apt's list.  E: Dynamic MMap ran out of room

  You may find that you receive an error like the following:

  E: Dynamic MMap ran out of room  E: Error occured while processing sqlrelay-sqlite (NewPackage)  E: Problem with MergeList /var/lib/apt/lists/ftp.rediris.es_debian_dists_woody_contrib_binary-i386_Packages  E: The package lists or status file could not be parsed or opened.  

Esto ocurre porque la caché de apt es demasiado pequeña para contener todos los paquetes de las tres distribuciones sumadas. Esto es fácil de corregir, símplemente añádase la siguiente línea a /etc/apt/apt.conf.

  APT::Cache-Limit "8388608";  

Para instalar un nuevo paquete, el procedimiento es el acostumbrado, apt-get install paquete. Si existe en estable, ese será el instalado. Si sólo existe en inestable, será esta la versión obtenida.

¿Y si el paquete existe en estable y en inestable, pero queremos la versión inestable? Hay dos formas de hacerlo, cada una con una sintaxis diferente, y cada una con un resultado ligeramente distinto.

  # apt-get install paquete/unstable  

Esto instalará la versión inestable del paquete, aún intentando resolver todas las dependencias desde la distribución estable. Podría no funcionar, pero al menos te dirá por qué.

  # apt-get install zsh/unstable  Reading Package Lists... Done  Building Dependency Tree... Done  Selected version 4.0.6-7 (Debian:unstable) for zsh  Some packages could not be installed. This may mean that you have  requested an impossible situation or if you are using the unstable  distribution that some required packages have not yet been created  or been moved out of Incoming.

  Since you only requested a single operation it is extremely likely that  the package is simply not installable and a bug report against  that package should be filed.  The following information may help to resolve the situation:

  Sorry, but the following packages have unmet dependencies:  zsh: Depends: libc6 (>= 2.2.5-13) but 2.2.5-11.1 is to be installed  E: Sorry, broken packages  

O bien:

  # apt-get -t unstable install paquete    

Lo cual instalará la versión inestable del paquete, aún intentando resolver las dependencias también desde inestable. Lo que podría dar un mejor resultado.

  # apt-get -t unstable install zsh      Reading Package Lists... Done  Building Dependency Tree... Done  The following extra packages will be installed:  libc6 libc6-dev libc6-pic libdb1-compat locales   The following NEW packages will be installed:  libdb1-compat   5 packages upgraded, 1 newly installed, 0 to remove and 394  not upgraded.  Need to get 11.6MB of archives. After unpacking 606kB will be used.  Do you want to continue? [Y/n]   

¡Eso es todo!

Armado con un sources.list lo más completo posible, y un fichero de preferencias mínimo, es posible tener un sistema que combina lo mejor de todas las distribuciones Debian.

¡Diviértete!

Traducido y ligeramente adaptado de Apt-Pinning for Beginners de John H. Robinson, IV. Ten la amabilidad de añadir un comentario si encuentras cualquier incorrección.

¿Te pareció interesante? Sé tan amable de menear este artículo en tu agregador favorito; Linuxfera, Linux Rank o tuxéame.

Artículos relacionados

apt Debian Linux

Bookmark and Share

3 Respuestas to “Apt pinning para principiantes”

  1. Bueno… nada del otro mundo escribes aquí

  2. Muchas Gracias, justo lo que estaba necesitando.-

  3. Bonito manual.. No conocia sobre el, ahora no lo puedo aplicar por que tengo unstable/experimental, luego probare con un estable

Deja una Respuesta

Sólo tres días tras tu tercer comentario en el sitio identificándote utilizando la misma información, el enlace de tu firma pasará a ser válido para los buscadores.