Cómo excluir un paquete específico de apt-get Upgrade

Cuando trabajas en algunos proyectos, a veces necesitas la estabilidad de tu entorno. La actualización de un paquete puede hacer que todo el proyecto falle. A veces, actualizamos accidentalmente esos paquetes, lo que crea un problema grave en el servidor. Por eso puede ser importante mantener una versión específica de un paquete.

Este tutorial le mostrará cómo puede excluir un paquete específico de la actualización en distribuciones de Ubuntu o Debian.

Leer también: Cómo instalar una versión específica del paquete usando apt-get

1) Excluir paquetes con algunos comandos

Existen varios métodos para excluir o retener un paquete específico durante la actualización completa del sistema. Es posible marcar un paquete como retenido. En este artículo, usaremos el paquete virtualbox para nuestros ejemplos. Puedes ver la versión instalada

# dpkg -l | grep virtualbox
ii  virtualbox    5.0.18-dfsg-2build1   amd64   x86  virtualization solution - base binaries

Ahora puedes ver que tenemos una versión actualizada disponible.

# apt list --upgradable
Listing... Done
virtualbox/xenial-updates 5.0.40-dfsg-0ubuntu1.16.04.2 amd64 [upgradable from: 5.0.18-dfsg-2build1]

Puede marcar paquetes usando los siguientes comandos

apto-marca

Puedes usar el apt-mark comando seguido por el hold opción. Esto evitará que el paquete se instale, actualice o elimine automáticamente. La sintaxis es la siguiente

apt-mark hold package

Puedes usarlo prácticamente como se muestra a continuación.

# apt-mark hold virtualbox 
virtualbox set on hold.

Ahora puedes comprobar lo siguiente

# apt upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
  virtualbox
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

Puede ver que no puede actualizar el paquete.

Para desmarcar, use la siguiente sintaxis

apt-mark unhold package

Prácticamente tienes el siguiente comando

# apt-mark unhold virtualbox
Canceled hold on virtualbox.

dpkg

También puede utilizar el dpkg --set-selection comando para marcar el paquete La sintaxis es la siguiente

# echo " hold" | dpkg --set-selections

Prácticamente, puede hacerlo de la siguiente manera.

# echo "virtualbox hold" | dpkg --set-selections

No tiene ninguna devolución que muestre el resultado. Entonces, verifique directamente con una actualización

# apt upgrade
Reading package lists... Done
Building dependency tree 
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
 virtualbox
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

Puedes ver que funciona.

Ahora para deshacer, el comando es diferente y respeta la sintaxis

echo "package install" | sudo dpkg --set-selections

entonces, usa el comando

# echo "virtualbox install" | dpkg --set-selections

No tendrás devolución. Como ya somos usuarios root, no usamos el sudo

aptitud

También puede utilizar el comando aptitude. De forma predeterminada, este comando no está presente en su sistema, por lo que debe instalarlo como se muestra a continuación.

# apt install aptitude
Reading package lists... Done
Building dependency tree 
Reading state information... Done
The following additional packages will be installed:
 aptitude-common libcwidget3v5

Para marcar un paquete con el comando, use la sintaxis

aptitude hold package

Cuando marca un paquete con aptitude, no tiene devolución.

# aptitude hold virtualbox
No packages will be installed, upgraded, or removed.
0 packages upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
Need to get 0 B of archives. After unpacking 0 B will be used.

Si comprueba el resultado con un aptitude upgrade, no tendrá la mención de un paquete marcado pero lo tendrá si lo intenta apt upgrade.

Puede deshacer con la sintaxis

aptitude unhold package

como abajo

# aptitude unhold virtualbox
No packages will be installed, upgraded, or removed.
0 packages upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

seleccionar

Puedes usar el dselect comando que es un front-end para dpkg que se usa para administrar paquetes de software en Debian y distribuciones de Linux basadas en Debian. No está presente de forma predeterminada, por lo que debe instalarlo

# apt install dselect

Ejecuta el comando

Ahora lea la ayuda detenidamente.

Ahora puede usar el teclado espacial para salir de la ayuda y encontrar el paquete que desea guardar. Puedes usar /hacer una investigación

Ahora puede sostener el paquete con el H o =

ahora puedes salir con Q. Se abrirá el primer menú, elija Salir. Puede comprobar actualizando

# apt upgrade
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Calculating upgrade... Done
The following packages have been kept back:
  virtualbox
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

Puedes ver que funciona.

Si desea desmarcar el paquete, deberá utilizar el + en vez de H o = solía mantener para tener tres estrellas en el resultado como se muestra a continuación

2) Bloquear el paquete usando archivos de configuración de apt

Una forma de marcar el paquete es editar el /etc/apt/preferences Archivo. Para no actualizar un paquete mientras se actualiza todo el sistema, debemos establecer una prioridad de pin apto menor que cero (0). si el archivo no existe, debe crearlo. Debes respetar la sintaxis a continuación

Package: <package-name> ('*' for all packages)
Pin: release * (o=Ubuntu for Ubuntu origin)
Pin-Priority: <less than 0>

En la línea Release Pin, puede agregar el creador de los paquetes y para los números de Prioridad de PIN, un número más alto significa más preferencia y -1 es igual a ignorar ese paquete. Hay algunas otras opciones que se pueden utilizar.

Para bloquear el paquete virtualbox, edite el archivo como se muestra a continuación

Package: virtualbox
Pin: release o=Ubuntu
Pin-Priority: -1

guardar y Salir. Es todo lo que necesita para bloquear el paquete. Para recuperar el paquete, puede comentar las líneas del archivo o simplemente eliminar el archivo.

Puede ver que es posible usar algunos métodos para bloquear un paquete. Esto puede resultar útil para mantener una versión estable de su proyecto. Puede elegir su método preferido. No es necesario utilizar dos o más métodos para el mismo objetivo.