Tutorial sobre Instalação e Configuração do CVS

February 20th, 2004

Category: Administracao e Suporte

Tagged with:

A primeira parte publicada aqui ensina como instalar a última versão do CVS, configurar um repositório de dados do CVS, e importar um projeto.

Tutorial CVS Parte I –
Instalação em Linux

Autor: Hélder
Garcia
Email:
hlbogNFSPAM@sounerd.com
Fevereiro de 2004

Introdução

Este é o primeiro artigo de uma série sobre o CVS – Concurrent Version System, os quais abordarão instalação, configuração e uso básico. Pretendo escrever uma segunda série contemplando itens avançados como o uso de branches e estratégias de uso do CVS no gerenciamento de um projeto.
Não é minha ambição escrevê-los todos sozinho, apesar de apenas contar com essa possibilidade no momento, mas aceito contribuições para a elaboração de outros tópicos por colaboradores
externos. Apenas me reservo o direito de realizar revisões e possíveis
alterações para manter a coerência entre os
modelos que componham o conjunto sem, entretanto, modificações
no seu conteúdo ou reclamações de créditos
no artigo por minha parte.

Nestes documentos, fontes em azul
denotam o que é mostrado em seu shell,
incluindo saída padrão, saída de erro e comando
digitados, com a diferença que tudo o que deve ser digitado
também é formatado em itálico.

CVS é um sistema se controle de
versões para plataformas Unix e Linux. Apesar de existir
algumas implementações para Windows, trataremos neste
artigo da instalaçao do CVS em Linux.

O mesmo pacote CVS contém o
código do servidor e cliente, portanto, não há
um procedimento diferente de instalação para cada um
destes componentes.

CVS pode ser utilizado para controlar
projetos de programação, livros eletrônicos,
arquivos de configuração, lista de compras, e vários
outros tipos de arquivos. Este controle é feito de forma
distribuída, permitindo
colaboração entre equipes
e ajudando a resolver conflitos de acesso simultâneo, geração
de patches, entre outras
funções.

Instalação

O código
fonte do CVS pode ser encontrado em http://www.cvshome.org.

Recomenda-se baixar a última
versão estável (Stable). Você terá um
arquivo do tipo:

cvs-1.11.13.tar.bz2


Para decompactá-lo você
deve ter o bzip2 instalado no seu sistema. O bzip2 pode ser
encontrado em http://sources.redhat.com/bzip2/.

hlbog@slack01:/packages$
bunzip2 cvs-1.11.13.tar.bz2
hlbog@slack01:/packages$
tar xvf cvs-1.11.13.tar
hlbog@slack01:/packages$
ls -l
drwxrwxrwx 14
500 500 4096 Feb 13 13:30 cvs-1.11.13/

-rw——- 1 hlbog hlbog
10536960 Feb 16 18:10 cvs-1.11.13.tar

A instalação segue o
modelo tradicional:

hlbog@slack01:/packages$
cd cvs-1.11.13

hlbog@slack01:/packages/cvs-1.11.13$
./configure
checking for a
BSD-compatible install… /usr/bin/ginstall -c

checking whether
build environment is sane… yes

checking for
gawk… gawk



config.status:
creating config.h

config.status:
executing depfiles commands

Isto irá
realizar uma série de checagens e pre-configurações
para o script de compilação que será executado a
seguir.

hlbog@slack01:/packages/cvs-1.11.13$
make
if gcc
-DHAVE_CONFIG_H -I. -I. -I.. -I../lib -I../diff -I../zlib -g -O2
-MT
zlib.o -MD -MP
-MF ".deps/zlib.Tpo"
-c -o zlib.o
`test -f ‘zlib.c’ || echo ‘./’`zlib.c;

make[2]: Nothing
to be done for `all-am’.
make[2]: Leaving
directory `/packages/cvs-1.11.13′
make[1]: Leaving
directory `/packages/cvs-1.11.13′

Finalmente, para fazer a instalação
você deve se autenticar como root
e executar
make install:

hlbog@slack01:/packages/cvs-1.11.13$
su -
Password:
root@slack01:~#
cd /packages/cvs-1.11.13
root@slack01:/packages/cvs-1.11.13#
make install
Making install in
lib

make[1]: Entering
directory `/packages/cvs-1.11.13/lib’
make[2]: Entering
directory `/packages/cvs-1.11.13/lib’

make[2]: Leaving
directory `/packages/cvs-1.11.13′
make[1]: Leaving
directory `/packages/cvs-1.11.13′

Verifique a instalação:

root@slack01:/packages/cvs-1.11.13#
cvs –version

Concurrent
Versions System (CVS) 1.11.13 (client/server)

Copyright (c)
1989-2003 Brian Berliner, david d `zoo’ zuhn,
Jeff Polk, and other authors

CVS may be copied
only under the terms of the GNU General Public License,
a copy of which
can be found with the CVS distribution kit.

Specify the
–help option for further information about CVS

Como você pode ver a instalação é bastante simples. Outros métodos também estão disponíveis como os pacotes rpm utilizados por diversas distribuições como Red Hat e Mandrake, o apt-get do
Debian ou o
yast
do
SuSE. Estes métodos não serão abordados aqui.

Criação
de um Repositório CVS

O repositório
é a base de dados do CVS, onde ele guarda os projetos e dados de controle contendo o histórico de alterações e
controle de versões, entre outras funções. Você
ou a equipe que trabalhará nestes
arquivos não realizará alterações diretamente nos arquivos
armazenados no repositório. Cada membro da equipe irá gerar uma cópia local (na sua estação de trabalho) para trabalhar, denominada sandbox. Para cada arquivo alterado
deve ser realizada posteriormente uma operação de commit, a qual atualiza a versão no repositório CVS, tornando-a disponível para outros componentes do time.

Essas operações são comandadas através da interface com o CVS, utilizando linha de comando, ou aplicativos que implementam ambientes de desenvolvimento com integração com o CVS, como o
http://www.eclipse.org. Mais detalhes destes procedimentos serão vistos no desenvolvimento destes
artigos.

Antes de criar o repositório, recomenda-se definir um grupo e um usuário dedicado para o acesso ao repositório CVS. Este grupo, obviamente, deve ser criado no servidor que hospedará o repositório de dados.

hlbog@slack01:/packages/cvs-1.11.13$
su -

Password:

root@slack01:~#
groupadd cvs

root@slack01:~#
useradd -d /home/cvs -m -g cvs cvs
root@slack01:~#
passwd cvs
Changing
Password for cvs
Enter
the new password (minimum of 5, maximum of 127 characters)
Please
use a combination of upper and lower case letters and numbers.
New
password: <sua senha>

Re-enter
new password: <sua senha>

Password
changed.

Altere
a entrada do arquivo /etc/passwd, do original:

cvs:x:1001:102::/home/cvs:

De
modo que fique como mostrado abaixo:

cvs:x:1001:102::/home/cvs:/bin/false

Isso não permitirá que alguém
se logue no sistema com esse usuário.

Crie um diretório para o repositório
CVS:

root@slack01:~# mkdir /var/cvsroot
root@slack01:~# chown cvs:cvs /var/cvsroot
root@slack01:~# chmod 2775 /var/cvsroot

Esta permissão (SGID) fará com
que arquivos criados abaixo do diretório tenham o mesmo group
id
de /var/cvsroot.

Agora você pode executar o comando para
definir o diretório como o repositório para o CVSROOT:

root@slack01:~# cvs -d /var/cvsroot init

Vamos dar uma olhada no conteúdo do
diretório:

root@slack01:~# ls -l /var/cvsroot
total 4
drwxrwsr-x 3 root cvs 4096 Feb
19 03:02 CVSROOT/

root@slack01:~# ls -l /var/cvsroot/CVSROOT
total 92

drwxrwsr-x 2 root cvs 4096 Feb
19 03:02 Emptydir/

-r–r–r– 1 root cvs 495 Feb
19 03:02 checkoutlist

-r–r–r– 1 root cvs 696 Feb
19 03:02 checkoutlist,v


-r–r–r– 1 root cvs 760 Feb
19 03:02 commitinfo

-r–r–r– 1 root cvs 961 Feb
19 03:02 commitinfo,v

-r–r–r– 1 root cvs 991 Feb
19 03:02 config
-r–r–r– 1 root cvs 1192 Feb
19 03:02 config,v
-r–r–r– 1 root cvs 602 Feb
19 03:02 cvswrappers
-r–r–r– 1 root cvs 803 Feb
19 03:02 cvswrappers,v

-r–r–r– 1 root cvs 1025 Feb
19 03:02 editinfo

-r–r–r– 1 root cvs 1226 Feb
19 03:02 editinfo,v

-rw-rw-rw- 1 root cvs 0 Feb
19 03:02 history

-r–r–r– 1 root cvs 1141 Feb
19 03:02 loginfo

-r–r–r– 1 root cvs 1342 Feb
19 03:02 loginfo,v

-r–r–r– 1 root cvs 1151 Feb
19 03:02 modules

-r–r–r– 1 root cvs 1352 Feb
19 03:02 modules,v

