2008/03/26

RpmDRAKE / Urpmi: Base de datos de urpmi bloqueada / rpm database locked

¿Que quiere decir ese mensaje? ¿Es un bug de Urpmi? ¿Que debo hacer? Sencillo primero que todo debes saber que Mandriva utiliza Urpmi para instalar los archivos rpm.

Urpmi tiene una base de datos que contiene los nombres de los rpms disponibles, instalados, no instalados y sus dependencias (cada archivo rpm necesita que otros archivos esten presentes en el sistema). Si la base de datos de Urpmi esta rota o es inconsistente no podras usar Urpmi para instalar ya que sin ella no sabe que tienes instalado ni que necesita para instalar un archivo rpm ni de donde tomarlo.

Urpmi solo puede ser ejecutado una vez si hay una instancia de urpmi corriendo esta toma control de la base de datos y no permite a otro proceso de Urpmi usarla ¿Porque? porque puede dar paso a inconsistencias.

Aqui podemos ver un ejemplo de Urpmi en accion:


[root@desktop dalfa]# urpmi -v filelight

getting lock on urpmi

examinando los archivos de síntesis:

[Main Updates (Official2008.0-1).cz]
[Contrib Updates (Official2008.0-2).cz]
[Non-free Updates (Official2008.0-3).cz]
[Main (Official2008.0-4).cz]
[Main Updates(Official2008.0-5).cz]
[Main Backports (Official2008.0-7).cz]
[Contrib (Official2008.0-8).cz]
[Contrib Updates (Official2008.0-9).cz]
[Contrib Backports (Official2008.0-).cz]
[Non-free (Official2008.0-12).cz]
[Non-free Updates (Official2008.0-3).cz]
[Non-free Backports (Official2008.0-5).cz]
[plf-free_backports.cz]
[plf-free.cz]
[plf-nonfree.cz]
[plf-nonfree_backports.cz]


getting exclusive lock on rpm

found package(s): filelight-1.0-2mdv2008.0.i586

obteniendo archivos rpm desde el soporte «Contrib (Official2008.0-8)»

ftp://ftp.nara.wide.ad.jp/pub/Linux/Mandrakelinux/official/2008.0/i586/
media/contrib/release/filelight-1.0-2mdv2008.0.i586.rpm

retrieved

ftp://ftp.nara.wide.ad.jp/pub/Linux/Mandrakelinux/official/2008.0/i586/
media/contrib/release/filelight-1.0-2mdv2008.0.i586.rpm

...recuperación hecha

instalando filelight-1.0-2mdv2008.0.i586.rpm desde /var/cache/urpmi/rpms

starting installing packages

transacción creada para instalar sobre / (quitar=0, instalar=0, actualizar=1)

Preparando...

1/1: filelight #############################################

removing installed rpms (filelight-1.0-2mdv2008.0.i586.rpm) from /var/cache/urpmi/rpms

unlocking urpmi database

unlocking rpm database



En este ejemplo se instalo filelight, ahora explicare cada paso:



  1. Invocamos Urpmi para instalar el programa, el parametro -v hace que Urpmi nos diga lo que hace.

    [root@desktop dalfa]# urpmi -v filelight



  2. Toma control de la base de datos y no permite que otro Urpmi la use.

    getting lock on urpmi


  3. Revisa los archivos indices de cada repositorio que se ha configurado en el sistema para determinar, en cual se encuentra el rpm, de donde lo descarga y lo mismo con cada dependencia que sea necesaria. Luego toma control de la base de datos de rpm.

    examinando los archivos de síntesis:

    [Main Updates (Official2008.0-1).cz]
    [Contrib Updates (Official2008.0-2).cz]
    [Non-free Updates (Official2008.0-3).cz]
    [Main (Official2008.0-4).cz]
    [Main Updates(Official2008.0-5).cz]
    [Main Backports (Official2008.0-7).cz]
    [Contrib (Official2008.0-8).cz]
    [Contrib Updates (Official2008.0-9).cz]
    [Contrib Backports (Official2008.0-).cz]
    [Non-free (Official2008.0-12).cz]
    [Non-free Updates (Official2008.0-3).cz]
    [Non-free Backports (Official2008.0-5).cz]
    [plf-free_backports.cz]
    [plf-free.cz]
    [plf-nonfree.cz]
    [plf-nonfree_backports.cz]

    getting exclusive lock on rpm


  4. Encuentra el archivo e informa en que Repositorio esta.

    found package(s): filelight-1.0-2mdv2008.0.i586

    obteniendo archivos rpm desde el soporte «Contrib (Official2008.0-8)»


  5. Informa de la Url de los archivos rpm necesarios.

    ftp://ftp.nara.wide.ad.jp/pub/Linux/Mandrakelinux/official/2008.0/i586/
    media/contrib/release/filelight-1.0-2mdv2008.0.i586.rpm


  6. Lo descarga.

    retrieved

    ftp://ftp.nara.wide.ad.jp/pub/Linux/Mandrakelinux/official/2008.0/i586/
    media/contrib/release/filelight-1.0-2mdv2008.0.i586.rpm

    ...recuperación hecha


  7. Inicia la instalacion de los archivos rpm que descargo (Urpmi descarga los archivos al directorio /var/cache/urpmi/rpms)

    instalando filelight-1.0-2mdv2008.0.i586.rpm desde /var/cache/urpmi/rpms


  8. Informa sobre las transacciones que hace con cada archivo rpm (quitar, instalar, actualizar) la transaccion que se lleva a cabo tiene un numero 1.

    starting installing packages

    transacción creada para instalar sobre / (quitar=0, instalar=0, actualizar=1)

    Preparando...

    1/1: filelight #############################################


  9. Borra el archivo rpm que descargo, este es el comportamiento por defecto.

    removing installed rpms (filelight-1.0-2mdv2008.0.i586.rpm) from /var/cache/urpmi/rpms


  10. Hasta este punto libera la base de datos de urpmi y rpm para que puedan ser usadas. Esto lo hace debido al tipo de proceso que debe hacer para resolver cada dependencia.

    unlocking urpmi database

    unlocking rpm database




Este proceso se lleva a cabo cada vez que se instala algun archivo rpm, ahora bien notese que los puntos 2, 3 y 12. Las bases de datos de Urpmi y Rpm no pueden ser usadas mientras no se termine la instalacion o durante la actualizacion de los repositorios de Mandriva. Este es el proceso normal.

Cuando se intenta ejecutar una segunda instancia de Urpmi, envia el siguiente mensaje:


[root@desktop dalfa]# urpmi filelight

rpm database locked

base de datos de rpm bloqueada


No se podra instalar hasta que el primer proceso que esta instalando archivos o actualizando repositorios termine, se puede puede forzar la instalacion pero no es recomendable por razones obvias (corrupcion de la base de datos, inconsistencias, mala resolucion de dependencias, etc)

¿Entonces que se debe hacer? Usualmente este mensaje se debe a que se esta ejecutando el icono de MandrivaUpdate en la barra de KDE, GNOME u otro entorno grafico, MandrivaUpdate esta continuamente verificando que los Repositorios este al dia, para poder ver si hay actualizaciones disponibles y para ello ejecuta Urpmi.

Lo que se debe hacer es cerrar MandrivaUpdate si no se desea que siga verificando las actualizaciones, para poder instalar. MandrivaUpdate, rpmdrake y edit-urpm-sources.pl todos usan Urpmi y todos bloquean las Bases de datos al ser utilizados, que que solo una instancia de Urpmi puede estar usando las Bases de datos.

Entonces ahora sabes que este mensaje no es un Bug ni un Problema es el funcionamiento correcto de Urpmi si fuerzas instalaciones o borras los archivos .lock con los cuales se bloquea la base de datos puedes fastidiar tu Urpmi.

Si deseas saber que programa esta usando Urpmi, puedes saberlo con el comando ps, de esta forma:


[root@desktop dalfa]# ps -ufx



USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root 14750 0.0 0.1 2740 1284 pts/1 S 22:38 0:00 su
root 14754 0.0 0.1 2952 1708 pts/1 S 22:38 0:00 \_ bash
root 14904 0.0 0.0 2480 932 pts/1 R+ 22:46 0:00 \_ ps -ufx

root 14465 0.0 0.1 2740 1288 pts/2 S 22:23 0:00 su
root 14468 0.0 0.1 2960 1732 pts/2 S 22:23 0:00 \_ bash
root 14901 28.5 5.3 62040 53540 pts/2 S+ 22:46 0:02 \_ /usr/bin/perl /usr/sbin/urpmi gimp2-resynthesizer
root 14903 0.1 0.2 4884 2044 pts/2 S+ 22:46 0:00 \_ /usr/bin/curl -q -k --location-trusted -R -f --disable-epsv --connect-timeout 60 --anyauth --stderr - -O ftp://ftp.nara.wide.ad.jp/



El proceso que esta usando Urpmi es el 14901 de esta forma puedes verificar que un proceso de Urpmi ya se esta ejecutando y con el numero del PID podrias matarlo pero hacerlo puede traerte problemas si no termina la tarea que esta haciendo, no lo hagas si no sabes lo que estas haciendo.

No hay comentarios: