Subversion+Trac no Slackware
Índice
Já faz algum tempo que venho dedicando algumas de minhas horas de desenvolvimento no incremento do uso de algumas ferramentas de desenvolvimento. Não que seja algum desenvolvedor de relevância ou que tenha lá grandes projetos para gerenciar, estou bem aquém disto e nem mesmo tenho tal pretensão. Mas tenho meus projetos pessoais por hobby que, bem ou mal, vem ganhando volume e tornando difícil o gerenciamento. Alguns acabam ficando parados por meses e até anos, o que dificulta muito a retomada das atividades, ainda porque não sou muito organizado com a documentação, algo que tenho me esforçado muito em melhorar.
Neste texto relato minha experiência na instalação e configuração de duas ferramentas que espero me adaptar em usar mais regularmente, para facilitar o gerenciamento destes projetos: Subversion + Trac. A instalação destas ferramentas sobre o Slackware64 não traz nenhuma dificuldade, mas a configuração, para alguém que não é da área como eu, sempre rende alguma dor de cabeça e horas, quando não dias, de pesquisa a sites e fóruns.
Instalação
Neste texto parto do princípio que o sistema foi instalado com todos os aplicativos e bibliotecas padrões do Slackware, desta forma o Subversion, Apache e outras dependências já estão instaladas, necessitando apenas instalar o Trac e outras poucas dependências, que apresento a seguir.
Geralmente utilizo as ferramentas padrões de instalação do Slackware (pkgtools), juntamente com aplicativos como o sbopkg, mas neste caso optei pelo uso do easy_install, apenas por curiosidade.
Para isto é necessário instalar primeiramente o easy_install, baixando o pacote do site oficial, para a versão do Python instalado em sua máquina, neste caso o 2.6:
ls /var/log/packages/python* /var/log/packages/python-2.6.6-x86_64-1 [prompt]wget http://pypi.python.org/packages/2.6/s/setuptools/setuptools-0.6c11-py2.6.egg#md5=bfa92100bd772d5a213eedd356d64086 ...
Em seguida faça a instalação com o comando abaixo:
sh ./setuptools-0.6c11-py2.6.egg ...
Com o easy_install instalado, o próximo passo é instalar as dependências do Trac (Babel e o Genshi) e em seguida o próprio Trac. O processos é bem simples e está muito bem descrito na documentação do Trac:
easy_install Babel==0.9.5 Genshi==0.6 ... [prompt]easy_install Trac ...
O easy_install é um aplicativo bem versátil e não deve lhe deixar na mão facilmente. Caso tenha que atualizar o Trac, basta dar o comando a seguir, no terminal:
easy_install -U Trac
Para mais informações sobre o easy_install leia o manual em http://peak.telecommunity.com/DevCenter/EasyInstall
Preparando o Subversion
Para configurar e levantar o servidor Subversion no Slackware fiz uso do texto do Faleiros, uma dos bons artigos sobre o assunto que encontrei na internet. O que apresento a seguir é uma sintase deste texto, ajustado à minhas necessidades mais algumas otimizações pessoais.
Vou criar o repositório svn em /home/ftp/pub/svn, ao invés do diretório padrão em /var. Farei isto pois em minhas instalações a partição raiz, onde deixo o diretório /var, é muito pequena e ainda muito muito susceptível à formatações e alterações no sistema. Para enfatizar o processo, vou criar a variável SVN apontando para este endereço:
SVN='/home/ftp/pub/svn'
Para que o processo todo funcione, é necessário que utilize o mesmo terminal do início ao fim deste texto, em caso contrário, a variável SVN deverá ser redefinida. Em seguida, crie o diretório para o repositório svn e adicione o grupo e usuário svn ao sistema:
groupadd svn [prompt]mkdir -p $SVN [prompt]useradd -g svn -d $SVN svn [prompt]chown -Rc svn:svn $SVN
Agora crie a estrutura de controle do Subversion com o comando svnadmin, executando como o usuário svn. O comando su a seguir faz isto:
su svn -c "svnadmin create $SVN"
Importando projetos para o Subversion
O próximo passo é adicionar os projetos ao seu repositório svn. Para isto organize os projetos em pastas distintas com a estrutura de diretórios:
- tags: pasta para armazenamento de exemplos e releases;
- trunk: pasta onde o projeto será desenvolvido;
- branches: pasta com outros ramos de desenvolvimento do projeto.
Como exemplo vou adicionar ao repositório svn três projetos: slackmirror; medidas; backup. A árvore abaixo mostra como exemplo a estrutura de diretórios do projeto “medidas“, uma biblioteca para cálculos com incertezas para Laboratório de Física:
tree medidas . |-- branches |-- tags `-- trunk |-- docs | `-- mcalc.desktop |-- forms | |-- altitude_dialog.ui | |-- calc.ui | |-- images | | |-- arrow-down.png | | |-- arrow-left.png | | |-- arrow-right.png | | |-- arrow-up.png | | `-- calculator.png | |-- Ui_altitude_dialog.py | `-- Ui_calc.py |-- libs | `-- medidas.py |-- Makefile |-- src | `-- mcalc `-- upgrade
A distribuição interna dos arquivos ficam a escolha do projetista. Para importar o projeto para o Subversion basta dar o comando abaixo:
su svn -c "svn import medidas file://$SVN/medidas -m 'Projeto medidas importado'" Adding medidas/trunk Adding medidas/trunk/forms ... Committed revision 1.
Os comandos a seguir importam os outros projetos, slackmirror e backup:
su svn -c "svn import slackmirror file://$SVN/slackmirror -m 'Projeto slackmirror importado'" ... [prompt]su svn -c "svn import backup file://$SVN/backup -m 'Projeto backup importado'" ...
Preferencialmente, gosto de fazer este comando como usuário svn, como feito acima (su svn -c “…).
Iniciando o Subversion no boot
O Subversion não possui um script para iniciar no boot do Slackware. O Herbert Faleiros criou um script bem simples para este trabalho, que reproduzo abaixo com alguns retoques:
#!/bin/sh
#
# /etc/rc.d/rc.svnserve
# author: Herbert Faleiros
# edited by: Rudson Alves
SVN='/home/ftp/pub/svn'
start() {
if ( su svn -c "umask 002; svnserve -d -T -r $SVN" ); then
echo -e "\e[32;1mStarting Subversion standalone serve.\e[m"
else
echo -e "\e[31;1mSubversion start error...\e[m"
fi
}
stop() {
PID=`ps aux | awk '/^svn .* svnserve/ {print $2}'`
if ( kill -9 $PID 2>/dev/null ); then
echo -e "\e[32;1mStop Subversion serve.\e[m"
else
echo -e "\e[31;1mSubversion stop error...\e[m"
fi
}
case $1 in
start)
start
;;
stop)
stop
;;
restart)
stop
sleep 1
start
;;
*)
echo "Usage: $0 start|stop|restart"
exit 1
;;
esac
Salve este script com o nome /etc/rc.d/rc.svnserve.
Por fim coloque as linhas a seguir no /etc/rc.d/rc.local. Isto fará com que o servidor svn seja iniciado durante o boot do sistema, sempre que este script tiver permissão de execução.
if [ -x /etc/rc.d/rc.svnserve ]; then
/etc/rc.d/rc.svnserve start
fi
Configurando Acesso aos Projetos
Para garantir o acesso de escrita e leitura aos repositórios a usuários cadastrados, edite o arquivo $SVN/conf/passwd e acrescente o usuário e senha conforme o exemplo abaixo:
[users]
rudson = 123
gabriel = 456
rafael = 789
maria = 012
tiago = 345
joana = 678
Em seguida remova o comentário das linhas a seguir, no arquivo $SVN/conf/svnserve.conf
...
anon-access = read
auth-access = write
...
password-db = passwd
...
Refinando o Controle
Para refinar o acesso aos projetos, é possível criar grupos e selecionar acessos diferenciados aos diferentes grupos/usuários e projetos. Para isto é necessário descomentar a linha abaixo no arquivo $SVN/conf/svnserve.conf:
...
authz-db = authz
...
Após isto basta definir os grupos e regras de acesso no arquivo $SVN/conf/authz. Os grupos são criados de forma simples, bastando escrever o nome do grupo e os usuários, conforme o exemplo a seguir:
developers = rudson, rafael, maria
testers = tiago, joana
Nestas linhas são criados dois grupos, sendo o primeiro developers, com os usuários rudson, rafael e maria, e testers, com os usuários tiago e joana.
O acesso aos projetos devem ser feitos em seções específicas, como segue:
[/]
* = r
Esta linha dá permissão de leitura a todos os usuários (*).
[/backup]
@developer = rw
@testers = r
Estas linhas dão permissão de leitura/escrita ao projeto backup para o grupo developer e acesso de leitura para o grupo testers. Isto é redundante após as linhas anteriores, que dão acesso de escrita a todos os usuários, mas a intenção é apenas ilustrativa. Observe que o nome dos grupos devem ser iniciados por uma arroba (@).
[/medidas]
rudson = rw
gabriel = rw
Nestas últimas linhas é dado acesso de leitura/escrita ao usuário rudson e gabriel, ao projeto medidas.
O projeto slackmirror ficou apenas com acesso de leitura, uma vez que não foi declarado no arquivo authz.
Iniciando e Testando o Subversion
Após isto, altere a permissão do /etc/rc.d/rc.svnserve para executável e inicie o Subversion manualmente, neste momento:
chmod +x /etc/rc.d/rc.svnserve [prompt]/etc/rc.d/rc.svnserve start
Para testar o Subversion, logue no sistema como um usuário e teste com alguns comandos, como segue o quadro abaixo:
Isto irá baixar os três projetos inseridos no servidor svn, como mostra a listagem abaixo, para o diretório local.
Em seguida faça alguma modificação a um dos projetos e submeta-a
No teste acima, apenas inseri uma linha de comentário ao programa backup. Ao submeter uma alteração pela primeira vez, o svn irá lhe solicitar a senha. Após isto e senha pode ser arquivada localmente.
Configurando o Trac
O Trac já foi instalado faltando apenas algumas configurações para por o serviço funcional. Primeiro crie o ambiente para o Trac guardar as páginas Wiki, Tickets, configurações e outras informações. Para isto use o comando trac-admin:
TRAC=/home/ftp/pub/trac [prompt]trac-admin $TRAC initenv Creating a new Trac environment at /home/ftp/pub/trac ... Project Name [My Project]> Meus Projetos ... Database connection string [sqlite:db/trac.db]>
Como feito anteriormente com o Subversion, utilizarei a variável TRAC para armazenar o diretório onde o ambiente do Trac será criado. O comando trac-admin, acima, fará duas perguntas, sendo a primeira o nome do projeto e em seguida uma string para conexão ao banco de dados. Como a proposta é configurar serviços para uma máquina local, com poucas atividades o sqlite vai dar conta com folga do serviço.
Para o Trac encontrar os projetos do Subversion, edite o arquivo de configuração $TRAC/conf/trac.ini e altere a variável repository_dir, na seção [trac], para apontar para o conteúdo da variável $SVN, neste caso /home/ftp/pub/svn:
...
[trac]
auth_cooki_lifetime = 0
...
repository_dir = /home/ftp/pub/svn
repository_sync_per_request = (default)
repository_type = svn
...
Neste momento o Trac já está funcional, mas ainda com algumas limitações. Se desejar pode alterar o conteúdo da variável alt na seção [header_logo] para apresentar uma mensagem de sua escolha. Nesta mesma seção ainda é possível customizar imagem para o logo do projeto, além de outras customizações.
Para testar, o Trac, dê o comando a seguir para iniciar o serviço:
tracd --port 8000 $TRAC Server starting in PID 1850. Serving on 0.0.0.0:8000 view at http://127.0.0.1:8000/ Using HTTP/1.1 protocol version
Entre com o endereço “http://localhost:8000/trac/browser” num navegador, que os projetos do Subversion devem ficar visíveis, como na figura abaixo.
Autenticação no Trac
O Trac trabalha com uma autenticação simples, usando o htpasswd, do apache, e uma encriptação mais forte, com o htdigest. Neste texto vou abordar apenas o htpasswd, para autenticação via htdigest, leia AddingAuthentication para detalhes.
Inicialmente gere o arquivo de senhas com o comando htpasswd, como abaixo:
htpasswd -c $TRAC/conf/trac.htpasswd admin
Ele lhe pedirá a senha para o admin, que posteriormente será transformado em administrador do Trac. Para criar senhas para outros usuários, repita o comando acima, mas sem a flag “-c”:
htpasswd $TRAC/conf/trac.htpasswd rudson
Em seguida edite arquivo de configuração do Apache (/etc/httpd/httpd.conf), adicionando as linhas abaixo:
AuthType Basic
AuthName "Trac"
AuthUserFile /home/ftp/pub/trac/conf/trac.htpasswd
Require valid-user
Neste ponto o Trac já está autenticando os usuários. Para testar, reinicie o servidor Apache e o tracd, como abaixo:
chmod +x /etc/rc.d/rc.httpd [prompt]/etc/rc.d/rc.httpd start [prompt]tracd --port 8000 --basic-auth="*,$TRAC/conf/trac.htpasswd,Forgotten Realms" $TRAC
A opção –basic-auth, habilita a autenticação via htpasswd. Após isto, retorne ao navegador e tente logar como admin. Neste momento o Trac lhe permitir editar algumas preferências, como informações do usuário admin, timezone, lingua da interface do Trac entre outras.
Existe uma aba ‘Admin’ para configuração do Trac via web, que permite alterar Permissões, Plugins, Componentes, Prioridades entre outras. Esta aba está disponível para apenas para usuário com permissões de administrador. No momento o usuário admin é apenas um usuário autenticado pelo Apache. Para lhe dar o status de administrador é necessário adicionar a ação TRAC_ADMIN, com o comando abaixo:
trac-admin $TRAC permission add admin TRAC_ADMIN
Para um refino final das configurações, crie o grupo developer, com as ações: REPORT_ADMIN, TICKET_MODIFY, WIKI_ADMIN, ou outras que lhe convier:
for ACT in WIKI_ADMIN REPORT_ADMIN TICKET_MODIFY; do > trac-admin $TRAC permission add developer $ACT; done
Em seguida adicione seus usuários ao grupo developer com o comando:
trac-admin $TRAC permission add rudson developer
As permissões devem ficar como mostram a figura abaixo:
Mais informações sobre controle de grupos e permissões, podem ser encontradas na página TracPermissions.
Registrando Projetos
Os projeto no Subversion já estão disponíveis, mas ainda não estão registrados no Trac, embora estejam visíveis. Para registrá-los, logue novamente como administrador e selecione Repositórios, na aba Admin, em Controle de Versão à esquerda.
Na figura abaixo é registrado o projeto backup:
Após pressionar o botão Adicionar, vá a um terminal e digite o comando abaixo, para sincronizar o repositório:
trac-admin $TRAC repository resync "backup" Resyncing repository history for backup... 1 revision cached. Done.
Observe que o nome “backup” deve ser o mesmo usado no registro na figura acima e não o path do svn. Se tentar algo diferente do nome registrado, ele deve gerar um erro de repositório não encontrado:
trac-admin $TRAC repository resync Backup TracError: Repository 'Backup' not found
Se quiser mudar o nome do projeto para Backup, não esqueça de alterar o registro primeiro.
Repita o processo para os demais projetos com os dados apresentados na tabela abaixo:
[TABLE=38]
Observe que os diretórios dos projetos no Subversion são sempre $SVN/projeto. Para terminar sincronize os demais repositórios,
trac-admin $TRAC repository resync "medidas" [prompt]trac-admin $TRAC repository resync "slackmirror"
Se você entrar em http://localhost:8000/trac/browser após estes comandos, deverá ver os repositórios como mostra a figura abaixo:
Se quiser omitir os projetos do repositório padrão, basta adicionar as linhas a seguir, ao $TRAC/conf/trac.ini,
[repositories]
.hidden = true
O único inconveniente é que os novos repositórios adicionados ao Subversion somente ficarão visíveis no Trac após registrá-los conforme acima.
Ajustes Finais
Para terminar, crie um script para iniciar o Trac durante o boot, tal como descrito acima. O script que utilizo segue abaixo:
#!/bin/sh
# Trac Projects
#
TRAC="/home/ftp/pub/trac"
function trac_start() {
if ( tracd --daemonize --port 8000 --basic-auth="*,$TRAC/conf/trac.htpasswd,Forgotten" $TRAC ); then
echo 'Trac start in port 8000'
return 0
else
echo 'Trac start error...'
return 1
fi
}
function trac_stop() {
if ( pgrep trac | xargs kill -9 ); then
echo 'Trac stoped'
return 0
else
echo 'Trac stop error...'
return 1
fi
}
case $1 in
start)
trac_start
;;
stop)
trac_stop
;;
restart)
trac_stop
sleep 1
trac_start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
Ou baixe em rc.trac. Coloque este script em /etc/rc.d/ e adicione as linhas abaixo ao seu /etc/rc.d/rc.local, como antes:
if [ -x /etc/rc.d/rc.trac ]; then
/etc/rc.d/rc.trac start
fi
Depois basta fazê-lo executável e terminou. O Trac está funcional.
4 Comentários