5. Configurar o apache para conexões http com svn
O apache é usado porque além de ser o servidor http mais usual, através do módulo mod_dav_svn.so ele consegue acessar um repositório svn e torná-lo acessível para clientes que usam o protocolo WebDAV? /DeltaV, (é o caso do comando svn, o qual veremos ainda neste documento), ele é uma extensão do protocolo HTTP.
Onde o arquivo de configuração, do subversion, é armazenado pode variar de distribuição para distribuição. Por exemplo, ele pode estar tanto em /etc/httpd/conf.d/subversion.conf, como em /etc/apache/conf/conf.d/subversion.conf, ou até mesmo em outro diretório.
Muitas vezes é possível localizá-lo através do comando locate:
# locate subversion.conf
ou
# rpm -ql mod_dav_svn |grep subversion.conf
Por isso, neste documento, trataremos o arquivo de configuração apenas por:
subversion.conf.
Vamos abordar duas formas de configuração, são elas:
- acesso irrestrito para leitura e escrita (sem senha)
- acesso irrestrito para leitura e acesso restrito para escrita (com senha)
Antes de tudo faça um backup do arquivo de configuração original:
# cp subversion.conf subversion.conf.orig
No Fedora Core este arquivo já virá pré configurado, necessitando apenas completar alguns pontos das configurações vista neste documento.
6. Ajustar o dono do svn
Como vamos configurar o apache para o gerenciamento do repositório, é importante configurarmos o seu dono, pois estaremos lendo e escrevendo no svn através do protocolo HTTP.
Mude o dono do diretório /var/svn de root para apache:
# chown -R apache.apache /var/svn
Essa modificação é necessária para que o svn fique acessível via http. Caso o usuário root continuasse como dono do diretório e dos demais arquivos, o apache não teria permissões para acessá-los. Em algumas distribuições o usuário chama-se www ao invés de apache, verifique o nome do usuário do apache antes de executar esse comando.
7. Acesso irrestrito para leitura e escrita
Abaixo segue um exemplo de configuração do arquivo subversion.conf para o acesso sem senha. Use-o caso deseje configurar um servidor svn sem senha.
# início do arquivo subversion.conf
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Location /var/svn>
DAV svn
SVNPath /var/svn
# desativar senha
SVNPathAuthz off
</Location>
8. Acesso irrestrito para leitura e acesso restrito para escrita
Abaixo segue um exemplo de configuração do arquivo subversion.conf para o acesso com senha. Use-o caso deseje configurar um servidor svn com senha para escrita.
# início do arquivo subversion.conf
LoadModule dav_svn_module modules/mod_dav_svn.so
LoadModule authz_svn_module modules/mod_authz_svn.so
<Location /var/svn>
DAV svn
SVNPath /var/svn
# autenticando um usuário
AuthType Basic
AuthName "Subversion repository"
AuthUserFile /etc/httpd/securety/svn-passwd
# qualquer operação que não seja
# leitura requer um usuario valido
LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
</Location>
Mais informações sobre como configurar o arquivo subversion.conf.
9. Criar o arquivo de senha
Se o svn foi configurado com senha, como em um dos exemplos acima, será necessário criar o arquivo
/etc/httpd/securety/svn-passwd ou o correspondente da sua configuração, onde serão armazenados os usuários, os quais terão acesso de escrita no repositório /var/svn e suas respectivas senhas.
Ele pode ser criado por meio do seguinte comando:
# htpasswd -c /etc/httpd/securety/svn-passwd user
O comando acima cria o arquivo /etc/httpd/securety/svn-passwd e pede que a senha do usuário user seja informada.
Para adicionar um novo usuário pode-se usar o comando abaixo:
# htpasswd /etc/httpd/securety/svn-passwd brito
O usuário digita a senha e o arquivo é automaticamente atualizado.
Ou o usuário executa o seguinte comando:
# htpasswd -n brito
New password:
Re-type new password:
brito:QVZvldBtl6gZw
Envia o resultado do comando (em azul) para o administrador do svn e ele inclui o usuário e a sua respectiva senha no arquivo correspondente.
10. Tornar o svn disponível no apache
Para efetivar as configurações e tornar o svn acessível através da url: http://nome_do_servidor/svn, precisamos iniciar o apache caso ele esteja parado ou reiniciá-lo, se ele já estiver sendo executado na máquina.
O comando abaixo reinicia o apache estando ele ligado ou desligado:
# service httpd stop && service httpd start; ou
# service httpd restart; ou
# /etc/init.d/httpd restart
Observe que o comando pode ser diferente dependendo da distribuição que estiver sendo usada, ou seja, ao invés de httpd pode ser apache ou até mesmo apache2.
Agora o seu repositório svn já pode ser acessado, usando um navegador qualquer, através do endereço:
http://servidor/svn
Se o servidor svn foi configurado em sua rede, em casa, e não há nenhum dns configurado, para responder pelos nomes das máquinas, pode-se usar apenas o ip do servidor:
http://ip_do_servidor/svn
Alguns comandos úteis para manusear projetos no svn configurado.
Após criarmos um repositório svn é interessante conhecermos alguns comandos que possibilitam o manuseio desta ferramenta.
Se uma das variáveis de ambiente $SVN_EDITOR, $VISUAL ou $EDITOR não estiverem definidas, provavelmente uma mensagem de erro, semelhante a que segue abaixo, será exibida ao tentar efetuar uma alteração no svn.
svn: Could not use external editor to fetch log message; consider setting the $SVN_EDITOR environment variable or using the --message (-m) or --file (-F) options svn: None of the environment variables SVN_EDITOR, VISUAL or EDITOR is set, and no 'editor-cmd' run-time configuration option was found
Para definir o editor de texto padrão, o qual será usado para escrever os logs dos commits, pode-se usar a seguinte linha de comando:
# export SVN_EDITOR='vim'
Acima definimos que o editor padrão será o vim.
* Para que todos os usuários tenham essa variável configurada, basta adicionar a linha de comando acima no arquivo /etc/profile. Criar um diretório no svn.
Antes de adicionarmos um projeto em nosso repositório precisamos criar o diretório onde ele ficará armazenado. Pode-se fazer isso através do seguinte comando:
# svn mkdir http://servidor/svn/projeto