...
- Baixe a ultima versao compactada do svntool em TODO.
- Descompacte o svntool em um diretorio, como /usr/local/svntool ou c:\tools\svntool. Esse diretorio sera chamado simplesmente de svntool_home a partir de agora.
- Edite o arquivo svntool_home/build.properties, ajustando as entradas para o seu ambiente operacional. O arquivo é auto-explicativo.
- Para testar, acesse svntool_home e digite "ant -p". A saida deve ser algo como abaixo:
| Painelnoformat |
|---|
Buildfile: build.xml Main targets:admin.create admin.create CORE: Cria um repositorio em uma area especifica admin.help admin.help CORE: Help do subcomando 'admin'. help help CORE: Help da ferramenta 'svntool'. report.generate report.generate CORE: Gera relatorios estatisticos a partir de um repositorio report report.generate.checkout checkout AUX.: Efetua checkout de um repositorio report.help report.help CORE: Help do subcomando 'report'. svntool.dist svntool.dist CORE: Cria uma distribuicao do svntool no arquivo 'svntool.zip'. sync.help sync.help CORE: Help do sumcomando 'sync'. sync.run sync.run CORE: Inicializa e mantem sincronizados repositorios sync sync.run.linux linux AUX.: Efetua a sincronizacao no Linux. sync sync.run.windows windows AUX.: Efetua a sincronizacao no Windows. sync sync.run.windows.robocopy robocopy AUX.: Efetua a sincronizacao via utilitario robocopy sync sync.run.windows.synctoy synctoy AUX.: Efetua a sincronizacao via utilitario synctoy Default target: help |
As As tarefas marcadas como "CORE" podem ser invocadas pelo usuário. As tarefas marcadas como "AUX" são internas da ferramenta e não devem ser invocadas pelo usuário, pois podem incorrer em mau funcionamento e/ou perda de dados.
Para obter ajuda sobre uma determinada tarefa, execute "ant tarefa.help", como abaixo:
| Painelnoformat | |
|---|---|
D:\TRABALHO\Eclipse\3layer-public\incubator\svntool>ant admin.help Buildfile: build.xml Wiki Markup | admin.help: \[ \[echo\] Parametros disponiveis: \-Darea=dir \-Drepo=repositorio \[echo\] onde:
\[echo\] dir = Diretorio onde deve ser criado o repositorio.
\[echo\] repositorio = Nome do repositorio a ser criado.
\[echo\]
\[echo\] EXEMPLO 1: Cria o repositorio 'incubator' na area 'jboss' com autorizacao por area.
\[echo\]
\[echo\] ant admin.create \-Darea=jboss \-Drepo=incubator
\[echo\]BUILD SUCCESSFUL Total time: 0 seconds D:\TRABALHO\Eclipse\3layer-public\incubator\svntool> |
Objetivos e Funcionamento
...
Criar o repositorio teste, dentro a area de repositorios publicos.
| Painelnoformat |
|---|
ant ant admin.create \-Darea=public \-Drepo=teste |
Como resultado, o repositório chamado "teste" será criado dentro do diretório "public" localizado dentro do caminho especificado pela variável "$svn.root", localizada no arquivo svntool_home/build.properties. Em outras palavras, o caminho do repositório será "/$svn.root/public/teste".
Ao executar um comando como "svnlook info D:\DATA\SVN\public\teste", você verá uma saída como:
| Painelnoformat |
|---|
admin 2008-12-20 05:37:55 \-0200 (sáb, 20 dez 2008) 32 Estrutura inicial do repositorio |
Ou seja, a estrutura criada para o repositório "teste" é baseada no repositório template do svntool, localizado dentro da pasta /resources.
...
O SVNTool utiliza duas bibliotecas para produzir relatorios, incluindo elementos graficos. Sao o SvnStat e StatSvn. Porem, o SVNTool abstrai a complexidade de uso desses utilitarios, e para o usuario final a geracao de relatorios se resume a execucao de comandos, como:
| Painelnoformat |
|---|
/opt/lm2/apache-ant-1.7.1/bin/ant -f /opt/lm2/svntool/build.xml report.generate -Doutput=public/3pup -Drepo=file:///opt/lm2/data/svn/public/3pup -Drev=HEAD -Duser=user.admin -Dpass=xxx |
Neste exemplo, o SVNTool eh chamado atraves da linha de comando com a opcao "report.generate", com o parametro "-Doutput" apontando para um diretorio de saida, onde serao gerados os relatorios para o repositorio especificado pelo parametro "-Drepo", usando a ultima revisao do repositorio (opcao "-Drev") com o usuario e senha especificados por "-Duser" e "-Dpass", respectivamente.
Um exemplo de saida desses relatorios pode ser conferido em http://3layer.org/svnreport/public/incubator/svntool
.
Geracao continua de relatorios
...
Copiar o repositorio /opt/3layer/data/svn/public/incubator para o caminho local /opt/3layer/backup/svn/public/incubator:
| Painelnoformat |
|---|
ant ant syn.run \-Dsource=/opt/3layer/data/svn/public/incubator \-Ddest=/opt/3layer/backup/svn/public/incubator |
Não se preocupe em criar o diretório de destino, pois o próprio svntool se encarega disso.
...
1. Crie um par de chave publica/privada sem senha para o usuario que vai ser utilizado para se conectar no(s) servidor(es) remoto(s) e salve os arquivos gerados na pasta /resources do svntool com o nome svntool.key (par ao arquivo de chave privada) e svntool.key.pub (para o arquivo de chave publica). Veja abaixo uma sequencia de comandos para isso:
| Painelnoformat |
|---|
[root@jekyll resources]\# pwd /opt/lm2/svntool/resources [root@jekyll resources]\# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): /opt/lm2/svntool/resources/svntool.key Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /opt/lm2/svntool/resources/svntool.key. Your public key has been saved in /opt/lm2/svntool/resources/svntool.key.pub. The key fingerprint is: 18:df:10:96:3d:ec:79:77:4d:b3:b5:c7:09:70:52:6d root@jekyll.lm2.com.br [root@jekyll resources]\# |
2. Copie o arquivo gerado svntool_home/resources/svntool.key.pub para dentro do(s) servidor(s) remoto(s). Geralmente, usa-se a pasta /home/usuario/.ssh para salvar este arquivo. Observe que o usuario que vai ser usado para conexao precisa ter de leitura e escrita nos diretorios utilizados. Abaixo, um exemplo:
| Painel |
|---|
| Wiki Markup |
| Sem Formato |
\[root@jekyll resources\]# scp svntool.key.pub marcelo.mrack@hermes:/home/marcelo.mrack/.ssh marcelo.mrack@hermes's password: svntool.key.pub 100% 404 0.4KB/s 00:00 |
...
100% 404 0.4KB/s 00:00
|
3. Proteja a chave privada gerada para que outros usuarios nao possam utiliza-la indevidamente. Se isso nao for feito, é possivel que o servidor remoto recuse a chave privada. Veja como fazer isso abaixo:
| Painelnoformat |
|---|
chmod chmod 700 /opt/lm2/svntool/resources/svntool.key |
4. Conecte-se no servidor remoto, e adicione o conteudo da chave publica copiada ao arquivo de chaves autorizadas para conexao remota. Geralmente, este arquivo é /home/usuario/.ssh/authorized_keys ou entao /home/usuario/.ssh/authorized_keys2. Veja abaixo uma sequencia para isso:
| Painel |
|---|
| Wiki Markup |
| Sem Formato |
\[root@jekyll resources\]# ssh marcelo.mrack@hermes marcelo.mrack@hermes's password: Last login: Thu Jan 29 17:46:41 2009 from jekyll.lm2.com.br \[marcelo.mrack@hermes \~\]$ cd /home/marcelo.mrack/.ssh/ \[marcelo.mrack@hermes .ssh\]$ ls authorized_keys id_rsa.pub known_hosts myPublicKey-ssh2.key svntool.key.pub \[marcelo.mrack@hermes .ssh\]$ cat svntool.key.pub > authorized_keys \[marcelo.mrack@hermes .ssh\]$ |
5. Teste sua conexao SSH para o servidor remoto utilizando sua chave publica/privada e verifique se possui acesso de escrita no caminho onde o repositorio espelho vai ser armazenado. Veja abaixo um exemplo onde o usuario marcelo.mrack se conecta com a chave privada e navega ate o diretorio onde o espelhamento vai ser feito e cria um diretorio para salvar o espelhamento:
| Painel |
|---|
| Wiki Markup |
| Sem Formato |
\[root@jekyll resources\]# ssh \-i /opt/lm2/svntool/resources/svntool.key marcelo.mrack@hermes Last login: Thu Jan 29 17:47:55 2009 from jekyll.lm2.com.br \[marcelo.mrack@hermes \~\]$ cd /opt/backup \[marcelo.mrack@hermes backup\]$ mkdir svn \[marcelo.mrack@hermes backup\]$ pwd /opt/backup \[marcelo.mrack@hermes backup\]$ ls \-la total 16 drwxrwxr-x 3root root Domain Users 4096 Jan 29 17:56 . drwxr-xr-x 6 root root 4096 Jan 29 17:55 .. drwxr-xr-x 2 marcelo.mrack Domain Users 4096 Jan 29 17:56 svn \[marcelo.mrack@hermes backup\]$ |
6. Pronto. Nesse momento é possível realizar a cópia remota de arquivos e pastas de forma segura através do SSH. Isso é a base para a replicação remota que o svntool utiliza com base no Rsync.
...
1. No servidor de origem, execute o svntool informando o nome do repositorio a ser copiado e o destino remoto, como abaixo:
| Painelnoformat |
|---|
ant sync.run \-Dsource=lm2/admin \-Ddest=marcelo.mrack@hermes:/opt/backup |
2. Pronto. No caminio hermes:/opt/backup deve existir uma estrutura idêntica ao repositório de origem, incluindo o nome da area especificada, caso houver. Em outras palavras, a copia espelho estara em hermes:/opt/backup/lm2/admin.