Instalar o TurboGears é uma tarefa muito simples, resume-se em uma linha, primeiro você vai no site do TurboGears http://www.turbogears.org/, baixa o arquivo “tgsetup.py” e aí é só executar

$ sudo python tgsetup.py

Pronto? Não exatamente! Neste período de incerteza sobre o desenvolvimento do TurboGears eu não gosto que manter minha versão no top, porque? Meus projetos são todos desenvolvidos usando o SQLObject e o TurboGears está caminhando para migrar seu ORM padrão para o SQLAlchemy, que é superior, mas que ainda está na versão 0.4! Enquanto o SQLObject, com toda a limitação técnica, já está na versão 1.0-final! Traduzindo… por uma questão que estabilidade e segurança no desenvolvimento, prefiro usar a vesão 1.0.2.2 do TurboGears, que é a última versão que testei e comprovei sua estabilidade. Então a solução seria:

$ sudo easy_install TurboGears==1.0.2.2

Errado novamente! Isso só garante que o TurboGears seja instalado na versão exata 1.0.2.2, mas todas as dependências como: Kid, Cheetah, PyProtocols, etc., são instalados nas suas últimas versões disponíveis, isso pode até ser bom, mas pode ocorrer que versões mais novas deste módulos podem gerar uma certa incompatibilidade com uma versão antiga do TurboGears, principalmente devido a DeprecatedWarnings. Então como fazer?

  1. O ideal é ter sempre o arquivo de todos os Eggs usados para instalar na época que a versão 1.0.2.2 era a atual e guardar esses Eggs junto do repositório do projeto que você está desenvolvendo, então quando você for atualizar a versão do TurboGears utilizada no projeto, atualizará também a versão dos Eggs no repositório para o atual, neste caso, quando precisar (re)instalar o projeto no seu cliente você já possuirá todos os Eggs de instalação disponíveis no seu repositório.PS: Lembre-se que o Egg é diferente para diferentes plataformas, caso possua clientes Windows e Linux mantenha versões separadas destes pacotes, o mesmo vale para clientes usando Python 2.4 e Python 2.5.2.
  2. Outra opção, para o caso de você não ter acesso ao conhecimento de quais pacotes eram atuais na época, é acessar a pasta “tags” do Subversion do Turbogears na versão que você deseja instalar e consultar o arquivo “setup.py” para ver quais são as dependências para a instalação do TurboGears, neste arquivo estará listado os pacotes requeridos com as versões mínimas para a instalação do TurboGears. Lembre-se que você poderá ter que consultar as “dependências das dependências” para conseguir uma lista completa dos módulos necessários, o Exemplo disso é que o TurboGears depende do TurboKid e o TurboKid depende do Kid, então terá que consultar o TurboKid para saber qual a versão mínima do Kid. Para este cenário mantenha as versões mínimas instaladas, atualizando apenas os módulos que apresentarem mudanças significativas de segurança ou que tenham funcionalidades desejadas.
  3. Eu já tive um certo trabalho de consolidar isso que mencionei no ponto 2, e neste arquivo irei colocar mastigado como instalar a versão 1.0.2.2 usando minha lista de dependências que considero estável, minha lista é:
  • Cheetah-2.0rc8
  • CherryPy-2.2.1
  • ConfigObj-4.4.0
  • DecoratorTools-1.4
  • ElementTree-1.2.6_20050316
  • FormEncode-0.7.1
  • Kid-0.9.5
  • Paste-1.3
  • PasteDeploy-1.3
  • PasteScript-1.3.4
  • PyProtocols-1.0a0
  • RuleDispatch-0.5a0.dev_r2306
  • SimpleJson-1.7.1
  • SqlObject-0.9.0b2
  • TurboCheetah-0.9.5
  • TurboJson-1.0
  • TurboKid-1.0.1
  • TurboGears-1.0.2.2

Agora como instalar esses pacotes? Usando o Cheeseshop encontrei uma grande dificuldade de achar pacotes antigos, imaginei que seria possível instalar usando o Setuptools com o comando “easy_install Cheetah==2.0rc8″, mas também sem sucesso, o jeito foi acessar o repositório Subversion de cada módulo e compilar o arquivo Egg apartir do código fonte

$ svn co http://+projeto_url_svn+/tags/+versão desejada+
$ python setup.py bdist_egg

Após ter construido todos os Eggs para sua plataforma crie uma pasta do seu Subversion e armazene conforme mencionei anteriormente no passo 1.
Agora sim, dentro da pasta contendo todos os módulos listados acima instale o TurboGears 1.0.2.2 usando o comando

$ sudo easy_install -f . TurboGears==1.0.2.2

O -f indica que o Setuptools não irá consultar a internet para buscar pacotes, se quiser se certificar tire o cabo da Internet.

