Recientemente estaba tratando de instalar una aplicación usando el comando apt en Ubuntu cuando encontré el siguiente error:
E:No se pudo obtener el bloqueo /var/lib/dpkg/lock – abierto (11:Recurso temporalmente no disponible)
E:No se puede bloquear el directorio de administración (/var/lib/dpkg/), ¿lo está utilizando otro proceso?
De hecho, hay un error similar que puede ver:
E:No se pudo obtener el bloqueo /var/lib/apt/lists/lock – abierto (11:Recurso temporalmente no disponible)
E:No se puede bloquear el directorio /var/lib/apt/lists/
E:No se pudo obtener el bloqueo /var/lib/dpkg/lock – abierto (11:Recurso temporalmente no disponible)
E:No se puede bloquear el directorio de administración (/var/lib/dpkg/), ¿lo está utilizando otro proceso?
En algunos casos, es posible que lo vea mientras usa el Centro de software:
Estos errores son muy similares a otro error común de Ubuntu, No se puede bloquear el directorio /var/cache/apt/archives/, y lo interesante es que las correcciones también son similares.
Reparación del error "No se puede bloquear el directorio de administración (/var/lib/dpkg/)"
Ve este error porque algún otro programa está intentando actualizar Ubuntu. Cuando un comando o aplicación está actualizando el sistema o instalando un nuevo software, bloquea el archivo dpkg (administrador de paquetes de Debian).
Este bloqueo se realiza para que dos procesos no cambien el contenido al mismo tiempo, ya que puede provocar una situación injustificada y un posible sistema roto.
Veamos qué pasos puede tomar para solucionar este problema de "no se puede bloquear el directorio de administración".
Método 0:
Lo primero que debe hacer es verificar si algún otro programa podría estar ejecutando la actualización del sistema o instalando un programa.
Si está utilizando la línea de comandos, verifique si una aplicación como el Centro de software, el Actualizador de software, el administrador de paquetes Synaptic, Gdebi está ejecutando alguna actualización/instalación. Si ese es el caso, espere a que el programa termine el proceso de ejecución.
Si no se está ejecutando dicha aplicación, verifique todas las ventanas de terminal abiertas y vea si está ejecutando una actualización o instalando un programa. Si es así, espera a que termine.
Si no sucede nada de lo anterior, verifique qué otro proceso está ejecutando el comando apt (administrador de paquetes para el manejo de software). Usa este comando:
ps aux | grep -i apt
Para mí, mostró esta salida:
[email protected]:~$ ps aux | grep -i apt
root 1464 0.0 0.0 4624 772 ? Ss 19:08 0:00 /bin/sh /usr/lib/apt/apt.systemd.daily update
root 1484 0.0 0.0 4624 1676 ? S 19:08 0:00 /bin/sh /usr/lib/apt/apt.systemd.daily lock_is_held update
_apt 2836 0.8 0.1 96912 9432 ? S 19:09 0:03 /usr/lib/apt/methods/http
abhishek 6172 0.0 0.0 21532 1152 pts/1 S+ 19:16 0:00 grep --color=auto -i apt
Si ve que apt está siendo utilizado por un programa como apt.systemd.daily update , estás de suerte, querido lector.
Este es un demonio que se ejecuta en segundo plano y busca actualizaciones del sistema automáticamente cuando inicia su sistema.
En Ubuntu 18.04 y versiones superiores, incluso puede intentar descargar e instalar las actualizaciones de seguridad importantes por su cuenta. Al menos esto es lo que veo en la configuración predeterminada de la herramienta Software y actualizaciones en el escritorio de Ubuntu.
Si está en un servidor Ubuntu, puede comprobar si tiene habilitadas las actualizaciones desatendidas consultando el contenido del archivo /etc/apt/apt.conf.d/20auto-upgrades .
Entonces, si ve que apt.systemd.daily está usando el proceso apt, todo lo que tiene que hacer es esperar unos minutos. Cuando finalice la actualización automática, debería poder instalar el software como de costumbre.
Como solución permanente, puede deshabilitar la verificación de actualizaciones automáticas y actualizaciones desatendidas por completo; sin embargo, no lo recomendaré por razones de seguridad.
Ahora, ese era el escenario simple y podría manejarse fácilmente. Pero ese podría no ser siempre el caso. Si algún otro programa está usando apt, debe manejarlo de manera diferente.
Método 1:
Use la línea de comando de Linux para encontrar y eliminar el proceso en ejecución. Para hacer eso, use el siguiente comando:
ps aux | grep -i apt
Esto le mostrará la identificación del proceso que se ejecuta apt o apt-get. En el siguiente ejemplo, la identificación del proceso es 7343. Puede ignorar la última línea que contiene 'grep –color=auto'.
Puede usar la identificación del proceso para terminarlo enviando la señal SIGTERM. Reemplace
sudo kill <process_id>
Compruebe si el proceso se eliminó ejecutando 'ps aux | comando grep -i apt'. Si todavía se está ejecutando, fuerce la eliminación con la señal SIGKILL:
sudo kill -9 <process_id>
Otra forma más fácil sería usar el comando killall. Esto eliminará todas las instancias de un programa en ejecución:
sudo killall apt apt-get
Método 2
El método anterior solucionaría el problema en la mayoría de los casos. Pero mi caso fue un poco diferente. Estaba actualizando mi sistema y accidentalmente cerré la terminal. Por esa razón, no había procesos ejecutándose apt, pero aun así me mostraba el error.
Aconsejaría probar los dos métodos anteriores o simplemente reiniciar su sistema primero. Si nada de eso funciona, solo elija esta opción para eliminar los archivos de bloqueo.
En este caso, la causa raíz es el archivo de bloqueo. Como se mencionó anteriormente, los archivos de bloqueo se utilizan para evitar que dos o más procesos utilicen los mismos datos. Cuando se ejecutan los comandos apt o apt-get, crean archivos de bloqueo en algunos lugares. Si el comando apt anterior no finalizó correctamente, los archivos de bloqueo no se eliminan y, por lo tanto, evitan nuevas instancias de los comandos apt-get o apt.
Para solucionar el problema, todo lo que necesita hacer es eliminar los archivos de bloqueo. Pero antes de hacerlo, sería una buena idea detener cualquier proceso que esté usando los archivos de bloqueo.
Utilice el comando lsof para obtener el ID de proceso del proceso que contiene los archivos de bloqueo. Verifique el error y vea de qué archivos de bloqueo se queja y obtenga la identificación de los procesos que contienen estos archivos de bloqueo.
Ejecute estos comandos uno por uno.
sudo lsof /var/lib/dpkg/lock
sudo lsof /var/lib/apt/lists/lock
sudo lsof /var/cache/apt/archives/lock
Es posible que los comandos no devuelvan nada o solo devuelvan un número. Si devuelven al menos un número, use los números y elimine los procesos de esta manera (reemplace
sudo kill -9 <process_id>
Ahora puede eliminar de forma segura los archivos de bloqueo con los siguientes comandos:
sudo rm /var/lib/apt/lists/lock
sudo rm /var/cache/apt/archives/lock
sudo rm /var/lib/dpkg/lock
Después de eso, reconfigure los paquetes:
sudo dpkg --configure -a
Ahora, si ejecuta el comando sudo apt update, todo debería estar bien.
Solución de problemas 1:"No se puede adquirir el bloqueo de interfaz de dpkg"
Si ve un error como este:
[email protected]:~$ sudo apt install grub-customizer
E: Could not get lock /var/lib/dpkg/lock-frontend - open (11: Resource temporarily unavailable)
E: Unable to acquire the dpkg frontend lock (/var/lib/dpkg/lock-frontend), is another process using it?
Debe averiguar qué proceso está reteniendo la interfaz de bloqueo mediante el comando lsof como se explicó en las secciones anteriores:
sudo lsof /var/lib/dpkg/lock-frontend
Esto es lo que me mostró:
[email protected]:~$ sudo lsof /var/lib/dpkg/lock-frontend
lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs
Output information may be incomplete.
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
unattende 2823 root 5uW REG 8,2 0 145221 /var/lib/dpkg/lock-frontend
Si ve 'desatender Columna COMMAND, esto significa que se están ejecutando actualizaciones de seguridad desatendidas. Debes esperar a que finalice el proceso . Básicamente, esto es lo que discutí en el método 0, pero probablemente te lo saltaste.
Si el COMANDO es algo más, puede eliminar el proceso y luego eliminar el archivo de bloqueo. Puede ver la identificación del proceso en la columna PID. Use este PID para matar el proceso. Después de eso, elimine el archivo de bloqueo y ejecute el comando de actualización para ver si se solucionó.
sudo kill -9 PID
sudo rm /var/lib/dpkg/lock-frontend
sudo apt update
¿Qué es eso lsof:advertencia no se puede stat() fuse.gvfsd-fuse sistema de archivos?
Nota:Si ve "lsof:advertencia no se puede stat() fuse.gvfsd-fuse sistema de archivos /run/user/1000/gvfs
La información de salida puede estar incompleta” después de ejecutar el comando lsof mencionado anteriormente, no entre en pánico.
Eso no es un error. Es solo que lsof también intenta buscar en los sistemas de archivos montados y la advertencia es sobre esos sistemas montados.
Los archivos están bloqueados por los procesos en su sistema de archivos principal, por lo que si muestra alguna advertencia y no hay salida, esto solo significa que no hay ningún proceso que use esos archivos bloqueados.
Resolución de problemas 2:"dpkg:error:la interfaz de dpkg está bloqueada por otro proceso"
Si ve el error "la interfaz de dpkg está bloqueada por otro proceso" mientras ejecuta los pasos del método 2, necesita un paso adicional.
Primero, averigüe la identificación del proceso que contiene el archivo de bloqueo.
sudo lsof /var/lib/dpkg/lock-frontend
El comando anterior le dará los detalles de los procesos que utilizan los archivos de bloqueo. Use la ID del proceso para eliminar este programa:
sudo kill -9 PID
Ahora puede eliminar el bloqueo y reconfigurar dpkg:
sudo rm /var/lib/dpkg/lock-frontend
sudo dpkg --configure -a
¿Funcionó para ti? ¿Qué método lo arregló para usted?
Espero que este pequeño consejo te haya ayudado a solucionar el error "No se pudo obtener el bloqueo /var/lib/dpkg/lock". En caso afirmativo, hágame saber en los comentarios qué método funcionó para usted.
Si todavía tiene problemas, hágamelo saber. Intentaré ayudarte.
Cualquier otra sugerencia también es bienvenida en los comentarios.