[ anterior ] [ Conteúdo ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ] [ 19 ] [ 20 ] [ 21 ] [ próximo ]


Guia Foca GNU/Linux
Capítulo 17 - CVS


Este capítulo explica os requerimentos, instalação, configuração, segurança e diversos modelos de configuração de acesso para trabalho em grupo utilizados pelo CVS.

Não tome-o como uma referência completa ao uso e configuração do cvs, a pesquisa de sua info page é muito importante.


17.1 Introdução ao CVS

O CVS (Concurrent Version Software) permite que se organizem grupos de trabalho para desenvolvimento de projetos colaborativos. Um projeto pode ser desde um programa em C, documentação em equipe, etc. O uso do CVS é recomendado para qualquer desenvolvimento de projeto que tenha vários envolvidos trabalhando ao mesmo tempo.

Para cada mudança feita no programa, é pedido uma descrição dos trabalhos realizados e o sistema registra todas as modificações realizadas ao longo do desenvolvimento, permitindo voltar a uma versão anterior ou ver as mudanças entre elas facilmente.

Imagine uma situação onde você está desenvolvendo um programa de computador e após a última modificação ele para de funcionar. Com o CVS é possível ver o que foi modificado e voltar até a versão que estava funcionando para consertar o problema. No desenvolvimento de documentação e tradução o CVS também desempenha um papel importante, pois com ele o tradutor pode ver o que foi modificado entre a versão do documento original que ele usou para tradução e uma versão recente, traduzindo apenas as diferenças.

Uma seção de cvs é feita de modo interativo através do comando cvs. Por exemplo:

Cada comando do cvs será explicado em detalhes no decorrer deste capítulo.


17.1.1 Versão

A versão do CVS documentada no guia é a 1.11.1. As explicações aqui certamente serão compatíveis com versões posteriores deste programa.


17.1.2 História

O CVS é uma substituição do sistema RCS (Revision Control System) ele possui mais recursos e foi criado sendo compatível com o RCS.

A história do CVS (extraída de sua info page) é que ele foi iniciado a partir de um conjunto de scripts shell escritos por Dick Grune que foram postados ao grupo de notícias comp.sources.unix no volume 6 de Dezembro de 1986. Na versão atual não estão mais presentes shell scripts porque muitos dos conflitos de resolução de algorítmos vem deles.

Em Abril de 1989, Brian Berliner fez o design e programou o CVS. Mais tarde, Jeff Polk ajudou Brian com o design do módulo CVS.


17.1.3 Contribuindo com o CVS

Através da lista de discussão info-cvs. Para se inscrever envie uma mensagem com o subject "subscribe" para [email protected]. Outra alternativa é através do grupo de noticias (newsgroup) da Usenet comp.software.config-mgm.


17.1.4 Características

Abaixo uma lista de características que tornam o CVS útil no gerenciamento de trabalhos em grupo:

OBS: O CVS possui algumas limitações e falhas, uma delas que mais me faz falta é um suporte a protocolo pserver via ssh que resolveria o problema de tráfego em texto plano e gerenciamento de grupos com permissões diferenciadas.


17.1.5 Ficha técnica

Pacote: cvs

Utilitários:


17.1.6 Requerimentos de Hardware

Para executar o CVS é requerido pelo menos 3 vezes mais memória que o tamanho do maior arquivo usado pelo projeto (para realização de diffs entre as atualizações) e uma boa quantidade de espaço em disco.

Na realidade os requerimentos sobre o CVS dependem muito da aplicação que será desenvolvida. É recomendável que a máquina tenha memória suficiente para evitar o uso de swap, que degrada bastante a performance do sistema.


17.1.7 Arquivos de log criados pelo CVS

Problemas na inicialização do CVS são registrados no arquivo /var/log/daemon.log. Os logs de modificações feitas nos arquivos de um projeto no CVS são armazenadas no formato arquivo.extensão,v (é adicionado o ",v" ao final do arquivo para indicar que é um arquivo de controle de modificações do CVS).


17.1.8 Instalação

O CVS pode ser baixado de http://www.cvshome.org/.

Para pacotes Debian basta apenas executar o comando: apt-get install cvs e seguir as telas de configuração para ter o pacote CVS instalado e (opcionalmente) com o servidor sendo executado. Você poderá a qualquer momento reconfigurar o CVS executando: dpkg-reconfigure cvs.

Uma boa documentação de referência é encontrada no pacote cvs-doc.


17.1.9 Iniciando o servidor/reiniciando/recarregando a configuração

A única configuração requerida é quando o CVS é executado via pserver. Para isto, é necessária a seguinte linha no arquivo /etc/inetd.conf

     cvspserver      stream  tcp     nowait.200      root    /usr/sbin/tcpd /usr/sbin/cvs-pserver

Note que o parâmetro "200" indica quantas vezes o processo CVS poderá ser executado por minuto no sistema. Caso esse número seja excedido, o serviço será desabilitado e será necessário reiniciar o servidor inetd com o comando killall -HUP inetd para reativar o servidor CVS pserver (veja /etc/inetd.conf, Seção 4.7.2.1 capítulo do inetd para detalhes). Ajuste este valor de forma adequada ao seu servidor!

Veja o script cvs-pserver sendo executado no final da linha. Ele foi desenvolvido para lidar de forma mais inteligente com a configuração do servidor CVS pserver.


17.1.10 Opções de linha de comando

As seguintes opções são aceitas pelo CVS.

-z [num]

Utiliza o gzip para fazer a transferência compactada dos arquivos. O valor especificado pode ser de 0 a 9, quanto maior o número maior o nível de compactação e uso da CPU.

Exemplo: cvs -z 3 checkout teste

-q

Oculta mensagens sobre recursão de diretório durante os comandos do CVS.

-d [repositório]

Permite especificar o repositório através da linha de comando.

-e [editor]