Pronto, agora você terá a versão 1.0.2.2 do TurboGears estável instalada em seu computador.

Sempre tenho dificuldades para lembrar como fiz a configuração do meu computador, e sempre que algo dá errado e eu tenho que formatá-lo tenho que buscar na internet como configurá-lo novamente, tentando lembrar como o personalizei e essas coisas, enfim, agora que eu tenho um blog vou publicar a documentação que eu uso para configurar meu computador e espero que seja útil para mais alguém.

Como uso o Ubuntu, irei usar o aptitude para instalar meus pacotes, ao menos para a maioria dos pacotes, a vantagem é ter o log de toda instalação e desinstalação dos pacotes em /var/log/aptitude*

1. Vou instalar o que geralmente instalo assim que termino a instalação do Ubuntu, todo computador de desenvolvedor tem que ter.

$ sudo aptitude install build-essential python-dev python-profiler python-setuptools

2. Instalar os binários do Subversion, neste pacotes encontram-se o cliente e o servidor também.

$ sudo aptitude install subversion python-subversion

3. Agora os binários do Trac com os módulos Python relacionados

$ sudo aptitude install trac python-docutils python-clearsilver python-pysqlite2 python-roman

4. Por fim instalar o Apache com os módulos necessários para publicar o serviço Webdav do Subversion e para hospedar o Trac usando mod_python (mais rápido do que o cgi)

$ sudo aptitude install apache2 apache2-utils apache2-mpm-worker apache2.2-common libapache2-mod-python libapache2-svn

5. Criar as pastas onde serão colocados os projetos

$ sudo mkdir -p /var/lib/svn/

$ sudo mkdir -p /var/lib/trac/

6. Criar o projeto Subversion

$ cd /var/lib/svn/

$ sudo svnadmin create +projeto+

6.1 Caso esteja restaurando um backup carregar o backup após criar o projeto

$ svnadmin load +projeto+ < +projeto+.svndump

7. Esta configuração é para o Apache poder ler no diretório

$ sudo chgrp -R www-data +projeto+

$ sudo chown -R g+w +projeto+

8. Criar o projeto Trac

$ cd /var/lib/trac/

$ sudo trac-admin +projeto+ initenv

8.1 Caso esteja restaurando um backup pular o passo anterior e executar

$ tar -zxvf +projeto+.tar.gz -C /var/lib/trac/

9. Esta configuração é para o Apache poder ler no diretório do Trac

$ sudo chgrp -R www-data +projeto+

$ sudo chown -R g+w +projeto+

10. Configurar o apache para servir os sites do Subversion, via Webdav e do Trac via mod_python

$ cd /etc/apache2/sites-available/

$ sudo vim svn

— code —
NameVirtualHost *:80

<VirtualHost *:80>
ServerName svn.home.local
ServerAlias svn
ServerAdmin allan.garcia@gmail.com
ErrorLog /var/log/apache2/error_svn_log
CustomLog /var/log/apache2/access_svn_log common

<Location /+projeto+>
DAV svn
SVNPath /var/lib/svn/+projeto+
AuthType Basic
AuthName “+projeto+ Subversion Repository”
AuthUserFile /var/lib/trac/+projeto+/.passwd
Require valid-user
</Location>

</VirtualHost>
— code —

$ sudo vim trac

— code —
<VirtualHost *:80>
ServerName trac.home.local
ServerAlias trac
ServerAdmin allan.garcia@gmail.com
ErrorLog /var/log/apache2/error_trac_log
CustomLog /var/log/apache2/access_trac_log common

<Location /+projeto+>
SetHandler mod_python
PythonHandler trac.web.modpython_frontend
PythonOption TracEnv /var/lib/trac/+projeto+
PythonOption TracUriRoot /+projeto+
AuthType Basic
AuthName “+projeto+ Trac”
AuthUserFile /var/lib/trac/+projeto+/.passwd
Require valid-user
</Location>

</VirtualHost>
— code —

$ sudo a2ensite svn

$ sudo a2ensite trac

Criar o arquivo htpasswd para o projeto

$ cd /var/lib/trac/+projeto+/

$ sudo htpasswd -c .passwd +usuario+

11. Configurar o arquivo hosts para responder para o localhost os nomes configurados no Apache

$ sudo vim /etc/hosts

— code —
127.0.0.1 trac.home.local trac svn.home.local svn
— code —

12. Reiniciar e testar

$ sudo /etc/init.d/apache2 reload

acessar http://svn/+projeto+ para o subversion
acessar http://trac/+projeto+ para o trac

Como não poderia ser diferente, aqui está meu primeiro post, este deve ser o n-ésimo blog que tento iniciar… enfim… vejamos se desta vez vai!