Blog do Julio

Hacks, tutoriais e dicas

Apache Suvbersion (SVN)

| Comments

Subversion (SVN) é um sistema de controle de versão (VCS) open source que surgiu para substituir o limitado CVS. O SVN gerencia arquivos e diretórios e as alterações realizadas sobre eles através do tempo. Isso nos permite recuperar versões antigas dos seus dados ou examinar o histórico de mudanças.

Apesar de eu não ser muito fã do subversion (Git FTW!), eu também não o odeio, como o Linus e já precisei usar para um projeto na faculdade.

  1. Efetue as instalações e configurações iniciais

    1. Instale o Subversion julio@julio-acer ~> sudo pacman -S subversion
    2. Instale o Apache julio@julio-acer ~> sudo pacman -S apache

    Dicas para configurar o Apache estão disponível na Wiki.

    1. Verifique se as seguintes linhas estão presentes no /etc/httpd/conf/httpd.conf e adicione as que não estiverem: LoadModule dav_module modules/mod_dav.so LoadModule dav_fs_module modules/mod_dav_fs.so LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so

    2. Certifique-se de que a linha Include /etc/httpd/conf/extra/httpd-ssl.conf está descomentada no /etc/httpd/conf/httpd.conf

    3. Gere um certificado SSL [root@julio-acer ~]# cd /etc/httpd/conf/ [root@julio-acer conf]# openssl req -new -x509 -keyout server.key -out server.crt -days 365 -nodes Generating a 1024 bit RSA private key ..++++++ ……..++++++ writing new private key to ‘server.key’ —– You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter ‘.’, the field will be left blank. —– Country Name (2 letter code) [AU]:BR State or Province Name (full name) [Some-State]:Sao Paulo Locality Name (eg, city) []:Sao Jose dos Campos Organization Name (eg, company) [Internet Widgits Pty Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []:Julio Email Address []:julio@…

    4. Adicione as seguintes linhas ao arquivo /etc/httpd/conf/extra/httpd-ssl.conf para fazer o Apache suportar SVN ## Para o SVN DAV svn SVNParentPath /srv/svn/repositorios AuthName “SVN Repositories” AuthType Basic AuthzSVNAccessFile /srv/svn/svn-policy AuthUserFile /srv/svn/svn-auth Satisfy Any Require valid-user [/sourcecode]

  2. Configure os diretórios, usuários e permissões

    1. Crie um grupo para acesso ssh aos repositórios [root@julio-acer ~]# groupadd svnusers

    2. Crie um diretório onde todos os repositórios serão mantidos julio@julio-acer ~> mkdir -p /srv/svn/repositorios julio@julio-acer ~> chmod -R 755 /srv/svn/repositorios

      Este diretório pode ser criado em outro local. Aqui deixei no /srv/svn pois é o diretório que utilizei quando instalei o rTorrent a partir do SVN, conforme esse Post.

    3. Garanta a você e ao Apache acesso aos repositórios julio@julio-acer ~> sudo gpasswd -a http svnusers
      Adding user http to group svnusers julio@julio-acer ~> sudo gpasswd -a julio svnusers Adding user julio to group svnusers

    Faça logout para ter efeito.

  3. Crie o arquivo /srv/svn/svn-policy e deixe-o parecido com o seguinte julio@julio-acer ~> cat /srv/svn/svn-policy [/]

    * = r
    
    [projeto:/]
    julio = rw
    
  4. Crie o arquivo /srv/svn/svn-auth com o htpasswd ou o htdigest [root@julio-acer ~]# htpasswd -cs /srv/svn/svn-auth julio New password: Re-type new password: Adding password for user julio

    Para adicionar outros usuários basta tirar o “-c” do comando.

  5. Crie um repositório julio@julio-acer ~> svnadmin create /srv/svn/repositorios/projeto

    1. Altere as permissões julio@julio-acer ~> sudo chown -R http.svnusers /srv/svn/repositorios/projeto julio@julio-acer ~> sudo chmod -R g-w /srv/svn/repositorios/projeto
      julio@julio-acer ~> sudo chmod -R g+w /srv/svn/repositorios/projeto/{db,locks}
  6. Estrutura de um repositório A estrutura típica de um repositório se parece com o seguinte: project |–branches |–tags |–trunk

  7. Branches): Guarda cópias dos arquivos sendo desenvolvidos ou em manutenção, mas em uma linha de desenvolvimento separada. Por exemplo, o código para a v4 pode estar dentro de um Branchpara permitir pessoas trabalharem em mudanças futuras que não serão implementadas tão cedo. Isso permite elas fazerem seu trabalho sem colocar código prematuramente no trunk.

  8. Tags: Guarda cópias do software em seus vários estágios de desenvolvimento, como v1, v2 e v3.

  9. Trunk): - É usada para manter a versão estável mais atualizada do software.

  10. Colocando um projeto sob controle de versão Supondo que já temos um projeto chamado codefest, vamos importar os seus arquivos para a pasta trunk do repositório “projeto”:

    julio@julio-acer ~> svn import ~/codefest/ file:///srv/svn/repositorios/projeto/trunk -m 'importacao inicial'
    Adding         /home/julio/codefest/amostras
    Adding  (bin)  /home/julio/codefest/amostras/codefest.xls
    Adding         /home/julio/codefest/amostras/imagens
    Adding  (bin)  /home/julio/codefest/amostras/imagens/1.jpg
    Adding  (bin)  /home/julio/codefest/amostras/imagens/2.jpg
    Adding  (bin)  /home/julio/codefest/amostras/imagens/3.jpg
    Adding         /home/julio/codefest/amostras/codefest.txt
    Adding         /home/julio/codefest/código
    Adding         /home/julio/codefest/código/matching.py
    Adding         /home/julio/codefest/código/color_name.py
    Adding         /home/julio/codefest/código/inicializador.py
    Adding         /home/julio/codefest/código/image.py
    Adding         /home/julio/codefest/código/dominant_color.py
    
    Committed revision 1.
    
    1. Para listar o diretório trunk após o commit, basta usar o seguinte comando julio@julio-acer ~> svn ls file:///srv/svn/repositorios/projeto/trunk amostras/ código/
  11. Checkout julio@julio-acer ~> svn co file:///srv/svn/repositorios/projeto/trunk ~/codefest-svn A /home/julio/codefest-svn/amostras A /home/julio/codefest-svn/amostras/codefest.xls A /home/julio/codefest-svn/amostras/imagens A /home/julio/codefest-svn/amostras/imagens/1.jpg A /home/julio/codefest-svn/amostras/imagens/2.jpg A /home/julio/codefest-svn/amostras/imagens/3.jpg A /home/julio/codefest-svn/amostras/codefest.txt A /home/julio/codefest-svn/código A /home/julio/codefest-svn/código/matching.py A /home/julio/codefest-svn/código/color_name.py A /home/julio/codefest-svn/código/inicializador.py A /home/julio/codefest-svn/código/image.py A /home/julio/codefest-svn/código/dominant_color.py Checked out revision 1.

  12. Protocolos file:// -> Básico, mas você só poderá trabalhar na mesma máquina que hospeda os repositórios. svn:// -> Utiliza um servidor para comunicar com o Subversion (Apache neste caso). svn+ssh:// -> Utiliza SSH para comunicar com o servidor http:// -> Amigável, utiliza WEBDAV para permitir comunicação via HTTP com os repositórios do Subversion. https:// -> Como o http, porém com criptografia SSL

  13. Reinicie o Apache julio@julio-acer ~> sudo /etc/rc.d/httpd restart Password: :: Restarting Apache Web Server [DONE]

    Agora você deve conseguir navegar pelo projeto acessando https://localhost/svn/projeto/


Links:

Comments