Hoy hablamos de como realizar apt-pinning en Debian. Muchos usuarios usan Debian Stable o Debian Testing y se desesperan por no poder disponer de las últimas versiones de paquetes y tener que usar versiones de software que van 3 o 4 versiones por detrás de la última versión.

Mediante el apt-pinning en Debian podemos solucionar este problema ya que sin necesidad de cambiar de rama podremos instalar paquetes de cualquiera de las ramas existentes de Debian. Por lo tanto en el caso que usemos Debian Testing podremos instalar paquetes y software de la rama Unstable o experimental.

El primer paso antes de empezar es asegurar que nuestro sistema esta completamente actualizado. Así una vez realizados los pasos para aplicar apt-pinning en Debian podremos intuir si nuestro apt.conf y nuestro fichero de preferences están bien configurados. Para asegurar que nuestro sistema esta bien actualizado tecleamos los siguientes comandos en la terminal:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade

APT PINNING EN DEBIAN TESTING

El objetivo a conseguir es un sistema cuya rama principal sea testing y además que podamos disponer de los paquetes de la ramas Unstable y Experimental. Para ello seguimos los siguientes pasos:

1- Añadir los repositorios de las distintas ramas en nuestro sources.list

En este caso añadimos los repositorios de Unstable y Experimental. Tecleamos:

sudo gedit /etc/apt/sources.list

Nuestro sources.list tiene que quedar de la siguiente forma:

## Paqueteria del sistema Debian Testing
  deb http://ftp.de.debian.org/debian/ testing main contrib non-free
  deb-src http://ftp.de.debian.org/debian/ testing main contrib non-free
## Actualizaciones de seguridad Debian Testing
  deb http://security.debian.org/ testing/updates main contrib non-free
  deb-src http://security.debian.org/ testing/updates main contrib non-free
## Repositorio para incluir los paquetes de Debian Unstable
  deb http://ftp.us.debian.org/debian unstable main non-free contrib
## Repositorio para incluir los paquetes de Debian experimental
  deb http://ftp.fr.debian.org/debian experimental main non-free contrib
Nota: Ir con cuidado en los repositorios. No usar nombres de versiones Wheezy, Lenny o cualquier otro. Hay que vigilar ya que tanto en la configuración del preferences como la del apt.conf apuntaran a las ramas y no a las distribuciones. 

2- Configurar el fichero apt.conf

Dentro de la ubicación /etc/apt es altamente recomendable crear el fichero apt.conf. Este fichero nos servirá para configurar el conjunto de herramientas apt. Para crear el fichero entramos en la terminal y tecleamos:

sudo gedit /etc/apt/apt.conf

Introducimos el siguiente código dentro del archivo:

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";

Con este código conseguimos::

– Definir a Debian Testing como nuestra rama principal.

– Limitar el cache que vamos a utilizar en el proceso de actualización de paquetes.

– Borrar los archivos de configuración de todos los paquetes desinstalados.

– Arreglar el sistema en caso de detectar dependencias rotas.

3- Creación del fichero preferences

Dentro de la ubicación /etc/apt tenemos que crear el fichero preferences. El contenido del fichero  preferences es el que indicará los paquetes que son seleccionados para la instalación. En otras palabras en este fichero indicaremos que paquetes de cada una de las ramas se instalaran y bajo que circunstancias.

Abrimos la terminal y tecleamos:

sudo gedit /etc/apt/preferences
Añadimos el siguiente contenido en el archivo:
Package: *
Pin: release a=testing
Pin-Priority: 900
Package: *
Pin: release a=unstable
Pin-Priority: 600
Package: *
Pin: release a=experimental
Pin-Priority: 50
El significado de cada una de las prioridades que indicamos dentro de las gamas testing, unstable y experimental es:
Prioridad: P >1000: El paquete si instala aunque sea más antiguo que el paquete que tenemos instalado. (De este modo teóricamente es posible cambiar incluso de rama en Debian)
Prioridad:  <990 P <=1000: El paquete se instala aunque no provenga de la rama principal. Si existe una versión más reciente del paquete previamente instalado el paquete no se instalará.
Prioridad : <500 P <=990: El paquete se instala siempre y cuando no exista una versión en la rama principal o tengamos una versión instalada de este paquete que sea más actual.
Prioridad : <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..
Prioridad : <0 P <=100: Solo se instala el paquete si no hay otra versión disponible en ninguna de las ramas existentes en nuestro sources.list.
Prioridad negativa: Nunca se instalará este paquete. (Teóricamente es equivalente a borrar un repositorio del sources.list)
Nota: La rama principal es la Testing. Se ha definido en el punto 2.

4- Comprobación del funcionamiento

Ya hemos terminado al apt-pinning en Debian. Ahora entramos en la terminal y actualizamos los repositorios mediante:

sudo apt-get update

Seguidamente intentamos aplicar las actualizaciones:

sudo apt-get dist-upgrade

