Programação e Linux.

quinta-feira, 22 de julho de 2010

Trac + Subversion + Apache

Aqui vou tentar explicar como instalar o subversion mais o trac rodando em cima do apache no Ubuntu 10.04 (Lucid),

Se o apache, o trac ou subversion não estiverem instalados, faça:
apt-get install subversion #Version: 1.6.6dfsg-2ubuntu1
apt-get install apache2 #Version: 2.2.14-5ubuntu8
apt-get install trac #Version: 0.11.7-1

Preparação inicial
Verifique se tem os módulos necessários no apache
root@mesh-server:~# apache2ctl -M | grep dav
Syntax OK
dav_module (shared)
dav_svn_module (shared)
root@mesh-server:~#
root@mesh-server:~# apache2ctl -M | grep wsgi
Syntax OK
wsgi_module (shared)
root@mesh-server:~#
No ubuntu instale via:
apt-get install libapache2-svn #necessário para o svn
apt-get install libapache2-mod-wsgi #necessário para o trac

Crie um local para os repositórios:
mkdir /var/lib/svn
chown www-data:www-data /var/lib/svn/

Crie um local para os trac's:
mkdir /var/lib/trac
chown www-data:www-data /var/lib/trac/

Crie um local para guardar o script wsgi do trac:
mkdir /var/lib/cgi-bin
chown www-data:www-data /var/lib/cgi-bin

Configurando o Apache
Configure o apache /etc/apache2/sites-available/svn com o seguinte conteúdo
<virtualhost *:80>

ServerAdmin webmaster@localhost
ServerName svn-server.local

DocumentRoot /var/www

<directory />
Options FollowSymLinks
AllowOverride None
</directory>

<directory /var/www>
Options Indexes FollowSymLinks MultiViews
AllowOverride None
Order allow,deny
deny from all
</directory>

WSGIScriptAlias /trac /var/lib/cgi-bin/trac.wsgi
<directory /var/lib/cgi-bin/trac.wsgi>
WSGIApplicationGroup %{GLOBAL}
Order deny,allow
Allow from all
</directory>

<Location "/trac/[^/]+/login">
AuthType Basic
AuthName "Trac"
AuthUserFile /var/lib/svn/svn-auth-file
Require valid-user
</Location>

ErrorLog /var/log/apache2/svn-server-error.log
LogLevel warn
CustomLog /var/log/apache2/svn-server-access.log combined

<location /svn>
DAV svn
SVNParentPath /var/lib/svn
SVNListParentPath on

Order deny,allow
Allow from all

AuthType Basic
AuthName "Subversion"
AuthUserFile /var/lib/svn/svn-auth-file
Require valid-user
</location>

</virtualhost>

Crie o link para o arquivo de configuração
ln -s /etc/apache2/sites-available/svn /etc/apache2/sites-enabled/001-svn

Veja se tudo está ok:
apache2ctl configtest

Reinicie o apache
apache2ctl restart

Criando o script WSGI para acessar o trac pelo Apache
crie o arquivo /var/lib/cgi-bin/trac.wsgi com o seguinte conteúdo
#!/usr/bin/python
# -*- coding: utf-8 -*-
import trac.web.main
def application(environ, start_response):
environ['trac.env_parent_dir'] = '/var/lib/trac'
return trac.web.main.dispatch_request(environ, start_response)
Coloque as permissões corretas
chown www-data:www-data /var/lib/cgi-bin/trac.wsgi

Administrando os usuários


Adicione o primeiro usuário (ex: iuri) com:
sudo -H -u www-data htpasswd -cm /var/lib/svn/svn-auth-file iuri

Nos próximos (ex: diniz) use::
sudo -H -u www-data htpasswd -m /var/lib/svn/svn-auth-file diniz

Criando os repositórios
Para criar um repositório (ex: wolla), faça:
sudo -H -u www-data svnadmin create /var/lib/svn/wolla

Criado os Trac's
Crie um Trac após criar um repositório subversion (veja acima como).

Para criar o trac (ex: wolla) para o repositório criado no passo anterior (ex: wolla), faça, mas fique atento as perguntas:
sudo -H -u www-data trac-admin /var/lib/trac/wolla/ initenv

Project Name [My Project]> wolla [ENTER]
Database connection string [sqlite:db/trac.db]> [ENTER]
Repository type [svn]> [ENTER]
Path to repository [/path/to/repos]> /var/lib/svn/wolla/ [ENTER]
Agora é preciso configurar pelo menos um usuário ADMIN no trac para poder usar a interface web do trac-admin, para isso faça (ex: usuário iuri em wolla):
trac-admin /var/lib/trac/wolla/ permission add iuri TRAC_ADMIN

Integrando os commits do subversion com o tickets do Trac
Crie (ou modifique) o arquivo post-commit para o repositório subversion (ex: wolla) que deseja integrar ao respectivo Trac (ex: wolla) na pasta hooks do repositório (ex: /var/lib/svn/wolla/hooks/post-commit)
#!/bin/sh
REPOS="$1"
REV="$2"
TRAC_ENV="/var/lib/trac/wolla/"
python /usr/share/doc/trac/contrib/trac-post-commit-hook -p "$TRAC_ENV" -r "$REV"
Aplique as permissões corretas:
chown www-data:www-data /var/lib/svn/wolla/hooks/post-commit
chmod +x /var/lib/svn/wolla/hooks/post-commit

Corrigindo um BUG do syntax
highlighting do Trac

