.png)
Quiero mantener versiones de paquetes en mis servidores para evitar que cambios importantes en la infraestructura rompan nuestro código (cambios de mongodb 2.4 a 2.6, por ejemplo).
Sé que puedo (por ejemplo), apt-mark hold package
por ejemplo, pero luego dejo de recibir parches de seguridad y actualizaciones menores.
También me gustaría instalar paquetes configurando una versión principal (pero no menor)
por ejemplo, sé que puedo:
sudo apt-get install -y rabbitmq-server=3.3.5
Pero solo quiero fijar la instalación a una versión principal (3.*)
¿Cómo se puede lograr esto?
Respuesta1
Puede anclar a un conjunto comodín de números de versión. Verman apt_preferences
para un ejemplo:
El formulario específico asigna una prioridad (una "Prioridad de PIN") a uno o más paquetes específicos con una versión o rango de versiones específico. Por ejemplo, el siguiente registro asigna una prioridad alta a todas las versiones del paquete Perl cuyo número de versión comienza con "5.10". Se pueden separar varios paquetes por espacios.
Package: perl Pin: version 5.10* Pin-Priority: 1001
Entonces, por ejemplo, en Ubuntu 16.04, donde xenial-backports
tiene una prioridad predeterminada de 100, la política inicial debhelper
es:
$ apt-cache policy debhelper
debhelper:
Installed: 9.20160115ubuntu3
Candidate: 9.20160115ubuntu3
Version table:
10.2.2ubuntu1~ubuntu16.04.1 100
100 http://jp.archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages
100 http://jp.archive.ubuntu.com/ubuntu xenial-backports/main i386 Packages
*** 9.20160115ubuntu3 500
500 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
500 http://jp.archive.ubuntu.com/ubuntu xenial/main i386 Packages
100 /var/lib/dpkg/status
Luego, fijé los backports a una prioridad más alta:
$ cat /etc/apt/preferences.d/debhelper
Package: *
Pin: release v=16.04,o=Ubuntu,a=xenial-backports,n=xenial,l=Ubuntu,c=main,b=amd64
Pin-Priority: 600
$ apt-cache policy debhelper
debhelper:
Installed: 9.20160115ubuntu3
Candidate: 10.2.2ubuntu1~ubuntu16.04.1
Version table:
10.2.2ubuntu1~ubuntu16.04.1 600
600 http://jp.archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages
100 http://jp.archive.ubuntu.com/ubuntu xenial-backports/main i386 Packages
*** 9.20160115ubuntu3 500
500 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
500 http://jp.archive.ubuntu.com/ubuntu xenial/main i386 Packages
Nuevamente fijando 9.*
versiones de debhelper
a una prioridad aún mayor:
$ cat /etc/apt/preferences.d/debhelper
Package: *
Pin: release v=16.04,o=Ubuntu,a=xenial-backports,n=xenial,l=Ubuntu,c=main,b=amd64
Pin-Priority: 600
Package: debhelper
Pin: version 9.*
Pin-Priority: 800
$ apt-cache policy debhelper
debhelper:
Installed: 9.20160115ubuntu3
Candidate: 9.20160115ubuntu3
Version table:
10.2.2ubuntu1~ubuntu16.04.1 600
600 http://jp.archive.ubuntu.com/ubuntu xenial-backports/main amd64 Packages
100 http://jp.archive.ubuntu.com/ubuntu xenial-backports/main i386 Packages
*** 9.20160115ubuntu3 800
500 http://jp.archive.ubuntu.com/ubuntu xenial/main amd64 Packages
500 http://jp.archive.ubuntu.com/ubuntu xenial/main i386 Packages
100 /var/lib/dpkg/status
Entonces solo necesitas crear un archivo /etc/apt/preferences.d/
que tenga:
Package: rabbitmq-server
Pin: version 3.*
Pin-Priority: 1001
Ningún repositorio tiene una prioridad superior a 1000 de forma predeterminada, 1001 es suficiente para forzar a apt a degradar si es necesario:
P >= 1000 hace que se instale una versión incluso si esto constituye una degradación del paquete.