¿Qué es APT Pinning?
Pinning te permite obtener e instalar un paquete en particular de una version(stable, testing, unstable) sin tener que actualizar el sistema completo de esa versión. Pinning es usualmente(no siempre) usado para instalar uno o mas paquetes de una version futura( unstable es considerada posterior a testing la cual es posterior a stable). Hay que tener en cuenta que los paquetes tienen dependencias que pueden generar conflictos, por lo tanto el pinning puede causar problemas.
¿Cómo hacer APT Pinning en Debian?
Advertencias antes de comenzar con Pinning
Cuando haces Pinning, **tú mismo debes asegurarte de la compatibilidad entre paquetes** ya que Debian no lo garantiza. Hacer Pinnug es completamente opcional, y Debian no fomenta el pinning win una completa consideración
Hacer esto puede romper el sistema, si estas usando Debian Stable considera primero usar [Backports](https://wiki.debian.org/Backports)
En este caso vamos a hacer a modo de ejemplo un Pinngin en stable con testing. Se pueden usar mas de una rama , por ejemplo Stable, Testing y unstable en simultaneo.
Para el proceso del pinning solo dos archivos estan involucrados:
- /etc/apt/sources.list
- /etc/apt/preferences
1 - Añadir los repositorios de las ramas extras a nuestro sources-list
Abrimos una consola nos logueamos como root y hacemos tipeamos lo siguiente:
# nano /etc/apt/sources.list
Si nunca modificamos el sources.list debería ser algo así:
#
# deb cdrom:[Debian GNU/Linux stable _Buster_ - Official Snapshot amd64 NETINST 201807$
#deb cdrom:[Debian GNU/Linux stable _Buster_ - Official Snapshot amd64 NETINST 2018073$
deb http://ftp.de.debian.org/debian/ stable main non-free contrib
deb-src http://ftp.de.debian.org/debian/ stable main non-free contrib
deb http://security.debian.org/debian-security stable/updates main contrib non-free
deb-src http://security.debian.org/debian-security stable/updates main contrib non-free
# This system was installed using small removable media
# (e.g. netinst, live or single CD). The matching "deb cdrom"
# entries were disabled at the end of the installation process.
# For information about how to configure apt package sources,
# see the sources.list(5) manual.
Y agregamos el o los repositorios de las ramas que queremos para hacer nuestro sistema mixto, en este caso agrego el repositorio de Testing:
deb http://ftp.de.debian.org/debian/ testing main non-free contrib
2 - Crear el archivo /etc/apt/preferences
El el archivo preferences es donde toma lugar el Pinning. Este fichero es el que indica desde que rama se instalaran los paquetes y bajo que condiciones, en base a su prioridad.
Entonces tecleamos:
# /etc/apt/preferences
Y volcamos el siguiente contenido:
Package: *
Pin: release a=stable
Pin-Priority: 900
Package: *
Pin: release a=testing
Pin-Priority: 600
Explicando un poquito esto:
- Con *Package: ** estamos indicando que la configuración se aplique a todos los paquetes(debido al comodín *)
- Pin: release a= es para indicar sobre que rama se aplican las prioridades definidas
- Pin-Priority: es para definir la prioridad.
Acorde a apt_preferences las prioridades trabajan de la siguiente forma:
P >= 1000: causa la instalación de una versión incluso si implica instalar una versión antig
ua.
990 <= P < 1000: implica que el paquete se instala aunque no provenga de la rama principal, a menos que la version instalada sea más reciente.
500 <= P < 990 : instala el paquete siempre y cuando no hay una versión disponible del paquete en la rama principal o tengamos una versión más reciente instalada.
100 <= P < 500 : instala el paquete siempre y cuando no hay una versión disponible en las otras ramas o tengamos una versión más reciente instalada del mismo paquete.
0 < P < 100: el paquete si instala si no hay una versión disponible en ninguna de las ramas.
P < 0: Previene que el paquete sea instalado.
P = 0: No tiene un comportamiento definido, no usar
Acorde a esto, para el ejemplo que estamos siguiendo, siempre estaremos instalando paquetes de la rama stable, a menos de que el paquete que querramos instalar no exista en stable, en este caso en caso de existir en testing, se instalara desde ahí. Esto tambien aplica a sus dependencias.
2b - Configurar la rama predeterminada
Como vimos las las prioridades trabajan teniendo en cuenta cual es la rama predeterminada, por lo tanto deberiamos indicarle esto al sistema, esto es algo opcional pero almamente recomendable, dependera el usarlo o no decuardo a las prioridades que uno elija. El fichero que debemos crear es para configurar la rama por default es apt.conf, entonces tipeamos lo siguiente:
# /etc/apt/apt.conf
Y dentro volcamos algo como:
APT::Default-Release "testing";
Se pueden configurar muchas mas cosas, como cache limite, purgas de paquetes, forma de actuar ante paquetes rotos, etc, pero para nuestro caso nos limitamos solamente a definir la rama principal de nuestro sistema Debian.
3 - Instalando paquetes de otras ramas(testing)
Una vez que terminanos de configurar todo, nos falta actulizar APT para que tome todos los cambios y lista de repositorios, para esto hacemos:
# apt-get update
Para instalar paquetes lo hacemos de la forma habitual, y APT selecionara las fuentes de donde instalar deacuerdo a como configuramos las prioridades mediante APTPreferences.
# apt-get install firefox
Para instalar explicitamente(o forzar) un paquete de otra rama debemos indicarselo a apt-get(no es necesario si el paquete no existe en la rama principal), esto se puede hacer de dos formas diferentes y depende de como queremos que se traten las dependencias del paquete:
Instalación sin forzar la actualización de dependencias
# apt-get install firefox/testing
De esta forma Firefox se instala desde Testing y en la medida de los posible sus dependencias se toman de la rama principal, en nuestro caso stable.
Instalación forzando la actualización de dependencias
# apt-get install -t testing firefox
En este caso firefox y sus dependencias se toman de testing, a menos de que ya tengamos instaladas dependencias en versiones porteriores a las disponibles en testing.
Estas dos formas de instalación omiten lo que hemos configurado con APT Preferences