miércoles, marzo 14, 2012

LSOF al rescate

En Debian a veces al utilizar aptitude o algún programa para instalar paquetes, nos encontramos con este aviso:

# aptitude search firefox
E: No se pudo bloquear /var/lib/dpkg/lock - open (11: Recurso no disponible temporalmente)
E: No se pudo bloquear el directorio de administración (/var/lib/dpkg/), ¿quizás haya algún otro proceso utilizándolo?
W: No se pudo bloquear el fichero de almacén. Esto significa habitualmente que dpkg u otra herramienta apt está instalando paquetes. Se abrirá en modo de sólo lectura, ¡se PERDERÁN todos los cambios que realice al estado de los paquetes!
v firefox-firegpg -
p firefox-sage - transitional dummy package

De momento, ya nos ponemos en guardia, parece que hay alguien instalando algo sin nuestro permiso ¿? Miramos en la bandeja del sistema y no vemos aviso del update-manager, que en gnome seria el programa mas normal que estuviese utilizando el administrador de paquetes.

Por tanto, algo no va bien, si miramos el administrador de procesos (yo utilizo qps) no nos aclaramos pues hay muchísimos procesos y es difícil dar con el que este utilizando un determinado archivo.
De momento sabemos que algún proceso tiene abierto el archivo /var/lib/dpkg/lock, por tanto debemos buscarlo y para ello existe el programa lsof, que nos da la lista de los archivos abiertos.

Si ejecutáis lsof como root sin parametros vemos que la cantidad de información que nos ofrece es grandísima, por tanto vamos a filtrar los resultados con grep, buscando las lineas donde aparezca el archivo que buscamos:

# lsof | grep /var/lib/dpkg/lock
update-ma 14888 root 3uW REG 8,1 0 17506328 /var/lib/dpkg/lock
update-ma 14888 root 36uW REG 8,1 0 17506328 /var/lib/dpkg/lock

Bueno, esto nos tranquiliza, al final era update-manager que parece se ha quedado bloqueado, como sabemos el PID 14888, podemos matarlo como root con la orden kill:

# kill -9 14888

De modo que si volvemos a ejecutar aptitude el aviso no aparece:

# aptitude search firefox
v firefox-firegpg -
p firefox-sage - transitional dummy package

Lsof es un programa que tiene muchas posibilidades, con la opción -i nos va a indicar todos los programas que tienen conexión a internet, y si queremos ver que programa esta detrás de un determinado puerto se puede utilizar la orden:

# lsof -i :"puerto" Ejemplo # lsof -i :22

Hay muchas mas opciones, para mas información "man lsof" o nuestro amigo google ;)

Nos vemos
[JJ]

No hay comentarios: