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