Cómo excluir un paquete específico de apt-get Upgrade
Al trabajar en algunos proyectos, a veces necesita la estabilidad de su 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 basado en Debian Linux distribuciones. 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
. 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
expediente. Para no actualizar un paquete mientras se actualiza todo el sistema, debemos establecer una prioridad de pin apt 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.