Migrando repositórios subversion com erro database crashing (errcode=160029)

HOWTO: Migrando repositórios
=======================================
Ambiente: Linux CentOS 5.2 / RHEL / Fedora

1. Problema:

O Servidor onde estava rodando o Subversion deu crash de disco (CentOs 4.4), e nem permitia logar diretamente na console.

Ante ao desespero, realizou-se o update para a versão mais nova do CentOS 5.2, com isso o servidor voltou a permitir logar, e foi possível reintalar o subversion, e migrar os repositórios para uma outra máquina.

A instalação foi executada seguindo este tutorial: http://wiki.centos.org/HowTos/Subversion

2. Ao tentar fazer um checkout nos projetos, o mesmo não permitia, e apresentava o seguinte erro:

<D:error>
<C:error/>
<m:human-readable errcode=”160029″>
Could not open the requested SVN filesystem
</m:human-readable>
</D:error>

Depois de algumas pesquisas, descobri que o banco de dados dos repositórios (diretório DB) estava corrompido, e era necessário fazer um recover.

3. Rodei o comando:

# svnadmin recover /var/www/svn/projetoxyz/

Como resposta recebi:

Repository lock acquired.
Please wait; recovering the repository may take some time…
svnadmin: DB_RUNRECOVERY: Fatal error, run database recovery
svnadmin: bdb: /var/www/svn/projetoxyz/db/log.0000000015: log file open failed: No such file or directory
svnadmin: bdb: PANIC: No such file or directory
svnadmin: bdb: DB_ENV->log_put: 15: DB_RUNRECOVERY: Fatal error, run database recovery

Certo, com isso percebi que o problema era um pouquinho mais grave, na verdade sempre que vejo essa frase Fatal error, imagino um problema um pouco mais trabalhoso 🙂

4. Acessei a pasta db de dentro do projetoxyz

# cd /var/www/svn/projetoxyz/db
# ls

-rwxrwxrwx 1 apache apache  172032 Dec 11 10:16 changes
-rwxrwxrwx 1 apache apache    8192 Dec 11 10:16 copies
-rwxrwxrwx 1 apache apache    1955 Oct  3  2008 DB_CONFIG
-rwxrwxrwx 1 apache apache       4 Oct  3  2008 fs-type
-rwxrwxrwx 1 apache apache 1048518 Oct 15 10:39 log.0000000013
-rwxrwxrwx 1 apache apache   13746 Dec 11 10:16 log.0000000014
-rwxrwxrwx 1 apache apache  126976 Dec 11 10:16 nodes
-rwxrwxrwx 1 apache apache  122880 Dec 11 10:16 representations
-rwxrwxrwx 1 apache apache    8192 Dec 11 10:16 revisions
-rwxrwxrwx 1 apache apache 8777728 Dec 11 10:16 strings
-rwxrwxrwx 1 apache apache    8192 Dec 11 10:16 transactions
-rwxrwxrwx 1 apache apache    8192 Dec 11 10:16 uuids

Observe que existe na pasta dois arquivos de log (log.0000000013 e log.0000000014). Apaguei este dois arquivos.

# rm -rf log.0000000013 log.0000000014

5. Voltei para a pasta svn, e executei o comando svnadmin recover novamente:

# cd /var/www/svn/
# svnadmin recover /var/www/svn/projetoxyz/

Agora como resposta obtive:

Repository lock acquired.
Please wait; recovering the repository may take some time…

Recovery completed.
The latest repos revision is 25.

Com este retorno podemos concluir que o banco de dados do repositório foi restaurado.

6. Agora podemos fazer o backup do repositório e restaurar em nosso novo servidor.

# cd /var/www/svn/
# svnadmin dump projetoxyz > projetoxyz_dump

Ao concluir o dump, será criado o arquivo projetoxyz_dump, agora é so enviar para o novo servidor, e fazer a restauração.

# scp projetoxyz_dump root@192.168.1.10:/var/www/svn/

7. No servidor novo, você cria o projeto e faz o restauração do arquivo recebido.

# svnadmin create projetoxyz

altera o dono do projeto:

# chown apache.apache projetoxyz -R

Realiza o reload:

# svnadmin load projetoxyz < projetoxyz_dump

8. Ao terminar o restaure, você deve acrescentar uma entrada no subversion.conf do nome do projeto criado, conforme visto no tutorial: http://wiki.centos.org/HowTos/Subversion

# vi /etc/httpd/conf.d/subversion.conf

Acrescente:

<Location /projetoxyz>
DAV svn
SVNPath /var/www/svn/projetoxyz
AuthType Basic
AuthName “Descricao do Projeto”
AuthUserFile /etc/svn-auth-conf
Require valid-user
</Location>

Reinicie o apache:

# service httpd restart
ou
# /etc/init.d/httpd restart

lembrando que só terão acesso ao repositório os usuários criados em /etc/svn-auth-conf.

# htpasswd -cm /etc/svn-auth-conf primeiro_usuario
New password:
Re-type new password:
Adding password for user primeiro_usuario

Adicionando mais usuários:

# htpasswd -m /etc/svn-auth-conf outro_usuario
New password:
Re-type new password:
Adding password for user outro_usuario

e assim sucessivamente.

9. Após esses passos, já é possivel fazer checkout utilizando sua ferramenta favorita, como o TortoiseSVN, diretamente pelo Windows, colocando a url de seu servidor:

http://192.168.1.10/projetoxyz

Ufa!!! É só isso 🙂

Leave a Reply

Your email address will not be published. Required fields are marked *