você está aqui: Home  → Arquivo de Mensagens Workshop Gratuito: Os Segredos do Shell, com o Prof. Julio Neves

Instalando e Integrando o Subversion e o Trac

Colaboração: Jean Rodrigo Ferri

Data de Publicação: 24 de Setembro de 2005

Para a nossa alegria escrever códigos livres está se tornando moda, mas com isso vêm a necessidade de organizarmos esses códigos deixando-os disponíveis para a comunidade e colaboradores e também de gerenciar o desenvolvimento dos softwares.

Existem vários sistemas de controle de versões de software, o mais popular é o CVS[1]. Mas desde que surgiu o Subversion[2] várias comunidades estão migrando seus repositórios de códigos por várias razões que não vou discutir nesse momento. As comunidades Zope[3] e Plone[4] são alguns exemplos.

Mas somente o Subversion não resolve todos os problemas, ainda precisamos gerenciar todo o processo de desenvolvimento, saber quem fez o quê, quando e onde, produzir documentação de forma desburocratizada (nesse quesito nada melhor que um Wiki), poder reportar bugs e agendar tarefas (popular issue tracking), separar as várias versões dos softwares e, é claro, ter relatórios que nos permitam acompanhar tudo.

Que tal se isso tudo fosse integrado? Então estamos falando do Trac[5], um sistema escrito em Python[6], sob a licença GPL, que nos auxilia a gerenciar todo o processo de desenvolvimento de softwares de maneira descentralizada, com equipes distribuídas em qualquer lugar do planeta. Um exemplo de uso do Trac é o Colab[7] do Interlegis.

Esse tutorial descreve passo-a-passo a instalação e configuração do Subversion e do Trac no sistema operacional Ubuntu Linux[8] versão 5.04 (codinome Hoary), distro que tomou o lugar do meu Mandrake desde o início desse ano e não troco mais. Mas pode servir como guia para qualquer outra distribuição Linux, principalmente as baseadas em GNU/Debian! =)

Instalando o Trac, Subversion, Apache e Outras Dependências

O Trac tem várias dependências, Apache, Subversion, Python, SQLite, ClearSilver, GNU Enscript e SilverCity. Mas para quem usa Debian ou derivados como o Ubuntu basta usar o APT e todas as dependências serão instaladas automaticamente. Tudo o que faremos será com permissão de superusuário.

#  apt-get install apache2 subversion libapache2-svn trac

Criando um Repositório SVN

O Subversion é também chamado de SVN e após sua instalação precisamos criar nosso repositório, múltiplos repositórios podem ser criados, mas geralmente um só atende as necessidades.

#  svnadmin create /opt/svn

Criando os Usuários

Podemos usar várias técnicas para autenticar usuários, e usar bases diferentes para o Subversion e para o Trac, mas por conveniência ambos compartilharão a mesma base.

Os usuários ficarão armazenados em um arquivo e suas senhas serão encriptadas com o utilitário do Apache htpasswd. Criamos inicialmente o arquivo de usuários e senhas com um usuário, o qual chamei de admin.

#  htpasswd -c /opt/svn/dav_svn.passwd admin

Após, podemos criar novos usuários.

#  htpasswd -s /opt/svn/dav_svn.passwd usuario

Configurando o Repositório SVN

Agora precisamos configurar o nosso repositório Subversion, opções avançadas de configuração podem ser usadas, mas para o nosso exemplo faremos o básico.

#  vi /opt/svn/conf/svnserve.conf

E substituiremos a configuração existente dando permissão de leitura para usuários anônimos e de escrita para autenticados.

[general]
anon-access = read
auth-access = write
realm = Meu Subversion
[auth]
store-auth-creds = no

Configurando o Apache para o SVN

A organização do Apache no Ubuntu é muito interessante e funcional, mas como padrão vamos apagar o arquivo do Subversion criado em sua instalação.

#  rm /etc/apache2/mods-enabled/dav_svn.conf

E editar um novo arquivo para ficar em conformidade com o padrão que o Ubuntu propõe.

#  vi /etc/apache2/sites-available/svn

E nesse arquivo configuramos um Virtual Host para o nosso repositório tornando sua URL bonita! :-)

NameVirtualHost 10.10.10.10:80
<VirtualHost 10.10.10.10:80>
ServerName svn.seu_dominio.com.br
ServerAlias svn
ServerAdmin admin@seu_dominio.com.br
ErrorLog /var/log/apache2/error_svn_log
CustomLog /var/log/apache2/access_svn_log common
<Location "/">
DAV svn
SVNPath /opt/svn
AuthType Basic
AuthName "Meu Subversion"
AuthUserFile /opt/svn/dav_svn.passwd
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
# SSLRequireSSL
</Location>
</VirtualHost>

Como comentei a organização da configuração do Apache no Ubuntu é nota 10, vamos agora habilitar o nosso módulo.

#  ln -s /etc/apache2/sites-available/svn /etc/apache2/sites-enabled/svn

E pronto, o Subversion está configurado!

Criando a Base do Trac

Da mesma forma que criamos o repositório SVN precisamos criar a base para o nosso Trac.

#  trac-admin /opt/trac initenv

Algumas perguntas serão feitas.

Project Name [My Project]> Meu Trac
Path to repository [/var/svn/test]> /opt/svn
Templates directory [/usr/share/trac/templates]> (enter)

Configurando o Trac

Vamos agora configurar o Trac.

#  vi /opt/trac/conf/trac.ini

Configure ao seu gosto, mas vamos ver um exemplo de configuração.

[header_logo]
src = logo.gif
alt = Meu Trac
height = 50
link = http://trac.seu_dominio.com.br/
width = 150

[logging]
log_file = trac.log
log_level = DEBUG
log_type = none

[trac]
default_charset = iso-8859-15
templates_dir = /usr/share/trac/templates
repository_dir = /opt/svn
htdocs_location = /trac/
database = sqlite:db/trac.db

[notification]
smtp_enabled = false
smtp_replyto =
smtp_always_cc =
smtp_server = smtp.seu_dominio.com.br
smtp_from = admin@seu_dominio.com.br
always_notify_reporter = false

[project]
url = http://trac.seu_dominio.com.br/
footer =  Este conteúdo está sob a licença<br /><a href="http://creativecommons.org/licenses/by/2.5/deed.pt">Creative Commons</a>
name = Meu Trac
descr = Meu Ambiente de Desenvolvimento Trac
icon = favicon.ico

[mimeviewer]
enscript_path = enscript

[attachment]
max_size = 1024000

[timeline]
changeset_show_files = 0

[diff]
tab_width = 8

[ticket]
default_version =
default_severity = normal
default_component = component1
default_priority = normal
default_milestone =

Configurando o Apache para o Trac

Voltamos ao Apache, vamos fazer um Virtual Host para o Trac tornando a sua URL de acesso mais bonita escondendo coisas feias como '/cgi-bin/'. Editamos um novo arquivo de configuração para o Trac.

#  vi /etc/apache2/sites-available/trac

E nesse aquivo a configuração do nosso Virtual Host.

<VirtualHost 10.10.10.10:80>
ServerName trac.seu_dominio.com.br
ServerAlias trac
ServerAdmin admin@seu_dominio.com.br
CustomLog /var/log/apache2/access_trac_log combined
ErrorLog /var/log/apache2/error_trac_log
Alias /trac "/usr/share/trac/htdocs"
SetEnv TRAC_ENV "/opt/trac"
ScriptAliasMatch ^/(.*) /usr/lib/cgi-bin/trac.cgi/$1
<Location "/login">
AuthType Basic
AuthName "Meu Trac"
AuthUserFile /opt/svn/dav_svn.passwd
Require valid-user
# SSLRequireSSL
</Location>
</VirtualHost>

E agora habilitamos o módulo do Trac no Apache do Ubuntu.

#  ln -s /etc/apache2/sites-available/trac /etc/apache2/sites-enabled/trac

Habilitando CGI para o Trac no Apache

O Trac roda sobre CGI, precisamos então habilitar o módulo de CGI do Trac no diretório de CGI do Ubuntu. Pode-se copiar o módulo ou simplesmente criar um link simbólico para ele, nossa opção.

#  ln -s /usr/share/trac/cgi-bin/trac.cgi /usr/lib/cgi-bin/trac.cgi

Configurando as Permissões para o Apache

Como configuramos tudo até agora com permissão de superusuário precisamos transferir a propriedade dos arquivos para o usuário que roda o Apache (www-data), para que o Apache possa tornar esses módulos acessíveis publicamente.

#  chown -R www-data:www-data /opt/svn /opt/trac

Reiniciando o Apache

O último passo é reiniciar o Apache.

#  /etc/init.d/apache2 restart

E se tudo ocorreu como o esperado, tanto o Subversion quanto o Trac já estão funcionando e podem ser acessados via protocolo HTTP e WebDAV. Experimente acessar as URLs, em nosso exemplo svn.seu_dominio.com.br e trac.seu_dominio.com.br, do seu navegador.

Habilitando Permissões no Trac

Podemos ainda configurar permissões para nossos usuários no Trac. Por padrão ele já traz um conjunto de permissões pré-configuradas as quais podemos listar.

#  trac-admin /opt/trac permission list

Então basta configurar a permissão de administração geral do Trac para o nosso usuário admin e outras tantas permissões quantas você desejar aos demais usuários.

#  trac-admin /opt/trac permission add admin TRAC_ADMIN

Traduzindo os Templates do Trac

O Trac ainda não possui suporte a i18n (internacionalização), mas existe um conjunto de templates traduzidos[9] para o nosso idioma Português do Brasil. Basta movê-los para o diretório '/usr/share/trac/templates/', mas antes é bom fazer backup dos templates originais existentes nesse diretório.

Conclusão

O uso de um sistema de controle de versões é viciante. Depois que você começa a usá-lo não consegue mais viver sem ele, pois ele proporciona o domínio total sobre a evolução dos códigos fontes do software, mesmo com pessoas diferentes em locais diferentes, trabalhando sobre o mesmo código.

Entre várias outras vantagens, permite rever trechos de códigos, verificar facilmente as diferenças entre alterações nos códigos fontes, recuperar desastres, desenvolvimento de versões paralelas e armazena todo o histórico de evolução dos softwares.

O Subversion é um grande avanço em se tratando de sistema de controle de versões centralizado (uma cópia principal no servidor e cópias de trabalho nos clientes), trazendo facilidades e vários novos recursos.

Mas ele só não permite o controle total sobre o processo de desenvolvimento, a integração com o Trac supre com elegância essa carência.

Espero que você tenha gostado e que o tutorial lhe seja útil! ;-)

Referências

  1. http://www.nongnu.org/cvs/
  2. http://subversion.tigris.org/
  3. http://svn.zope.org/
  4. http://svn.plone.org/
  5. http://www.edgewall.com/trac/
  6. http://www.python.org/
  7. http://colab.interlegis.gov.br/
  8. http://ubuntulinux.org/
  9. http://projects.edgewall.com/trac/attachment/wiki/TracL10N/trac-0.9.1-templates-pt-br.tar.gz


Veja a relação completa dos artigos de Jean Rodrigo Ferri