Si todo funciona correctamente en teoría no tenemos que tener ninguna actualización. Si nos entran multitud de actualizaciones significa que algún parámetro esta fallando en nuestra configuración. En caso de encontrar multitud de actualizaciones abortar el proceso de actualización y averiguar donde está el error.

5- Instalar programas que no forman parte de nuestra rama principal

El apt-pinning en Debian ya está configurado y estamos en disposición de instalar paquetes de otras ramas.

Instalación sin forzar la actualización de dependencias

Para entender como hacerlo ponemos un ejemplo práctico. Si estamos en testing y queremos instalar gimp de la rama unstable tecleamos en la terminal:

apt-get install gimp/unstable

Con este comando instalamos el paquete gimp de la rama unstable. También hacemos que las dependencias del paquete gimp las intente buscar en la rama predefinida como predeterminada. En nuestro caso Testing.

Instalación forzando la actualización de dependencias

Para entender como hacerlo ponemos un ejemplo práctico. Si estamos en testing y queremos instalar gimp de la rama unstable tecleamos en la terminal:

apt-get -t unstable install gimp

Con este comando instalamos el paquete gimp de la rama unstable. También hacemos que las dependencias del paquete gimp las intente buscar en la rama unstable.

Nota: Cada vez que instalemos paquetes de distintas ramas hay que ir con cuidado y leer atentamente los mensajes.

6- Actualización del sistema

Cada vez que actualicemos el sistema hay que ir con mucho cuidado con los mensajes y advertencias y elegir sabiamente. Una elección errónea puede crearnos problemas de dependencias y tener que invertir tiempo para solucionarnos. Es aconsejable no abusar del recurso del apt-pinning porqué al final nuestro sistema puede ser un caos.

7- Visualización de que paquetes tenemos instalados para cada una de las ramas

Una vez tenemos instalados multitud de paquetes y de dependencias nos puede interesar tener un listado de los paquetes instalados de cada una de las ramas de Debian. Para ello les dejo el siguiente enlace:

https://geekland.eu/paquetes-de-debian-clasificados-por-rama/

APT-PINNING EN DEBIAN ESTABLE

En el caso de estar usando la rama estable el apt-pinning no es la solución más recomendable a la hora de disponer de paqueteria actualizada. En este caso la mejor opción es añadir los backports en nuestro el sources.list. De esta forma los problemas de dependencias serán muchos menores y tendremos un sistema mucho más limpio.

Para finalizar el post de apt-pinning en Debian dar las gracias al foro de daboweb por la transmisión de sus experiencias sobre este tema y a la wiki de esdebian.org.

Únete a la conversación

6 comentarios

    1. Gracias por escribir. Solo decirte que en cierto modo tu eres el responsable del contenido del blog. Tu podcast fue el principal detonante a la hora de engancharme a esto de Linux.

  1. si en sources.list incluimos:

    ## Repositorio para incluir los paquetes de Debian Unstable
    deb http://ftp.us.debian.org/debian unstable main non-free contrib

    ## Repositorio para incluir los paquetes de Debian experimental
    deb http://ftp.fr.debian.org/debian experimental main non-free contrib

    al updatear no nos actualiza los programas a la versión inestable?

    1. Hola Alberto

      No se mezclaran. Fíjate en los siguientes detalles del post:
      1- En el apt.conf estamos definiendo que nuestra rama principal es la testing.
      2- En el fichero preferences estamos definiendo las preferencias para cada una de las ramas. En este apartado según la prioridad que pongas a cada rama el comportamiento es diferente.

      Por lo tanto si haces lo que dice el post y lo haces bien no te pasará lo que comentas.

      Fíjate además que para instalar paquetes que no son de tu rama principal la sintaxis también es diferente. (tienes 2 opciones en función de si quieres forzar las dependencias o no)

      No obstante el apt-pinning tiene sus peligros. No hay que abusar o al final tendrás una mezcla descomunal. También puedes llegar a romper el sistema.

      puedes hacer tus pruebas y siempre leyendo los mensajes. Antes de instalar siempre te dará la opción de poner sí o no. Si ves que se instalan muchos paquetes pones que no.

  2. hola buenas,

    Estoy intentando hacer esto mismo en raspbian con una Pi 2b, pero con el apt.conf me da una lista de error muy grande y si borro el archivo me lanza > E: Invalid record in the preferences file /etc/apt/preferences, no Package header. Alguien me podría ayudar da muchísimos fallos con los paquetes libc6 y dependencia -bin -dev …. entre otros mandb… gracias de ante mano

    He seguido el tuto al pie de la letra pero creo que es por que es para armhf que lo que corre raspbian ahora en pi gracias.

    1. Hola buenas,

      El contenido del artículo es para aplicarlo en distribuciones Debian. No está pensado para una Raspberry Pi.

      A pesar de esto en una Pi te debería funcionar siempre y cuando añadas los repositorios [armhf] de Debian. Pero hacer esto carece de sentido porque Raspbian está basado en Debian y tendrás los mismos paquetes.

      Saludos

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.