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.
Bueno… nada del otro mundo escribes aquí
Muchas Gracias, justo lo que estaba necesitando.-
Bonito manual.. No conocia sobre el, ahora no lo puedo aplicar por que tengo unstable/experimental, luego probare con un estable