Instalando o Subversion integrado ao Apache2 com autenticação em um servidor LDAP

Leonardo Serra Maciel de Campos


            
          

Este documento é licenciado sobre a licença de Atribuição-Compartilhamento da Creative Commons. Para ver uma cópia desta licença, visite http://creativecommons.org/licenses/by-sa/2.0/ ou envie uma carta para Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

Histórico de Revisões
Revisão 0.1 2004-09-15 11:23:14 -0300 Leonardo Serra Maciel de Campos
Revisão 0.2 2004-09-20 20:59:24 -0300 Leonardo Serra Maciel de Campos
Revisão 0.3 2004-09-20 23:37:12 -0300 Leonardo Serra Maciel de Campos
Revisão 0.4 2004-09-22 10:03:18 -0300 Leonardo Serra Maciel de Campos
Revisão 0.5 2004-10-04 12:04:39 -0300 Leonardo Serra Maciel de Campos
Revisão 0.6 2004-10-28 11:58:39 -0300 Leonardo Serra Maciel de Campos
Revisão 0.7 2004-12-09 20:22:13 -0300 Leonardo Serra Maciel de Campos
Revisão 0.8 2005-01-17 17:16:08 -0300 Leonardo Serra Maciel de Campos

Resumo

Este documento visa ensinar como instalar o Subversion integrado com o Apache2 no Debian GNU/Linux realizando as autenticações em um servidor LDAP.


Índice

1. Introdução
1.1. O que é Subversion?
2. Ambiente
3. Instalação
4. Configuração
5. Repositorio corrompido
6. Comandos uteis
Bibliografia
Glossário

1. Introdução

1.1. O que é Subversion?

O objetivo do projeto Subversion é construir um sistema de controle de versão que seja um substituto para o CVS. O Subversion é liberado sob a licença Apache/BSD-style.

2. Ambiente

Será presumido que o seu sistema Debian GNU/Linux e o aptitude estão corretamente configurados. Também estaremos acreditando que o Apache2 e o seu servidor de LDAP já se encontrem instalados, configurados e sendo executados de maneira correta.

Estaremos acessando o servidor do Subversion pelo protocolo WebDAV, pois este é o metodo de acesso que mais recursos permite.

Estaremos criando dois repositorios, um onde iremos colocar nossos arquivos fontes e outro onde iremos colocar nossas documentações.

Atenção

Todos os comandos deverão ser executados pelo usuário root!

A tabelo abaixo mostra as versões de cada logicial usado.

Tabela 1. Versão dos logiciais

Logicial Versão
Debian GNU/Linux Sarge
apache2 2.0.50-12
subversion 1.0.6-2
libapache2-svn 1.0.6-2

A tabelo abaixo mostra as principais caracteristicas do ambiente onde foi feito esta documentação.

Tabela 2. Ambiente

Dominio da rede exemplo.com.br
Pasta principal dos repositorios /var/lib/svn/
Pasta do repositorio para codigos fontes /var/lib/svn/fontes/
Caminho externo do repositorio para codigos fontes /svn/fontes
Pasta do repositorio para documentacao /var/lib/svn/documentacao/
Caminho externo do repositorio para documentacao /svn/documentacao
Usuario que roda o Apache2 www-data
Grupo do usuario que roda o Apache2 www-data
Endereco do servidor LDAP ldap.exemplo.com.br
Entrada no LDAP onde será feita a autenticação ou=People,dc=exemplo,dc=com,dc=br

Nota

  • No caminho externo do repositorio não use / no fim.

  • Usaremos palavras desta maneira para indicar substituição.

  • Não será abordado detalhes referentes a autenticação, para maiores é recomendado a leitura da documentação oficial do Apache2 referente a autenticação.

3. Instalação

  1. É necessario instalar o pacote Debian para o Subversion e seu modulo para o Apache2, para isto execute:

    # aptitude install subversion subversion-tools libapache2-svn

