Documente Academic
Documente Profesional
Documente Cultură
Resumo Subversion um software muito usado para controle de verses de sistemas. Muitas vezes desenvolvemos um projeto e precisamos ter um bom controle do seu versionamento, nesse caso o svn uma ferramenta muito interessante.
Introduo
Nesse documento esto descritas algumas maneiras de configurar um servidor svn e alguns comandos teis para us-lo. Os pacotes necessrios para a instalao e configurao so os seguintes: httpd [ou apache ou apache2 (depende da distribuio)] subversion mod_dav_svn [ou subversion-server ou libapache2-svn (depende da distribuio)] Partiremos do princpio que os pacotes do httpd j estejam instalados na mquina que ser o servidor svn. Para outras informaes teis sobre svn temos "Apresentao da Ferramenta de Versionamento" e "Comandos teis".
1. Site oficial
http://subversion.tigris.org/
Agora vamos executar o comando necessrio para criar o repositrio /svn, vale lembrar que o comando abaixo deve ser executado em um diretrio vazio, porm, j existente no sistema, pois o subversion ir apenas criar a estrutura necessria para o controle de verses, ento execute o comando abaixo para tal procedimento: # svnadmin create /var/svn Vale uma observao aqui, at a verso 1.1 do subversion, o tipo de repositrio padro era o Berkeley DB, mas a partir da verso 1.2 o padro passou a ser o FSFS. O suporte FSFS apareceu na verso 1.1. Na 1.0 apenas o Berkeley DB era suportado. Para especificar o tipo do repositrio pode-se usar o argumento --fs-type: # svnadmin create --fs-type fsfs /var/svn; ou # svnadmin create --fs-type bdb /var/svn
O repositrio criado estar vazio e comear a contar a partir da reviso 0 (zero), a qual corresponder sua criao. Para mais informaes sobre o tipo do repositrio acesse: http://svnbook.red-bean.com/nightly/en/svn.reposadmin.html
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): svn 3690/tcp # Subversion svn 3690/udp # Subversion E se o o sistema est usando um daemon inetd UNIX clssico, podemos adicionar esta linha ao /etc/inetd.conf: svn stream tcp nowait svnowner /usr/bin/svnserve svnserve -i Certifique que o usurio "svnowner" tem permisses apropriadas para acesso aos repositrios. Agora, quando uma conexo de um cliente chegar ao servidor na porta 3690, o inetd ir iniciar um processo do svnserve para atend-la. Uma segunda opo rodar o svnserve como um "daemon" standalone. Para tal, utilize a opo -d: $ 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:///. /> Autenticao e autorizao integrada Quando um cliente se conecta a um processo svnserve, as seguintes situaes acontecem: O cliente seleciona um repositrio especfico; O servidor processa o arquivo conf/svnserve.conf e aplica quaisquer polticas de autenticao e autorizao l definidas; Dependendo da situao e das polticas de autorizao: 1. o cliente pode ser autorizado a fazer requisies anonimamente, sem autenticao; 2. o cliente dever autenticar-se; 3. se operando em modo de tunelamento, o cliente ir declarar que j foi autenticado externamente. At o momento, o svnserve s compatvel com o mtodo de autenticao CRAM-MD5. Essencialmente, o servidor envia um pacote de dados ao cliente, que usa um algoritmo de hash MD5 para criar uma assinatura dos dados e da senha combinados, e ento a envia como resposta. O servidor calcula a assinatura em conjunto com a senha local para verificar que o resultado idntico. Em nenhum momento a senha do usurio atravessa a rede. Obviamente, tambm possvel que o cliente seja autenticado externamente atravs de um agente de tunelamento, como o SSH. Neste caso, o servidor simplesmente examina o usurio com o qual est executando e o utiliza para acessar o repositrio. Como voc j deve ter desconfiado, o arquivo svnserve.conf de um repositrio o mecanismo central de controle de autenticao e autorizao. O arquivo tem o seguinte formato: sees so identificadas por colchetes - [], comentrios so iniciados por cerquilha - #, e cada seo contm variveis que podem ser ajustadas - varivel = valor.
Por ora, a seo [general] do arquivo svnserve.conf contm todas as variveis de nosso interesse. Defina inicialmente um arquivo contendo usurios e senhas, bem como um domnio de autenticao: [general] password-db = userfile realm = domnio 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.
H ainda duas variveis interessantes a serem ajustadas em svnserve.conf: elas determinam o que usurios no-autenticados (annimos) e usurios autenticados podero fazer no repositrio. As variveis anon-access e auth-access podem ser ajustadas para os valores none, read ou write. Ajustando o valor para none restringe qualquer tipo de acesso; read permite acesso somente de leitura e write permite acesso completo de leitura e escrita ao repositrio. Por exemplo: [general] password-db = userfile realm = domnio exemplo # usurios annimos podem apenas ler do repositrio anon-access = read # usurios autenticados podem ler e escrever auth-access = write Essas configuraes de exemplo so, de fato, os valores padronizados para as variveis, caso no sejam definidas. Se voc deseja ser ainda mais conservativo, voc pode bloquear acesso annimo por completo: [general] password-db = userfile realm = domnio exemplo # usurios annimos no so autorizados anon-access = none # usurios 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.red-bean.com/nightly/en/svn.serverconfig.svnserve.html
Por isso, neste documento, trataremos o arquivo de configurao apenas por: subversion.conf. Vamos abordar duas formas de configurao, so elas: acesso irrestrito para leitura e escrita (sem senha) acesso irrestrito para leitura e acesso restrito para escrita (com senha) Antes de tudo faa um backup do arquivo de configurao original:
# cp subversion.conf subversion.conf.orig
No Fedora Core este arquivo j vir pr configurado, necessitando apenas completar alguns pontos das configuraes vista neste documento.
Essa modificao necessria para que o svn fique acessvel via http. Caso o usurio root continuasse como dono do diretrio e dos demais arquivos, o apache no teria permisses para acess-los. Em algumas distribuies o usurio chama-se www ao invs de apache, verifique o nome do usurio do apache antes de executar esse comando.
DAV svn SVNPath /var/svn # autenticando um usurio AuthType Basic AuthName "Subversion repository" AuthUserFile /etc/httpd/securety/svn-passwd # qualquer operao que no seja # leitura requer um usuario valido LimitExcept GET PROPFIND OPTIONS REPORT> Require valid-user </LimitExcept> </Location> Mais informaes sobre como configurar o arquivo subversion.conf.
O comando acima cria o arquivo /etc/httpd/securety/svn-passwd e pede que a senha do usurio user seja informada. Para adicionar um novo usurio pode-se usar o comando abaixo: # htpasswd /etc/httpd/securety/svn-passwd brito
O usurio digita a senha e o arquivo automaticamente atualizado. Ou o usurio executa o seguinte comando: # htpasswd -n brito New password: Re-type new password: brito:QVZvldBtl6gZw
Envia o resultado do comando (em azul) para o administrador do svn e ele inclui o usurio e a sua respectiva senha no arquivo correspondente.
Observe que o comando pode ser diferente dependendo da distribuio que estiver sendo usada, ou seja, ao invs de httpd pode ser apache ou at mesmo apache2. Agora o seu repositrio svn j pode ser acessado, usando um navegador qualquer, atravs do endereo: http://servidor/svn Se o servidor svn foi configurado em sua rede, em casa, e no h nenhum dns configurado, para responder pelos nomes das mquinas, pode-se usar apenas o ip do servidor: http://ip_do_servidor/svn Alguns comandos teis para manusear projetos no svn configurado. Aps criarmos um repositrio svn interessante conhecermos alguns comandos que possibilitam o manuseio desta ferramenta. Se uma das variveis de ambiente $SVN_EDITOR, $VISUAL ou $EDITOR no estiverem definidas, provavelmente uma mensagem de erro, semelhante a que segue abaixo, ser exibida ao tentar efetuar uma alterao no svn. svn: Could not use external editor to fetch log message; consider setting the $SVN_EDITOR environment variable or using the --message (-m) or --file (-F) options svn: None of the environment variables SVN_EDITOR, VISUAL or EDITOR is set, and no 'editor-cmd' run-time configuration option was found Para definir o editor de texto padro, o qual ser usado para escrever os logs dos commits, pode-se usar a seguinte linha de comando: # export SVN_EDITOR='vim'
Acima definimos que o editor padro ser o vim. * Para que todos os usurios tenham essa varivel configurada, basta adicionar a linha de comando
acima no arquivo /etc/profile. Criar um diretrio no svn. Antes de adicionarmos um projeto em nosso repositrio precisamos criar o diretrio onde ele ficar armazenado. Pode-se fazer isso atravs do seguinte comando: # svn mkdir http://servidor/svn/projeto
O comando acima importar todos os arquivos do diretrio /tmp/projeto para o repositrio projeto em http://servidor/svn/ Uma outra maneira de executar o procedimento acima acessar o diretrio e ento import-lo para o svn: # cd /tmp/projeto # svn import http://servidor/svn/projeto
Quando o commit for efetuado, o arquivo projeto.c ser adicionado rvore correspondente do projeto em que estava trabalhando. Remover arquivos de um projeto: A medida que arquivos vo sendo incluso no projetos, h a necessidade de excluir alguns. Use o seguinte comando para efetuar tal operao: # svn rm projeto.c
possvel remover um projeto inteiro do svn, para isto basta executar: # svn rm http://servidor/svn/projeto
Quando o commit for efetuado, o arquivo projeto.c ser removido da rvore onde ele era armazenado e na nova reviso ele no far mais parte do projeto.
# svn diff
Jogando a sada para um editor de texto, no caso o vim (Sistemas Operacionais Unix Like): # svn diff | vim -
Lembrando que o comando acima mostra as diferenas do diretrio onde foi executado e o seu correspondente no svn. Para verificar todas as modificaes de um projeto, basta execut-lo na raiz principal dele.
Uma srie de comandos, possveis, ser listada. Para obter informaes sobre um comando em especfico use: # svn comando --help
Legenda: U - o arquivo foi "Updated" (atualizado) a partir do servidor; A - o arquivo ou diretrio foi "Added" (adicionado) sua working copy; D - o arquivo ou diretrio foi "Deleted" (deletado) da sua working copy; R - o arquivo ou diretrio foi "Replaced" (substitudo) em sua working copy, ou seja, um elemento foi deletado e posteriormente outro com o mesmo nome foi adicionado; embora tenham
o mesmo nome o repositrio consegue perceb-los como arquivos diferentes; G - o arquivo no servidor recebeu alteraes, mas sua cpia local tinha as suas modificaes; ou as alteraes no interceptavam ou eram idnticas s suas, ento o Subversion conseguiu coloclas em estado de "merGed" (unio) sem problemas; C - o arquivo recebeu alteraes "Conflicting" (conflitantes) com as suas, ou seja, na mesma seo do arquivo; trataremos deste caso mais adiante.
22. Bibliografia
http://www.dicas-l.com.br/dicas-l/20050909.php http://pt.wikipedia.org/wiki/Subversion http://en.wikipedia.org/wiki/Subversion
Atualizaes
28/05/2008; publicado tambm em http://www.vivaolinux.com.br/artigo/Configurando-Subversion