terça-feira, 26 de janeiro de 2010

Configurando o SVN com Tunelamento por SSH

O SVN, ou subversion, é um dos mais utilizados controladores de versão da atualidade. Muito estável, leve e seguro, (além de gratuito!) está presente nas redes de inúmeras importantes empresas e máquinas pessoais. É também um sistema flexível que permite diversos modos de operação; a saber: diretamente, via conta linux; acesso via túnel de SSH; acesso via HTTP e porta 80. Este artigo trata de todos os passos necessários para configurar seu SVN para ser acessado via tunelamente por SSH. Uma análise detalhada sobre as características, vantagens e desvantagens de cada um dos três modo pode ser encontrada no artigo anterior desta série, clicando-se aqui. Importa que leia um artigo nosso que trata da configuração do SSH para usar o SVN: Alterando ou Desabilitando as Mensagens do SSH.

  • Criando um Repositório do SVN

Os dados versionados, no SVN, ficam em repositórios. Você pode ter quantos repositórios quiser, e cada repositório pode ter vários diretórios (projetos) com arquivos e subdiretórios dentro. Cada repositório tem uma variável chamada revision, que é um inteiro, iniciado em 0 (zero) com a criação do repositório, e que sofre incremento a cada vez que uma nova revisão de um ou mais arquivos é adicionada ao repositório.
Para criar o repositório, basta digitar:

svnadmin create --fs-type bdb [nome_do_repositorio]

o argumento --fs-type indica qual tipo de sistema de arquivos vai ser utilizado. Existem dois tipos: o bdb e o fsfs. Os dois funcionam muito bem, mas têm pequenas diferenças. Sugiro o bdb (Berkeley DB). Você pode achar mais informações sobre este detalhe aqui.

Note que o seu repositório é um diretório com uma determinada estrutura:

$ ls
conf db format hooks locks README.txt

Não precisamos mudar quase nada aqui, apenas um diretório: o diretório "db".

  • Tornando o Repositório SVN Acessível

Agora que já temos o repositório, vamos seguir os seguintes passos para terminar a configuração:

1- É preciso que todos os usuários que vão usar o SVN estejam no mesmo grupo do sistema (UNIX Group). Vamos supor que nós criamos uma conta de usuário para cada usuário e um grupo chamado "svnusers", e adicionamos todos os usuários a este grupo. Foge ao escopo deste artigo ensinar como manipular contas no Linux, mas você pode achar (de forma bem detalhada!) tudo o que precisa bem aqui.

2- Agora vamos dizer para o sistema que o diretório "db" do nosso repositório e todos os seus arquivos devem estar liberados para leitura e escrita por todos os usuário do grupo "svnusers". Este passo é importantíssimo, pois evitará os famosos problemas de permissão de leitura e escrita... note que é importante fazer o procedimento não só para o conteúdo do diretório "db", mas também para o próprio diretório, pois, durante o uso, o svn tenta criar alguns arquivos novos no diretório "db".

Mudando o grupo dono do diretório "db" e seus arquivos:

cd [diretório_do_repositório]
chgrp svnusers db
cd db/
chgrp svnusers *

Adicionando-lhes permissão de leitura e escrita para o grupo "svnusers":

cd [diretório_do_repositório]
chmod g+rw db
cd db/
chmod g+rw *

Beleza, você venceu os passos principais!!!

  • Testando o Acesso ao Repositório SVN

1- Se você vai acessar o SVN pelo SSH, então é preciso que o SSH esteja instalado, rodando e configurado para receber conexões. É preciso também que ele não emita mensagens de boas-vindas, pois isto irá confundir o cliente do SVN, que vai interpretar o texto como erro de leitura de dados e vai interromper a conexão. Sobre como fazer isto tudo, já deixei um artigo prontinho e bem detalhado aqui.
2- Verifique o firewall de sua máquina para não bloquear nem a porta do SVN (a porta padrão é 3690, mas pode estar configurada qualquer outra porta) nem a porta do SSH (a padrão é a 22, mas igualmente pode estar configurada para qualquer outra).
3- Configure seu cliente SVN para acessar o repositório pelo seguinte endereço:

svn+ssh://[nome_ou_ip_da_máquina]/[caminho_completo_do_repositório]

Exemplos:

svn+ssh://192.168.0.1/opt/repositorio
svn+ssh://server01/var/bin/svnrepos/repositorio32
svn+ssh://maquina.dominio/opt/repositorionovo


Bom, encontrei muitos tutoriais incompletos sobre o assunto, e alguns que, embora completos, não detalhavam o porquê das coisas, dificultando a vida do administrador... assim, espero ter ajudado com este humilde tutorial!! Por isso... COMENTEM!!!!

4 comentários:

ThiagoRabelo disse...

Eu criei um servidor com Linux CentOs, instalei java, glassfish e svn. Criei um repositório e agora falta configurar os acessos! Acho que o seu tutorial vai matar o que tava faltando pra mim! Gostei do tuto, vlw! Quando eu terminar de configurar o acesso ssh comento denovo rsrss

O Pajé disse...

Beleza, rapaz!! Muito obrigado e boa sorte na empreitada!!

Abaixo um outro artigo do Pajé que pode te ajudar, indicando como configurar usuários e grupos no Linux, inclusive como fazer para adicionar um grupo a um usuário existente:

http://pajeonline.blogspot.com/2010/05/gerenciando-grupos-e-usuarios-linux.html

Cezinha Anjos disse...

Parabéns pelo artigo. Ele foi muito útil.

O Pajé disse...

Obrigado, Cezinha!! Continue nos visitando, o Pajé se esforça para sempre ter o artigo que você precisa!!