-r–r–r– 1 root cvs 564 Feb
19 03:02 notify

-r–r–r– 1 root cvs 765 Feb
19 03:02 notify,v

-r–r–r– 1 root cvs 649 Feb
19 03:02 rcsinfo

-r–r–r– 1 root cvs 850 Feb
19 03:02 rcsinfo,v

-r–r–r– 1 root cvs 879 Feb
19 03:02 taginfo

-r–r–r– 1 root cvs 1080 Feb
19 03:02 taginfo,v

-rw-rw-rw- 1 root cvs 0 Feb
19 03:02 val-tags

-r–r–r– 1 root cvs 1026 Feb
19 03:02 verifymsg

-r–r–r– 1 root cvs 1227 Feb
19 03:02 verifymsg,v

Troque o owner dos arquivos para cvs:

root@slack01:~# chown -R cvs /var/cvsroot

Importação
de Projeto

Uma vez com o repositório criado, é hora de importar os seus projetos para o repositório. É interessante manter todos os arquivos relacionados ao mesmo projeto embaixo de uma árvore única de diretório.

Um projeto normalmente é associado ao conjunto de programas de um sistema em desenvolvimento, mas pode ser qualquer conjunto sobre o qual você queira manter um controle de versões e histórico.

Como exemplo, vamos assumir que queiramos manter os nossos arquivos de configuração contidos na árvore /etc sobre o controle do CVS. É uma boa prática, pois assim você pode facilmente restaurar versões antigas, verificar comentários de alterações e saber quando determinada mudança foi efetuada.

root@slack01:~# cd /etc
root@slack01:/etc# cvs -d /var/cvsroot
import etc myconfig v0-1

Neste comando, import é a ação
a ser executada, etc é o nome do projeto, myconfigé
a vendor tag e v0-1 é a release tag.

Um editor será aberto, normalmente o vi, pedindo que você coloque algum comentário sobre a versão inicial do seu projeto. Coloque algum texto descritivo sobre a função
deste projeto. Salve e saia do editor. Os

arquivos do projeto serão importados
para o repositório.

A mensagem final deverá ser:

No conflicts created by this import

Verifique agora o conteúdo de
/var/cvsroot:

root@slack01:~# ls -l /var/cvsroot

total 8

drwxrwsr-x 3 cvs cvs 4096 Feb
19 03:02 CVSROOT/


drwxrwsr-x 38 root cvs 4096 Feb
19 03:02 etc/

Se
você olhar abaixo de /var/cvsroot/etc
você verá que todos os arquivos terminam com o sufixo
,v.

Fazendo um Checkout do
Projeto

O próximo passo é fazer
um checkout dos arquivos em
um chamado
sandbox.
Este será o local de onde você deverá realizar
modificações nos arquivos, podendo ser na própria
máquina onde estão os originais ou em
outra
estação. Mostraremos como criar um
sandbox
remoto mais adiante.

Criaremos nosso
sandbox localmente em outro diretório. Lembre-se, não faça
mais alterações nos arquivos originais em /etc.
O CVS interpretaria um arquivo alterado no local original como um
novo arquivo e isso causaria confusão no seu gerenciamento de
versões.

root@slack01:~# mkdir /home/projetos
root@slack01:~# cd /home/projetos


root@slack01:/home/projetos# export
CVSROOT=/var/cvsroot

root@slack01:/home/projetos# cvs checkout
etc

Aqui estou mostrando também que você
pode definir a variável de ambiente CVSROOT apontando
para o repositório CVS. Deste modo, você fica
desobrigado a informá-lo com a opção -d
como usamos

anteriormente. Defina esta variável no
script de inicialização do seu sistema.

A saída deste comando deve mostrar uma
sequência de operações de checkout.

A partir daí utilize apenas este diretório
para fazer modificações nos seus arquivos.

Conclusão

Mostramos aqui os procedimentos básicos
de preparação de um ambiente controlado pelo CVS. Nas
partes seguintes vamos mostrar
atividades do dia a dia, como a realização
de sincronismo com o repositório principal, acesso a
repositórios remotos, resolução de conflitos de
atualização, entre outros.

É importante ressaltar que o autor não
possui profundos conhecimentos nesta ferramenta, mas está
simplesmente repassando um aprendizado ainda em andamento. Não
conclua como verdadeiro ou como melhores práticas as informações
aqui citadas. Correções, sugestões e melhorias
são bem-vindas e podem ser dirigidas ao email do autor ou como
comentários no site SouNerd.com.


Hélder Garcia



http://www.sounerd.com.br

No comments yet


Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>