Existem várias estratégias possíveis de backup do servidor do Trac e do Subversion, mas executar o backup diretamente sobre os repositórios não é a melhor alternativa. Para os repositórios do Subversion usando o formato FSFS, um backup direto até funciona, mas para o Trac, que usa um banco de dados internamente, o backup pode acabar pegando o banco de dados em um estado intermediário e depois haverá problemas para restaurá-lo.
A estratégia usada no script mostrado neste artigo é criar uma cópia dos repositórios em um lugar específico e aí sim, esse lugar específico deverá usado para fazer o backup total dos repositórios.
Tanto o Trac quanto o Subversion possuem comandos administrativos para criar uma hotcopy, isto é, uma cópia do repositório enquanto o original ainda está em uso. Este comando executa automaticamente todo o procedimento para eliminar quaisquer inconsistências que poderiam ser produzidas durante a cópia de um repositório em uso.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os
import shutil
def limpa_diretorio_backup(diretorio):
if os.path.exists(diretorio):
print 'rm -rf %s' % diretorio
shutil.rmtree(diretorio)
print 'mkdir %s' % diretorio
os.mkdir(diretorio)
def hotcopy(diretorio_origem, diretorio_destino, comando_hotcopy):
limpa_diretorio_backup(diretorio_destino)
for nome_repos in os.listdir(diretorio_origem):
caminho_repos = os.path.join(diretorio_origem, nome_repos)
if not os.path.isdir(caminho_repos):
continue
destino_repos = os.path.join(diretorio_destino, nome_repos)
print comando_hotcopy % (caminho_repos, destino_repos)
os.system(comando_hotcopy % (caminho_repos, destino_repos))
diretorio_repos_svn = '/srv/svn'
diretorio_backup_svn = '/srv/backup/svn'
svnadmin_hotcopy = 'svnadmin hotcopy %s %s'
diretorio_env_trac = '/srv/trac'
diretorio_backup_trac = '/srv/backup/trac'
trac_admin_hotcopy = 'trac-admin %s hotcopy %s'
hotcopy(diretorio_repos_svn, diretorio_backup_svn, svnadmin_hotcopy)
hotcopy(diretorio_env_trac, diretorio_backup_trac, trac_admin_hotcopy)
|
