Árvore de páginas

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.
Comentário: Migration of unmigrated content due to installation of a new plugin
Nota
titleAtencao

Esta pagina eh um rascunho

Requisitos

O svntool utiliza alguns recursos externos para seu funcionamento. A lista segue abaixo:

...

  1. Baixe a ultima versao compactada do svntool em TODO.
  2. 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.
  3. Edite o arquivo svntool_home/build.properties, ajustando as entradas para o seu ambiente operacional. O arquivo é auto-explicativo.
  4. 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:



admin.help:
    
 \[echo\] Parametros disponiveis: \-Darea=dir \-Drepo=repositorio
    
 \[echo\] onde:
    
 \[echo\]
   dir        
 dir = Diretorio onde deve ser criado o repositorio.
    
 \[echo\]
  
 repositorio = Nome do repositorio a ser criado.
    
 \[echo\]
     \[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>
Painelnoformat

D:\TRABALHO\Eclipse\3layer-public\incubator\svntool>ant admin.help


Buildfile: build.xml
Wiki Markup

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.

...

Caso deseje não utilizar áreas para os repositórios, utilize o parâmetro de área como vazio, como -Darea="".

Geracao de relatorios

TODO

Espelhamento de repositorios

Aviso
titleIMPORTANTE

O svntool suporta apenas repositorios do tipo FileSystem (FSFS), que sao os mais atuais e o o padrao recomendado pelo Subversion. Se voce utiliza repositorios baseados em BerkleyDB, nao utilize o svntool para fazer espelhamento, pois os resultados sao imprevisiveis.

No Windows

TODO

No Linux

No Linux, tem-se duas situacoes para o espelhamento, descritas abaixo:

Local-Local

É a forma mais simples de espelhamento, onde a cópia resultante é armazenada no próprio FileSystem do repositório de origem. Por ser local, não necessita o uso de autenticação remota e, portanto, o próprio usuário do processo chamador do svntool realiza a cópia.

Como fazer?

1. Invoque o comando "ant sync.run -Dsource=dir1 -Ddest=dir2", substituindo dir1 pelo caminho do repositorio a ser espelhado e dir2 pelo local onde o repositorio espelhado deve ser salvo.

Exemplo

Copiar o repositorio /opt/3layer/data/svn/public/incubator para o caminho local /opt/3layer/backup/svn/public/incubator:

Painel

 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.

Local-Remoto

Cópias que envolvem servidores remotos (na origem ou no destino) exigem autenticação no servidor remoto. O svntool, visando transparência para este processo, vale-se do RSync através de uma conexão SSH com o uso de chaves públicas e privadas sem senha para conexão.

É importante salientar que mesmo utilizando chaves sem senhas, o processo de conexão e tráfego de dados é seguro e criptografado. Leia mais sobre isso em TODO.

Como fazer?

PARTE 1 - Preparação da autenticação remota via SSH

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:

Painel

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
\[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

...

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:

Sem Formato

/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

Estando em ambiente Windows ou Linux, eh possivel utilizar as ferramentas nativas do Sistema Operacional para produzir continuamente os relatorios do SVNTool.

NO Windows, a linha de comando acima pode ser adicionada a uma entrada no servico Task Scheduler. No Linux o mesmo pode ser feito com o servico Crontab.

Abaixo, um exemplo de configuracao no Crontab no linux, que produz relatorios para diversos repositorios diariamente as 06:00 AM:

Sem Formato


[root@jekyll ~]# crontab -e

#--
# Relatorios diarios do SVN, diariamente as 06:00 AM
00 6 * * * /opt/lm2/svntool/cron.sh 1>> /var/log/cron_log 2>> /var/log/cron_error

[root@jekyll ~]# vim /opt/lm2/svntool/cron.sh

#!/bin/bash -x

# Define o locale para o SVN funcionar. Vide tarefa JBAG2A-20
LC_ALL=en_US.UTF-8
export LC_ALL

#--
# public/3pup
/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
#--
# public/magoo
/opt/lm2/apache-ant-1.7.1/bin/ant -f /opt/lm2/svntool/build.xml report.generate -Doutput=public/magoo -Drepo=file:///opt/lm2/data/svn/public/magoo -Drev=HEAD -Duser=user.admin -Dpass=xxx

#--
# public/merlin
/opt/lm2/apache-ant-1.7.1/bin/ant -f /opt/lm2/svntool/build.xml report.generate -Doutput=public/merlin -Drepo=file:///opt/lm2/data/svn/public/merlin -Drev=HEAD -Duser=user.admin -Dpass=xxx

#--
# public/mammon
/opt/lm2/apache-ant-1.7.1/bin/ant -f /opt/lm2/svntool/build.xml report.generate -Doutput=public/mammon -Drepo=file:///opt/lm2/data/svn/public/mammon -Drev=HEAD -Duser=user.admin -Dpass=xxx

Espelhamento de repositorios

Aviso
titleIMPORTANTE

O svntool suporta apenas repositorios do tipo FileSystem (FSFS), que sao os mais atuais e o o padrao recomendado pelo Subversion. Se voce utiliza repositorios baseados em BerkleyDB, nao utilize o svntool para fazer espelhamento, pois os resultados sao imprevisiveis.

Aviso
titleIMPORTANTE

O svntool foi projetado para suportar uma estrutura de pastas de dois niveis, ou seja, um diretorio superior que indicam as "areas de repositorios" (parametro -Darea) e, dentro de cada uma dessas areas, os repositorios em si (parametro -Drepo). Ao utilizar uma estrutura com niveis mais profundos de diretorios, o comportamento do svntool pode nao ser o esperado. Entao, muita atencao ao utilizar estruturas de diretorios diferentes dessa:
---Raiz
    +---Area1
       +---Repo1
       +---Repo2
       +---Repo3
       +---RepoN
    +---Area2
       +---Repo11
       +---Repo21
       +---Repo31
       +---RepoN
    +---AreaN

No Windows

TODO

No Linux

No Linux, tem-se duas situacoes para o espelhamento, descritas abaixo:

Local-Local

É a forma mais simples de espelhamento, onde a cópia resultante é armazenada no próprio FileSystem do repositório de origem. Por ser local, não necessita o uso de autenticação remota e, portanto, o próprio usuário do processo chamador do svntool realiza a cópia.

Como fazer?

1. Invoque o comando "ant sync.run -Dsource=dir1 -Ddest=dir2", substituindo dir1 pelo caminho do repositorio a ser espelhado e dir2 pelo local onde o repositorio espelhado deve ser salvo.

Exemplo

Copiar o repositorio /opt/3layer/data/svn/public/incubator para o caminho local /opt/3layer/backup/svn/public/incubator:

Sem Formato

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.

Local-Remoto

Cópias que envolvem servidores remotos (na origem ou no destino) exigem autenticação no servidor remoto. O svntool, visando transparência para este processo, vale-se do RSync através de uma conexão SSH com o uso de chaves públicas e privadas sem senha para conexão.

É importante salientar que mesmo utilizando chaves sem senhas, o processo de conexão e tráfego de dados é seguro e criptografado. Leia mais sobre isso em TODO.

Como fazer?

PARTE 1 - Preparação da autenticação remota via SSH

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:

Sem Formato

[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:

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

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 3 root
         
 Domain Users 4096 Jan 29 17:56 .
drwxr-xr-
x 6 root          root        
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\]$

76. 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

72. 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. Isso pode ser visto abaixo:

Painel

 TODO

xxx.