Escolar Documentos
Profissional Documentos
Cultura Documentos
18 de abril de 2007
Sumrio
I
II Informaes Bsicas
III Subversion
1 O que o Subversion
2 Plano de ensino
2.1 Objetivo . . .
2.2 Pblico Alvo .
2.3 Pr-requisitos
2.4 Descrio . .
2.5 Metodologia .
2.6 Programa . .
2.7 Avaliao . .
2.8 Bibliografia .
10
.
.
.
.
.
.
.
.
11
11
11
11
11
11
12
13
13
14
14
14
15
4 Instalao do Subversion
4.1 Mtodos de instalao do Subversion
4.2 Compilao do cdigo-fonte . . . . . .
4.2.1 Obtendo o cdigo-fonte . . . .
4.2.2 Dependncias do Subversion .
4.2.3 Parmetros do script configure
4.2.4 Compilao e Instalao . . .
4.3 Distribuies derivadas do Debian . .
.
.
.
.
.
.
.
18
18
18
19
19
20
21
22
.
.
.
.
25
25
26
27
28
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5 Administrao do repositrio
5.1 O repositrio Subversion . . . . . . . .
5.2 Criao e configurao do repositrio
5.3 Manuteno do repositrio . . . . . .
5.3.1 svnlook . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
CDTC
5.3.2 svnadmin . . . . . . . . . . . . . . . . . . . . . .
5.3.3 Migrando um repositrio . . . . . . . . . . . . . .
5.3.4 Backup do repositrio . . . . . . . . . . . . . . .
5.4 Adio de projetos . . . . . . . . . . . . . . . . . . . . .
5.4.1 Escolhendo um layout de repositrio . . . . . . .
5.4.2 Criando o layout e importando os dados iniciais
Brasil/DF
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
28
28
29
29
29
31
6 Configurao do servidor
6.1 Viso geral . . . . . . . . . . . . . . . . . . . . .
6.2 svnserve, um servidor customizado . . . . . . .
6.2.1 Iniciando o servidor . . . . . . . . . . . .
6.2.2 Autenticao e autorizao integrada . .
6.2.3 Criando um arquivo e domnio users . .
6.2.4 Ajuste de controle de acesso . . . . . . .
6.3 httpd, o servidor web Apache . . . . . . . . . . .
6.3.1 Pr-requisitos . . . . . . . . . . . . . . . .
6.3.2 Configurao bsica do Apache . . . . .
6.3.3 Opes de autenticao . . . . . . . . . .
6.3.4 Autenticao HTTP Bsica . . . . . . . .
6.3.5 Controle de acesso por usurio (blanket)
6.3.6 Mltiplos meios de acesso ao repositrio
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
33
33
34
34
35
36
36
37
38
38
40
40
41
43
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
44
44
46
46
47
47
47
48
49
49
.
.
.
.
51
51
51
51
52
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Parte I
CDTC
Brasil/DF
Contedo
O contedo dessa apostila fruto da compilao de diversos materiais livres publicados na internet, disponveis em diversos sites ou originalmente produzido no CDTC em http://www.cdtc.org.br.
O formato original deste material bem como sua atualizao est disponvel dentro da licena
GNU Free Documentation License, cujo teor integral encontra-se aqui reproduzido na seo de
mesmo nome, tendo inclusive uma verso traduzida (no oficial).
A reviso e alterao vem sendo realizada pelo CDTC (suporte@cdtc.org.br) desde outubro
de 2006. Crticas e sugestes construtivas so bem-vindas a qualquer tempo.
Autores
A autoria deste de responsabilidade de Felipe Brant Scarel (fscarel@cdtc.org.br) .
O texto original faz parte do projeto Centro de Difuso de Tecnologia e Conhecimento, que
vem sendo realizado pelo ITI (Instituto Nacional de Tecnologia da Informao) em conjunto com
outros parceiros institucionais, atuando em conjunto com as universidades federais brasileiras
que tem produzido e utilizado Software Livre, apoiando inclusive a comunidade Free Software
junto a outras entidades no pas.
Informaes adicionais podem ser obtidas atravs do email ouvidoria@cdtc.org.br, ou da
home page da entidade, atravs da URL http://www.cdtc.org.br.
Garantias
O material contido nesta apostila isento de garantias e o seu uso de inteira responsabilidade do usurio/leitor. Os autores, bem como o ITI e seus parceiros, no se responsabilizam
direta ou indiretamente por qualquer prejuzo oriundo da utilizao do material aqui contido.
Licena
Copyright 2006, Instituto Nacional de Tecnologia da Informao (cdtc@iti.gov.br) .
Permission is granted to copy, distribute and/or modify this document under the terms
of the GNU Free Documentation License, Version 1.1 or any later version published by
the Free Software Foundation; with the Invariant Chapter being SOBRE ESSA APOSTILA. A copy of the license is included in the section entitled GNU Free Documentation
License.
Parte II
Informaes Bsicas
CDTC
Brasil/DF
Sobre o CDTC
Objetivo Geral
O Projeto CDTC visa a promoo e o desenvolvimento de aes que incentivem a disseminao de solues que utilizem padres abertos e no proprietrios de tecnologia, em proveito do
desenvolvimento social, cultural, poltico, tecnolgico e econmico da sociedade brasileira.
Objetivo Especfico
Auxiliar o Governo Federal na implantao do plano nacional de software no-proprietrio e
de cdigo fonte aberto, identificando e mobilizando grupos de formadores de opinio dentre os
servidores pblicos e agentes polticos da Unio Federal, estimulando e incentivando o mercado
nacional a adotar novos modelos de negcio da tecnologia da informao e de novos negcios
de comunicao com base em software no-proprietrio e de cdigo fonte aberto, oferecendo
treinamento especfico para tcnicos, profissionais de suporte e funcionrios pblicos usurios,
criando grupos de funcionrios pblicos que iro treinar outros funcionrios pblicos e atuar como
incentivadores e defensores de produtos de software no proprietrios e cdigo fonte aberto, oferecendo contedo tcnico on-line para servios de suporte, ferramentas para desenvolvimento de
produtos de software no proprietrios e de seu cdigo fonte livre, articulando redes de terceiros
(dentro e fora do governo) fornecedoras de educao, pesquisa, desenvolvimento e teste de produtos de software livre.
Guia do aluno
Neste guia, voc ter reunidas uma srie de informaes importantes para que voc comece
seu curso. So elas:
Licenas para cpia de material disponvel
Os 10 mandamentos do aluno de Educao a Distncia
Como participar dos foruns e da wikipdia
Primeiros passos
muito importante que voc entre em contato com TODAS estas informaes, seguindo o
roteiro acima.
Licena
Copyright 2006, Instituto Nacional de Tecnologia da Informao (cdtc@iti.gov.br).
6
CDTC
Brasil/DF
dada permisso para copiar, distribuir e/ou modificar este documento sob os termos
da Licena de Documentao Livre GNU, Verso 1.1 ou qualquer verso posterior
pblicada pela Free Software Foundation; com o Capitulo Invariante SOBRE ESSA
APOSTILA. Uma cpia da licena est inclusa na seo entitulada "Licena de Documentao Livre GNU".
CDTC
Brasil/DF
todos participantes. Assim, se o monitor ou algum outro participante tiver uma informao que
interesse ao grupo, favor post-la aqui.
Porm, se o que voc deseja resolver alguma dvida ou discutir algum tpico especfico do
curso. recomendado que voc faa uso do Forum de dvidas gerais que lhe d recursos mais
efetivos para esta prtica.
. O frum de dvidas gerais tem por objetivo disponibilizar um meio fcil, rpido e interativo
para solucionar suas dvidas e trocar experincias. As mensagens postadas nele so enviadas
a todos participantes do curso. Assim, fica muito mais fcil obter respostas, j que todos podem
ajudar.
Se voc receber uma mensagem com algum tpico que saiba responder, no se preocupe com a
formalizao ou a gramtica. Responda! E no se esquea de que antes de abrir um novo tpico
recomendvel ver se a sua pergunta j foi feita por outro participante.
A segunda forma se d pelas Wikis:
. Uma wiki uma pgina web que pode ser editada colaborativamente, ou seja, qualquer participante pode inserir, editar, apagar textos. As verses antigas vo sendo arquivadas e podem
ser recuperadas a qualquer momento que um dos participantes o desejar. Assim, ela oferece um
timo suporte a processos de aprendizagem colaborativa. A maior wiki na web o site "Wikipdia", uma experincia grandiosa de construo de uma enciclopdia de forma colaborativa, por
pessoas de todas as partes do mundo. Acesse-a em portugus pelos links:
Pgina principal da Wiki - http://pt.wikipedia.org/wiki/
Agradecemos antecipadamente a sua colaborao com a aprendizagem do grupo!
Primeiros Passos
Para uma melhor aprendizagem recomendvel que voc siga os seguintes passos:
Ler o Plano de Ensino e entender a que seu curso se dispe a ensinar;
Ler a Ambientao do Moodle para aprender a navegar neste ambiente e se utilizar das
ferramentas bsicas do mesmo;
Entrar nas lies seguindo a seqncia descrita no Plano de Ensino;
Qualquer dvida, reporte ao Frum de Dvidas Gerais.
Perfil do Tutor
Segue-se uma descrio do tutor ideal, baseada no feedback de alunos e de tutores.
O tutor ideal um modelo de excelncia: consistente, justo e profissional nos respectivos
valores e atitudes, incentiva mas honesto, imparcial, amvel, positivo, respeitador, aceita as
idias dos estudantes, paciente, pessoal, tolerante, apreciativo, compreensivo e pronto a ajudar.
8
CDTC
Brasil/DF
A classificao por um tutor desta natureza proporciona o melhor feedback possvel, crucial, e,
para a maior parte dos alunos, constitui o ponto central do processo de aprendizagem. Este tutor
ou instrutor:
fornece explicaes claras acerca do que ele espera, e do estilo de classificao que ir
utilizar;
gosta que lhe faam perguntas adicionais;
identifica as nossas falhas, mas corrige-as amavelmente, diz um estudante, e explica porque motivo a classificao foi ou no foi atribuda;
tece comentrios completos e construtivos, mas de forma agradvel (em contraste com um
reparo de um estudante: os comentrios deixam-nos com uma sensao de crtica, de
ameaa e de nervossismo)
d uma ajuda complementar para encorajar um estudante em dificuldade;
esclarece pontos que no foram entendidos, ou corretamente aprendidos anteriormente;
ajuda o estudante a alcanar os seus objetivos;
flexvel quando necessrio;
mostra um interesse genuno em motivar os alunos (mesmo os principiantes e, por isso,
talvez numa fase menos interessante para o tutor);
escreve todas as correes de forma legvel e com um nvel de pormenorizao adequado;
acima de tudo, devolve os trabalhos rapidamente;
Parte III
Subversion
10
Captulo 1
O que o Subversion
O Subversion um sistema de controle de verses livre capaz de gerenciar arquivos e diretrios ao longo do tempo.
Em linhas gerais, os arquivos so guardados em um repositrio central e so servidos aos
clientes. Muito embora isto se assemelhe a um servidor de arquivos, a diferena fundamental do
Subversion que ele guarda todas as modificaes feitas nos arquivos e diretrios ao longo do
tempo, permitindo-nos recuperar verses antigas dos dados ou simplesmente verificar o histrico
destes. Por este motivo, comum pensar nos sistemas de versionamento como "mquinas do
tempo".
O curso possui nfase na distribuio Debian GNU/Linux, detalhando diferenas de instalao e configurao em outros sistemas operacionais, caso existam. A durao do curso de uma
semana. Para comear voc deve ler o Guia do Aluno e o Plano de Ensino a seguir.
11
Captulo 2
Plano de ensino
2.1 Objetivo
Qualificar tcnicos, administradores de sistemas e interessado em geral na instalao, configurao e utilizao do sistema de controle de verses Subversion.
2.3 Pr-requisitos
Os alunos devero ser, necessariamente, indicados por empresas pblicas e ter conhecimento
bsico em manipulao de linha de comando UNIX.
2.4 Descrio
O curso sobre Subversion ser realizado na modalidade Educao a Distncia e utilizar a
plataforma Moodle como ferramenta de aprendizagem. Ele ter a durao de uma semana. O
material didtico estar disponvel on-line de acordo com as datas pr-estabelecidas em cada
lio. A verso utilizada para o Subversion ser a 1.4.0
2.5 Metodologia
O curso est dividido da seguinte maneira:
12
CDTC
Brasil/DF
Descrio
Conceitos bsicos de versionamento
Instalao do Subversion
Administrao do repositrio
Configurao do servidor
Utilizao do cliente em linha de comando
Front-ends para o Subversion
Avaliao final
Todo o material est no formato de lies, e estar disponvel ao longo do curso. As lies
podero ser acessadas quantas vezes forem necessrias. Aconselhamos a leitura de "Ambientao do Moodle", para que voc conhea o produto de Ensino a Distncia, evitando dificuldades
advindas do "desconhecimento"sobre o mesmo.
Ao final de cada lio haver questes acerca do tema estudado, no intuito de avaliar parcialmente a aprendizagem do aluno. Leia atentamente a lio e pratique os exemplos apresentados,
preparando-se assim para as referidas questes.
Os instrutores estaro a sua disposio ao longo de todo curso. Qualquer dvida deve ser
disponibilizada no frum ou enviada por e-mail. Diariamente os monitores daro respostas e
esclarecimentos.
2.6 Programa
Lio 1
O que o Subversion
Histria do Subversion
Conceitos bsicos de versionamento
Lio 2
Mtodos de instalao do Subversion
Compilao do cdigo-fonte
Distribuies derivadas do Debian
Lio 3
O repositrio Subversion
Criao e configurao do repositrio
Manuteno do repositrio
Adio de projetos
Lio 4
Viso geral
svnserve, um servidor customizado
httpd, o servidor web Apache
13
CDTC
Brasil/DF
2.7 Avaliao
Toda a avaliao ser feita on-line.
Aspectos a serem considerados na avaliao:
Iniciativa e autonomia no processo de aprendizagem e de produo de conhecimento;
Capacidade de pesquisa e abordagem criativa na soluo de problemas apresentados.
Instrumentos de avaliao:
Avaliao semanal
Para a aprovao o participante dever obter nota maior ou igual a 6,0 na avaliao final. Para
isso, sua participao ser importante em todas as atividades propostas.
2.8 Bibliografia
Site oficial: http://subversion.tigris.org/
Trac Project: http://trac.edgewall.org/
SVN Book: http://svnbook.red-bean.com/
Tutorial Subversion PATUX: http://ninho.patux.cic.unb.br/wiki/Subversion
Boa parte das lies 3, 4 e 5, e pequenas partes das demais lies, so uma traduo livre
de trechos do SVN Book (link acima) por Ben Collins-Sussman, Brian W. Fitzpatrick e C. Michael
Pilato. O autor deste curso agradece a estes, sem os quais no seria possvel que tivssemos
uma ferramenta de versionamento to verstil como o o Subversion.
14
Captulo 3
CDTC
Brasil/DF
CDTC
Brasil/DF
CDTC
Brasil/DF
18
Captulo 4
Instalao do Subversion
4.1 Mtodos de instalao do Subversion
Temos nossa disposio uma variedade de mtodos de instalao do Subversion, que
podem variar quanto sua disponibilidade dependendo do sistema operacional ou distribuio
GNU/Linux sendo utilizada.
importante notar que diferentes mtodos de instalao podero prover verses diferentes
do software: neste curso, por exemplo, utilizaremos a verso 1.4.0, o pacote mais atualizado
disponvel no repositrio testing do Debian, at esta data. No entanto, se voc optar por instalar
diretamente a partir do cdigo-fonte, possvel obter uma verso to nova quanto a mais recente
disponvel no repositrio do Subversion, que at esta data a reviso 22235, como pode ser visto
em http://svn.collab.net/repos/svn/trunk/, o repositrio oficial do Subversion.
Podemos diferenciar os mtodos de instalao basicamente entre aqueles que utilizam pacotes pr-compilados, efetuando diretamente a instalao, e os que primeiramente procedem a
compilao do cdigo-fonte do software e posteriormente instalam os binrios gerados pela referida compilao.
Entre os mtodos que sero estudados e que se utilizam de pacotes pr-compilados temos
as Distribuies derivadas do Debian, que utilizam pacotes nativos s distribuies (.deb), e para
instal-los simplesmente os descompactam e movem os arquivos para os lugares apropriados.
CDTC
Brasil/DF
CDTC
Brasil/DF
fscarel@debian3:~/svn/subversion-1.4.2$ ls
aclocal.m4 build ChangeLog.CVS configure COPYING gen-make.opts INSTALL
packages tools www autogen.sh build.conf CHANGES configure.in dist.sh
gen-make.py Makefile.in README TRANSLATING BUGS build-outputs.mk
COMMITTERS contrib doc HACKING notes subversion win-tests.py
fscarel@debian3:~/svn/subversion-1.4.2$
O script configure, como se poderia imaginar, configura o Subversion para se adaptar a uma
gama de diferentes sistemas com os quais ele compatvel. Dessa forma, ele detecta se todas as
dependncias esto satisfeitas, determina os diretrios de instalao, ativa e/ou desativa caractersticas opcionais do pacote, dentre outras coisas. Para descobrir todos os possveis parmetros
que podem ser especificados, podemos list-los:
CDTC
Brasil/DF
Installation directories:
--prefix=PREFIX Define o diretrio de instalao de arquivos independentes
de arquitetura
--exec-prefix=EPREFIX Define o diretrio de instalao de arquivos
dependentes de arquitetura
Optional Features:
--disable-FEATURE retira FEATURE (mesmo efeito que --enable-FEATURE=no)
--enable-FEATURE[=ARG] inclui FEATURE [ARG=yes]
Optional Packages:
--without-PACKAGE no utilizar PACKAGE (mesmo efeito que --with-PACKAGE=no)
--with-PACKAGE[=ARG] utilizar PACKAGE [ARG=yes]
Some influential environment variables:
CC comandos para o compilador C
CFLAGS flags para o compilador C
LDFLAGS flags para o linker, por exemplo -L<lib dir> se as bibliotecas esto
em um diretrio no-padro <lib dir>
Determine os parmetros a serem passados ao script configure pertinentes sua instalao,
habilitando as extenses desejadas e definindo os diretrios de instalao. Cuidado apenas com
os comando e flags passados ao compilador C: otimizaes excessivas podem ser nocivas ao
funcionamento do software!
Vale ressaltar aqui a importncia de escolher apropriadamente os parmetros a serem passados para o configure: caso deseje operar um servidor Subversion atravs do Apache, utilizando
WebDAV, voc dever especificar neste passo os diretrios nos quais se encontram o Apache, a
APR, dentre outros. O tpico Mtodos de acesso ao repositrio da Lio 3 detalha as diferenas entre o servidor standalone svnserve e o acesso ao repositrio atravs de mdulos WebDAV
pelo Apache. Talvez seja interessante ler esses tpicos antes de proceder com a instalao do
Subversion.
fscarel@debian3:~/svn/subversion-1.4.2$ ./configure
[output omitido]
fscarel@debian3:~/svn/subversion-1.4.2$
Finalmente, iremos compilar e instalar o Subversion (como root, j que usurios sem privilgios no tm permisso de escrita em /usr/local, o prefix padro):
22
CDTC
Brasil/DF
CDTC
Brasil/DF
CDTC
Brasil/DF
25
Captulo 5
Administrao do repositrio
5.1 O repositrio Subversion
O repositrio Subversion a base de dados central dos dados versionados de todos os projetos existentes em um servidor. Muito embora seja extremamante importante que o administrador
aprenda como se deve administrar esse repositrio, ainda mais importante que todos os conceitos subjacentes a ele sejam compreendidos, e esse assunto que cobriremos neste tpico.
Conceitualmente, o repositrio Subversion uma sequncia de rvores de diretrios, sendo
cada uma dessas rvores uma "fotografia"de como o repositrio era em algum ponto de seu histrico. Essas "fotografias"so resultados de aes por parte dos usurios do repositrio, e so
conhecidas como revises.
importante observar que o Subversion trabalha com o conceito de transao: quando um
usurio envia seus dados ao repositrio, o Subversion cria uma rvore de diretrios contendo
as diferenas entre os dados enviados pelo usurio e aqueles da reviso mais recente. Posteriormente, o Subversion promove essa rvore de transao a uma nova rvore de reviso,
numerando-a de acordo. Caso algo d errado durante essa transao, ela destruda e o usurio informado deste fato, mantendo o repositrio e seus dados ntegros.
Existem duas opes possveis para armazenar os dados de um repositrio Subversion: um
destes tipos armazena os dados em uma base de dados Berkeley DB, e o outro armazena estes
dados em arquivos comuns, utilizando o sistema de arquivos nativo do sistema operacional. Estas opes so referenciadas, respectivamente, como amazenamentos BerkeleyDB e FSFS.
Quando da criao de um repositrio, responsabilidade do administrador escolher qual destes mtodos de armazenamento ser utilizado em seu repositrio. Cada um destes possui vantagens e desvantagens distintas, no sendo nenhum deles "oficial"em algum sentido.
importante notar que, independento do mtodo de armazenamento escolhido, aplicaes e
bibliotecas podero acessar o repositrio Subversion sem problemas, j que o meio de armazenamento tratado apenas pelo prprio Subversion, existindo uma API intermediria de acesso a
estes.
Abaixo apresentamos uma tabela (basicamente uma traduo da tabela de comparao entre
26
CDTC
Brasil/DF
Utilizvel em montagem
somente leitura
Armazenamento independente
de plataforma
Utilizvel em sistemas de
arquivos via rede
Tamanho do repositrio
Escalabilidade: nmero de
rvores de reviso
Berkeley DB
alta; quebras e problemas de
permisses podem deixar a base
"travada", requerendo procedimentos
de recuperao via journal
no
FSFS
relativamente insensitiva
no
sim
no
sim
ligeiramente maior
base de dados; no h problemas
sim
mais lento
ligeiramente menor
alguns sistemas de arquivos
mais antigos no escalam bem
com milhares de entradas em
um nico diretrio
mais rpido
mais rpido
mais lento
Gerncia de permisses de
grupos
Maturidade do cdigo
CDTC
Brasil/DF
Aps o comando "svnadmin create", voc ter ento um novo repositrio Subversion no diretrio designado. Listemos o contedo desse diretrio:
$ ls repositorio
conf/ dav/ db/ format hooks/ locks/ README.txt
Com exceo de README.txt e os arquivos format, todos os demais elementos do repositrio
so subdiretrios, indicando a grande importncia dada organizao hierrquica no design do
Subversion. Vejamos, ento, uma breve descrio de cada um desses subdiretrios:
conf: Diretrio contendo arquivos de configurao para o repositrio.
dav: Diretrio para arquivos de manuteno utilizados pelo Apache e mod_dav_svn.
db: Aqui onde todos os dados versionados se encontram, podendo ser tanto uma base
Berkeley DB (com diversas tabelas e similares) como um ambiente FSFS contendo arquivos de
reviso.
hooks: Diretrio contendo templates para scripts hook (e os prprios scripts, assim que voc
cri-los).
locks: Diretrio para os dados de locking do Subversion, usado para gerenciar usurios acessando o repositrio.
Em geral, no ser necessrio alterar o repositrio manualmente. A ferramenta "svnadmin"deve ser suficiente para quaisquer mudanas necessrias ao repositrio, existindo ainda
ferramentas externas (como a sute de ferramentas Berkeley DB) para gerenciar partes especficas do repositrio.
Voc deve estar se perguntando o que so scripts hook, e qual sua funo no repositrio Subversion. Esses scripts nada mais so do que programas executados sempre que algum evento
ocorre no repositrio, seja ele um commit ou uma mudana de propriedades dos dados. Voc
pode, por exemplo, desejar enviar um email para o administrador sempre que um commit for concludo em seu repositrio (correspondendo ento ao arquivo "post-commit").
Dada a extenso do tema, no iremos cobri-lo neste curso, convidando o leitor interessado a
buscar informaes complementares na seo "Repository Creation and Configuration"do SVN
Book, na URL: http://svnbook.red-bean.com/nightly/en/svn.reposadmin.create.html
CDTC
Brasil/DF
5.3.1 svnlook
A ferramenta "svnlook" provida juntamente com o Subversion e utilizada com o intuito de
examinar as diversas revises e transaes em um repositrio, sem no entanto alter-lo: uma
ferramenta "somente leitura", por assim dizer. Esta ferramenta tipicamente utilizada pelos scripts
hook do repositrio para reportar mudanas a serem efetuadas (pre-commit) ou que terminaram
de ser efetivadas (post-commit) no repositrio. Um administrador pode utilizar essa ferramenta
para fins de diagnstico.
5.3.2 svnadmin
O programa "svnadmin" o melhor amigo do administrador do repositrio. Alm de prover
a funo de criao de repositrios Subversion (funo j vista no tpico anterior), ele tambm
possui a capacidade de efetuar diversas operaes de manuteno nesses repositrios.
29
CDTC
Brasil/DF
6. Se o processo de migrao fez com que o repositrio seja acessado por uma URL
diferente (movido para um computador diferente, ou acessado por um sistema de armazenamento distinto, por exemplo), ento voc provavelmente dever informar os usurios que
eles devero executar "svn switch relocate"em suas cpias locais.
CDTC
Brasil/DF
acessam o repositrio frequentemente e esperam que os arquivos estejam em lugares previsveis. Tente visualizar o futuro: planeje antes de colocar seus dados sob controle de verses.
Criando um layout otimizado do contedo dos repositrios, muitas dores de cabea futuras podero ser evitadas.
H alguns fatores a serem considerados quando do setup de repositrios Subversion. Assumamos que, como um administrador do repositrio, voc ser responsvel pelo suporte de
diversos projetos. A primeira deciso a ser tomada se existir um nico repositrio para todos
os projetos, ou se cada projeto ter seu repositrio, ou ainda uma combinao dessas solues.
Existem benefcios ao se utilizar um nico repositrio para mltiplos projetos, e o mais bvio deles que no existe duplicao de manuteno: um nico conjunto de scripts hook, um
repositrio a se fazer backup, um pool para se fazer dump e load quando uma nova verso do
Subversion for lanada, e assim por diante. Alm disso, voc pode mover dados entre projetos
facilmente, e sem perda de informao de versionamento.
O problema de usar um nico repositrio que diferentes projetos podem ter diferentes listas
de email para commits ou diferentes requerimentos de autenticao e autorizao. Alm disso,
lembre-se que o Subversion utiliza nmeros de reviso globais para o repositrio. Algumas pessoas no gostam que, mesmo no tendo existido modificaes em seus projetos recentemente,
o nmero de reviso suba constantemente porque outros projetos esto ativamente adicionando
novas revises.
Uma aproximao intermediria pode ser feita, tambm. Por exemplo, projetos podem ser
agrupados pelo nvel de interrelao entre si. Voc pode ter alguns repositrios com um nmero
de projetos dentro de cada um. Desta maneira, projetos que tm chance de compartilhar dados
podero faz-lo facilmente, e medida que novas revises forem adicionadas ao repositrio, os
desenvolvedores sabero que essas novas revises esto minimamente relacionadas com todos
que utilizam o repositrio.
Aps decidir como organizar seus projetos com respeito aos repositrios, voc provavelmente
desejar pensar na hierarquia de diretrios dentro desses repositrios. Como o Subversion utiliza
cpias comuns de diretrios para branching e tagging (captulo 4 do SVN Book "Branching and
Merging": http://svnbook.red-bean.com/nightly/en/svn.branchmerge.html), recomendade que se
escolha uma localizao o mais prxima possvel da raiz do repositrio, criando abaixo deste trs
subdiretrios: trunk, o diretrio que contm o projeto principal de desenvolvimento; branches,
que contm desvios do projeto principal, desenvolvidos parte; tags, que contm branches que
nunca so modificados (verses estveis, por exemplo).
Vejamos um exemplo prtico de como ficaria organizado um repositrio:
/
calculadora/
trunk/
tags/
branches/
calendario/
trunk/
31
CDTC
Brasil/DF
tags/
branches/
planilha/
trunk/
tags/
branches/
Note que no importa onde est localizada a raiz de cada projeto dentro do repositrio. Se
voc tem apenas um projeto por repositrio, o local bvio para se colocar a raiz de cada projeto
a raiz de seu respectivo repositrio. Se voc tem mltiplos projetos, voc pode querer coloclos dentro de grupos no repositrio, talvez agrupando-os por similaridade de objetivos ou cdigo
compartilhado por cada um deles. Vejamos um exemplo desse layout:
/
utilidades/
calculadora/
trunk/
tags/
branches/
calendario/
trunk/
tags/
branches/
escritorio/
planilha/
trunk/
tags/
branches/
Crie o layout de seu repositrio da forma que melhor lhe convier. O Subversion no espera ou
fora um layout especfico, e um diretrio _apenas_ um diretrio. No fim das contas, voc deve
escolher um layout que melhor atenda as necessidades dos que trabalham nos projetos de seu
repositrio.
$
$
$
$
$
$
mkdir temp
cd temp
mkdir calculadora
mkdir calculadora/trunk
mkdir calculadora/branches
mkdir calculadora/tags
32
CDTC
Brasil/DF
$ mkdir planilha
$ mkdir planilha/trunk
$ mkdir planilha/branches
$ mkdir planilha/tags
$ svn import . file:///caminho/do/repositorio --message "Import inicial de Layout"
Adding calculadora
Adding calculadora/trunk
Adding calculadora/branches
Adding calculadora/tags
Adding planilha
Adding planilha/trunk
Adding planilha/branches
Adding planilha/tags
Committed revision 1.
$ cd ..
$ rm -rf temp
$
Voc pode verificar os resultados do import com o comando "svn list":
33
Captulo 6
Configurao do servidor
6.1 Viso geral
Um repositrio Subversion pode ser acessado simultaneamente por clientes na mesma mquina em que ele reside utilizando o mtodo file:///. A configurao tpica do Subversion, porm,
envolve uma nica mquina servidora sendo acessada por clientes em computadores de todo o
escritrio, ou, quem sabe, espalhados ao redor do mundo.
O Subversion foi planejado para utilizar uma camada de rede abstrata. Isto quer dizer que um
repositrio pode ser acessado por qualquer tipo de processo servidor, e a API cliente de "acesso
ao repositrio"permite aos programadores escrever plugins que conversem utilizando variados
protocolos de rede. Em teoria, portanto, o Subversion pode utilizar um nmero infinito de implementaes de rede. Na prtica, porm, existem apenas dois servidores at o momento.
O Apache um servidor web extremamente popular: utilizando o mdulo mod_dav_svn, o
Apache pode acessar um repositrio e torn-lo disponvel para clientes atravs do protocolo WebDAV/DeltaV, uma extenso ao HTTP. No outro extremo est o svnserve: um programa servidor
independente e pequeno que utiliza um protocolo customizado para comunicao.
Note que o Subversion, por ser um projeto de software livre, no recomenda nenhum dos
dois servidores como sendo "oficial"ou "primrio". Nenhuma das duas implementaes de rede
melhor ou pior que a outra; cada servidor tem suas vantagens e desvantagens. De fato, possvel
operar diferentes servidores em paralelo, cada qual acessando os repositrios sua maneira, e
sem prejudicar as funes do outro. Podemos ver uma comparao entre os dois servidores na
tabela a seguir:
34
CDTC
Caracterstica
Opes de autenticao
Opes de contas de
usurios
Apache + mod_dav_svn
Autenticao bsica HTTP(S),
certificados X.509, LDAP, NTLM,
ou quaisquer outros mecanismos
disponveis para o Apache httpd
arquivo users privativo
Opes de autorizao
Criptografia
Interoperabilidade
Visualizao web
Velocidade
Configurao inicial
Brasil/DF
svnserve
CRAM-MD5 ou SSH
$ svnserve -i
( success ( 1 2 ( ANONYMOUS ) ( edit-pipeline ) ) )
Quando iniciado com a opo inetd, o svnserve espera comunicar-se com um cliente Subversion atravs da entrada e sada padro (stdin e stout) utilizando um protocolo customizado, um
comportamento padro para programas executados via inetd. A IANA (Internet Assigned Numbers Authority) reservou a porta 3690 para o protocolo Subversion, ento em um sistema UNIX
podemos adicionar as seguintes linhas ao arquivo /etc/services (se j no estiverem l):
CDTC
Brasil/DF
$ svnserve -d
$ # svnserve agora est rodando, escutando a porta 3690
Ao rodar o svnserve em modo daemon, voc pode usar a opo listen-port e listen-host
para customizar a porta e hostname nos quais o "bind"ser efetuado.
H ainda uma terceira maneira para invocar o svnserve, em modo "tunelamento", com a opo -t. Este modo assume que um programa de servio remoto como RSH ou SSH autenticou
com sucesso um usurio e est invocando um processo svnserve privado como aquele usurio.
O programa svnserve atua de maneira normal, assumindo que o trfego est sendo automaticamente redirecionado por algum tunelamento para o cliente. Quando o svnserve for invocado por
um tunelamento, como descrito, certifique-se de que o usurio autenticado tem permisso total
de leitura e escrita no repositrio. essencialmente o mesmo procedimento de um usurio local
acessando o repositrio atravs do mtodo file:///.
36
CDTC
Brasil/DF
[general]
password-db = userfile
realm = dominio exemplo
O domnio um nome definido pelo administrador que indica aos clientes o domnio de autenticao ao qual esto se conectando; o cliente Subversion mostra esse domnio no prompt de
autenticao, e o utiliza como uma chave (juntamente com o hostname do servidor e a porta)
para fazer cache de credenciais no disco. A varivel password-db aponta para um arquivo em
separado que contm uma lista de usurios e senhas, utilizando o mesmo formato. Por exemplo:
[users]
joao = foopassword
maria = barpassword
O valor de password-db pode ser qualquer caminho absoluto ou relativo de diretrios at o
arquivo users. Para muitos administradores, conveniente manter o arquivo dentro do diretrio
conf/ do repositrio, juntamente com svnserve.conf. Por outro lado, possvel que voc deseje
que dois ou mais repositrios compartilhem o mesmo arquivo users, caso em que o arquivo
provavelmente deveria ficar em um local de acesso mais irrestrito. Os repositrios compartilhando
o arquivo users poderiam ainda ser configurados para ter o mesmo domnio, j que uma lista de
usurios define essencialmente um domnio. Qualquer que seja o diretrio onde se encontra o
arquivo, certifique-se de que as permisses de leitura e escrita esto ajustadas corretamente.
[general]
password-db = userfile
realm = dominio exemplo
# usuarios anonimos podem apenas ler do repositorio
anon-access = read
37
CDTC
Brasil/DF
[general]
password-db = userfile
realm = dominio exemplo
# usuarios anonimos nao sao autorizados
anon-access = none
# usuarios autenticados podem ler e escrever
auth-access = write
Observe que o svnserve suporta apenas controle de acesso por usurio. Um usurio pode
ou ter acesso universal de leitura e escrita, acesso universal de leitura ou nenhum acesso. No
h controle detalhado sobre diretrios especficos do repositrio, o que, para muitos projetos,
suficiente e adequado. No entanto, se voc necessita de controle de acesso por diretrio, ser
necessrio utilizar o mod_authz_svn do Apache (a ser visto no tpico seguinte), ou utilizar um
hook pre-commit para controlar acesso de escrita.
O controle de acesso via tunelamento bastante semelhante ao descrito anteriormente,
mas, dada a especificidade do tema, deixamos aqui o link do SVN Book que explica esse tpico em maior detalhe, aos alunos interessados nesse tipo de configurao: http://svnbook.redbean.com/nightly/en/svn.serverconfig.svnserve.html
38
CDTC
Brasil/DF
Na medida em que voc for fazendo modificaes sua configurao do Apache, provvel
que algum erro seja cometido durante esse processo. Se voc no est familiarizado com o subsistema de logs do Apache, necessrio tomar conhecimento do mesmo. No arquivo httpd.conf
h diretivas que especificam as localizaes dos logs de acesso e erro gerados pelo Apache
(diretivas CustomLog e ErrorLog, respectivamente). O mod_dav_svn do Subversion utiliza essa
interface de log tambm. interessante observar o contedo desses arquivos sempre que aparecer um problema, pois eles podem revelar a fonte deste erro.
6.3.1 Pr-requisitos
Para colocar seu repositrio em rede com HTTP, voc precisa basicamente de quatro componentes, disponveis em dois pacotes. Voc vai precisar do Apache httpd 2.0 ou superior, o mdulo
mod_dav que o acompanha, o prprio Subversion, e a interface de acesso ao sistema de arquivos mod_dav_svn distribudo com o Subversion. Com todos esses componentes, o processo de
configurao do servidor to simples quanto:
inicializar o httpd 2.0 ou superior e o mdulo mod_dav;
instalar o plugin mod_dav_svn ao mod_dav, que utiliza as bibliotecas do Subversion para
acessar o repositrio;
configurar o arquivo httpd.conf para exportar o repositrio.
Voc pode cumprir os dois primeiros itens tanto pela compilao do httpd e do Subversion
por cdigo-fonte, ou instalando pacotes pr-compilados disponveis em seu sistema. Para as
informaes mais recentes de como compilar o Subversion para uso com o servidor web Apache,
bem como compilar o prprio Apache com esse propsito, veja o arquivo INSTALL na raiz do
pacote fonte do Subversion.
39
CDTC
Brasil/DF
frente no arquivo, voc dever agora informar o Apache onde se encontra o repositrio (ou
repositrios) Subversion. A diretiva Location tem uma notao parecida com XML, iniciando com
uma tag de abertura, e finalizando com uma tag de fechamento, com vrias outras diretivas de
configurao entre as tags. O propsito da diretiva Location instruir o Apache a fazer algo especial quando lidando com requisies direcionadas para uma dada URL. No caso do Subversion,
voc quer que o Apache apenas repasse requisies naquela URL para que a camada DAV a
trate. Voc pode instruir o Apache para delegar todas as URLs iniciando com /repos/ para um
provedor DAV cujo repositrio reside em /caminho/para/repositorio usando a seguinte sintaxe:
<Location /repos>
DAV svn
SVNPath /caminho/para/repositorio
</Location>
Se voc planeja oferecer mltiplos repositrios Subversion que iro residir sob o mesmo diretrio no disco, voc pode usar uma diretiva alternativa, SVNParentPath, para indicar esse diretrio
comum. Por exemplo, se voc sabe que ir criar mltiplos repositrios no diretrio /usr/local/svn
que ser acessado por URLs como http://meu.servidor.com/svn/repo1, http://meu.servidor.com/svn/repo2,
e assim sucessivamente, voc poderia usar a seguinte sintaxe:
<Location /svn>
DAV svn
# qualquer URL "/svn/foo" ir para /usr/local/svn/foo
SVNParentPath /usr/local/svn
</Location>
Usando a sintaxe acima, o Apache ir delegar o atendimento de URLs comeadas por /svn/
para o provedor DAV do Subversion, que ir ento assumir que qualquer item no diretrio especificado em SVNParentPath na verdade um repositrio Subversion. Esta uma sintaxe particularmente conveniente porque, ao contrrio da diretiva SVNPath, no necessrio reiniciar o
Apache quando da criao de novos repositrios.
Tenha a certeza de que, quando definir um novo Location, ele no conflita com outros Locations exportados. Por exemplo, se seu DocumentRoot principal /www, no exporte um repositrio
Subversion em <Location /www/repos>. Se uma requisio chegar para a URI /www/repos/foo.c,
o Apache no saber se deve buscar um arquivo /repos/foo.c no DocumentRoot, ou se deve delegar para o mod_dav_svn o retorno de foo.c a partir do repositrio Subversion.
Neste ponto, voc deve considerar cuidadosamente a questo de permisses. Se voc j
trabalha com o Apache h algum tempo como seu servidor web, j deve provavelmente ter um
conjunto de pgina web, scripts e afins. Esses itens j foram configurados com um conjunto de
permisses que os permite trabalhar com o Apache, ou melhor, que permitem que o Apache trabalhe com esses arquivos. Quando utilizando o Apache como um servidor Subversion, tambm
se deve ajustar corretamente as permisses para leitura e escrita em seu repositrio Subversion.
Voc dever determinar um sistema de permisses que satisfaa as exigncias do Subversion, mas sem atrapalhar qualquer instalao de pgina web ou script prvia. Isto pode significar
40
CDTC
Brasil/DF
mudana nas permisses de seu repositrio Subversion para que sejam compatveis com os outros elementos servidos pelo Apache, ou poderia significar utilizar as diretivas User e Group no
httpd.conf para especificar que o Apache deve rodar como o usurio e grupo donos de seu repositrio Subversion. No h uma maneira nica de ajustar corretamente essas permisses, e cada
administrador ter diferentes razes para ajust-las de determinada maneira. Tenha em mente
apenas que problemas relacionados a permisses esto provavelmente entre os mais comuns
enganos quando da configurao de um repositrio Subversion juntamente com o Apache.
<Location /svn>
DAV svn
SVNParentPath /usr/local/svn
</Location>
...ento o seu repositro est "anonimamente"acessvel para qualquer cliente. At que voc
configure alguma poltica de autenticao e autorizao, os repositrios Subversion que voc
disponibilize atravs da diretiva Location estaro geralmente acessveis para todos. Em outras
palavras,
qualquer usurio pode usar seu cliente Subversion para efetuar checkout de uma cpia local
do repositrio;
qualquer usurio pode navegar na ltima reviso do repositrio apontando seu browser para
a URL do mesmo;
qualquer usurio pode efetuar commit para o repositrio;
CDTC
Brasil/DF
Agora, voc precisa adicionar mais algumas diretivas no bloco Location de seu httpd.conf
para informar o Apache sobre o que ele deve fazer com seu novo arquivo de senhas. A diretiva
AuthType especifica o tipo de sistema de autenticao a ser usado. Nesse caso, iremos especificar o sistema Basic. AuthName um nome escolhido pelo administrador que indica o domnio
de autenticao, mostrado em uma caixa de dilogo pop-up de login/senha, na maioria dos browsers. Finalmente, a diretiva AuthUserFile especifica o caminho at o arquivo de senhas criado
com o comando htpasswd previamente.
Aps adicionar essas trs diretivas, o bloco <Location> deve estar parecido com:
<Location /svn>
DAV svn
SVNParentPath /usr/local/svn
AuthType Basic
AuthName "Repositorio Subversion"
AuthUserFile /etc/svn-auth-file
</Location>
Este bloco <Location> no est completo, e no far nada de til (ainda). Ele est meramente dizendo ao Apache que, sempre que for requerida autorizao, ele dever exigir um nome
de usurio e senha do cliente Subversion. Esto faltando diretivas que digam ao Apache quais
tipos de requisies vindas de um cliente requerem autorizao. Sempre que autorizao for
requerida, o Apache ir demandar tambm autenticao. O procedimento mais simples a fazer proteger todas as requisies. A adio "Require valid-user"diz ao Apache que todas as
requisies exigem um usurio autenticado:
<Location /svn>
DAV svn
SVNParentPath /usr/local/svn
AuthType Basic
AuthName "Repositorio Subversion"
AuthUserFile /etc/svn-auth-file
Require valid-user
</Location>
No prximo tpico iremos ver mais detalhes sobre a diretiva Require e outras maneiras de
ajustar polticas de autorizao.
Um alerta: na autenticao HTTP Basic as senhas atravessam a rede em um formato muito
prximo de texto puro, de forma extremamente insegura. Se voc est preocupado com captura
de senhas, pode ser uma boa idia utilizar alguma forma de encriptao SSL, para que os clientes se autentiquem atravs de https:// ao invs de http://; minimamente, voc pode configurar
o Apache para utilizar um certificado de servidor auto-assinado. Consulte a documentao do
Apache e OpenSSL para informaes sobre como faz-lo.
42
CDTC
Brasil/DF
Voc pode restringir acesso a todas as operaes no repositrio adicionando a diretiva "Require valid-user"ao bloco <Location>. Usando nosso exemplo anterior, isto significaria que apenas clientes que disseram ser "joao"ou "maria", e informaram a senha correta para seu respectivo
usurio, seriam autorizados a fazer qualquer ao com o repositrio Subversion:
<Location /svn>
DAV svn
SVNParentPath /usr/local/svn
# como autenticar um usuario
AuthType Basic
AuthName "Repositorio Subversion"
AuthUserFile /etc/svn-auth-file
# apenas usuarios autenticados podem acessar o repositorio
Require valid-user
</Location>
Algumas vezes no necessrio exercer um controle to estrito. Por exemplo, o prprio repositrio do Subversion em http://svn.collab.net/repos/svn permite acesso somente-leitura para
qualquer usurio (como efetuar checkout de uma cpia local ou navegar no repositrio utilizando
um browser), mas restringe todas as operaes de escrita somente para usurios autenticados.
Para fazer este tipo de de restrio seletiva, voc pode usar as diretivas de configurao Limit e
LimitExcept. Assim como a diretiva Location, esses blocos tm tags de incio e trmino, e voc
iria coloc-las dentro do bloco <Location>.
Os paramtros presentes nas diretivas Limit e LimitExcept so tipos de requisies HTTP afetadas por aquele bloco. Por exemplo, se voc quisesse proibir qualquer acesso ao repositrio
exceto as operaes somente de leitura, voc usaria a diretiva LimitExcept, passando as requisies GET, PROPFIND, OPTIONS e REPORT como parmetros. Assim, a diretiva previamente
mencionada "Require valid-user"seria colocada dentro do bloco <LimitExcept> ao invs do bloco
<Location>:
<Location /svn>
DAV svn
SVNParentPath /usr/local/svn
# como autenticar um usuario
AuthType Basic
AuthName "Repositorio Subversion"
AuthUserFile /etc/svn-auth-file
# para quaisquer operacoes alem dessas, exigir um usuario autenticado
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
</Location>
Estes so apenas alguns exemplos simples. Para mais detalhes sobre o controle de acesso
do Apache e a diretiva Require, consulte a seo de segurana dos tutoriais do Apache em
43
CDTC
Brasil/DF
http://httpd.apache.org/docs-2.0/misc/tutorials.html.
Para mais informaes sobre configuraes com encriptao SSL e controle de acesso por
diretrio, consulte o SVN Book, seo 6 "Server Configuration", que contm exemplos sobre
esses tipos de configurao, mais especficas, e que no so abordadas por este texto.
44
Captulo 7
svn/
exemplo/
tags/
branches/
trunk/
README
outros/
x/
y/
z/
Vamos comear ento com o comando mais importante de todos - como obter ajuda:
$ svn help
O comando acima mostraria todos os complementos possveis ao "svn", e poderamos ento
descobrir qual comando o mais apropriado para o nosso problema. Supondo agora que gostaramos de obter uma working copy da pasta "exemplo"do repositrio "teste", digitaramos ento o
seguinte comando:
CDTC
Brasil/DF
A exemplo/tags
A exemplo/branches
A exemplo/trunk
A exemplo/trunk/README
Checked out revision 1.
Este comando faria o checkout, ou cpia, da pasta "exemplo", com todo o seu contedo, para
o diretrio atual. Isto quer dizer que, com este comando, obteramos uma working copy para
edio local, possibilitando-nos que trabalhssemos nela de pronto.
Podemos observar naquela ltima linha "Checked out revision 1". Vejamos o que exatamente
isso quer nos dizer: ela nos informa que acabamos de fazer o checkout (ou cpia) dos arquivos
do servidor pertencentes reviso 1. Quando dizemos "reviso 1", estamos nos referindo ao estado exato do repositrio quando este se encontrava na referida reviso 1. Aps algum mandar
alteraes ao repositrio, este passar reviso 2, que ser a mais recente (tambm conhecida
como HEAD). Mas a reviso 1 ainda estar l, e podemos v-la ou recuper-la com os comandos
nativos do Subversion, normalmente adicionando o switch -r"ou --revision".
Podemos nos referir s revises de vrias formas: a mais comum atravs do nmero, que
nico e crescente (como em "revision 1"); outra forma atravs de palavras chaves que o Subversion nos fornece, como por exemplo HEAD (que se refere reviso mais recente no repositrio);
finalmente, podemos nos utilizar ainda de datas em formatos predefinidos.
Expliquemos ainda a estrutura de diretrios dividida em trunk/, branches/ e tags/, largamente
utilizada em muitos repositrio Subversion. O diretrio trunk/ contm a linha principal de desenvolvimento do projeto, e nela que boa parte do cdigo desenvolvido. Pode ser necessrio, no
entanto, que se desenvolva uma nova capacidade ou caracterstica de um programa, por exemplo. Tal desenvolvimento potencialmente tornaria o cdigo da linha trunk/ instvel, e, para evitar
esse fato criaramos um branch do projeto, focado unicamente em desenvolver essa caracterstica
especfica que seria posteriormente portada de volta rvore trunk/. Esta , superficialmente, a
funo do diretrio branches/.
tambm perfeitamente possvel que um programa, documento, etc, chegue em um nvel de
estabilidade tal que poderia ser liberado ao pblico e no qual no seria desejvel nenhuma alterao. Essa a funo do diretrio tags/, no qual residem as denominadas verses "estveis"do
projeto em questo.
Voltando aos comandos do Subversion, suponhamos agora que voc deixou sua working copy
parada por uns tempos e agora resolveu voltar a trabalhar nela. possvel, na verdade provvel,
que o estado do repositrio tenha sido alterado desde sua ltima conexo. Para trabalhar em cima
das verses mais recentes, necessrio que baixemos as modificaes, e o faremos atravs do
svn update:
$ svn update
U exemplo/trunk/README
U exemplo/trunk/novo.txt
Updated to revision 2.
46
CDTC
Brasil/DF
Este comando dever ser executado sob o diretrio em que se encontra a working copy, obviamente. Ele ir buscar no servidor as modificaes ocorridas em relao verso local e aplic-las
de imediato.
A esta altura voc deve ter notado as letras que apareceram nos ltimos comando, A e U. Mas
o que elas querem dizer? Vamos ver a seguir:
47
CDTC
Brasil/DF
$ svn status
M
bar.c
?
foo.o
!
qq_dir
I
.screenrc
A
+
moved_dir
M
+
moved_dir/README
D
outros/teste.c
A
outros/calc/soma.h
C
outros/calc/divide.c
R
xyz.c
S outros/game
Temos acima um possvel exemplo de sada do comando "svn status", que nos ajudar a
explicar os status mais importantes a serem compreendidos. Na primeira coluna, temos:
48
CDTC
Brasil/DF
$ svn diff
Index: teste.c
===================================================================
--- teste.c (revision 3)
49
CDTC
Brasil/DF
50
CDTC
Brasil/DF
simples, processo automatizado pelo Subversion. Mas ainda resta uma dvida: e se nossas modificaes no resultarem em um conflito simples, no qual nossa alterao intercepta diretamente
a de um colaborador? Vejamos a sada de um svn update que causar esse problema:
$ svn update
U INSTALL
G README
C teste.c
Updated to revision 46.
As letras U e G caem naqueles casos estudados anteriormente: no primeiro foi feito um update
simples e no segundo o Subversion conseguiu unir as modificaes locais e remotas sem maiores
problemas. J a terceira ocorrncia poder nos causar um problema, pois indica um conflito (C).
Neste caso surgiro trs arquivos no diretrio de trabalho: [ARQUIVO].mine (com as alteraes
locais), [ARQUIVO].r[OLD] (arquivo inalterado desde o ltimo update) e [ARQUIVO].r[NEW] (o
arquivo proveniente do update, diretamente do repositrio). Sero ainda colocados marcadores
de conflito no arquivo original, a fim de auxiliar o processo de anlise. Poderemos resolver o
conflito de trs formas:
Unir os arquivos manualmente: Pode parecer ameaador, mas fazer a unio dos arquivos
na verdade realmente simples: analisar-se- as alteraes feitas remotamente e estas
sero comparadas s locais. O usurio dever decidir qual delas a melhor, ou ento
poder juntar ambas as solues. De qualquer maneira, imprescindvel que haja uma boa
comunicao entre os colaboradores, pois seria conveniente que houvesse uma discusso
entre eles para decidir o melhor caminho.
Escolher uma das opes: Pode-se ainda optar por simplesmente copiar uma das solues inteiramente, ou a local ou a remota. Nesse caso, bastaria um "cp"simples dos
sistemas UNIX-like para resolver o conflito.
Descartar as edies locais: Finalmente, tambm possvel perceber que as alteraes
feitas localmente no deveriam ser mandadas ao repositrio. Neste ltimo caso, bastaria
um "svn revert"para encerrar o conflito e retornar os arquivos aos seus estados originais.
Uma vez resolvidos todos os conflitos, devemos informar o Subversion, e o faremos com o
comando svn resolved:
Captulo 8
8.2 TortoiseSVN
Plataformas: Windows;
URL: http://tortoisesvn.tigris.org/;
O TortoiseSVN um cliente para o Subversion de faclima utilizao, implementado como uma
extenso do Windows Shell, o Windows Explorer. Assim sendo, no configura um programa em
separado assim como o RapidSVN.
Apresenta as facilidades de ser integrado diretamente no gerenciador de arquivos, bastando
alguns cliques para acessar menus altamente intuitivos, tornando a experincia bastante acessvel a usurio menos experientes. Tambm licenciado sob a GPL e hospedado na tigris.org.
Uma excelente alternativa para os usurios Windows.
8.3 WebSVN
Plataformas: Multiplataforma;
52
CDTC
Brasil/DF
URL: http://websvn.tigris.org/;
O WebSVN no propriamente um cliente para o Subversion, mas um visualizador web.
utilizado em muitos sites e portais para disponibilizar um acesso rpido aos repositrios. Tem a
capacidade de mostrar os arquivos, diferenas entre arquivos diferentes, dentre algumas outras
caractersticas. A interface amigvel e altamente customizvel, porm limitada em relao aos
demais clientes.
Roda sobre o Apache, sendo escrito em PHP e apresentando, portanto, grande portabilidade.
, tambm, licenciado sob a GPL e hospedado na tigris.org. No propriamente uma escolha
para o usurio, mas uma boa ferramenta de visualizao. No substitui um cliente grfico ou a
linha de comando.
8.4 Trac
Plataformas: Multiplataforma;
URL: http://trac.edgewall.org/;
O Trac um sistema de gerenciamente de defeitos e wiki integrado para projetos de desenvolvimento de software. Ele utiliza uma aproximao minimalista em relao a seu objetivo, ajudando
desenvolvedores a produzir software, e, ao mesmo tempo, no colocar-se como um empecilho
ao fluxo do trabalho, sem interferir nos processos e polticas estabelecidos de uma equipe de
desenvolvimento.
O Trac prov uma interface para o Subversion (visualizao de cdigo fonte, revises, etc.), um
wiki integrado e ainda facilidades de report de bugs e defeitos em software. escrito em Python,
e por esse motivo bastante portvel, podendo ser executado em conjunto com o Apache ou em
um servidor independente. Licenciado sob a licena BSD modificada, sendo assim totalmente
livre.
53