Veamos cómo usar zypper, el gestor de paquetes de software de openSUSE, para bloquear un paquete en concreto

openSUSE Tumbleweed, es una distribución de GNU/Linux «rolling release», esto quiere decir que se van actualizando las versiones de software instalado de manera contínua.
Como puedes leer en los resúmenes semanales que publico en el blog, todas las semanas se publican nuevas actualizaciones, ¡algunas semanas casi a diario!
Imaginemos que tenemos un software, por ejemplo el editor nano, que por alguna circunstancia no queremos que se nos actualice a versiones más modernas que la que tenemos funcionando ahora, o que no queremos que alguien lo desinstale, etc.
Veamos cómo podemos bloquear el paquete de software con la herramienta zypper, para que no se puedan realizar estas operaciones.
Para bloquear un paquete con zypper utilizaremos las herramientas locks (ll) addlock (al) removelock (rl) o cleanlocks (cl). Entre paréntesis están los comandos cortos para utilizar con zypper. Veamos unos ejemplos.
Listar paquetes bloqueados
Primero vamos a comprobar si existen bloqueos ya existentes en nuestro sistema, para ello ejecuto zypper locks o ll:
zypper ll
No hay bloqueos de paquete definidos.
Añadir un bloqueo
Ahora, como ejemplo vamos a añadir un bloqueo al software nano. Deberemos hacerlo con privilegios de root:
zypper al nano*
El bloqueo se ha añadido correctamente.
Si volvemos a ejecutar un listado de paquetes bloqueados veremos algo distinto:
zypper ll
# | Name | Type | Repository | Comment
--+--------+---------+--------------+-----------
1 | nano* | package | (cualquiera) |
Como véis, en vez de bloquear un paquete de software específico, escribiendo su nombre exacto, he bloqueado todos los paquetes de software que empiezan con nano (todos relativos a este editor de texto)
El editor nano quedará «congelado». No se actualizará a nuevas versiones si están disponibles en los repositorios, ni lo podremos eliminar del sistema. Vamos a probar a desinstalarlo con zypper:
zypper rm nano
Leyendo los paquetes instalados...
Resolviendo dependencias de paquete...
Problema: peticiones en conflicto
Solución 1: Se realizarán las siguientes acciones:
elimine el bloqueo para permitir la eliminación de nano-5.9-1.1.x86_64
elimine el bloqueo para permitir la eliminación de nano-lang-5.9-1.1.noarch
Solución 2: no perdir que se supriman todos los elementos solucionables que proporcionen nano.x86_64 = 5.9-1.1
Elija las soluciones usando '1' o cancele usando 'c' [1/2/c/i/?] (c): c
Ahora imaginemos que también queremos bloquear el paquete de Vim, porque hay una actualización que nos rompería alguna funcionalidad con un complemento que tenemos, o algo así…
zypper al vim
El bloqueo se ha añadido correctamente.
En este caso solo hemos bloqueado el paquete llamado literalmente vim, permitiendo que otros que empiezan por vim se actualicen normalmente.
zypper ll
# | Name | Type | Repository | Comment
--+--------+---------+--------------+-----------
1 | nano* | package | (cualquiera) |
2 | vim | package | (cualquiera) |
Bloquear un paquete de un repositorio específico
También podemos bloquear un paquete de software para que no se actualice desde un repositorio en concreto, permitiendo que si está disponible en otros repositorios se actualice desde allí:
zypper al -r repo-oss virtualbox*
Se bloqueará ese software desde dicho repositorio llamado repo-oss pero se podrá actualizar desde otros. Veamos el listado de bloqueos de nuevo:
zypper ll
# | Name | Type | Repository | Comment
--+-------------+---------+--------------+-----------
1 | nano* | package | (cualquiera) |
2 | vim | package | (cualquiera) |
3 | virtualbox* | package | repo-oss |
Eliminar bloqueos
Ahora vamos a eliminar el bloqueo de vim, ya que ya podemos volver a actualizarlo:
zypper rl vim
1 bloqueo se ha eliminado correctamente.
zypper ll
# | Name | Type | Repository | Comment
--+-------------+---------+--------------+-----------
1 | nano* | package | (cualquiera) |
2 | virtualbox* | package | repo-oss |
También podemos especificar no el nombre del paquete, si no el número dentro de la lista de bloqueos que ocupa. Eliminemos el bloqueo de nano:
zypper rl 1
Se ha eliminado correctamente el bloqueo especificado.
1 bloqueo se ha eliminado correctamente.
Quedando así nuestra lista de bloqueos:
zypper ll
# | Name | Type | Repository | Comment
--+-------------+---------+-------------+-----------
1 | virtualbox* | package | repo-oss |
Podremos volver a ejecutar el comando anterior, para ahora eliminar el que ocupa la posición 1. Eliminando todos los bloqueos que había en nuestro sistema.
Bloquear con YaST
Seguro que te lo estás preguntando, sí desde YaST también se puede hacer todo esto. Abrimos YaST y vamos a la sección instalar/desinstalar software.
Escribimos en el cuadro de búsqueda el paquete que queremos, por ejemplo nano otra vez, y con botón derecho seleccionamos la opción Protegido, no modificar.
Si son varios los paquetes que queremos seleccionar, escogeremos la opción Todos los de la lista y seleccionaremos Protegido, no modificar.
Para volverlos a activar, seleccionaríamos la opción Mantener con el botón derecho.
Espero que os haya resultado útil esta opción si no la conocías de openSUSE a la hora de gestionar paquetes de software. ¿Lo vas a poner en práctica ahora que has aprendido este comando? Compártelo en los comentarios.
Fuente: Wiki de openSUSE

Muy interesante. En especial el comando para bloquear el paquete de un repo en concreto.
Yo ya tenía esta listita… :
Para bloquear un paquete de un repo en concreto:
~/Descargas zypper ll ✔ 22:46:43
| Name | Type | Repository | Comment
—+———————-+———+————–+———–
1 | Mesa-dri-nouveau | package | (cualquiera) |
2 | kleopatra | package | (cualquiera) |
3 | kpat | package | (cualquiera) |
4 | kreversi | package | (cualquiera) |
5 | ksudoku | package | (cualquiera) |
6 | libvulkan1 | package | (cualquiera) |
7 | libvulkan1-32bit | package | (cualquiera) |
8 | marble | package | (cualquiera) |
9 | myspell-dictionaries | package | (cualquiera) |
10 | myspell-en_US | package | (cualquiera) |
11 | myspell-es | package | (cualquiera) |
12 | myspell-es_ES | package | (cualquiera) |
13 | ucode-amd | package | (cualquiera) |
14 | vulkan-tools | package | (cualquiera) |
15 | wine-gecko | package | (cualquiera) |
16 | wine-mono | package | (cualquiera) |
17 | wine-staging | package | (cualquiera) |
18 | wine-staging-32bit | package | (cualquiera) |
19 | winetricks | package | (cualquiera) |
Se me ha copiado una línea que tenía en el portapapeles. 😛