Cómo actualizar la base de datos de Subversion: DB_VERSION_MISMATCH

23 diciembre 2006

Recientemente he actualizado Subversion, con una desagradable sorpresa. Resulta que la versión a la que he actualizado (Subversion 1.3.1-r19032), utiliza Berkeley-DB versión 4.3, mientras que la versión anterior de Subversion que tenía, utilizaba la versión 4.2.

Pues bien, aquí llega el problema: Berkeley-DB 4.2 y 4.3 son incompatibles, con lo que no podemos acceder al servidor de subversion para realizar cambios. ¡Ni siquiera podremos utilizar svnadmin para gestionar el repositorio!

En el FAQ de Subversion lo resuelven en 4 pasos “sencillos”:

After upgrading to Berkeley DB 4.3, I’m seeing repository errors.

Normally one can simply run svnadmin recover to upgrade a Berkeley DB repository in-place. However, due to a bug in the way this command invokes the db_recover() API, this won’t work correctly when upgrading from BDB 4.0/4.1/4.2 to BDB 4.3.

Use this procedure to upgrade your repository in-place to BDB 4.3:

* Make sure no process is accessing the repository (stop Apache, svnserve, restrict access via file://, svnlook, svnadmin, etc.)
* Using an older svnadmin binary (that is, linked to an older BerkeleyDB):
1. Recover the repository: ‘svnadmin recover /path/to/repository’
2. Make a backup of the repository.
3. Delete all unused log files. You can see them by running ‘svnadmin list-unused-dblogs /path/to/repository’
4. Delete the shared-memory files. These are files in the repository’s db/ directory, of the form __db.00*

The repository is now usable by Berkeley DB 4.3.

El problema viene con la necesidad de tener un ejecutable svnadmin enlazado con la versión antigua de Berkeley-DB.

Para ello, podemos seguir los siguientes pasos:

a) Crear un directorio de trabajo:

# mkdir /tmp/svn/
# cd /tmp/svn

b) Compilar la versión anterior de Berkeley-DB (en mi caso la 4.2):

# export LD_CONFIG_PATH=/tmp/svn/
# wget ‘http://downloads.sleepycat.com/db-4.2.52.tar.gz’
# tar -xvzf db-4.2.52.tar.gz
# cd db-4.2.52
# cd build_unix
# ../dist/configure
# make
# make install

De esta manera tenemos instalado en /usr/local/BerkeleyDB.4.2/ la versión anterior de Berkeley-DB que necesitamos.

c) Compilar APR y APR-Utils, que son dependencias de Subversion:

# export LDFLAGS=”-L/usr/local/BerkeleyDB.4.2/lib”
# export LD_LIBRARY_PATH=/usr/local/BerkeleyDB.4.2/lib

# wget ‘http://archive.apache.org/dist/apr/apr-0.9.5.tar.gz’
# tar -xvzf apr-0.9.5.tar.gz
# cd apr-0.9.5
# ./configure –prefix=/tmp/svn
# make
# make install

# wget ‘http://archive.apache.org/dist/apr/apr-util-0.9.5.tar.gz’
# tar -xvzf apr-util-0.9.5.tar.gz
# cd apr-util-0.9.5
# ./configure –prefix=/tmp/svn –with-apr=/tmp/svn –with-berkeley-db=/usr/local/BerkeleyDB.4.2/
#
# make
# make install

d) Compilar Subversion para obtener svnadmin:

# wget ‘http://subversion.tigris.org/downloads/subversion-1.2.3.tar.bz2′
# tar -xvjf subversion-1.2.3.tar.bz2
# cd subversion-1.2.3
# ./configure –prefix=/tmp/svn –with-apr=/tmp/svn –with-apr-util=/tmp/svn –with-berkeley-db=/usr/local/BerkeleyDB.4.2/
# make
# make install

De esta manera, en /tmp/svn/subversion-1.2.3/subversion/svnadmin tenemos el ejecutable :)

Espero que os sirva de ayuda y no os entre el pánico como a mí.

NOTA: Es posible que para compilar alguna parte de APR, necesitéis las cabeceras de libxml2, para ello, nada más sencillo que:

# apt-get install libxml2-dev

[vía LitterRedBat/mk]

GNU/Linux, Programación | Comentarios | Trackback Saltar al inicio de la página

3 comentarios de “Cómo actualizar la base de datos de Subversion: DB_VERSION_MISMATCH”

  1. 01

    Graciaaaaaaaaaaaaaaaaaaas!!!

    He hecho todo esto al pie de la letra y ha funcionado a la primera.

    Chaval, me has salvado la vida. Qué susto.

    Andrés Moya el 17 enero 2007 sobre las 17:15
    Saltar al inicio de la página
  2. 02

    Hey Andrés, me alegro que te sirviera :)

    Kraptor el 22 enero 2007 sobre las 20:14
    Saltar al inicio de la página
  3. 03

    Esto segun he leido se refiere a Berkeley. Lo que pasa es que requiero instalar en mi linux Centos 5.0 un SQUIDGUARD, y este me pide unos requisitos, entre los cuales es que este instalado Berkeley, pues no se si al hacer los pasos que indica me servira correctamente o debo hacer pasos diferentes.

    GRACIAS de antemano por la ayuda prestada.

    Atentamente: Jorge

    Jorge el 22 junio 2009 sobre las 05:20
    Saltar al inicio de la página

Al habla

  •  
  •  
  •  

Puedes estar al tanto de nuevos comentarios con el feed de los comentarios.

Al fin y al cabo todo es cuestión de unos y ceros…




Archivos

Meta