Inicio
» Cómo
»
Elimine de forma segura un bloqueo de Zypper en SUSE Linux Enterprise.
Elimine de forma segura un bloqueo de Zypper en SUSE Linux Enterprise.
Si SUSE Linux Enterprise informa que Zypper está bloqueado por otro proceso, primero deje que finalice cualquier actualización de software activa, operación de paquete YaST o tarea de mantenimiento automatizada. Verifique qué proceso de administración de paquetes es el propietario del trabajo antes de detener cualquier cosa. Si no se está ejecutando ninguna operación de paquete y el bloqueo persiste, investigue el estado obsoleto sin eliminar los archivos de bloqueo indiscriminadamente; luego vuelva a intentar Zypper. Un bloqueo de paquete creado con zypper addlockes un problema diferente y requiere una solución diferente.
¿Qué significa “bloqueado por otro proceso”?
Zypper y las herramientas de gestión de paquetes subyacentes protegen las transacciones de paquetes de cambios superpuestos. Una actualización, parche, instalación, tarea de software de YaST o actualización programada puede impedir temporalmente una segunda transacción. El bloqueo es un mecanismo de coordinación: eliminarlo mientras RPM o Zypper aún están modificando paquetes puede dejar la base de datos o el sistema de paquetes en un estado inconsistente.
Distinción verificada: un bloqueo de proceso impide operaciones de paquetes simultáneas; un bloqueo de paquete impide que se seleccione un paquete específico para su instalación, actualización o eliminación. La documentación de SUSE describe los bloqueos de paquetes como una función independiente. La guía de empaquetado RPM de SUSE explica los bloqueos de paquetes de Zypper . Si el error menciona otro proceso o indica que el gestor de paquetes está ocupado, comience con las comprobaciones de procesos que se describen a continuación. Si indica que un paquete en particular está bloqueado o excluido, ejecute sudo zypper locksy revise las reglas de paquetes que se enumeran.
1. Compruebe si una operación de paquete aún se está ejecutando.
Espere unos minutos si se acaba de iniciar una actualización, instalación o renovación del repositorio. En un servidor, consulte primero con el administrador o el responsable de la automatización del mantenimiento; es posible que una tarea de parcheo en segundo plano no muestre una terminal visible.
Busque una tarea real de Zypper, RPM, YaST o PackageKit y anote su PID, tiempo transcurrido y comando. La expresión grep evita que el comando de búsqueda coincida con el de Zypper y RPM. El listado de procesos es una instantánea, así que repítalo después de un breve tiempo si el resultado no es claro. El ejemplo a continuación es una vista de terminal ilustrativa, no un informe de una máquina real.
Antes de decidir si el gestor de paquetes sigue activo, compruebe el nombre del proceso, el PID y el tiempo transcurrido.
Lo que aún no está claro: ver un proceso no prueba que esté bloqueado. Una transacción de paquete puede estar descargando metadatos o esperando en el almacenamiento o en un repositorio. No la interrumpas solo porque el comando no haya mostrado actividad. Si está progresando, deja que finalice y vuelve a ejecutar el comando Zypper original.
2. Compruebe las tareas de servicio y mantenimiento de la gestión del software.
Las instalaciones de escritorio pueden usar PackageKit, mientras que los servidores administrados pueden ejecutar actualizaciones programadas mediante temporizadores de systemd o SUSE Manager. Verifique solo los servicios que existen en su host:
systemctl status packagekit
systemctl list-timers --all
Si PackageKit no está presente, systemd informa que no se pudo encontrar la unidad; esto no significa que Zypper esté dañado. Si está activo, revise sus entradas de registro recientes y confirme que no hay ninguna instalación o actualización en curso antes de considerar detenerlo.
Cuando una operación confirmada de PackageKit haya finalizado, pero su servicio permanezca activo y esté bloqueando Zypper, coordine con la persona o el sistema automatizado que gestiona las actualizaciones. En un host donde sea apropiado detenerlo, use sudo systemctl stop packagekit, y luego verifique con systemctl status packagekit. No desactive el servicio ni detenga temporizadores de actualización no relacionados como solución general. Los nombres y los cronogramas de actualización dependen de los componentes instalados del sistema y de la política de administración.
Utilice el estado del servicio y el registro para determinar si PackageKit está realizando algún trabajo con paquetes antes de detenerlo.
3. Si no hay ningún propietario activo, investigue de forma segura una cerradura obsoleta.
Un bloqueo obsoleto puede deberse a una sesión interrumpida, un reinicio o una tarea de administración fallida, pero su sola presencia no identifica la causa. La documentación de usuario de SUSE no proporciona una instrucción universal para eliminar un archivo de bloqueo para todas las versiones y configuraciones de SLES. Evite comandos como rmcontra rutas adivinadas y no los utilice kill -9en un PID desconocido. Un archivo de bloqueo puede recrearse o reemplazarse mientras una transacción está activa, y eliminarlo no detiene el proceso propietario de la transacción.
Revise la lista de procesos, inspeccione los registros de servicio pertinentes y asegúrese de que no haya ninguna operación de paquete en curso. Si identifica un archivo PID obsoleto o una ruta de bloqueo, verifique su propietario y confírmelo con el procedimiento documentado para su Service Pack SLES específico o la guía de soporte antes de modificarlo. Para sistemas de producción, capture el error y los registros exactos y siga el proceso de soporte de SUSE de su organización. Aquí es donde los detalles locales importan: el texto del error, el Service Pack SLES, las herramientas de escritorio instaladas y el agente de administración pueden influir en la acción de recuperación correcta.
4. Vuelva a intentar con Zypper y revise la transacción.
Una vez finalizada la operación competitiva, actualice los metadatos del repositorio:
sudo zypper refresh
Una actualización exitosa confirma que Zypper ahora puede acceder a sus repositorios y que el bloqueo del proceso ya no impide el uso de ese comando. Si su tarea original era aplicar un parche al sistema, previsualice los cambios propuestos antes de aplicarlos.
sudo zypper patch --dry-run
Revise los paquetes y las acciones en la salida. Una ejecución en seco es una verificación de planificación; no instala las actualizaciones indicadas. Cuando se espera la propuesta y su ventana de mantenimiento lo permite, ejecute sudo zypper patch. La documentación de SUSE SLES 15 SP7 cubre la administración de software mediante línea de comandos, incluyendo la instalación y eliminación de software; el comportamiento de los comandos y las opciones disponibles pueden variar según la versión. Consulte la documentación de administración de software de SLES 15 SP7 y la referencia de Zypper de SUSE .
Una vez finalizada la tarea en competencia, actualice los metadatos del repositorio para confirmar que Zypper puede continuar.Previsualice la transacción del parche y revise los cambios propuestos antes de aplicar las actualizaciones.
Suposiciones comunes que se deben evitar
El bloqueo siempre está obsoleto. Esto no se puede verificar solo con el mensaje. Podría tratarse de una actualización real. Primero, revise los procesos activos y los registros.
«Un bloqueo de paquete y un bloqueo de proceso son lo mismo». Son controles independientes. Úselos zypper lockscuando un paquete específico esté bloqueado explícitamente; no elimine las reglas del paquete para finalizar una transacción en ejecución.
«Eliminar un archivo de bloqueo corrige el propietario». No finaliza un proceso activo ni completa su transacción de forma segura. Primero, identifique al propietario y utilice las directrices específicas de la versión para estados obsoletos.
Reiniciar el servidor es la solución habitual. Un reinicio puede interrumpir los cambios en los paquetes y no se justifica únicamente por el error. Úselo solo cuando su procedimiento de mantenimiento o las instrucciones de soporte lo indiquen.
Verificar la solución
El problema se resuelve cuando sudo zypper refreshfinaliza sin errores de bloqueo y se puede ejecutar el comando previsto. Para aplicar parches, inspeccione sudo zypper patch --dry-runy confirme las acciones propuestas antes de aplicar cualquier cambio. Si el bloqueo vuelve a aparecer, registre el error exacto, la lista de procesos, el estado del servicio correspondiente, la salida reciente del registro y la versión de SLES; a continuación, investigue el proceso o la herramienta de administración que lo vuelve a adquirir, en lugar de eliminar repetidamente el estado de bloqueo.