Configurando Subversion

O subversion (SVN) é um ótimo controlador de versões, não só para programação, mas para imagens, vídeos, arquivos texto, binários e todo tipo de arquivo digital que for preciso um versionamento.

[ Hits: 186.599 ]

Por: Ricardo Brito do Nascimento em 28/05/2008 | Blog: http://brito.blog.incolume.com.br


Configurando o apache para conexões http com svn



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

Página anterior     Próxima página

Páginas do artigo
   1. Como criar e usar um servidor Subversion (SVN) passo a passo
   2. Customizando o servidor SVN
   3. Configurando o apache para conexões http com svn
   4. Gerenciando projetos e arquivos no svn
   5. Dicas adicionais e bibliografia
Outros artigos deste autor

Proteção utilizando fail2ban contra ataques do tipo

Configurando proxy no shell

Clonagem de Hardware Hotline em Software Livre

Formatando exibição de datas no Linux

Conexão com chaves assimétricas sem uso de senha em servidor sshd

Leitura recomendada

Programas equivalentes Linux vs Windows

Bioinformática - Instalação do Mr Bayes em ambiente paralelo

Variety - Instalação e configuração

Criando músicas no Linux

Gravação de CD's com o NeroLINUX

  
Comentários
[1] Comentário enviado por joaomc em 29/05/2008 - 09:10h

Uma boa pedida para quem quiser instalar um servidor Subversion no Windows é usar o Collabnet Subversion Server, que já vem empacotado com tudo o que precisa. Funciona muito bem.
Eu gosto muito de usar o Git-SVN para interagir com repositórios SVN. Vale a pena aprender.

[2] Comentário enviado por Bruno Faria em 29/05/2008 - 14:11h

Olá,
muito bom o artigo, ótimo mesmo.
Porém, qual seria a diferença entre CVS e SVN?

[3] Comentário enviado por gjr_rj em 29/05/2008 - 18:57h

Gostei do artigo, bom mesmo !

[4] Comentário enviado por leobragatti em 30/05/2008 - 12:00h

cara, excelente artigo
ja implementei aqui e vou começar a fazer os trabalho de faculdade com os caras da faculdade usando isso :)

Muito obrigado pelo artigo
abraços

[5] Comentário enviado por joaomc em 02/06/2008 - 09:33h

@brunoh,

O SVN foi basicamente construído para substituir o CVS. Entre as vantagens, podemos citar os commits atômicos com changesets (conjuntos de mudanças): As alterações feitas no repositório são enviadas em bloco. No CVS, as alterações são feitas por arquivo. Assim, tem-se um histórico mais claro e limpo das modificações.

[6] Comentário enviado por gokden em 13/10/2008 - 18:36h

pessoal... eu uso o openSUSE 11
e ocorre este erro aqui..

httpd2: Syntax error on line 180 of /etc/apache2/httpd.conf: Syntax error on line 102 of /etc/apache2/default-server.conf: Syntax error on line 2 of /etc/apache2/conf.d/subversion.conf: Cannot load /srv/www/modules/mod_dav_svn.so into server: /srv/www/modules/mod_dav_svn.so: cannot open shared object file: No such file or directory

alguem sabe o pq ??
me parece que ele não encontrou o mod_dav_svn.so =D
alguem jah teve este problema ??

[7] Comentário enviado por guiteodasilva em 15/10/2008 - 16:56h

Fala ai galera,
Seguite instalei o subversion no meu servidor (ubuntu 8.04) e depois o subclipse no eclipse da minha máquina pessoal(ubuntu 8.04).
Conecto tranquilo no repositorio consigo dar commit,update, checkout.

Os aquivos transferidos para o repositorio no servidor pela interface do eclipse aparecem tranquilo tranquilo consigo abrir e tudo mais. So que, quando entro no servidor e entro no repositorio e mando listar os arquivo, os mesmos não se encontram la. executo o locate e nada também. Ja tentei de tudo, me ajudem!!!

Valew.

[8] Comentário enviado por gokden em 04/11/2008 - 15:56h

oi denovo gente...
alguem sabe se tem algum jeito onde eu possa dar privilégios separadas de usuário para usuário ?
exemplo:
o user a pode vizualizar o arquivo a
o user b pode vizualizar o arquivo b
mas o user a nao ve o arquivo b nem o user b ve o arquivo a =D

deu pra intende ??

grato....

[9] Comentário enviado por parrera em 09/11/2009 - 10:45h

Bom demais este tutorial, mas o seguinte, uso o svnserve como meu servidor que roda em uma máquina que usa OpenSUSE 11.1, seguinte, na minha rede interna o svn está funcionando normalmente, mas agora gostaria de compartilhar nosso repositorio com uma outra rede, tem como fazer isso usando o svnserve ou é preciso usar o apache?
Obs: Quero que outra rede passe a comunicar com nosso repositorio, para cliente usamos o tortoiseSVN(windows), tem como isso usando o svnserve? Existe algum tutorial para isso?Alguma dica?Obrigado à todos

[10] Comentário enviado por klebervirgilio em 22/01/2010 - 13:07h

M diga, como fica as trunk/branches/ tags????

[11] Comentário enviado por esardenberg em 16/03/2012 - 15:21h

Amigos

Preciso renomear o nome de um repositorio já em utilização. Somente renomeio a pasta criada?

Obrigado


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts