Razones y soluciones para el error “No se puede bloquear (/var/lib/dpkg/)” en Ubuntu

En varias ocasiones, al instalar/actualizar un paquete desde la línea de comandos (usando apt-get o apt) en Ubuntu, recibimos este error: E: No se puede bloquear el directorio de administración (/var/lib/dpkg/). Desde el punto de vista de un principiante, es un error complejo, ya que los nuevos usuarios generalmente no son conscientes del directorio “/var/lib/dpkg/” y de lo que tiene que ver con la operación actual que están realizando.

Técnicamente, el error es lanzado por el sistema en múltiples escenarios, y uno realmente debe tener cuidado sobre cómo resolver este problema. En este artículo discutiremos todos estos aspectos relacionados con este error y cómo puedes deshacerte de él de manera segura.

No se puede bloquear (/var/lib/dpkg/) – diagnosticando el problema

Siempre que te encuentres con este error, el primer paso debe ser leer la descripción del error cuidadosamente. Generalmente contiene algunos consejos cruciales y que ahorran tiempo. Como ejemplo, las siguientes capturas de pantalla muestran el comando “apt-get install” lanzando errores que parecen similares.

error-dir-admin-perm

error-dir-admin-bloqueo

Sin embargo, si miras más de cerca, observarás que el texto dentro de los corchetes en la primera línea y el texto después de la coma en la segunda línea son diferentes en ambos escenarios, lo que deja claro que el error en el primer escenario tiene algo que ver con los permisos del usuario, mientras que en el segundo escenario está relacionado con el archivo de bloqueo que está temporalmente no disponible.

Si enfrentas un error relacionado con permisos (como se muestra en la primera imagen arriba), es muy probable que el usuario que ejecuta el comando “apt-get” o “apt” no tenga suficientes privilegios y el comando se ejecutó sin sudo. Una vez que el comando se ejecute con privilegios de root, el error desaparecerá.

Sin embargo, si es un error relacionado con el bloqueo, entonces requiere una investigación adicional.

También lee: Solucionando el error “el nombre de usuario no está en el archivo sudoers. Este incidente será reportado” en Ubuntu

¿Qué es /var/lib/dpkg/?

“/var/lib/dpkg/” puede considerarse como el directorio de trabajo para el gestor de paquetes “dpkg”, que a su vez es realmente el motor detrás de “apt-get” (así como de las herramientas “apt” y “aptitude”). Siempre que uses estas herramientas para instalar o eliminar software, bloquean la base de datos de paquetes (creando un archivo de “bloqueo”) antes de realizar la operación real, algo que se hace obteniendo el bloqueo para el directorio “/var/lib/dpkg/”. Este paso ayuda a evitar la corrupción de datos o la interrupción de una operación en curso que está siendo realizada por otro proceso.

Suponiendo que has entendido el concepto explicado anteriormente, ahora discutamos los pasos de investigación.

Paso 1: Ver si hay otro proceso que tiene el bloqueo

Esto ahora debería parecer bastante lógico, ¿verdad? Y para hacer esto, puedes usar la ayuda del viejo comando ps y canalizar su salida al comando grep para que pases menos tiempo buscando lo que quieres. Por ejemplo, aquí hay un comando que te permite encontrar si algún proceso “apt”, “apt-get” o “aptitude” ya está en ejecución:

ps aux |grep apt

Paso 2: Espera un momento y luego toma acción

Si de hecho hay un comando que ya ha adquirido el bloqueo, idealmente deberías esperar a que complete y libere el bloqueo. Sin embargo, si el comando está tardando más de lo esperado y estás seguro de que está atascado en algún lugar, puedes proceder a matarlo usando los comandos disponibles kill o killall (más información sobre ellos aquí). Esto debería resolver el problema que enfrentas.

Una cosa que vale la pena mencionar aquí es que matar un proceso “dpkg” directamente nunca se recomienda; puede corromper la base de datos de paquetes. Estoy enfatizando este punto porque ahora sabes que herramientas como “apt” y “apt-get” invocan “dpkg” internamente, por lo que es bastante posible que pienses en matar el proceso “dpkg” si lo ves en la salida del comando “ps”.

Matar procesos iniciados al ejecutar comandos apt, apt-get o aptitude es generalmente mucho más seguro.

Paso 3: Cuando la salida del comando “ps” no ayuda

Ten en cuenta que, además de herramientas de línea de comandos como apt y apt-get, algunas aplicaciones basadas en GUI como el Centro de Software o el Gestor de Actualizaciones también adquieren este bloqueo.

Nota: si estás recibiendo el error relacionado con el bloqueo justo después de haber iniciado Ubuntu, es bastante posible que tu operación esté superponiéndose con la consulta automática iniciada por el gestor de actualizaciones. Esperar un poco debería resolver el problema en este caso.

Volviendo a las aplicaciones basadas en GUI de las que estábamos hablando, otra opción útil y que ahorra tiempo es usar el comando fuser.

Con “fuser” solo necesitas conocer el archivo que se está accediendo (“/var/lib/dpkg/lock” en nuestro caso), y puedes matar el proceso que accede a ese archivo incluso si no sabes cuál es. Por ejemplo:

sudofuser-cuk/var/lib/dpkg/lock

Ten en cuenta que el comando fuser no liberará el bloqueo adquirido por el proceso que acabas de matar, por lo que tendrás que hacerlo manualmente:

sudorm-f/var/lib/dpkg/lock

Nota: “ liberar el bloqueo ” simplemente significa eliminar el archivo “lock” para que otros procesos puedan “ adquirir el bloqueo ” recreándolo.

También puede que necesites ejecutar los siguientes dos comandos:

sudofuser-cuk/var/cache/apt/archives/lock; sudorm-f/var/cache/apt/archives/lock

Consejo importante: nunca elimines archivos de bloqueo como primer paso; esto debería ser solo tu último recurso.

Conclusión

En general, siempre es bueno entender la razón detrás del problema antes de proceder a resolverlo. Intentar soluciones a ciegas para resolver un problema nunca te ayudará; podrías tener éxito en algunos casos, pero más a menudo te encontrarás en un lío aún mayor, especialmente si el sistema operativo es Linux.

¿Alguna vez has enfrentado el error que discutimos aquí? ¿Cómo lo resolviste? Deja tu respuesta en los comentarios.

También lee: Cómo solucionar el error “El repositorio no tiene archivo de lanzamiento”