4. Configuração

  1. É necessario abilitar o modulo do Apache2 responsavel por fazer as autenticações no servidor LDAP, para isto execute.

    # a2dismod ldap
    # a2enmod auth_ldap
    

    Nota

    O comando a2dismod ldap, foi executado para garantir que o modulo responsavel pela conexao com servidores LDAP seja carregado apenas uma vez, pois o comando a2enmod auth_ldap informa ao Apache2 para carregar o modulo de conexao e o modulo de autenticacao em servidores LDAP.

  2. Edite o arquivo /etc/apache2/mods-enabled/dav_svn.conf. O arquivo deverá estar identico ao exemplo abaixo, exceto quando estiver indicado.

    <Location /svn/fontes>
      DAV svn
    
      SVNPath /var/lib/svn/fontes/
    
      AuthType Basic
      AuthName "Repositorio de codigos fontes (Subversion)"
    
      AuthLDAPURL ldap://ldap.exemplo.com.br/ou=People,dc=exemplo,dc=com,dc=br?uid
    
      <LimitExcept GET PROPFIND OPTIONS REPORT>
       Require valid-user
      </LimitExcept>
    </Location>
    
    <Location /svn/documentacao>
      DAV svn
    
      SVNPath /var/lib/svn/documentacao/
    
      AuthType Basic
      AuthName "Repositorio de documentacao (Subversion)"
    
      AuthLDAPURL ldap://ldap.exemplo.com.br/ou=People,dc=exemplo,dc=com,dc=br?uid
    
      <LimitExcept GET PROPFIND OPTIONS REPORT>
       Require valid-user
      </LimitExcept>
    </Location>
    
  3. Nesta configuração, o acesso de leitura dos repositorios é publica e o acesso de escrita só é permitida para usuarios autenticados. Caso queira retirar o acesso publico de leitura dos repositorios, altere as seguintes linhas;

      <LimitExcept GET PROPFIND OPTIONS REPORT>
       Require valid-user
      </LimitExcept>
    

    Para:

       Require valid-user
    

    Nota

    Não esqueça que isto deve ser feito para cada bloco de <Location>

  4. É necessario criar a pasta onde firacam armazenados nossos repositoris, para isto execute:

    # mkdir /var/lib/svn/
  5. É necessario criar os repositorios, para isto execute:

    # svadmin create /var/lib/svn/fontes/
    # svadmin create /var/lib/svn/documentacao/
    
  6. É necessario garantir que o Apache2 poderar ter acesso completo aos repositorios, para isto execute:

    # find /var/lib/svn/fontes/ -type d -exec chmod 700 {} \;
    # find /var/lib/svn/fontes/ -type f -exec chmod 600 {} \;
    # chown -R www-data:www-data /var/lib/svn/fontes/
    # find /var/lib/svn/documentacao/ -type d -exec chmod 700 {} \;
    # find /var/lib/svn/documentacao/ -type f -exec chmod 600 {} \;
    # chown -R www-data:www-data /var/lib/svn/documentacao/
    

    Nota

    Caso queira aumentar a segurança do repositorio e garantir que somente o Apache2 podera ter acesso ao repositorio utilize 700 ao invez de 755

  7. É necessario reiniciar o Apache2, para isto execute:

    # invoke-rc.d apache2 restart

5. Repositorio corrompido

  • Caso acontece alguma interrupção no repositorio, ele podera ficar corrompido. Para diagnosticar se realmente o repositorio se encontra corrompido execute:

    # svn list file:///caminho/do/repositorio/

    Seu repositorio estara corrompido caso o retorno seja isto:

    svn: Unable to open an ra_local session to URL
    svn: Unable to open reposition 'file:///caminho/do/repositorio/'
    svn: Berkeley DB error while opening environment for file system '/.../svnroot/db'
    Invalid argument
    
  • É necessario parar o Apache2 para recuperar o repositorio, pois é necessario que nenhum processo esteja fazendo acesso ao repositorio, para isto execute:

    # invoke-rc.d apache2 stop
  • O proximo comando é a parte principal da recuperação, será ele que ira recuperar o repositorio, para isto execute:

    # svnadmin recover /caminho/do/repositorio/

    Atenção

    Caso a execução do comando demore, verifique se não há nenhum processo fazendo acesso direto ao repositorio atraves do comando lsof!

  • A execução do comando svnadmin recover altera as permissoes do repositorio. É necessario garantir que o Apache2 poderar ter acesso completo ao repositorio, para isto execute:

    # find /caminho/do/repositorio/ -type d -exec chmod 700 {} \;
    # find /caminho/do/repositorio/ -type f -exec chmod 600 {} \;
    # chown -R www-data:www-data /caminho/do/repositorio/
    
  • É necessario iniciar o Apache2 para voltar o acesso ao repositorio, para isto execute:

    # invoke-rc.d apache2 start

6. Comandos uteis

  • Criar repositorio

    # svadmin create /caminho/do/repositorio/
  • Recuperar repositorio corrompido

    # svnadmin recover /caminho/do/repositorio/

Bibliografia

Os seguintes sítios foram usados como base para a criação desta documentação

Livro sobre o Subversion. http://svnbook.red-bean.com/.

Perguntas e respostas sobre o Subversion. http://subversion.tigris.org/project_faq.html.

Referencia para autenticações no Apache2. http://httpd.apache.org/docs-2.0/howto/auth.html.

Glossário

Debian GNU/Linux

O Debian é um sistema operacional (SO) livre para seu computador. Um sistema operacional é um conjunto de programas básicos e utilitários que fazem seu computador funcionar. O Debian usa o kernel (núcleo de um sistema operacional), Linux, mas a maior parte das ferramentas do SO vêm do projeto GNU; daí o nome GNU/Linux.

Logicial

Conjunto de instruções lógicas. Na informática designa um conjunto de instruções lógicas e suas dependências, também conhecido como programa ou sistema de computador.

Esta palavra é pouco usada no Brasil, onde se usa muito a expressão "Software".

Origem: Wikipédia, a enciclopédia livre.