O suporte pygments do trac possui um bug no pacote que vem no Ubuntu 9.10, o link para o jquery.js não foi setado corretamente, para habilitar este suporte basta fazer:
ln -s /usr/share/javascript/jquery/jquery.js /usr/lib/python2.6/dist-packages/trac/htdocs/js

21 comentários:

slipperweb disse...

so faltou dizer como acessar o trac?
URL?
Muito obrigado tutorial muito bom.

Iuri Diniz disse...

@slipperweb

Para acessar o trac usado no exemplo, a URL correta é:

http://svn-server.local/trac

Isso por conta da configuração do apache:

ServerName svn-server.local

e

WSGIScriptAlias /trac /var/lib/cgi-bin/trac.wsgi

Anônimo disse...

cara bom tutorial,mas não consigo acessar o trace com http://svn-server.local/trac

Torrichelli Silva disse...

Grande Iuri.

Pesquisando sobre a instalação do trac, acabei chegando ao teu site.

Não estou conseguindo fazer funcionar.

No log aparece isso:

[Mon Apr 04 21:17:05 2011] [error] [client 192.168.0.1] client denied by server configuration: /var/www/
[Mon Apr 04 21:17:05 2011] [error] [client 192.168.0.1] mod_wsgi (pid=22207, process='', application='192.168.0.45|/trac'): Failed to parse WSGI script file '/var/lib/cgi-bin/trac.wsgi'.
[Mon Apr 04 21:17:05 2011] [error] [client 192.168.0.1] mod_wsgi (pid=22207): Exception occurred processing WSGI script '/var/lib/cgi-bin/trac.wsgi'.
[Mon Apr 04 21:17:05 2011] [error] [client 192.168.0.1] File "/var/lib/cgi-bin/trac.wsgi", line 5
[Mon Apr 04 21:17:05 2011] [error] [client 192.168.0.1] environ['trac.env_parent_dir'] = '/var/lib/trac'
[Mon Apr 04 21:17:05 2011] [error] [client 192.168.0.1] ^
[Mon Apr 04 21:17:05 2011] [error] [client 192.168.0.1] IndentationError: expected an indented block
[Mon Apr 04 21:17:06 2011] [error] [client 192.168.0.1] client denied by server configuration: /var/www/favicon.ico


Tens alguma idéia do que pode ser?

Abraço.

Iuri Diniz disse...

@Anônimo,

sua d[uvida foi muito vaga

Iuri Diniz disse...

@Torrichelli,

o blogger parece não aceitar muito bem espaços, o erro é por conta da indentação do python

use este pastbin

Torrichelli Silva disse...

Valeu, Iuri.

Problema resolvido.

Obrigado.

Anônimo disse...

Olá Iuri quem fala é o Pedro cheguei a seu artigo pesquisando sobre subversion
tava tentando implementar o seu tutorial e dá um problema quando se cria o link simbólico: ln -s /etc/apache2/sites-available/svn /etc/apache2/sites-enabled/001-svn

erro: "apache2: Syntax error on line 236 of /etc/apache2/apache2.conf: Syntax error on line 52 of /etc/apache2/sites-enabled/001-svn: without matching section[fail]
"
se vc puder me dar alguma dica sobre ficarei muito agradecido
obrigado

Iuri Diniz disse...

@pedro

use este arquivo de configuração do apache

Seu erro é muito vago

Iuri Diniz disse...

@Pedro,

Primeiro, use o pastebin (http://pastebin.com) para postar arquivos

Segundo, você tentou com o arquivo disponível em: http://pastebin.com/5LuhFe1P??

Anônimo disse...

Pedro
Iuri, perdão eu me confudi, akele log era de acesso, nao de erro...ainda nao conseguir acessar o trac pela ulr...mas desde já só a alteração q vc mandou nakele arquivo já foi de grande ajuda, vou continuar estudando por aki...se vier mais alguma dica será muito bem-vinda...abçs

Iuri Diniz disse...

@Pedro,

como vc fez ctrl+c e ctrl+v do site, tente usar este arquivo wsgi

é a mesma dica feita para torichelli

O blog não aceita bem whitespaces

Anônimo disse...

Iuri, muito obrigado, extremamente agradecido...It works!
agora é estudar Trac peso
vlw
Pedro

Anônimo disse...

Iuri, muito obrigado, extremamente agradecido...It works!
agora é estudar Trac peso
vlw
Pedro

Fernando disse...

Opa! Não consigo acessar o endereço http://svn-server.local/trac pelo browser. sabes o que pode estar acontecendo?

Iuri Diniz disse...

@fernando

Quando no apache se coloca
"ServerName svn-server.local" quer dizer que ele responderá por requisições "Host:svn-server.local"

Porém svn-server.local está cadastrado no seu DNS ou no seu /etc/hosts?

Acredito que não.

Para adicionar rapidamente faça

echo "127.0.0.1 svn-server.local" | sudo tee /etc/hosts


Se quiser que fique disponível para todo mundo

use um nome válido de DNS em "ServerName svn-server.local" que aponte para o ip da máquina onde está instalado o SVN. Fale com o administrador de seu DNS.

Fernando disse...

Opa! Senti falta do arquivo trac que vai no /etc/sites-available. Neste caso não precisa deste arquivo?

Iuri Diniz disse...

@Fernando

se você observar o ''

ele configura o http://svn-server.local/trac para o trac

Fernando disse...

Cara, tu entende algo sobre Zoneminder?

Kamilla Holanda disse...

Funcionou muito bem aqui! Obrigada!

Só o admin-tab que não tá habilitado. Tem idéia do que possa ser?

Iuri Diniz disse...

@Kamila Holanda

procure seu trac.ini e habilite o webadmin:

[components]
webadmin.* = enabled