Define qual é o editor de textos usado para registrar o texto de commits.

-n

Executa o cvs em modo "simulação" não modificando qualquer arquivo do repositório.

-t

Mostra mensagens mostrando o processo de execução de comandos do CVS. É bastante útil para aprendizado do cvs usado junto com a opção -n.

-r

Torna os novos arquivos criados somente para leitura. É a mesma coisa que especificar a variável CVSREAD.

-w

Torna os novos arquivos criados leitura/gravação que é o padrão.

-x

Utiliza criptografia para a transferência dos arquivos quando é utilizado em conjunto com o Kerberos.

Você pode obter detalhes sobre opções sobre um comando em especial do CVS (commit, checkout, etc) digitando: cvs comando --help. Veja Criando projetos para serem usados no CVS, Seção 17.3 para exemplos sobre cada uma delas.


17.2 Servidor de CVS - configurando métodos de acesso ao repositório

O CVS é uma aplicação cliente/servidor, possuindo diversas maneiras de fazer o acesso seu repositório (veja Repositório, Seção 17.3.1 repositórios). Estes métodos são os seguintes:

Eles são explicados em detalhes nas sub-seções a seguir.


17.2.1 local

Acessa o diretório do repositório diretamente no disco local. A vantagem deste método é que não é requerido nem nome nem senha para acesso (você precisa apenas ter permissões para acesso aos arquivos que deseja trabalhar) e também não é preciso nenhuma conexão de rede.

Este método é ideal para trabalhar na máquina local ou com os arquivos administrativos do CVS existentes no diretório CVSROOT do repositório. É muito útil também para configurar outros métodos de acesso, como o pserver.

Para criar seu repositório, veja Criando um repositório, Seção 17.3.2.


17.2.1.1 Configurando o método local

Para utilizar o método de acesso local, basta definir a variável CVSROOT da seguinte forma (assumindo que o repositório esteja instalado em /var/lib/cvs):

     export CVSROOT=/var/lib/cvs
     
     ou 
     
     export CVSROOT=local:/var/lib/cvs

Depois disso, basta utilizar os comandos normais do cvs sem precisar se autenticar no sistema. Veja os detalhes de utilização dos comandos de CVS após o login na seção Clientes de CVS, Seção 17.5.


17.2.2 fork

Este método é semelhante ao local, mas ele "simula" uma conexão de rede com o servidor. É muito usado para fins de testes.


17.2.2.1 Configurando o método fork

Para utilizar o método de acesso fork, basta definir a variável CVSROOT da seguinte forma (assumindo que o repositório esteja instalado em /var/lib/cvs):

     export CVSROOT=fork:/var/lib/cvs

Depois disso, basta utilizar os comandos normais do cvs, sem precisar se autenticar no sistema. Veja os detalhes de utilização dos comandos do CVS após o login em Clientes de CVS, Seção 17.5.


17.2.3 ext

Este método de acesso lhe permite especificar um programa externo que será usado para fazer uma conexão remota com o servidor cvs.Este programa é definido na variável CVS_RSH e caso não ela seja especificada o padrão é rsh.

Este método requer que o usuário possua um login/senha no banco de dados de autenticação /etc/passwd do servidor de destino. Suas permissões de acesso ao CVS (leitura/gravação) serão as mesmas definidas neste arquivo.

O uso do acesso criptografado via ssh é possível definindo o programa ssh na variável CVS_RSH. Veja os exemplos a seguir em Configurando o método ext, Seção 17.2.3.1.

Para criar seu repositório, veja Criando um repositório, Seção 17.3.2.


17.2.3.1 Configurando o método ext

Defina a variável CVSROOT da seguinte forma para utilizar este método de acesso (assumindo /var/lib/cvs como repositório):

     export CVSROOT=:ext:[email protected]:/var/lib/cvs
     cvs login

A "conta" é uma conta de usuário existente no servidor remoto (por exemplo, gleydson) seguido do nome do servidor remoto (separado por uma "@"). Por exemplo para acessar o servidor cvs.cipsga.org.br usando a conta michelle:

     export CVSROOT=:ext:[email protected]:/var/lib/cvs
     cvs checkout

OBS: A senha via método de acesso "ext" será pedida somente uma vez quando for necessário o primeiro acesso ao servidor remoto. Veja os detalhes de utilização dos comandos de CVS após o login na seção Clientes de CVS, Seção 17.5. O uso mais freqüente do ext é para conexões seguras feitas via ssh, feita da seguinte forma:

     export CVS_RSH=ssh
     export CVSROOT=:ext:[email protected]:/var/lib/cvs
     cvs checkout

O acesso de leitura/gravação do usuário, é definido de acordo com as permissões deste usuário no sistema. Uma maneira recomendada é definir um grupo que terá acesso a gravação no CVS e adicionar usuários que possam fazer gravação neste grupo.

OBS1: O acesso via ssh traz a vantagem de que as senhas trafegarão de forma segura via rede, não sendo facilmente capturadas por sniffers e outros programas de monitoração que possam estar instalados na rota entre você e o servidor.

OBS2: É possível especificar a senha na variável CVSROOT usando a sintaxe semelhante a usada no ftp:

     export CVSROOT=:ext:michelle:[email protected]:/var/lib/cvs

Entretanto isto não é recomendado, pois os processos da máquina poderão capturar facilmente a senha (incluindo usuários normais, caso a máquina não esteja com patches de restrições de acesso a processos configurada, que é o padrão em quase todas as distribuições de Linux).


17.2.4 pserver (password server)

Este é um método de acesso remoto que utiliza um banco de dados de usuários senhas para acesso ao repositório. A diferença em relação ao método de acesso ext é que o pserver roda através de um servidor próprio na porta 2401. O acesso dos usuários (leitura/gravação) no repositório pode ser feita tanto através do banco de dados de usuários do sistema (/etc/passwd) como através de um banco de dados separado por repositório.

