Instalando o Trac na Bluehost

05.4.2007 | 12:54 am | Tutorial

Introdução

Este how-to lhe mostrará como instalar o Trac numa conta padrão na Bluehost. Esta instalação usará o Trac 0.11 com SQLite 3.3.17, nos modos CGI e FastCGI. Mod_python a Bluehost não suporta. Tive problemas com versões anteriores do trac para instalar o plugin webadmin. Esta versão já tem o webadmin embutido. Também não irei integrar o Trac com o SVN, devido também à restrições da Bluehost à instalação de um servidor SVN. Até é possível instalar um servidor SVN, mas não é possível acessá-lo de fora via svn:// através do apache. Já vi alguns textos mostrando como acessar através de um túnnel ssh. Fique à vontade para tentar. Neste caso, informe os dados do repositório svn ao criar o projeto do Trac. Para este how-to, apenas instalaremos o svn para usar o lado cliente para baixar os pacotes.

Atenção!
Estou assumindo que você é um administrador responsável de sua conta. Isto significa que você irá fazer o backup de seus dados antes de prosseguir. Estas instruções funcionaram para mim, e eu acredito que você não terá nenhum problema com elas. Mas lembre-se: o ambiente é seu, e eu não me responsabilizo por qualquer imbecilidade bobagem que você venha a fazer com ele.

Também não vou me ater aqui a detalhes de segurança. Meu objetivo é fazer o trac funcionar e não indicar como manter o seu site seguro. Isto você já deve saber (eu espero).

Todos os passos aqui descritos foram resultados de alguns dias de pesquisas e tentativas. Alguns deles, em plena madrugada anterior ao dia de trabalho. Espero que meu esforço não tenha sido em vão e que este texto lhe ajude de verdade à usar esta ótima ferramenta.

Paulo Brito

Preparação

  • Crie diretório “~/lib/python2.3/site-packages”
  • Caso tenha algum problema com pacotes tentando usar ~/lib64, crie link simbólico de “~/lib64″ para “~/lib”.

Instalando o SVN

Para instalar o svn v1.3.2, utilize os comandos:

cd ~/downloads
wget http://subversion.tigris.org/downloads/subversion-1.3.2.tar.gz
tar zxvf subversion-1.3.2.tar.gz -C ../src
cd ~/src/subversion-1.3.2
./configure --prefix=$HOME --without-berkley-db --with-zlib --with-ssl
make
make install

Estas instruções foram retiradas de http://blog.matharvard.com/2006/9/21/mephisto-subversion. Logo no começo da página, há um link para um outro artigo mostrando como instalar a versão 1.4.2 e, possivelmente, as versões mais recentes.

Instalando o “Easy Install”

O EasyInstall e necessário para instalar algums plugins e o Genshi. Instale utilizando os comandos:

cd ~/downloads
wget http://peak.telecommunity.com/dist/ez_setup.py
python ez_setup.py --PREFIX=$HOME

Instalando Genshi

O Genshi é uma biblioteca necessária ao Trac. Para instalar, utilize o conmando, de qualquer diretório:

easy_install --prefix=$HOME Genshi

O pacote vai ser baixado e instalado automaticamente.

obs: o parâmetro “–prefix” deve estar neste ordem.

Instalando o SQLite

O Sql Lite é um banco de dados Sql que é executado junto com a aplicação. É rápido e versatil. Para instalá-lo, utilize:

cd ~/downloads
wget http://www.sqlite.org/sqlite-3.3.17.tar.gz
tar zxvf sqlite-3.3.17.tar.gz -C ../src
cd ~/src/sqlite-3.3.17
./configure --prefix=$HOME --disable-tcl
make
make install

Instalando o Trac

Vamos usar o snv para baixar a última revisão do Trac. A versão 0.10 apresenta problemas para instalar o plugin WebAdmin. A partir da versão 0.11, o webadmin está incorporado.

cd ~/src
svo co http://svn.edgewall.org/repos/trac/trunk trac
cd trac
python setup.py install --prefix=$HOME

Criando o projeto do Trac

Escolha um diretório onde ficarão os projetos do trac. Dentro deste diretório, execute

trac-admin [projeto] initenv

Para uma configuração padrão, sem integração com o subversion, digite somente o nome do projetos, e dê enter em todas as perguntas subsequentes.

Configurando o modo CGI

Não podemos fazer as alterações no httpd.conf que o site do trac pede, então vamos usar uma maneira menos elegante mas que funciona.

Escolha um diretório dentro de “~/www” para abrigar o trac. Não é necessário ser algum cgi-bin pré-configurado. Podemos configurar qualquer diretório para o trac com algumas configurações no .htaccess. Eu escolhi “~/www/trac”.

Copie o arquivo trac.cgi de “~/share/trac/cgi-bin” para este diretório. Isto substitui a linha “ScriptAlias /trac /usr/share/trac/cgi-bin/trac.cgi” que precisaríamos adicionar ao httpd.conf

Precisamos agora fazer algumas modificações no CGI, ja que o seu cgi não será executado como o seu usuário. Por isto, ele não reconhece o seu ~/lib/python2.3/site-packages nem a variável de ambiente PYTHONPATH. Temos que dizer isso a ele em tempo de execução. Lembre-se que, como o cgi vai ser executado com outro usuario que não o seu, ele não sabe nada sobre “~/”. Então, use sempre caminhos completos.

Crie um novo arquivo chamado “pythonpath.py” e adicione estas linhas:

