Migração Trac e Subversion para Dreamhost

Tutorial para migração de subversion e trac 0.12 para dreamhost

Na informática temos várias maneiras de executar a mesma tarefa e o tutorial abaixo descreve os procedimentos que melhor se adaptaram ao caso prático e aos conhecimentos do autor.

Obs:. Os comandos devem ser ajustados a realidade dos seus servidores

Migrando Subversion

Crie um novo subdomínio e um repositório seguindo os três passos (na verdade o segundo passo é apenas aguardar a propagação de DNS) conforme instruções oficiais da Dreamhost.

Observe que após criar o novo subdomínio será adicionado um novo diretório com o caminho similar a este: /home/username/svn.yourhost.com
E após criar o novo repositório será criado um diretório “svn” em sua home para guardar o projeto versionado e os arquivos contendo as senhas e permissões de acesso.

Neste momento você já pode testar seu repositório através do browser acessando um endereço similar a este http://svn.yourhost.com/yourproject
(Pode demorar alguns minutos para o servidor criar o novo subdomínio e/ou o novo repositório)

Se você conseguiu acessar o repositório na Revision 0 continuaremos com o backup e restore do projeto!

#Backup do repositório atual
svnadmin dump /var/www/svn/yourproject/ | gzip > svn_yourproject.gz

#Enviando o backup para o novo servidor
scp svn_yourproject.gz username@yourhost.com:~

#Restaurando o backup no novo servidor
gunzip -c svn_yourproject.gz | svnadmin load svn/yourproject

Teste novamente o acesso on-line e verá o repositório do subversion trabalhando com seu último commit.

Fonte: http://wiki.dreamhost.com/Subversion#Loading_a_dumpfile

Migrando Trac

Agora vem a parte interessante! Se o Trac anterior estivesse na mesma versão do Trac da dreamhost seria tudo mais simples e não precisariamos criar um novo ambiente python para instalar o trac manualmente pois a dreamhost disponibilizado tudo pelo painel conforme consta aqui http://wiki.dreamhost.com/Trac ou se o repositório não estivesse sendo migrado! Mas o meu problema é que a versão atual do Trac é 0.12 e a dreamhost está trabalhando com a versão 0.11.X, então vamos lá.

Criando um Ambiente Virtual Python

Estamos trabalhando com uma conta normal na Dreamhost, ou seja, não temos uma VPN e nenhum privilégio para instalar programas ou alterar o servidor a vontade. Então para instalarmos a versão 0.12 do Trac que roda em python iremos criar um “ambiente virtual python”.

#Baixar o pacote do site oficial
wget https://raw.github.com/pypa/virtualenv/master/virtualenv.py

#Criar o ambiente virtual
python virtualenv.py python

#Instalação de pacote pre-requisito para o Trac
python/bin/python python/bin/easy_install Genshi

#Instalar o Trac na versão 0.12
python/bin/python python/bin/easy_install Trac==0.12

Agora, através do painel da dreamhost crie o subdomínio trac.yourhost.com

#Criar diretório para o projeto Trac
mkdir trac.yourhost.com/yourproject

#Criando o ambiente Trac
python/bin/trac-admin trac.yourhost.com/yourproject/ initenv

#Criando um diretório para receber os arquivos CGI, conforme http://trac.edgewall.org/wiki/0.12/TracInstall#RunningTraconaWebServer
mkdir deploy

#Criando scripts e docs
python/bin/trac-admin trac.yourhost.com/yourproject/ deploy deploy

#Copiando scripts e docs para o ambiente do projeto
mv deploy/* trac.yourhost.com/yourproject

Proteger o diretório do ambiente Trac seguindo o passo 5 deste passo-a-passo.

Basicamente é só entrar em Goodies > Htaccess/WebDAV e seguir a orientação.

Adicione a configuração abaixo em seu .htaccess, lembre de dar permissão de escrita (chmod 644 .htaccess) e depois retirá-la (chmod 444 .htaccess)

SetHandler fastcgi-script

DirectoryIndex index.fcgi

# Make sure rewrites work
Options ExecCGI FollowSymLinks
RewriteEngine On
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteCond $1 !^index.fcgi/(.*)
# Keep the graphics and style sheet the way they are
RewriteCond $1 !^htdocs(.*).css$
RewriteCond $1 !^htdocs(.*).js$
RewriteCond $1 !^htdocs(.*).gif$
RewriteCond $1 !^htdocs(.*).jpg$
RewriteCond $1 !^htdocs(.*).png$
RewriteRule ^(.*)$ index.fcgi/$1 [L]

RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-d
RewriteCond %{DOCUMENT_ROOT}%{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} attachment
RewriteCond $1 !^index.fcgi/(.*)
RewriteRule ^(.*)$ index.fcgi/$1 [L]

Finalmente crie um arquivo executável index.fcgi com seu editor de textos preferido, conforme exemplo abaixo:

cd trac.yourhost.com/yourproject
vim index.fcgi
Adicione o texto abaixo no script (ajustando para seu ambiente)
#!/bin/bash
export TRAC_ENV=”/home/username/trac.yourhost.com/yourproject/”
exec /home/username/trac.yourhost.com/yourproject/cgi-bin/trac.fcgi

#Torne o arquivo executável
chmod +x index.fcgi

Neste momento você já deve ter o Trac 0.12 instalado e rodando no ambiente virtual python, teste no browser: http://trac.yourhost.com/yourproject

Agora iremos migrar os dados do Trac:

Acesse o servidor antigo
#Backup do banco de dados do Trac
sudo /usr/bin/sqlite3 /home/username/trac/projects/yourproject/db/trac.db “.dump” >> trac_yourproject_sqlite.sql

Caso o caminho do novo repositório no servidor novo seja diferente do caminho atual depois de executado o backup do banco de dados é necessário alterar o arquivo manualmente informando o Caminho do repositório subversion instalado no novo servidor pois quando o arquivo for restaurado o trac já reconhecerá o caminho.

Abra o arquivo com seu editor de textos favorito e procure uma linha similar a linha abaixo:

INSERT INTO “repository” VALUES(1, ‘repository_dir’, ‘svn:c07cc470-69bf-4681-9e92-510e6bfb17be:/var/www/svn/yourproject’);
#Substitua o caminho antigo pelo novo, exemplo
INSERT INTO “repository” VALUES(1, ‘repository_dir’, ‘svn:c07cc470-69bf-4681-9e92-510e6bfb17be:/home/username/svn/yourproject’);

#Enviando o backup para o novo servidor
scp trac_yourproject_sqlite.sql username@yourhost.com:~

Acesse o servidor da dreamhost via SSH

#Restaurando o backup do banco de dados
cat trac_yourproject_sqlite.sql | sqlite3 trac.db

#Movendo o backup para o diretório correto (é interessante fazer um backup do banco atual)
mv trac.db trac.yourhost.com/yourproject/db/trac.db

#Acesse o arquivo de configuração do Trac e no parâmetro repository_dir informe o path do repositório
vim trac.yourhost.com/yourproject/conf/trac.ini

#A linha ficará semelhante a informação abaixo
repository_dir = /home/username/svn/yourproject

Neste momento o meu Trac passou a informar o seguinte Erro:
Warning: Can’t synchronize with repository “(default)” (Unsupported version control system “svn”: No module named svn). Look in the Trac log for more information

Como estamos utilizando um ambiente python virtual diferente do que existe no servidor as configurações do python bindings e os módulos configurados ficaram inacessíveis.

A maneira mais simples de corrigir isto é criar um link simbólico fazendo com que o ambiente virtual utilize a configuração já existente no servidor da dreamhost.

ln -s /usr/lib/pymodules/python2.6/svn python/lib/python2.6/site-packages/svn
ln -s /usr/lib/pymodules/python2.6/libsvn python/lib/python2.6/site-packages/libsvn

Obs.: Aqui no meu browser ficou uma espécie de cache que precisei rodar CTRL + F5 muitas vezes para o erro sumir.

#Migrando os anexos existentes
scp -r attachments/* username@yourhost.com:/home/username/trac.yourhost.com/yourproject/attachments

Fonte: http://trac.edgewall.org/wiki/TracMigrate#TracMigration

#Configurar envio de e-mails e logomarca em trac.ini

[header_logo]
alt = Your Enterprise

src = http://www.yourhost.com/logo.png

[notification]
email_sender = SendmailEmailSender
mime_encoding = base64
sendmail_path = /usr/sbin/sendmail
smtp_always_cc = username@youhost.com
smtp_enabled = true
smtp_from = trac@yourhost.com
smtp_replyto = trac@yourhost.com