A grande vantagem deste segundo método é que cada projeto poderá ter membros com acessos diferenciados; o membro x poderá ter acesso ao projeto sgml mas não ao projeto focalinux; ou o usuário y poderá ter acesso de gravação (para trabalhar no projeto focalinux) mas somente acesso de leitura ao projeto sgml.

Este é o método de acesso preferido para a criação de usuários anônimos (uma vez que o administrador de um servidor que hospede muitos projetos não vai querer abrir um acesso anônimo via ext para todos os projetos).

Também existe a vantagem que novos membros do projeto e tarefas administrativas são feitas por qualquer pessoa que possua acesso de gravação aos arquivos do repositório.


17.2.5 Configurando um servidor pserver


17.2.5.1 Ativando o servidor pserver

Para ativar o pserver (caso ainda não o tenha feito). Execute o comando dpkg-reconfigure cvs e selecione a opção Ativar o servidor pserver. Uma maneira de fazer isso automaticamente é modificando o arquivo /etc/inetd.conf adicionando a seguinte linha:

     # na Debian
     cvspserver      stream  tcp     nowait.400      root    /usr/sbin/tcpd /usr/sbin/cvs-pserver
     
     # em outras Distribuições 
     cvspserver  stream  tcp  nowait  root  /usr/bin/cvs cvs -f --allow-root=/var/lib/cvs pserver

Na Debian, o cvs é iniciado através do script /usr/sbin/cvs-pserver que checa os binários e executa o cvs para todos os repositórios especificados no arquivo /etc/cvs-pserver.conf.

Caso precise adicionar mais repositórios para acesso via pserver ou outro método de acesso, veja Criando um repositório, Seção 17.3.2.

Você também poderá executar o método pserver sob um usuário que não seja o root, para isto, modifique a entreada referênte ao usuário.grupo no inetd.conf e tenha certeza que o daemon consegue fazer as operações de suid/sgid no diretório onde o repositório se encontra.


17.2.5.2 Servidor pserver usando autenticação do sistema