import sys;
sys.path.append("/home/[seuhome]/lib/python2.3/site-packages/")
sys.path.append("/home/[seuhome]/lib/python2.3/site-packages/Trac-0.11dev_r5292-py2.3.egg")
sys.path.append("/home/[seuhome]/lib/python2.3/site-packages/setuptools-0.6c5-py2.3.egg")
sys.path.append("/home/[seuhome]/lib/python2.3/site-packages/Genshi-0.4-py2.3.egg")

O que este arquivo irá fazer é colocar no path do python as nossas bibliotecas locais. Este código deve ser executado a cada chamada no nosso CGI, então edite o arquivo trac.cgi e adicione as seguintes linhas entre o primero “try” e “from trac.web import cgi_frontend”:

import os, pythonpath
os.environ["TRAC_ENV"] = "/home/[seuhome]/trac/[dir-projeto]"

Deve ficar parecido com isto:

try
import os, pythonpath
os.environ["TRAC_ENV"] = "/home/[seuhome]/trac/[dir-projeto]"

from trac.web import cgi_frontend
cgi_frontend.run()
except SystemExit:
raise
(...)

o “import os, pythonpath” executa o nosso ajuste de path. A linha “os.environ…” substitui a entrada


SetEnv TRAC_ENV “/path/to/projectenv”

que você deveria fazer no httpd.conf. Esta instrução diz ao trac onde ele deve buscar o projeto.

Você pode renomear o arquivo trac.cgi para o que você quizer. No meu caso, usei o nome do projeto. Assim, a url fica dominio.com/trac/projeto ao invés de dominio.com/trac/trac.cgi. Vale lembrar que você pode ter vários cgis neste mesmo diretório. Mude somente a linha “os.environ” para apontar para o projeto correspondente.

Para uma configuração mais flexível, coloque o pythonpath.py em algum diretório padrão e crie links simbólicos na pasta onde o trac.cgi estiver. Isto evita ter várias cópias do pythonpath.py e evita muitas dores de cabeça na instalação de plugins para o python, já que para cada plugin instalado, deve existir uma entrada em pythonpath.py indicando o seu caminho. Perceba que algumas das entradas se referem a arquivos e outras a diretórios.

Agora temos que configurar o .htaccess para rodar o cgi. Adicione estas linhas:

Options ExecCGI
SetHandler cgi-script

Usei aqui o SetHandler ao invés do AddHandler porque usei um nome de arquivo sem extensão cgi. Neste caso, todos os arquivos deste diretório serão processados como cgi.

Para que o trac peça o login antes mesmo de mostrar o wiki, adicione as linhas abaixo. O efeito colateral é que não é possível se deslogar:

AuthType Basic
AuthName "Trac"
AuthUserFile /home/[seuhome]/www/trac/.htpasswd
Require valid-user

Se optar por habilitar a autenticação, não será possivel usar o trac como o usuário “anonymous”. Como criar usuários para a autenticação pode ser encontrado no site do trac.

Uma forma mais recomendada é a instalação do plugin AccountManager, disponível no site do Trac.

Configurando o modo FastCGI

O procedimento é basicamente o mesmo que o modo CGI, com 2 modificações:

1. O arquivo a ser copiado é o trac.fcgi e não o trac.cgi
2. No .htaccess, troque “SetHandler cgi-script” por “SetHandler fastcgi-script”

Espere alguma demora na primeira requisição, pois o seu fcgi será carregado na memória e ficará carregado para as requisições subsequentes. Algumas alterações na configuração do Trac irão necessitar que você mate o processo do seu fcgi. Por exemplo, se você não renomeou o trac.fcgi, o comando

killall trac.fcgi

deve matar o seu fcgi. A próxima requisição vai cerregá-lo novamente para memória.

Pronto!

A instalação está completa. Agora você já pode customizar o seu trac.conf da maneira que lhe convier. Não se esqueça que se você usou o modo fcgi do Trac, a primeira requisição será bem demorada.

2 Comments »

  1. Bacana Paulo!

    Essa semana eu estava fazendo um deploy de pylons com cgi/fastcgi. O esquema era parecido.
    Quando eu estava nas linhas mais ou menos parecidas com a parte.

    sys.path.append(”/home/[seuhome]/lib/python2.3/site-packages/”)
    sys.path.append(”/home/[seuhome]/lib/python2.3/site-packages/Trac-0.11dev_r5292-py2.3.egg”)
    sys.path.append(”/home/[seuhome]/lib/python2.3/site-packages/setuptools-0.6c5-py2.3.egg”)
    sys.path.append(”/home/[seuhome]/lib/python2.3/site-packages/Genshi-0.4-py2.3.egg”)

    desse tutorial (e já iam pra umas 15 linhas), eu pensei.. deve haver uma forma mais fácil! Aí, esbarrei (pra variar) no setuptools.

    Ficou mais ou menos assim:

    sys.path.append(’/home/walter/lib/python2.4/site-packages/setuptools-0.6c6-py2.4.egg’)
    from pkg_resources import require

    e depois, bastou dar require no Pylons
    Pelo seu exemplo, creio que bastaria:
    require(”Trac”)

    (O benefício não fica tão óbvio já que vc adicionou apenas 4 linhas), mas no meu caso, ficou beeeeeem melhor :)

    Abraço!

    Comment by Walter Cruz | 07.24.2007 | 12:03 pm

  2. Thank you!!
    I don’t understand a single word of portugesh, but with your advises i successfully installed trac. Thank you!

    Comment by dustman | 09.28.2007 | 8:38 pm

 

Leave a comment