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 🙂