Para usar o banco de dados de autenticação do sistema (/etc/passwd) para autenticar os usuários remotos, primeiro tenha certeza que o servidor pserver está ativado (como descrito em Ativando o servidor pserver, Seção 17.2.5.1. Repetindo o exemplo anterior, a usuária Michelle deverá ter uma conta em /etc/passwd para fazer acesso ao cvs:

     export CVSROOT=:pserver:[email protected]:/var/lib/cvs
     cvs login

Será pedido a senha da usuária michelle. Entrando com a senha correta, o sistema retornará para o aviso de comando. Uma mensagem será mostrada caso a senha entrada seja incorreta. Daqui em diante, o resto da seção CVS é normal e você terá as permissões de acesso ao repositório de acordo com as suas permissões de acesso naquele diretório.

OBS1: A senha poderá ser passada junto com o login da mesma forma como o ftp. Veja a observação em Configurando o método ext, Seção 17.2.3.1.

OBS2: A desvantagem do método pserver padrão é que a seção é feita em texto plano, desta forma, alguns cuidados podem ser tomados para tornar o sistema um pouco mais seguro. Um deles é dar /bin/false como shell de usuário (para desativar o login no sistema) ou usar o método de acesso descrito em Servidor pserver usando autenticação do sistema, Seção 17.2.5.2 em combinação com este. Tenha conciencia das influências disso se a máquina for usada para outras tarefas, como um servidor "pop3" por exemplo.


17.2.5.3 Servidor pserver com autenticação própria

Esta forma de acesso armazena os usuários em um banco de dados próprio, não requerendo a criação de contas locais no arquivo /etc/passwd. Para criar um servidor deste tipo siga os seguintes procedimentos:

  • Exporte a variável CVSROOT apontando para o repositório que deseja configurar o acesso. Como isto é uma configuração administrativa, assumo o método de acesso local sendo usada pelo usuário administrador do servidor: export CVSROOT=/var/lib/cvs.

  • Crie um diretório para trabalhar nos arquivos administrativos do repositório: mkdir /tmp/repos

  • Entre no diretório criado acima e execute o comando: cvs checkout .

  • Quando terminar de baixar os arquivos, entre no subdiretório CVSROOT, os arquivos de configuração do repositório se encontram lá (para detalhes sobre cada um destes arquivos, veja Arquivos administrativos em CVSROOT, Seção 17.4.

  • Edite o arquivo config e mude a variável SystemAuth para no. Isto diz ao servidor pserver não usar os arquivos de autenticação do sistema, mas a invés disso usar seu banco de dados próprio.

    Em algumas instalações, caso exista o arquivo passwd no repositório, o pserver automaticamente o utiliza ao invés do /etc/passwd.

  • Crie um arquivo passwd no diretório CVSROOT o formato deste arquivo é:

         usuario:senha:usuario_local
    

    Onde:

    usuario

    Nome da conta de usuário que fará acesso ao CVS.

    senha

    Senha que será usada pelo usuário. Ela deverá ser criptografada usando o algoritmo crypt. O comando mkpasswd senha pode ser usado para gerar a senha criptografada. Caso este campo seja deixado em branco, nenhuma senha de usuário será utilizada. O utilitário mkpasswd está presente no pacote whois na Debian.

    usuario_local

    Usuário local que terá suas permissões mapeadas ao usuário do CVS. Como a conta de usuário do cvs não existe no sistema, é necessário que o sistema tenha uma maneira de saber que nível de acesso este usuário terá. Caso não crie este usuário ou ele seja inválido, você terá erros do tipo ": no such user" no momento que fizer o "cvs login".

    Uma forma segura de se fazer isto, é criar uma conta de usuário *somente* com acesso aos arquivos do CVS, sem shell e senha. Isto permitirá mapear a UID/GID do usuário criado com o acesso do CVS sem comprometer a segurança do sistema de arquivos. Isto pode ser feito através do seguinte comando:

         adduser --disabled-password --disabled-login usuario
    

    É necessário especificar um diretório home do usuário, pois o servidor cvs precisa ter acesso ao arquivo /home/do/cvs/.cvsignore.

    OBS1: Mais uma vez: Leve sempre em conta a forma que os outros serviços em sua máquina estão configurados (como eles fazem acesso, permissões de acesso, diretórios onde gravam arquivos, são algumas delas) antes de escolher como um serviço novo na máquina funcionará. Isto poderá modificar ou deixar vulnerável a segurança de sua instalação.

    OBS2: Permita que os usuários somente tenham acesso a máquina via CVS.

    OBS3: Certifique-se sempre que o dono/grupo do repositório seja root.src (ou outro grupo que tenha criado) adicione somente usuários de confiança no grupo src para criar novos projetos.

    Exemplos:

         gleydsonm:K32dk1234k:cvsuser
         anonymous::pooruser
    

    O usuário cvs gleydsonm quando logar no cvs, terá as permissões de acesso do usuário cvsuser do sistema.

    OBS1: Certifique-se que o usuário local possui permissões de gravação no diretório do CVS, caso contrário ele não poderá fazer commits. Lembre-se que as permissões de leitura/gravação do usuário serão controladas através de arquivos do próprio pserver, mas também é necessária a permissão de gravação do usuário no repositório. Isto poderá ser feito através de grupos de sistema e garante uma dupla camada de segurança.

    OBS2: Caso tenha preferido usar o pserver sob um usuário diferente de root e esteja obtendo a mensagem setgid failed: Operation not permitted, significa que o servidor CVS não consegue mudar para o grupo referente ao usado no diretório do repositório. Verifique se as permissões estão adequadas e se o grupo do usuário CVS no /etc/passwd é o mesmo que especificou para acesso ao repositório.

  • Para dar direito de leitura ao repositório, crie um arquivo chamado readers e adicione os nomes de usuários que terão acesso ao repositório (um por linha). O nome que deverá ser usado é o nome do usuário de CVS e não do sistema (usuário gleydsonm, segundo o exemplo).

    Exemplo:

         gleydsonm
         anonymous
    
  • Para dar direito de gravação ao repositório, crie um arquivo chamado writers. Seu formato é idêntico ao arquivo readers.

    Exemplo:

         gleydsonm
         macan
         otavio
         hmh
         kov
    
  • Pronto, o acesso a CVS usando um banco de dados próprio está pronto! basta dar o commit nos arquivos, adicionar os arquivos readers, writers e passwd no repositório (veja Adicionando um arquivo ao módulo CVS do servidor, Seção 17.3.9) para o servidor de CVS para te-lo funcionando. Note que em versões mais novas do CVS, não é possível transferir o arquivo passwd via rede, então será necessário cria-lo manualmente dentro do repositório do servidor.

    OBS: O arquivo passwd não é transferido pelo commit por motivos de segurança, pois ele contém senhas que podem ser capturadas e usada por pessoas maliciosas. Será necessário transferi-lo manualmente para o repositório do servidor remoto (você terá que ser o usuário root ou ter permissões adequadas). O recomendável é utilizar o scp (scp, Seção 15.2.2) para realizar transferências seguras. .

  • O método de acesso do CVS aos arquivos readers e writers é restritiva, portanto se um nome de usuário existir no arquivo readers e writers o que valerá será o menor nível de acesso. Vendo os exemplos acima, os usuários gleydsonm e anonymous terão somente acesso a leitura do repositório e macan, otavio, hmh, kov acesso de leitura e gravação.


    17.2.6 gssapi

    Quando o CVS é compilado com o suporte a Kerberos 5, ele tenta estabelecer automaticamente uma conexão segura usando este método. Este método funciona somente se o CVS estiver compilado com o suporte a Kerberos (opção --with-gssapi).


    17.3 Criando projetos para serem usados no CVS

    Esta seção descreve todos os passos necessários para colocação de um projeto para ser desenvolvido através do CVS, os comandos do cvs, considerações a respeito dos comandos e sua utilização através de exemplos didáticos.


    17.3.1 Repositório

    Um repositório CVS é o local que armazena módulos e também os arquivos administrativos (que contém permissões, etc) são armazenados em um subdiretório chamado CVSROOT.

    O acesso a um repositório é feito através de parâmetros especificados na variável CVSROOT ou pela opção -d repositório do cvs. Veja Servidor de CVS - configurando métodos de acesso ao repositório, Seção 17.2 para ver exemplos de métodos de acesso.

    O Repositório pode conter um ou mais módulos, cada módulo representa um projeto no servidor, criado após o uso do comando import. Segue um exemplo da estrutura de um repositório CVS:

         var/lib
              |
              +- cvs
                  |- CVSROOT
                  |- projeto1
                  +- projeto2
    

    O subdiretório cvs é o repositório (veja o subdiretório CVSROOT dentro dele) e os diretórios dentro dele projeto1 e projeto2 são os módulos criados através do comando cvs import ...(veja Adicionando um novo projeto, Seção 17.3.6).

    Para acessar o projeto do CVS, então é definido o repositório que tem permissões de acesso na variável CVSROOT e então é executado um comando (checkout, update, commit, etc) no módulo que desejamos utilizar:

         export CVSROOT=:ext:[email protected]:/var/lib/cvs (<- Repositório "cvs")
         cvs checkout projeto1 (<- módulo que desejamos pegar do servidor)
    

    Nas seções seguintes serão explicados cada um dos comandos usados para trabalhar com um projeto no cvs.


    17.3.2 Criando um repositório

    Para adicionar um novo repositório no sistema, edite o arquivo /etc/cvs-pserver.conf e defina o nome de cada repositório na variável CVS_PSERV_REPOS separados por ":" (exemplo: CVS_PSERV_REPOS="/var/lib/cvs:/var/lib/cvs2").

    Feito isso execute o comando cvs-makerepos para que os diretórios especificados no arquivo /etc/cvs-pserver.conf sejam criados com as devidas permissões.

    Para adicionar manualmente um repositório (/var/lib/cvs), execute os seguintes passos:

  • Execute o comando cvs -d /var/lib/cvs init (para criar o repositório e os arquivos administrativos que ficam armazenados dentro de CVSROOT.

  • Mude as permissões do diretório para sgid com: chmod 2775 /var/lib/cvs.

  • Mude o dono/grupo com o comando: chown root.src /var/lib/cvs

  • Opcional: caso utilize o método de acesso pserver será necessário adicionar a opção --allow-root=/var/lib/cvs na linha que inicia o servidor pserver. Este parâmetro deve ser usada para cada repositório adicionado no servidor.

  • A partir de agora, seu repositório já está pronto para ser utilizado.


    17.3.3 Logando no servidor de CVS via pserver

    Quando é usado o método de acesso pserver (pserver (password server), Seção 17.2.4), é necessário fazer para ter acesso ao repositório. Por exemplo, para acessar o repositório /var/lib/cvs no servidor servidor.org.br:

         export CVSROOT=:pserver:[email protected]:/var/lib/cvs
         cvs login
         
         ou 
         
         cvs -d :pserver:[email protected]:/var/lib/cvs login
    

    Então será solicitada a senha para ter acesso ao sistema. Note que toda a seção de cvs ocorre por comandos interativos que logo após concluídos retornam para o interpretador de comandos. O restante desta seção descreverá estes comandos e como utiliza-los de maneira eficiente.

    OBS: O uso da variável CVSROOT torna a utilização bastante prática, assim não precisamos especificar o repositório, método de acesso, etc. toda vez que usar um comando do cvs.


    17.3.4 Encerrando uma seção de CVS

    Embora que não seja necessário, após o uso do cvs é recomendável executar o logout do servidor para encerrar sua conexão com a máquina remota.

         # (assumindo que a variável CVSROOT está definida)
         cvs logout
         
         ou 
         
         cvs -d :pserver:[email protected]:/var/lib/cvs logout
    

    OBS: Para os paranóicos é importante encerrar uma seção de CVS, pois ele possui alguns bugs e um spoofing pode tornar possível o uso de uma seção deixada aberta.


    17.3.5 Baixando arquivos

    O comando checkout (ou "co") é usado para fazer isto. Para utilizá-lo seguindo os exemplos anteriores:

         mkdir /tmp/cvs
         cd /tmp/cvs
         cvs checkout modulo
         cvs -d :pserver:[email protected]:/var/lib/cvs
    

    Será criado um subdiretório chamado modulo que contém todos os arquivos do servidor de CVS remoto. É necessário apenas que tenha acesso de leitura ao servidor de CVS para executar este comando. Você pode usar a opção -z [num] para ativar a compactação na transferência dos arquivos, isso acelera bastante a transferência em conexões lentas: cvs -z 3 checkout modulo.

    Também é possível especificar apenas subdiretórios de um módulo para baixa-lo via CVS e a estrutura de diretórios criada localmente será idêntica ao do servidor remoto.


    17.3.6 Adicionando um novo projeto

    Use o comando cvs import para adicionar um novo projeto ao CVS. As entradas nos arquivos administrativos serão criadas e o projeto estará disponível para utilização dos usuários. A sintaxe básica do comando import é a seguinte:

    cvs import [opções] [dir_modulo] [tag] start

    Para adicionar o projeto focalinux que reside em /usr/src/focalinux ao cvs:

         # Primeiro exportamos o CVSROOT para dizer onde e qual repositório acessar
         export CVSROOT=:ext:[email protected]:2401/var/lib/cvs
         
         cd /usr/src/focalinux
         cvs import documentos/focalinux tag_modulo start
    

    Por padrão o import sempre utiliza a máscara * para fazer a importação dos arquivos do diretório atual. O projeto focalinux será acessado através de $CVSROOT/documentos/focalinux (cvs checkout documentos/focalinux), ou seja, /var/lib/cvs/documentos/focalinux no servidor CVS terá a cópia do focalinux. tag_modulo define o nome que será usado como identificador nas operações com os arquivos do CVS (pode ser usado "focalinux" em nosso exemplo). O parâmetro "start" diz para criar o módulo.

    OBS: Por segurança, o diretório que contém os arquivos deverá ser sempre um caminho relativo na estrutura de diretórios, ou seja, você precisará entrar no diretório pai (como /usr/src/projeto) para executar o cvs import. Não é permitido usar / ou .., isto proíbe a descida em diretórios de nível mais altos e sérios incidentes de segurança em servidores CVS mal configurados pelo Administrador.


    17.3.7 Sincronizando a cópia remota com a cópia local

    Este comando sincroniza a cópia remota do CVS (ou arquivo) com a cópia local que está trabalhando em sua máquina. Quando se trabalha nativamente no CVS em equipe é recomendado a utilização deste comando pois alguém pode ter modificado o arquivo antes de você, então uma incompatibilidade entre sua versão e a nova poderia causar problemas.

    Supondo que tenha acabado de modificar o arquivo main.c do módulo cvsproj, então antes de fazer o commit (Enviando as mudanças para o servidor remoto, Seção 17.3.8) use o update:

         cvs update main.c
         
         ou 
         
         cvs -d :ext:[email protected]:2401/var/lib/cvs update main.c
    

    Após alguns segundos, sua cópia local ficará sincronizada com a cópia remota. Caso ele mostre alguma mensagem de saída, verifique o arquivo para solucionar qualquer conflito e então envie o arquivo para o servidor remoto (Enviando as mudanças para o servidor remoto, Seção 17.3.8).

    Você pode fazer o update de mais arquivos usando referências globais (*, ? ou []).


    17.3.8 Enviando as mudanças para o servidor remoto

    O comando "commit" (ou "ci"), envia as mudanças feitas nos arquivos locais para o servidor remoto. Um exemplo de commit no arquivo main.c:

         cvs commit main.c
         
         cvs commit main.?
         
         cvs commit *
    

    O editor padrão do sistema será aberto e pedirá uma descrição das modificações para o commit. Esta descrição será usada como referência sobre as atualizações feitas em cada etapa do desenvolvimento. A mensagem também pode ser especificada usando a opção "-m mensagem", principalmente quando o texto explicando as alterações é pequeno.

    Para mudar o editor de texto padrão que será usado pelo cvs, altere a variável de ambiente EDITOR ou especifique o editor que deseja usar na linha de comando com a opção "-e editor":

         cvs commit -e vi main.c
    

    17.3.9 Adicionando um arquivo ao módulo CVS do servidor

    Após criar/copiar o arquivo para seu diretório de trabalho, use o comando add para fazer isto. O arquivo será enviado ao servidor, bastando apenas executa o commit para salvar o arquivo:

         cvs add main.h
         cvs commit main.h
    

    17.3.10 Adicionando um diretório ao módulo CVS do servidor

    O método para adicionar um diretório com arquivos é semelhante ao de adicionar apenas arquivos ao cvs. O único ponto que deve se seguido é que primeiro deve ser adicionado o diretório (com o "cvs add") salvar no servidor remoto ("cvs commit") e depois adicionar os arquivos existentes dentro dele (assim como descrito em Adicionando um arquivo ao módulo CVS do servidor, Seção 17.3.9). Para adicionar o diretório teste e seus arquivos no servidor cvs remoto:

         cvs add teste
         cvs commit -m "Adicionado" teste
         cvs add teste/*
         cd teste
         cvs commit -m "Adicionados" .
    

    Os dois primeiros comandos agendam o diretório teste e fazem o commit no diretório remoto. Os dois últimos, enviam os arquivos existentes dentro deste diretório para o servidor remoto.


    17.3.11 Removendo um arquivo do módulo CVS remoto

    O comando para fazer isto é o "remove". Primeiro use o rm para remover o arquivo/diretório de sua cópia local, depois execute o remove seguido de commit para confirmar a remoção do arquivo:

         cvs remove main.h
         cvs commit main.h
    

    17.3.12 Removendo um diretório do módulo CVS remoto

    Para remover um diretório, primeiro remova todos os arquivos existentes dentro dele com o comando rm e salve para o servidor (seguindo os métodos descritos em Removendo um arquivo do módulo CVS remoto, Seção 17.3.11). O CVS não remove diretamente diretórios vazios, uma maneira de contornar isto é usar o update ou commit seguido da opção -P para ignorar diretórios vazios. Então a cópia remota do diretório será removida do servidor:

         rm -f teste/*
         cvs remove teste/.
         cvs commit teste/.
         cd ..
         cvs checkout modulo
    

    Depois do checkout, o subdiretório teste terá sido removido.


    17.3.13 Dizendo que o módulo atual não está mais em uso

    O comando "release" faz esta função. Ele não é requerido, mas caso você tenha feito modificações que ainda não foram salvas no servidor de cvs (commit), ele alertará de arquivos modificados e perguntará se deseja continuar. Registrando também o abandono das modificações no histórico do cvs. O comando pode ser acompanhado de "-d" para remover o módulo anteriormente baixado com o "commit":

         cvs release modulo
         
         cvs release -d modulo
    

    O release retorna os seguintes códigos quando verifica que as duas cópias (local e remota) não estão sincronizadas:

    U ou P

    Existe uma versão nova do arquivo no repositório. Para corrigir isso, execute o comando "update".

    A

    O arquivo não foi adicionado ainda ao repositório remoto. Se apagar o repositório local, este arquivo não será adicionado. Para corrigir isto, executa o comando "add" do cvs.

    R

    O arquivo foi removido localmente, mas não foi removido do servidor remoto. Use os procedimentos em Removendo um arquivo do módulo CVS remoto, Seção 17.3.11 para corrigir a situação.

    M

    O arquivo está modificado localmente e não foi salvo ainda no servidor. Use os procedimentos em Sincronizando a cópia remota com a cópia local, Seção 17.3.7 e Enviando as mudanças para o servidor remoto, Seção 17.3.8 para salvar o arquivo.

    ?

    O arquivo está em seu diretório de trabalho mas não tem referências no repositório remoto e também não está na lista de arquivos ignorados do CVS.


    17.3.14 Visualizando diferenças entre versões de um arquivo

    Com o comando "diff" é possível visualizar que diferenças o arquivo que está sendo editado possui em relação ao arquivo do repositório remoto. Outra funcionalidade útil do "diff" é comparar 2 versões de arquivos do mesmo repositório CVS. Exemplos:

    cvs diff main.c

    Verifica as diferenças entre o arquivo main.c local e remoto.

    cvs diff -u -r 1.1 -r 1.2 main.c

    Mostra as diferenças em formato unificado para mostrar as diferenças entre as versões 1.1 e 1.2 do arquivo main.c.


    17.3.15 Visualizando o status de versão de arquivos

    O comando "status" permite verificar que versões do arquivo especificado está disponível localmente, remotamente, qual a versão inicial do arquivo no repositório, sticky tag. Exemplos:

    cvs status main.c

    Verifica o status do arquivo main.c.

    cvs status -v main.c

    Mostra o status do arquivo main.c, adicionalmente mostra também as tags existentes no arquivo (versão inicial, versão do repositório).


    17.3.16 Outros utilitários para trabalho no repositório

    Além dos comandos do cvs descritos aqui, existem comandos no pacote cvsutils que auxiliam desde quem está aprendendo a utilizar o CVS (com o comando cvsdo para simular algumas operações de adição/remoção de arquivos) até profissionais que usam o programa no dia a dia (cvsu, cvsco, cvschroot).


    17.4 Arquivos administrativos em CVSROOT

    Esta seção descreve a função de cada um dos arquivos administrativos, isto pode ser útil na configuração e personalização do CVS e de seu repositório.

    Para não alongar muito o capítulo, procurei colocar uma breve descrição da função de cada um deles, o comentários e exemplos existentes nos arquivos oferecem uma boa compreensão do seu conteúdo.


    17.4.1 config

    Este arquivo é segue os padrões do arquivos de configuração e possui alguns parâmetros que controlam o comportamento do CVS. Segue uma lista deles:

    SystemAuth

    Define se será utilizado a autenticação via /etc/passwd quando o método pserver for utilizado. Note que se o arquivo passwd for criado no CVSROOT, o SystemAuth será definido automaticamente para no.

    Exemplo: SystemAuth=yes.

    LockDir

    Especifica o diretório onde serão gravados os arquivos de lock. Caso não seja especificado, será usado o diretório do CVS.

    Exemplo: LockDir=/var/lock/cvs

    TopLevelAdmin

    Permite criar ou não um diretório chamado CVS no root do diretório de trabalho durante o cvs checkout.

    LogHistory

    Utiliza opções para especificar o que será registrado nos arquivos de log do CVS.


    17.4.2 modules

    Especifica opções e programas externos que serão usados durante a execução de comandos no repositório CVS.


    17.4.3 cvswrappers

    Este arquivo define ações de controle de características de arquivos, de acordo com seu nome.

    Pode ser também definidas ações através de arquivos .cvswrappers.


    17.4.4 commitinfo

    Define programas para fazer uma checagem baseada no diretório e dizer se o commit é permitido.


    17.4.5 verifymsg

    Especifica o programa usado para verificar as mensagens de log.


    17.4.6 loginfo

    Programa que é executado após o commit. Ele pode ser usado para tratar a mensagem de log e definir onde ela será gravada/enviada, etc.


    17.4.7 cvsignore

    Tudo que constar neste arquivo não será gravado (commit) no cvs. Referências globais podem ser usadas para especificar estes arquivos. Veja a info page do cvs para detalhes sober seu formato.

    Pode também ser especificado através de arquivos .cvsignore.


    17.4.8 checkoutlist

    Especifica os arquivos que deseja manter sobre o controle do CVS que se encontram em CVSROOT. Se adicionar um script adicional, ou qualquer outro arquivo no diretório CVSROOT ele deverá constar neste arquivo.


    17.4.9 history

    É usado para registrar detalhes do comando history do CVS.


    17.5 Clientes de CVS

    Esta seção traz alguns programas cliente em modo texto/gráfico e visualizadores de repositórios via web. Eles facilitam o trabalho de controle de revisão por parte de iniciantes e flexibilidade para pessoas mais experientes, além de ter uma interface de navegação disponível para todos os interessados em fazer pesquisas no repositório.


    17.5.1 cvs

    Este é o cliente Unix padrão, bastante poderoso e que opera em modo texto. As explicações neste capítulo do guia assumem este cliente de cvs, então as explicações sobre sua utilização se encontra em Criando projetos para serem usados no CVS, Seção 17.3 e os parâmetros de linha de comando em Opções de linha de comando, Seção 17.1.10

    É altamente recomendável a leitura caso deseje utilizar um cliente de cvs gráfico, pois os conceitos são os mesmos.


    17.5.2 gcvs - Linux

    Este é um cliente CVS em GTK+Python para Linux que interage externamente com o cliente cvs externo, todas as opções do cvs estão disponíveis através de checkboxes nas telas de comando, incluindo suporte a compactação, visualizador gráfico da árvore de releases, histórico, diffs, etc.

    Sua instalação é bastante fácil, instale o programa com apt-get install gcvs e execute o programa através do menu do sistema ou do terminal. Utilize os seguintes procedimentos para configurar e utilizar o programa:

  • Defina o repositório CVSROOT através do menu Admin/Preferences. Selecione o método de acesso, entre com o login, servidor e repositório.

         Exemplo: :pserver:anonymous@servidor:/var/lib/cvs
    

    O formato deve ser EXATAMENTE como o usado na variável CVSROOT no shell, incluindo os ":". Caso tenha erros de login, verifique o valor de CVSROOT cuidadosamente antes de contactar o administrador de sistemas!

  • Agora faça o login no sistema em: Admin, Login. Note que o status de todas as operações do cvs são mostradas na janela de status que fica na parte inferior da tela.

  • Crie um diretório que será usado para armazenar os fontes baixados do CVS, por exemplo: mkdir ~/projetos

  • Acesse o menu Create, Checkout Module para baixar o projeto do CVS para sua máquina local. Ele irá te pedir o nome de diretório para onde o código fonte do servidor CVS será baixado. Digite ~/projetos ou outro diretório que foi criado no passo anterior.

    OBS: Não utilize o nome "cvs" para o diretório local, pois o gcvs oculta automaticamente pois os arquivos administrativos de controle ficam neste local.

  • Altere o diretório padrão do gcvs para o diretório onde baixou o projeto (~/projetos)clicando no botão "set" no topo da coluna esquerda do gcvs.

  • Para enviar um arquivo modificado de volta ao servidor, selecione os arquivos, clique em Modify, Commit Selection, entre com a mensagem descrevendo as alterações e clique em "OK".

    Note que os arquivos modificados serão identificados por um ícone vermelho e seu status será "Mod. File" (arquivo modificado).

  • Se desejar adicionar um novo projeto no CVS, entre em Create, Import Module, entre no diretório que deseja adicionar como um projeto no servidor de CVS. Após isto será feita uma checagem e mostrada uma tela de possíveis problemas que podem ocorrer durante a importação do novo projeto.

    Na próxima tela, digite o nome do módulo e caminho no servidor remoto no primeiro campo, no segundo campo a mensagem de log para adicionar o projeto ao servidor. Em "Vendor tag" especifique o nome do projeto e sua versão logo abaixo. Clique em "OK" e aguarde a transferência dos arquivos para o servidor.

    Para maiores detalhes sobre a criação de novos projetos no servidor de CVS, veja Adicionando um novo projeto, Seção 17.3.6.

    OBS: Você deverá ter permissão de gravação para criar um novo projeto no servidor CVS.

  • A partir de agora você poderá explorar as funções do programa e fazer uso das funções habituais do CVS. Todas as funções de operação e opções extras do CVS estão disponíveis na interface gráfica, basta se acostumar com sua utilização.

  • Após isto, explore bastante as opções do programa. Todas as funcionalidades do CVS estão organizadas entre os menus do programa. Caso não entenda bem as funções do programa, leia atentamente Criando projetos para serem usados no CVS, Seção 17.3 e também não deixe de consultar detalhes na info page do cvs.


    17.5.3 WinCVS - Windows

    Este é um cliente CVS em Python para Windows equivalente ao gcvs para Linux. Suas funcionalidades e recomendações são idênticas aos do gcvs. Este cliente pode ser baixado de: http://telia.dl.sourceforge.net/sourceforge/cvsgui/WinCvs13b13.zip e o Python para Windows de http://starship.python.net/crew/mhammond/downloads/win32all-153.exe.

    Para sua utilização, as explicações em gcvs - Linux, Seção 17.5.2 são totalmente válidas.


    17.5.4 MacCVS - Macintosh (PPC)

    Idêntico ao gcvs, pode ser baixado de http://telia.dl.sourceforge.net/sourceforge/cvsgui/MacCvsX-3.3a1-1.dmg.


    17.5.5 viewcvs

    Este é um visualizador de repositórios CVS via web, ele precisa apenas de um servidor web instalado com suporte a CGI. Para instalar, execute o comando apt-get install viewcvs e siga os passos para configurar programa. Para adequar melhor o viewcvs ao seu sistema, edite o arquivo /etc/viewcvs/viewcvs.conf.

    O viewcvs possui uma interface que se parece com a navegação de um diretório de ftp, recursos como a extração de diffs coloridos entre versões de um arquivo selecionado, visualização de commits (com data, log do commit, usuário, etc.), classificação da listagem exibida.

    OBS:Leve em consideração as implicações de segurança impostas por aplicativos cgi sendo executados em seu sistema. Veja Apache, Capítulo 12 para entender melhor o assunto.


    17.6 Exemplo de uma seção CVS

    Nota: este exemplo é apenas didático, não foi feita nenhuma modificação real no conteúdo do repositório do dillo :-)

         # Definir o CVSROOT
         export CVSROOT=:pserver:[email protected]:/var/lib/cvs
         
         # entrar no servidor
         gleydson@host:/tmp/teste$ cvs login
         Logging in to :pserver:[email protected]:2401/var/lib/cvs
         CVS password: <password>
         
         gleydson@oberon:/tmp/teste$ 
         
         # Pegar o módulo "dillo do cvs"
         cvs -z 3 co dillo
         
         cvs server: Updating dillo
         cvs server: Updating dillo/CVSROOT
         U dillo/CVSROOT/checkoutlist
         U dillo/CVSROOT/commitinfo
         U dillo/CVSROOT/config
         U dillo/CVSROOT/cvswrappers
         U dillo/CVSROOT/editinfo
         U dillo/CVSROOT/loginfo
         U dillo/CVSROOT/modules
         U dillo/CVSROOT/notify
         U dillo/CVSROOT/rcsinfo
         U dillo/CVSROOT/taginfo
         U dillo/CVSROOT/verifymsg
         cvs server: Updating dillo/CVSROOT/Emptydir
         cvs server: Updating dillo/dillo
         U dillo/dillo/AUTHORS
         U dillo/dillo/COPYING
         U dillo/dillo/ChangeLog
         U dillo/dillo/ChangeLog.old
         U dillo/dillo/INSTALL
         U dillo/dillo/Makefile.am
         U dillo/dillo/Makefile.in
         U dillo/dillo/NEWS
         U dillo/dillo/README
         U dillo/dillo/aclocal.m4
         U dillo/dillo/config.h.in
         U dillo/dillo/configure
         U dillo/dillo/configure.in
         U dillo/dillo/depcomp
         U dillo/dillo/dillorc
         U dillo/dillo/install-sh
         U dillo/dillo/missing
         U dillo/dillo/mkinstalldirs
         U dillo/dillo/stamp-h.in
         cvs server: Updating dillo/dillo/doc
         U dillo/dillo/doc/Cache.txt
         U dillo/dillo/doc/Cookies.txt
         U dillo/dillo/doc/Dillo.txt
         U dillo/dillo/doc/Dw.txt
         U dillo/dillo/doc/DwImage.txt
         U dillo/dillo/doc/DwPage.txt
         ...
         
         # Modifica o arquivo do projeto
         cd /dillo/dillo/doc
         vi Cache.txt
         
         
         # Update no arquivo para atualizar a cópia local com a remota
         cvs update Cache.txt
         M Cache.txt
         
         gleydson@host:/tmp/teste
         
         # Damos o commit no arquivo
         cvs commit Cache.txt
         
         
         # Saimos do sistema
         cvs logout
    

    [ anterior ] [ Conteúdo ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ 16 ] [ 17 ] [ 18 ] [ 19 ] [ 20 ] [ 21 ] [ próximo ]


    Guia Foca GNU/Linux

    Versão 6.43 - domingo, 05 de setembro de 2010

    Gleydson Mazioli da Silva [email protected]