{"id":310,"date":"2012-08-09T13:38:58","date_gmt":"2012-08-09T16:38:58","guid":{"rendered":"http:\/\/linuxrs.com.br\/?p=310"},"modified":"2012-08-09T13:38:58","modified_gmt":"2012-08-09T16:38:58","slug":"servidor-cvs","status":"publish","type":"post","link":"https:\/\/blog.clusterweb.com.br\/?p=310","title":{"rendered":"Servidor CVS."},"content":{"rendered":"<p>Introdu\u00e7\u00e3o ao CVS<br \/>\nO CVS (Concurrent Version Software) permite que se organizem grupos de trabalho para<br \/>\ndesenvolvimento de projetos colaborativos. Um projeto pode ser desde um programa em C,<br \/>\ndocumenta\u00e7\u00e3o em equipe, etc. O uso do CVS \u00e9 recomendado para qualquer desenvolvimento de<br \/>\nprojeto que tenha v\u00e1rios envolvidos trabalhando ao mesmo tempo.<br \/>\nPara cada mudan\u00e7a feita no programa, \u00e9 pedido uma descri\u00e7\u00e3o dos trabalhos realizados e o sistema<br \/>\nregistra todas as modifica\u00e7\u00f5es realizadas ao longo do desenvolvimento, permitindo voltar a uma<br \/>\nvers\u00e3o anterior ou ver as mudan\u00e7as entre elas facilmente.<br \/>\nImagine uma situa\u00e7\u00e3o onde voc\u00ea est\u00e1 desenvolvendo um programa de computador e ap\u00f3s a \u00faltima<br \/>\nmodifica\u00e7\u00e3o ele para de funcionar. Com o CVS \u00e9 poss\u00edvel ver o que foi modificado e voltar at\u00e9 a<br \/>\nvers\u00e3o que estava funcionando para consertar o problema. No desenvolvimento de documenta\u00e7\u00e3o e<br \/>\ntradu\u00e7\u00e3o o CVS tamb\u00e9m desempenha um papel importante, pois com ele o tradutor pode ver o que<br \/>\nfoi modificado entre a vers\u00e3o do documento original que ele usou para tradu\u00e7\u00e3o e uma vers\u00e3o<br \/>\nrecente, traduzindo apenas as diferen\u00e7as.<br \/>\nUma se\u00e7\u00e3o de cvs \u00e9 feita de modo interativo atrav\u00e9s do comando cvs. Por exemplo:<br \/>\n\u2022 logar no sistema &#8211; cvs login<br \/>\n\u2022 baixar um projeto &#8211; cvs checkout projeto<br \/>\nCada comando do cvs ser\u00e1 explicado em detalhes no decorrer deste cap\u00edtulo.<br \/>\n17.1.1 Vers\u00e3o<br \/>\nA vers\u00e3o do CVS documentada no guia \u00e9 a 1.11.1. As explica\u00e7\u00f5es aqui certamente ser\u00e3o<br \/>\ncompat\u00edveis com vers\u00f5es posteriores deste programa.<br \/>\n17.1.2 Hist\u00f3ria<br \/>\nO CVS \u00e9 uma substitui\u00e7\u00e3o do sistema RCS (Revision Control System) ele possui mais recursos e foi<br \/>\ncriado sendo compat\u00edvel com o RCS.<br \/>\nA hist\u00f3ria do CVS (extra\u00edda de sua info page) \u00e9 que ele foi iniciado a partir de um conjunto de<br \/>\nscripts shell escritos por Dick Grune que foram postados ao grupo de not\u00edcias<br \/>\ncomp.sources.unix no volume 6 de Dezembro de 1986. Na vers\u00e3o atual n\u00e3o est\u00e3o mais<br \/>\npresentes shell scripts porque muitos dos conflitos de resolu\u00e7\u00e3o de algor\u00edtmos vem deles.<br \/>\nEm Abril de 1989, Brian Berliner fez o design e programou o CVS. Mais tarde, Jeff Polk ajudou<br \/>\nBrian com o design do m\u00f3dulo CVS.<br \/>\n17.1.3 Contribuindo com o CVS<br \/>\nAtrav\u00e9s da lista de discuss\u00e3o info-cvs. Para se inscrever envie uma mensagem com o subject<br \/>\n&#8220;subscribe&#8221; para info-cvs-request@gnu.org. Outra alternativa \u00e9 atrav\u00e9s do grupo de<br \/>\nnoticias (newsgroup) da Usenet comp.software.config-mgm.<br \/>\n17.1.4 Caracter\u00edsticas<br \/>\nAbaixo uma lista de caracter\u00edsticas que tornam o CVS \u00fatil no gerenciamento de trabalhos em grupo:<br \/>\n\u2022 Gerenciamento de projeto em equipe<br \/>\n\u2022 Log de todas as altera\u00e7\u00f5es realizadas<br \/>\n\u2022 Lock de arquivos, permitindo que somente uma determinada pessoa modifique o arquivo<br \/>\ndurante o desenvolvimento do projeto.<br \/>\n\u2022 Hist\u00f3rico de todas as mudan\u00e7as feitas, isto permite voltar a uma vers\u00e3o anterior em caso de<br \/>\nproblemas, e ver o que houve de errado com o c\u00f3digo.<br \/>\n\u2022 Os projetos podem ser hospedados em reposit\u00f3rios.<br \/>\n\u2022 Podem ser criados diversas equipes de trabalho para cada reposit\u00f3rios, e definidos quem ter\u00e1<br \/>\nou n\u00e3o acesso ao reposit\u00f3rio individualmente. O desenvolvedor gleydson, por exemplo,<br \/>\npodem ter acesso ao projeto x_beta e n\u00e3o ter acesso a projeto secret_y.<br \/>\n\u2022 Permiss\u00f5es de acesso individuais de leitura\/grava\u00e7\u00e3o.<br \/>\n\u2022 \u00c9 poss\u00edvel criar um usu\u00e1rio com acesso an\u00f4nimo sem dar uma conta no sistema.<br \/>\n\u2022 Pode tanto utilizar o banco de dados de contas\/senhas do sistema como um banco de dados<br \/>\nde autentica\u00e7\u00e3o do pr\u00f3prio CVS.<br \/>\n\u2022 Permite utilizar diversos &#8220;m\u00e9todos&#8221; de acesso ao servidor: local, pserver, ext, etc. Cada um<br \/>\ndestes m\u00e9todos ser\u00e1 descrito a seguir.<br \/>\n\u2022 Permite o acesso via ssh para usu\u00e1rios que j\u00e1 possuam conta na m\u00e1quina servidora. Este<br \/>\nm\u00e9todo garante seguran\u00e7a no envio da senha criptografada (veja Sniffer, Se\u00e7\u00e3o 20.2 para<br \/>\ndetalhes).<br \/>\n\u2022 Permite visualizar facilmente o que foi modificado entre duas vers\u00f5es de um arquivo.<br \/>\nOBS: O CVS possui algumas limita\u00e7\u00f5es e falhas, uma delas que mais me faz falta \u00e9 um suporte a<br \/>\nprotocolo pserver via ssh que resolveria o problema de tr\u00e1fego em texto plano e gerenciamento de<br \/>\ngrupos com permiss\u00f5es diferenciadas.<br \/>\n17.1.5 Ficha t\u00e9cnica<br \/>\nPacote: cvs<br \/>\nUtilit\u00e1rios:<br \/>\n\u2022 cvs &#8211; Servidor\/ferramenta cliente.<br \/>\n\u2022 cvsbug &#8211; Envia um bug sobre o CVS para a equipe de suporte.<br \/>\n\u2022 rcs2log &#8211; Converte arquivos de log do formato usado pelo RCS para o CVS. Utilizado na<br \/>\nmigra\u00e7\u00e3o desta ferramenta para o CVS.<br \/>\n\u2022 cvsconfig &#8211; Usado pela Debian para ativar\/desativar o servidor pserver. Pode<br \/>\ntamb\u00e9m ser usado o dpkg-reconfigure cvs para desativar o servidor pserver e<br \/>\nsuas caracter\u00edsticas.<br \/>\n\u2022 cvs-makerepos &#8211; Script da Debian que l\u00ea a lista de reposit\u00f3rios de \/etc\/cvspserver.<br \/>\nconf, cria os reposit\u00f3rios no local apropriado, corrige as permiss\u00f5es do<br \/>\ndiret\u00f3rio e adiciona os reposit\u00f3rios no servidor pserver.<br \/>\n\u2022 cvs-pserver &#8211; Script da Debian respons\u00e1vel por fazer uma inicializa\u00e7\u00e3o mais<br \/>\ninteligente do servidor de CVS via pserver, leitura e processamento de reposit\u00f3rios, etc.<br \/>\nNormalmente ele \u00e9 chamado a partir do arquivo \/etc\/inetd.conf.<br \/>\n17.1.6 Requerimentos de Hardware<br \/>\nPara executar o CVS \u00e9 requerido pelo menos 3 vezes mais mem\u00f3ria que o tamanho do maior<br \/>\narquivo usado pelo projeto (para realiza\u00e7\u00e3o de diffs entre as atualiza\u00e7\u00f5es) e uma boa quantidade de<br \/>\nespa\u00e7o em disco.<br \/>\nNa realidade os requerimentos sobre o CVS dependem muito da aplica\u00e7\u00e3o que ser\u00e1 desenvolvida. \u00c9<br \/>\nrecomend\u00e1vel que a m\u00e1quina tenha mem\u00f3ria suficiente para evitar o uso de swap, que degrada<br \/>\nbastante a performance do sistema.<br \/>\n17.1.7 Arquivos de log criados pelo CVS<br \/>\nProblemas na inicializa\u00e7\u00e3o do CVS s\u00e3o registrados no arquivo \/var\/log\/daemon.log. Os logs<br \/>\nde modifica\u00e7\u00f5es feitas nos arquivos de um projeto no CVS s\u00e3o armazenadas no formato<br \/>\narquivo.extens\u00e3o,v (\u00e9 adicionado o &#8220;,v&#8221; ao final do arquivo para indicar que \u00e9 um arquivo<br \/>\nde controle de modifica\u00e7\u00f5es do CVS).<br \/>\n17.1.8 Instala\u00e7\u00e3o<br \/>\nO CVS pode ser baixado de http:\/\/www.cvshome.org\/.<br \/>\nPara pacotes Debian basta apenas executar o comando: apt-get install cvs e seguir as<br \/>\ntelas de configura\u00e7\u00e3o para ter o pacote CVS instalado e (opcionalmente) com o servidor sendo<br \/>\nexecutado. Voc\u00ea poder\u00e1 a qualquer momento reconfigurar o CVS executando: dpkgreconfigure<br \/>\ncvs.<br \/>\nUma boa documenta\u00e7\u00e3o de refer\u00eancia \u00e9 encontrada no pacote cvs-doc.<br \/>\n17.1.9 Iniciando o servidor\/reiniciando\/recarregando a configura\u00e7\u00e3o<br \/>\nA \u00fanica configura\u00e7\u00e3o requerida \u00e9 quando o CVS \u00e9 executado via pserver. Para isto, \u00e9 necess\u00e1ria<br \/>\na seguinte linha no arquivo \/etc\/inetd.conf<br \/>\ncvspserver stream tcp nowait.200 root \/usr\/sbin\/tcpd<br \/>\n\/usr\/sbin\/cvs-pserver<br \/>\nNote que o par\u00e2metro &#8220;200&#8221; indica quantas vezes o processo CVS poder\u00e1 ser executado por minuto<br \/>\nno sistema. Caso esse n\u00famero seja excedido, o servi\u00e7o ser\u00e1 desabilitado e ser\u00e1 necess\u00e1rio reiniciar o<br \/>\nservidor inetd com o comando killall -HUP inetd para reativar o servidor CVS pserver<br \/>\n(veja \/etc\/inetd.conf, Se\u00e7\u00e3o 4.7.2.1 cap\u00edtulo do inetd para detalhes). Ajuste este valor de forma<br \/>\nadequada ao seu servidor!<br \/>\nVeja o script cvs-pserver sendo executado no final da linha. Ele foi desenvolvido para lidar de<br \/>\nforma mais inteligente com a configura\u00e7\u00e3o do servidor CVS pserver.<br \/>\n17.1.10 Op\u00e7\u00f5es de linha de comando<br \/>\nAs seguintes op\u00e7\u00f5es s\u00e3o aceitas pelo CVS.<br \/>\n-z [num]<br \/>\nUtiliza o gzip para fazer a transfer\u00eancia compactada dos arquivos. O valor especificado pode<br \/>\nser de 0 a 9, quanto maior o n\u00famero maior o n\u00edvel de compacta\u00e7\u00e3o e uso da CPU.<br \/>\nExemplo: cvs -z 3 checkout teste<br \/>\n-q<br \/>\nOculta mensagens sobre recurs\u00e3o de diret\u00f3rio durante os comandos do CVS.<br \/>\n-d [reposit\u00f3rio]<br \/>\nPermite especificar o reposit\u00f3rio atrav\u00e9s da linha de comando.<br \/>\n-e [editor]<br \/>\nDefine qual \u00e9 o editor de textos usado para registrar o texto de commits.<br \/>\n-n<br \/>\nExecuta o cvs em modo &#8220;simula\u00e7\u00e3o&#8221; n\u00e3o modificando qualquer arquivo do reposit\u00f3rio.<br \/>\n-t<br \/>\nMostra mensagens mostrando o processo de execu\u00e7\u00e3o de comandos do CVS. \u00c9 bastante \u00fatil<br \/>\npara aprendizado do cvs usado junto com a op\u00e7\u00e3o -n.<br \/>\n-r<br \/>\nTorna os novos arquivos criados somente para leitura. \u00c9 a mesma coisa que especificar a<br \/>\nvari\u00e1vel CVSREAD.<br \/>\n-w<br \/>\nTorna os novos arquivos criados leitura\/grava\u00e7\u00e3o que \u00e9 o padr\u00e3o.<br \/>\n-x<br \/>\nUtiliza criptografia para a transfer\u00eancia dos arquivos quando \u00e9 utilizado em conjunto com o<br \/>\nKerberos.<br \/>\nVoc\u00ea pode obter detalhes sobre op\u00e7\u00f5es sobre um comando em especial do CVS (commit, checkout,<br \/>\netc) digitando: cvs comando &#8211;help. Veja Criando projetos para serem usados no CVS, Se\u00e7\u00e3o<br \/>\n17.3 para exemplos sobre cada uma delas.<br \/>\n17.2 Servidor de CVS &#8211; configurando m\u00e9todos de acesso ao<br \/>\nreposit\u00f3rio<br \/>\nO CVS \u00e9 uma aplica\u00e7\u00e3o cliente\/servidor, possuindo diversas maneiras de fazer o acesso seu<br \/>\nreposit\u00f3rio (veja Reposit\u00f3rio, Se\u00e7\u00e3o 17.3.1 reposit\u00f3rios). Estes m\u00e9todos s\u00e3o os seguintes:<br \/>\n\u2022 local (local, Se\u00e7\u00e3o 17.2.1).<br \/>\n\u2022 ext (ext, Se\u00e7\u00e3o 17.2.3).<br \/>\n\u2022 pserver (pserver (password server), Se\u00e7\u00e3o 17.2.4).<br \/>\n\u2022 fork (fork, Se\u00e7\u00e3o 17.2.2).<br \/>\n\u2022 GSSAPI (gssapi, Se\u00e7\u00e3o 17.2.6).<br \/>\nEles s\u00e3o explicados em detalhes nas sub-se\u00e7\u00f5es a seguir.<br \/>\n17.2.1 local<br \/>\nAcessa o diret\u00f3rio do reposit\u00f3rio diretamente no disco local. A vantagem deste m\u00e9todo \u00e9 que n\u00e3o \u00e9<br \/>\nrequerido nem nome nem senha para acesso (voc\u00ea precisa apenas ter permiss\u00f5es para acesso aos<br \/>\narquivos que deseja trabalhar) e tamb\u00e9m n\u00e3o \u00e9 preciso nenhuma conex\u00e3o de rede.<br \/>\nEste m\u00e9todo \u00e9 ideal para trabalhar na m\u00e1quina local ou com os arquivos administrativos do CVS<br \/>\nexistentes no diret\u00f3rio CVSROOT do reposit\u00f3rio. \u00c9 muito \u00fatil tamb\u00e9m para configurar outros<br \/>\nm\u00e9todos de acesso, como o pserver.<br \/>\nPara criar seu reposit\u00f3rio, veja Criando um reposit\u00f3rio, Se\u00e7\u00e3o 17.3.2.<br \/>\n17.2.1.1 Configurando o m\u00e9todo local<br \/>\nPara utilizar o m\u00e9todo de acesso local, basta definir a vari\u00e1vel CVSROOT da seguinte forma<br \/>\n(assumindo que o reposit\u00f3rio esteja instalado em \/var\/lib\/cvs):<br \/>\nexport CVSROOT=\/var\/lib\/cvs<br \/>\nou<br \/>\nexport CVSROOT=local:\/var\/lib\/cvs<br \/>\nDepois disso, basta utilizar os comandos normais do cvs sem precisar se autenticar no sistema.<br \/>\nVeja os detalhes de utiliza\u00e7\u00e3o dos comandos de CVS ap\u00f3s o login na se\u00e7\u00e3o Clientes de CVS, Se\u00e7\u00e3o<br \/>\n17.5.<br \/>\n17.2.2 fork<br \/>\nEste m\u00e9todo \u00e9 semelhante ao local, mas ele &#8220;simula&#8221; uma conex\u00e3o de rede com o servidor. \u00c9 muito<br \/>\nusado para fins de testes.<br \/>\n17.2.2.1 Configurando o m\u00e9todo fork<br \/>\nPara utilizar o m\u00e9todo de acesso fork, basta definir a vari\u00e1vel CVSROOT da seguinte forma<br \/>\n(assumindo que o reposit\u00f3rio esteja instalado em \/var\/lib\/cvs):<br \/>\nexport CVSROOT=fork:\/var\/lib\/cvs<br \/>\nDepois disso, basta utilizar os comandos normais do cvs, sem precisar se autenticar no sistema.<br \/>\nVeja os detalhes de utiliza\u00e7\u00e3o dos comandos do CVS ap\u00f3s o login em Clientes de CVS, Se\u00e7\u00e3o 17.5.<br \/>\n17.2.3 ext<br \/>\nEste m\u00e9todo de acesso lhe permite especificar um programa externo que ser\u00e1 usado para fazer uma<br \/>\nconex\u00e3o remota com o servidor cvs.Este programa \u00e9 definido na vari\u00e1vel CVS_RSH e caso n\u00e3o ela<br \/>\nseja especificada o padr\u00e3o \u00e9 rsh.<br \/>\nEste m\u00e9todo requer que o usu\u00e1rio possua um login\/senha no banco de dados de autentica\u00e7\u00e3o<br \/>\n\/etc\/passwd do servidor de destino. Suas permiss\u00f5es de acesso ao CVS (leitura\/grava\u00e7\u00e3o) ser\u00e3o<br \/>\nas mesmas definidas neste arquivo.<br \/>\nO uso do acesso criptografado via ssh \u00e9 poss\u00edvel definindo o programa ssh na vari\u00e1vel CVS_RSH.<br \/>\nVeja os exemplos a seguir em Configurando o m\u00e9todo ext, Se\u00e7\u00e3o 17.2.3.1.<br \/>\nPara criar seu reposit\u00f3rio, veja Criando um reposit\u00f3rio, Se\u00e7\u00e3o 17.3.2.<br \/>\n17.2.3.1 Configurando o m\u00e9todo ext<br \/>\nDefina a vari\u00e1vel CVSROOT da seguinte forma para utilizar este m\u00e9todo de acesso (assumindo<br \/>\n\/var\/lib\/cvs como reposit\u00f3rio):<br \/>\nexport CVSROOT=:ext:conta@servidor.org.br:\/var\/lib\/cvs<br \/>\ncvs login<br \/>\nA &#8220;conta&#8221; \u00e9 uma conta de usu\u00e1rio existente no servidor remoto (por exemplo, gleydson) seguido<br \/>\ndo nome do servidor remoto (separado por uma &#8220;@&#8221;). Por exemplo para acessar o servidor<br \/>\ncvs.cipsga.org.br usando a conta michelle:<br \/>\nexport CVSROOT=:ext:michelle@cvs.cipsga.org.br:\/var\/lib\/cvs<br \/>\ncvs checkout<br \/>\nOBS: A senha via m\u00e9todo de acesso &#8220;ext&#8221; ser\u00e1 pedida somente uma vez quando for necess\u00e1rio o<br \/>\nprimeiro acesso ao servidor remoto. Veja os detalhes de utiliza\u00e7\u00e3o dos comandos de CVS ap\u00f3s o<br \/>\nlogin na se\u00e7\u00e3o Clientes de CVS, Se\u00e7\u00e3o 17.5. O uso mais freq\u00fcente do ext \u00e9 para conex\u00f5es seguras<br \/>\nfeitas via ssh, feita da seguinte forma:<br \/>\nexport CVS_RSH=ssh<br \/>\nexport CVSROOT=:ext:michelle@cvs.cipsga.org.br:\/var\/lib\/cvs<br \/>\ncvs checkout<br \/>\nO acesso de leitura\/grava\u00e7\u00e3o do usu\u00e1rio, \u00e9 definido de acordo com as permiss\u00f5es deste usu\u00e1rio no<br \/>\nsistema. Uma maneira recomendada \u00e9 definir um grupo que ter\u00e1 acesso a grava\u00e7\u00e3o no CVS e<br \/>\nadicionar usu\u00e1rios que possam fazer grava\u00e7\u00e3o neste grupo.<br \/>\nOBS1: O acesso via ssh traz a vantagem de que as senhas trafegar\u00e3o de forma segura via rede, n\u00e3o<br \/>\nsendo facilmente capturadas por sniffers e outros programas de monitora\u00e7\u00e3o que possam estar<br \/>\ninstalados na rota entre voc\u00ea e o servidor.<br \/>\nOBS2: \u00c9 poss\u00edvel especificar a senha na vari\u00e1vel CVSROOT usando a sintaxe semelhante a usada<br \/>\nno ftp:<br \/>\nexport CVSROOT=:ext:michelle:senha@cvs.cipsga.org.br:\/var\/lib\/cvs<br \/>\nEntretanto isto n\u00e3o \u00e9 recomendado, pois os processos da m\u00e1quina poder\u00e3o capturar facilmente a<br \/>\nsenha (incluindo usu\u00e1rios normais, caso a m\u00e1quina n\u00e3o esteja com patches de restri\u00e7\u00f5es de acesso a<br \/>\nprocessos configurada, que \u00e9 o padr\u00e3o em quase todas as distribui\u00e7\u00f5es de Linux).<br \/>\n17.2.4 pserver (password server)<br \/>\nEste \u00e9 um m\u00e9todo de acesso remoto que utiliza um banco de dados de usu\u00e1rios senhas para acesso<br \/>\nao reposit\u00f3rio. A diferen\u00e7a em rela\u00e7\u00e3o ao m\u00e9todo de acesso ext \u00e9 que o pserver roda atrav\u00e9s de um<br \/>\nservidor pr\u00f3prio na porta 2401. O acesso dos usu\u00e1rios (leitura\/grava\u00e7\u00e3o) no reposit\u00f3rio pode ser<br \/>\nfeita tanto atrav\u00e9s do banco de dados de usu\u00e1rios do sistema (\/etc\/passwd) como atrav\u00e9s de um<br \/>\nbanco de dados separado por reposit\u00f3rio.<br \/>\nA grande vantagem deste segundo m\u00e9todo \u00e9 que cada projeto poder\u00e1 ter membros com acessos<br \/>\ndiferenciados; o membro x poder\u00e1 ter acesso ao projeto sgml mas n\u00e3o ao projeto focalinux; ou<br \/>\no usu\u00e1rio y poder\u00e1 ter acesso de grava\u00e7\u00e3o (para trabalhar no projeto focalinux) mas somente<br \/>\nacesso de leitura ao projeto sgml.<br \/>\nEste \u00e9 o m\u00e9todo de acesso preferido para a cria\u00e7\u00e3o de usu\u00e1rios an\u00f4nimos (uma vez que o<br \/>\nadministrador de um servidor que hospede muitos projetos n\u00e3o vai querer abrir um acesso an\u00f4nimo<br \/>\nvia ext para todos os projetos).<br \/>\nTamb\u00e9m existe a vantagem que novos membros do projeto e tarefas administrativas s\u00e3o feitas por<br \/>\nqualquer pessoa que possua acesso de grava\u00e7\u00e3o aos arquivos do reposit\u00f3rio.<br \/>\n17.2.5 Configurando um servidor pserver<br \/>\n17.2.5.1 Ativando o servidor pserver<br \/>\nPara ativar o pserver (caso ainda n\u00e3o o tenha feito). Execute o comando dpkg-reconfigure<br \/>\ncvs e selecione a op\u00e7\u00e3o Ativar o servidor pserver. Uma maneira de fazer isso<br \/>\nautomaticamente \u00e9 modificando o arquivo \/etc\/inetd.conf adicionando a seguinte linha:<br \/>\n# na Debian<br \/>\ncvspserver stream tcp nowait.400 root \/usr\/sbin\/tcpd<br \/>\n\/usr\/sbin\/cvs-pserver<br \/>\n# em outras Distribui\u00e7\u00f5es<br \/>\ncvspserver stream tcp nowait root \/usr\/bin\/cvs cvs -f &#8211;allowroot=\/<br \/>\nvar\/lib\/cvs pserver<br \/>\nNa Debian, o cvs \u00e9 iniciado atrav\u00e9s do script \/usr\/sbin\/cvs-pserver que checa os<br \/>\nbin\u00e1rios e executa o cvs para todos os reposit\u00f3rios especificados no arquivo \/etc\/cvspserver.<br \/>\nconf.<br \/>\nCaso precise adicionar mais reposit\u00f3rios para acesso via pserver ou outro m\u00e9todo de acesso, veja<br \/>\nCriando um reposit\u00f3rio, Se\u00e7\u00e3o 17.3.2.<br \/>\nVoc\u00ea tamb\u00e9m poder\u00e1 executar o m\u00e9todo pserver sob um usu\u00e1rio que n\u00e3o seja o root, para isto,<br \/>\nmodifique a entreada refer\u00eante ao usu\u00e1rio.grupo no inetd.conf e tenha certeza que o daemon<br \/>\nconsegue fazer as opera\u00e7\u00f5es de suid\/sgid no diret\u00f3rio onde o reposit\u00f3rio se encontra.<br \/>\n17.2.5.2 Servidor pserver usando autentica\u00e7\u00e3o do sistema<br \/>\nPara usar o banco de dados de autentica\u00e7\u00e3o do sistema (\/etc\/passwd) para autenticar os<br \/>\nusu\u00e1rios remotos, primeiro tenha certeza que o servidor pserver est\u00e1 ativado (como descrito em<br \/>\nAtivando o servidor pserver, Se\u00e7\u00e3o 17.2.5.1. Repetindo o exemplo anterior, a usu\u00e1ria Michelle<br \/>\ndever\u00e1 ter uma conta em \/etc\/passwd para fazer acesso ao cvs:<br \/>\nexport CVSROOT=:pserver:michelle@cvs.cipsga.org.br:\/var\/lib\/cvs<br \/>\ncvs login<br \/>\nSer\u00e1 pedido a senha da usu\u00e1ria michelle. Entrando com a senha correta, o sistema retornar\u00e1 para<br \/>\no aviso de comando. Uma mensagem ser\u00e1 mostrada caso a senha entrada seja incorreta. Daqui em<br \/>\ndiante, o resto da se\u00e7\u00e3o CVS \u00e9 normal e voc\u00ea ter\u00e1 as permiss\u00f5es de acesso ao reposit\u00f3rio de acordo<br \/>\ncom as suas permiss\u00f5es de acesso naquele diret\u00f3rio.<br \/>\nOBS1: A senha poder\u00e1 ser passada junto com o login da mesma forma como o ftp. Veja a<br \/>\nobserva\u00e7\u00e3o em Configurando o m\u00e9todo ext, Se\u00e7\u00e3o 17.2.3.1.<br \/>\nOBS2: A desvantagem do m\u00e9todo pserver padr\u00e3o \u00e9 que a se\u00e7\u00e3o \u00e9 feita em texto plano, desta forma,<br \/>\nalguns cuidados podem ser tomados para tornar o sistema um pouco mais seguro. Um deles \u00e9 dar<br \/>\n\/bin\/false como shell de usu\u00e1rio (para desativar o login no sistema) ou usar o m\u00e9todo de<br \/>\nacesso descrito em Servidor pserver usando autentica\u00e7\u00e3o do sistema, Se\u00e7\u00e3o 17.2.5.2 em combina\u00e7\u00e3o<br \/>\ncom este. Tenha conciencia das influ\u00eancias disso se a m\u00e1quina for usada para outras tarefas, como<br \/>\num servidor &#8220;pop3&#8221; por exemplo.<br \/>\n17.2.5.3 Servidor pserver com autentica\u00e7\u00e3o pr\u00f3pria<br \/>\nEsta forma de acesso armazena os usu\u00e1rios em um banco de dados pr\u00f3prio, n\u00e3o requerendo a<br \/>\ncria\u00e7\u00e3o de contas locais no arquivo \/etc\/passwd. Para criar um servidor deste tipo siga os<br \/>\nseguintes procedimentos:<br \/>\n\u2022 Exporte a vari\u00e1vel CVSROOT apontando para o reposit\u00f3rio que deseja configurar o acesso.<br \/>\nComo isto \u00e9 uma configura\u00e7\u00e3o administrativa, assumo o m\u00e9todo de acesso local sendo usada<br \/>\npelo usu\u00e1rio administrador do servidor: export CVSROOT=\/var\/lib\/cvs.<br \/>\n\u2022 Crie um diret\u00f3rio para trabalhar nos arquivos administrativos do reposit\u00f3rio: mkdir<br \/>\n\/tmp\/repos<br \/>\n\u2022 Entre no diret\u00f3rio criado acima e execute o comando: cvs checkout .<br \/>\n\u2022 Quando terminar de baixar os arquivos, entre no subdiret\u00f3rio CVSROOT, os arquivos de<br \/>\nconfigura\u00e7\u00e3o do reposit\u00f3rio se encontram l\u00e1 (para detalhes sobre cada um destes arquivos,<br \/>\nveja Arquivos administrativos em CVSROOT, Se\u00e7\u00e3o 17.4.<br \/>\n\u2022 Edite o arquivo config e mude a vari\u00e1vel SystemAuth para no. Isto diz ao servidor<br \/>\npserver n\u00e3o usar os arquivos de autentica\u00e7\u00e3o do sistema, mas a inv\u00e9s disso usar seu banco<br \/>\nde dados pr\u00f3prio.<br \/>\nEm algumas instala\u00e7\u00f5es, caso exista o arquivo passwd no reposit\u00f3rio, o pserver automaticamente<br \/>\no utiliza ao inv\u00e9s do \/etc\/passwd.<br \/>\n\u2022 Crie um arquivo passwd no diret\u00f3rio CVSROOT o formato deste arquivo \u00e9:<br \/>\nusuario:senha:usuario_local<br \/>\nOnde:<br \/>\nusuario<br \/>\nNome da conta de usu\u00e1rio que far\u00e1 acesso ao CVS.<br \/>\nsenha<br \/>\nSenha que ser\u00e1 usada pelo usu\u00e1rio. Ela dever\u00e1 ser criptografada usando o algoritmo crypt. O<br \/>\ncomando mkpasswd senha pode ser usado para gerar a senha criptografada. Caso este<br \/>\ncampo seja deixado em branco, nenhuma senha de usu\u00e1rio ser\u00e1 utilizada. O utilit\u00e1rio<br \/>\nmkpasswd est\u00e1 presente no pacote whois na Debian.<br \/>\nusuario_local<br \/>\nUsu\u00e1rio local que ter\u00e1 suas permiss\u00f5es mapeadas ao usu\u00e1rio do CVS. Como a conta de<br \/>\nusu\u00e1rio do cvs n\u00e3o existe no sistema, \u00e9 necess\u00e1rio que o sistema tenha uma maneira de saber<br \/>\nque n\u00edvel de acesso este usu\u00e1rio ter\u00e1. Caso n\u00e3o crie este usu\u00e1rio ou ele seja inv\u00e1lido, voc\u00ea ter\u00e1<br \/>\nerros do tipo &#8220;: no such user&#8221; no momento que fizer o &#8220;cvs login&#8221;.<br \/>\nUma forma segura de se fazer isto, \u00e9 criar uma conta de usu\u00e1rio *somente* com acesso aos<br \/>\narquivos do CVS, sem shell e senha. Isto permitir\u00e1 mapear a UID\/GID do usu\u00e1rio criado com<br \/>\no acesso do CVS sem comprometer a seguran\u00e7a do sistema de arquivos. Isto pode ser feito<br \/>\natrav\u00e9s do seguinte comando:<br \/>\nadduser &#8211;disabled-password &#8211;disabled-login usuario<br \/>\n\u00c9 necess\u00e1rio especificar um diret\u00f3rio home do usu\u00e1rio, pois o servidor cvs precisa ter acesso<br \/>\nao arquivo \/home\/do\/cvs\/.cvsignore.<br \/>\nOBS1: Mais uma vez: Leve sempre em conta a forma que os outros servi\u00e7os em sua m\u00e1quina<br \/>\nest\u00e3o configurados (como eles fazem acesso, permiss\u00f5es de acesso, diret\u00f3rios onde gravam<br \/>\narquivos, s\u00e3o algumas delas) antes de escolher como um servi\u00e7o novo na m\u00e1quina funcionar\u00e1.<br \/>\nIsto poder\u00e1 modificar ou deixar vulner\u00e1vel a seguran\u00e7a de sua instala\u00e7\u00e3o.<br \/>\nOBS2: Permita que os usu\u00e1rios somente tenham acesso a m\u00e1quina via CVS.<br \/>\nOBS3: Certifique-se sempre que o dono\/grupo do reposit\u00f3rio seja root.src (ou outro<br \/>\ngrupo que tenha criado) adicione somente usu\u00e1rios de confian\u00e7a no grupo src para criar<br \/>\nnovos projetos.<br \/>\nExemplos:<br \/>\ngleydsonm:K32dk1234k:cvsuser<br \/>\nanonymous::pooruser<br \/>\nO usu\u00e1rio cvs gleydsonm quando logar no cvs, ter\u00e1 as permiss\u00f5es de acesso do usu\u00e1rio<br \/>\ncvsuser do sistema.<br \/>\nOBS1: Certifique-se que o usu\u00e1rio local possui permiss\u00f5es de grava\u00e7\u00e3o no diret\u00f3rio do CVS,<br \/>\ncaso contr\u00e1rio ele n\u00e3o poder\u00e1 fazer commits. Lembre-se que as permiss\u00f5es de leitura\/grava\u00e7\u00e3o<br \/>\ndo usu\u00e1rio ser\u00e3o controladas atrav\u00e9s de arquivos do pr\u00f3prio pserver, mas tamb\u00e9m \u00e9 necess\u00e1ria<br \/>\na permiss\u00e3o de grava\u00e7\u00e3o do usu\u00e1rio no reposit\u00f3rio. Isto poder\u00e1 ser feito atrav\u00e9s de grupos de<br \/>\nsistema e garante uma dupla camada de seguran\u00e7a.<br \/>\nOBS2: Caso tenha preferido usar o pserver sob um usu\u00e1rio diferente de root e esteja<br \/>\nobtendo a mensagem setgid failed: Operation not permitted, significa que<br \/>\no servidor CVS n\u00e3o consegue mudar para o grupo referente ao usado no diret\u00f3rio do<br \/>\nreposit\u00f3rio. Verifique se as permiss\u00f5es est\u00e3o adequadas e se o grupo do usu\u00e1rio CVS no<br \/>\n\/etc\/passwd \u00e9 o mesmo que especificou para acesso ao reposit\u00f3rio.<br \/>\n\u2022 Para dar direito de leitura ao reposit\u00f3rio, crie um arquivo chamado readers e adicione os<br \/>\nnomes de usu\u00e1rios que ter\u00e3o acesso ao reposit\u00f3rio (um por linha). O nome que dever\u00e1 ser<br \/>\nusado \u00e9 o nome do usu\u00e1rio de CVS e n\u00e3o do sistema (usu\u00e1rio gleydsonm, segundo o<br \/>\nexemplo).<br \/>\nExemplo:<br \/>\ngleydsonm<br \/>\nanonymous<br \/>\n\u2022 Para dar direito de grava\u00e7\u00e3o ao reposit\u00f3rio, crie um arquivo chamado writers. Seu<br \/>\nformato \u00e9 id\u00eantico ao arquivo readers.<br \/>\nExemplo:<br \/>\ngleydsonm<br \/>\nmacan<br \/>\notavio<br \/>\nhmh<br \/>\nkov<br \/>\n\u2022 Pronto, o acesso a CVS usando um banco de dados pr\u00f3prio est\u00e1 pronto! basta dar o commit<br \/>\nnos arquivos, adicionar os arquivos readers, writers e passwd no reposit\u00f3rio (veja<br \/>\nAdicionando um arquivo ao m\u00f3dulo CVS do servidor, Se\u00e7\u00e3o 17.3.9) para o servidor de CVS<br \/>\npara te-lo funcionando. Note que em vers\u00f5es mais novas do CVS, n\u00e3o \u00e9 poss\u00edvel transferir o<br \/>\narquivo passwd via rede, ent\u00e3o ser\u00e1 necess\u00e1rio cria-lo manualmente dentro do reposit\u00f3rio<br \/>\ndo servidor.<br \/>\nOBS: O arquivo passwd n\u00e3o \u00e9 transferido pelo commit por motivos de seguran\u00e7a, pois ele cont\u00e9m<br \/>\nsenhas que podem ser capturadas e usada por pessoas maliciosas. Ser\u00e1 necess\u00e1rio transferi-lo<br \/>\nmanualmente para o reposit\u00f3rio do servidor remoto (voc\u00ea ter\u00e1 que ser o usu\u00e1rio root ou ter<br \/>\npermiss\u00f5es adequadas). O recomend\u00e1vel \u00e9 utilizar o scp (scp, Se\u00e7\u00e3o 15.2.2) para realizar<br \/>\ntransfer\u00eancias seguras. .<br \/>\nO m\u00e9todo de acesso do CVS aos arquivos readers e writers \u00e9 restritiva, portanto se um nome<br \/>\nde usu\u00e1rio existir no arquivo readers e writers o que valer\u00e1 ser\u00e1 o menor n\u00edvel de acesso.<br \/>\nVendo os exemplos acima, os usu\u00e1rios gleydsonm e anonymous ter\u00e3o somente acesso a leitura do<br \/>\nreposit\u00f3rio e macan, otavio, hmh, kov acesso de leitura e grava\u00e7\u00e3o.<br \/>\n17.2.6 gssapi<br \/>\nQuando o CVS \u00e9 compilado com o suporte a Kerberos 5, ele tenta estabelecer automaticamente uma<br \/>\nconex\u00e3o segura usando este m\u00e9todo. Este m\u00e9todo funciona somente se o CVS estiver compilado<br \/>\ncom o suporte a Kerberos (op\u00e7\u00e3o &#8211;with-gssapi).<br \/>\n17.3 Criando projetos para serem usados no CVS<br \/>\nEsta se\u00e7\u00e3o descreve todos os passos necess\u00e1rios para coloca\u00e7\u00e3o de um projeto para ser desenvolvido<br \/>\natrav\u00e9s do CVS, os comandos do cvs, considera\u00e7\u00f5es a respeito dos comandos e sua utiliza\u00e7\u00e3o<br \/>\natrav\u00e9s de exemplos did\u00e1ticos.<br \/>\n17.3.1 Reposit\u00f3rio<br \/>\nUm reposit\u00f3rio CVS \u00e9 o local que armazena m\u00f3dulos e tamb\u00e9m os arquivos administrativos (que<br \/>\ncont\u00e9m permiss\u00f5es, etc) s\u00e3o armazenados em um subdiret\u00f3rio chamado CVSROOT.<br \/>\nO acesso a um reposit\u00f3rio \u00e9 feito atrav\u00e9s de par\u00e2metros especificados na vari\u00e1vel CVSROOT ou<br \/>\npela op\u00e7\u00e3o -d reposit\u00f3rio do cvs. Veja Servidor de CVS &#8211; configurando m\u00e9todos de acesso ao<br \/>\nreposit\u00f3rio, Se\u00e7\u00e3o 17.2 para ver exemplos de m\u00e9todos de acesso.<br \/>\nO Reposit\u00f3rio pode conter um ou mais m\u00f3dulos, cada m\u00f3dulo representa um projeto no servidor,<br \/>\ncriado ap\u00f3s o uso do comando import. Segue um exemplo da estrutura de um reposit\u00f3rio CVS:<br \/>\nvar\/lib<br \/>\n|<br \/>\n+- cvs<br \/>\n|- CVSROOT<br \/>\n|- projeto1<br \/>\n+- projeto2<br \/>\nO subdiret\u00f3rio cvs \u00e9 o reposit\u00f3rio (veja o subdiret\u00f3rio CVSROOT dentro dele) e os diret\u00f3rios<br \/>\ndentro dele projeto1 e projeto2 s\u00e3o os m\u00f3dulos criados atrav\u00e9s do comando cvs<br \/>\nimport &#8230;(veja Adicionando um novo projeto, Se\u00e7\u00e3o 17.3.6).<br \/>\nPara acessar o projeto do CVS, ent\u00e3o \u00e9 definido o reposit\u00f3rio que tem permiss\u00f5es de acesso na<br \/>\nvari\u00e1vel CVSROOT e ent\u00e3o \u00e9 executado um comando (checkout, update, commit, etc) no m\u00f3dulo<br \/>\nque desejamos utilizar:<br \/>\nexport CVSROOT=:ext:anonymous@servidor.org.br:\/var\/lib\/cvs (&lt;- Reposit\u00f3rio<br \/>\n&#8220;cvs&#8221;)<br \/>\ncvs checkout projeto1 (&lt;- m\u00f3dulo que desejamos pegar do servidor)<br \/>\nNas se\u00e7\u00f5es seguintes ser\u00e3o explicados cada um dos comandos usados para trabalhar com um projeto<br \/>\nno cvs.<br \/>\n17.3.2 Criando um reposit\u00f3rio<br \/>\nPara adicionar um novo reposit\u00f3rio no sistema, edite o arquivo \/etc\/cvs-pserver.conf e<br \/>\ndefina o nome de cada reposit\u00f3rio na vari\u00e1vel CVS_PSERV_REPOS separados por &#8220;:&#8221; (exemplo:<br \/>\nCVS_PSERV_REPOS=&#8221;\/var\/lib\/cvs:\/var\/lib\/cvs2&#8243;).<br \/>\nFeito isso execute o comando cvs-makerepos para que os diret\u00f3rios especificados no arquivo<br \/>\n\/etc\/cvs-pserver.conf sejam criados com as devidas permiss\u00f5es.<br \/>\nPara adicionar manualmente um reposit\u00f3rio (\/var\/lib\/cvs), execute os seguintes passos:<br \/>\n\u2022 Execute o comando cvs -d \/var\/lib\/cvs init (para criar o reposit\u00f3rio e os<br \/>\narquivos administrativos que ficam armazenados dentro de CVSROOT.<br \/>\n\u2022 Mude as permiss\u00f5es do diret\u00f3rio para sgid com: chmod 2775 \/var\/lib\/cvs.<br \/>\n\u2022 Mude o dono\/grupo com o comando: chown root.src \/var\/lib\/cvs<br \/>\n\u2022 Opcional: caso utilize o m\u00e9todo de acesso pserver ser\u00e1 necess\u00e1rio adicionar a op\u00e7\u00e3o<br \/>\n&#8211;allow-root=\/var\/lib\/cvs na linha que inicia o servidor pserver. Este par\u00e2metro<br \/>\ndeve ser usada para cada reposit\u00f3rio adicionado no servidor.<br \/>\nA partir de agora, seu reposit\u00f3rio j\u00e1 est\u00e1 pronto para ser utilizado.<br \/>\n17.3.3 Logando no servidor de CVS via pserver<br \/>\nQuando \u00e9 usado o m\u00e9todo de acesso pserver (pserver (password server), Se\u00e7\u00e3o 17.2.4), \u00e9 necess\u00e1rio<br \/>\nfazer para ter acesso ao reposit\u00f3rio. Por exemplo, para acessar o reposit\u00f3rio \/var\/lib\/cvs no<br \/>\nservidor servidor.org.br:<br \/>\nexport CVSROOT=:pserver:anonymous@servidor.org.br:\/var\/lib\/cvs<br \/>\ncvs login<br \/>\nou<br \/>\ncvs -d :pserver:anonymous@servidor.org.br:\/var\/lib\/cvs login<br \/>\nEnt\u00e3o ser\u00e1 solicitada a senha para ter acesso ao sistema. Note que toda a se\u00e7\u00e3o de cvs ocorre por<br \/>\ncomandos interativos que logo ap\u00f3s conclu\u00eddos retornam para o interpretador de comandos. O<br \/>\nrestante desta se\u00e7\u00e3o descrever\u00e1 estes comandos e como utiliza-los de maneira eficiente.<br \/>\nOBS: O uso da vari\u00e1vel CVSROOT torna a utiliza\u00e7\u00e3o bastante pr\u00e1tica, assim n\u00e3o precisamos<br \/>\nespecificar o reposit\u00f3rio, m\u00e9todo de acesso, etc. toda vez que usar um comando do cvs.<br \/>\n17.3.4 Encerrando uma se\u00e7\u00e3o de CVS<br \/>\nEmbora que n\u00e3o seja necess\u00e1rio, ap\u00f3s o uso do cvs \u00e9 recomend\u00e1vel executar o logout do servidor<br \/>\npara encerrar sua conex\u00e3o com a m\u00e1quina remota.<br \/>\n# (assumindo que a vari\u00e1vel CVSROOT est\u00e1 definida)<br \/>\ncvs logout<br \/>\nou<br \/>\ncvs -d :pserver:anonymous@servidor.org.br:\/var\/lib\/cvs logout<br \/>\nOBS: Para os paran\u00f3icos \u00e9 importante encerrar uma se\u00e7\u00e3o de CVS, pois ele possui alguns bugs e<br \/>\num spoofing pode tornar poss\u00edvel o uso de uma se\u00e7\u00e3o deixada aberta.<br \/>\n17.3.5 Baixando arquivos<br \/>\nO comando checkout (ou &#8220;co&#8221;) \u00e9 usado para fazer isto. Para utiliz\u00e1-lo seguindo os exemplos<br \/>\nanteriores:<br \/>\nmkdir \/tmp\/cvs<br \/>\ncd \/tmp\/cvs<br \/>\ncvs checkout modulo<br \/>\ncvs -d :pserver:anonymous@servidor.org.br:\/var\/lib\/cvs<br \/>\nSer\u00e1 criado um subdiret\u00f3rio chamado modulo que cont\u00e9m todos os arquivos do servidor de CVS<br \/>\nremoto. \u00c9 necess\u00e1rio apenas que tenha acesso de leitura ao servidor de CVS para executar este<br \/>\ncomando. Voc\u00ea pode usar a op\u00e7\u00e3o -z [num] para ativar a compacta\u00e7\u00e3o na transfer\u00eancia dos<br \/>\narquivos, isso acelera bastante a transfer\u00eancia em conex\u00f5es lentas: cvs -z 3 checkout<br \/>\nmodulo.<br \/>\nTamb\u00e9m \u00e9 poss\u00edvel especificar apenas subdiret\u00f3rios de um m\u00f3dulo para baixa-lo via CVS e a<br \/>\nestrutura de diret\u00f3rios criada localmente ser\u00e1 id\u00eantica ao do servidor remoto.<br \/>\n17.3.6 Adicionando um novo projeto<br \/>\nUse o comando cvs import para adicionar um novo projeto ao CVS. As entradas nos arquivos<br \/>\nadministrativos ser\u00e3o criadas e o projeto estar\u00e1 dispon\u00edvel para utiliza\u00e7\u00e3o dos usu\u00e1rios. A sintaxe<br \/>\nb\u00e1sica do comando import \u00e9 a seguinte:<br \/>\ncvs import [op\u00e7\u00f5es] [dir_modulo] [tag] start<br \/>\nPara adicionar o projeto focalinux que reside em \/usr\/src\/focalinux ao cvs:<br \/>\n# Primeiro exportamos o CVSROOT para dizer onde e qual reposit\u00f3rio acessar<br \/>\nexport CVSROOT=:ext:usuario@servidor.com.br:2401\/var\/lib\/cvs<br \/>\ncd \/usr\/src\/focalinux<br \/>\ncvs import documentos\/focalinux tag_modulo start<br \/>\nPor padr\u00e3o o import sempre utiliza a m\u00e1scara * para fazer a importa\u00e7\u00e3o dos arquivos do diret\u00f3rio<br \/>\natual. O projeto focalinux ser\u00e1 acessado atrav\u00e9s de $CVSROOT\/documentos\/focalinux (cvs<br \/>\ncheckout documentos\/focalinux), ou seja,<br \/>\n\/var\/lib\/cvs\/documentos\/focalinux no servidor CVS ter\u00e1 a c\u00f3pia do focalinux.<br \/>\ntag_modulo define o nome que ser\u00e1 usado como identificador nas opera\u00e7\u00f5es com os arquivos do<br \/>\nCVS (pode ser usado &#8220;focalinux&#8221; em nosso exemplo). O par\u00e2metro &#8220;start&#8221; diz para criar o m\u00f3dulo.<br \/>\nOBS: Por seguran\u00e7a, o diret\u00f3rio que cont\u00e9m os arquivos dever\u00e1 ser sempre um caminho relativo na<br \/>\nestrutura de diret\u00f3rios, ou seja, voc\u00ea precisar\u00e1 entrar no diret\u00f3rio pai (como<br \/>\n\/usr\/src\/projeto) para executar o cvs import. N\u00e3o \u00e9 permitido usar \/ ou .., isto pro\u00edbe<br \/>\na descida em diret\u00f3rios de n\u00edvel mais altos e s\u00e9rios incidentes de seguran\u00e7a em servidores CVS mal<br \/>\nconfigurados pelo Administrador.<br \/>\n17.3.7 Sincronizando a c\u00f3pia remota com a c\u00f3pia local<br \/>\nEste comando sincroniza a c\u00f3pia remota do CVS (ou arquivo) com a c\u00f3pia local que est\u00e1<br \/>\ntrabalhando em sua m\u00e1quina. Quando se trabalha nativamente no CVS em equipe \u00e9 recomendado a<br \/>\nutiliza\u00e7\u00e3o deste comando pois algu\u00e9m pode ter modificado o arquivo antes de voc\u00ea, ent\u00e3o uma<br \/>\nincompatibilidade entre sua vers\u00e3o e a nova poderia causar problemas.<br \/>\nSupondo que tenha acabado de modificar o arquivo main.c do m\u00f3dulo cvsproj, ent\u00e3o antes de<br \/>\nfazer o commit (Enviando as mudan\u00e7as para o servidor remoto, Se\u00e7\u00e3o 17.3.8) use o update:<br \/>\ncvs update main.c<br \/>\nou<br \/>\ncvs -d :ext:usuario@servidor.com.br:2401\/var\/lib\/cvs update main.c<br \/>\nAp\u00f3s alguns segundos, sua c\u00f3pia local ficar\u00e1 sincronizada com a c\u00f3pia remota. Caso ele mostre<br \/>\nalguma mensagem de sa\u00edda, verifique o arquivo para solucionar qualquer conflito e ent\u00e3o envie o<br \/>\narquivo para o servidor remoto (Enviando as mudan\u00e7as para o servidor remoto, Se\u00e7\u00e3o 17.3.8).<br \/>\nVoc\u00ea pode fazer o update de mais arquivos usando refer\u00eancias globais (*, ? ou []).<br \/>\n17.3.8 Enviando as mudan\u00e7as para o servidor remoto<br \/>\nO comando &#8220;commit&#8221; (ou &#8220;ci&#8221;), envia as mudan\u00e7as feitas nos arquivos locais para o servidor<br \/>\nremoto. Um exemplo de commit no arquivo main.c:<br \/>\ncvs commit main.c<br \/>\ncvs commit main.?<br \/>\ncvs commit *<br \/>\nO editor padr\u00e3o do sistema ser\u00e1 aberto e pedir\u00e1 uma descri\u00e7\u00e3o das modifica\u00e7\u00f5es para o commit.<br \/>\nEsta descri\u00e7\u00e3o ser\u00e1 usada como refer\u00eancia sobre as atualiza\u00e7\u00f5es feitas em cada etapa do<br \/>\ndesenvolvimento. A mensagem tamb\u00e9m pode ser especificada usando a op\u00e7\u00e3o &#8220;-m mensagem&#8221;,<br \/>\nprincipalmente quando o texto explicando as altera\u00e7\u00f5es \u00e9 pequeno.<br \/>\nPara mudar o editor de texto padr\u00e3o que ser\u00e1 usado pelo cvs, altere a vari\u00e1vel de ambiente<br \/>\nEDITOR ou especifique o editor que deseja usar na linha de comando com a op\u00e7\u00e3o &#8220;-e editor&#8221;:<br \/>\ncvs commit -e vi main.c<br \/>\n17.3.9 Adicionando um arquivo ao m\u00f3dulo CVS do servidor<br \/>\nAp\u00f3s criar\/copiar o arquivo para seu diret\u00f3rio de trabalho, use o comando add para fazer isto. O<br \/>\narquivo ser\u00e1 enviado ao servidor, bastando apenas executa o commit para salvar o arquivo:<br \/>\ncvs add main.h<br \/>\ncvs commit main.h<br \/>\n17.3.10 Adicionando um diret\u00f3rio ao m\u00f3dulo CVS do servidor<br \/>\nO m\u00e9todo para adicionar um diret\u00f3rio com arquivos \u00e9 semelhante ao de adicionar apenas arquivos<br \/>\nao cvs. O \u00fanico ponto que deve se seguido \u00e9 que primeiro deve ser adicionado o diret\u00f3rio (com o<br \/>\n&#8220;cvs add&#8221;) salvar no servidor remoto (&#8220;cvs commit&#8221;) e depois adicionar os arquivos existentes<br \/>\ndentro dele (assim como descrito em Adicionando um arquivo ao m\u00f3dulo CVS do servidor, Se\u00e7\u00e3o<br \/>\n17.3.9). Para adicionar o diret\u00f3rio teste e seus arquivos no servidor cvs remoto:<br \/>\ncvs add teste<br \/>\ncvs commit -m &#8220;Adicionado&#8221; teste<br \/>\ncvs add teste\/*<br \/>\ncd teste<br \/>\ncvs commit -m &#8220;Adicionados&#8221; .<br \/>\nOs dois primeiros comandos agendam o diret\u00f3rio teste e fazem o commit no diret\u00f3rio remoto.<br \/>\nOs dois \u00faltimos, enviam os arquivos existentes dentro deste diret\u00f3rio para o servidor remoto.<br \/>\n17.3.11 Removendo um arquivo do m\u00f3dulo CVS remoto<br \/>\nO comando para fazer isto \u00e9 o &#8220;remove&#8221;. Primeiro use o rm para remover o arquivo\/diret\u00f3rio de sua<br \/>\nc\u00f3pia local, depois execute o remove seguido de commit para confirmar a remo\u00e7\u00e3o do arquivo:<br \/>\ncvs remove main.h<br \/>\ncvs commit main.h<br \/>\n17.3.12 Removendo um diret\u00f3rio do m\u00f3dulo CVS remoto<br \/>\nPara remover um diret\u00f3rio, primeiro remova todos os arquivos existentes dentro dele com o<br \/>\ncomando rm e salve para o servidor (seguindo os m\u00e9todos descritos em Removendo um arquivo do<br \/>\nm\u00f3dulo CVS remoto, Se\u00e7\u00e3o 17.3.11). O CVS n\u00e3o remove diretamente diret\u00f3rios vazios, uma<br \/>\nmaneira de contornar isto \u00e9 usar o update ou commit seguido da op\u00e7\u00e3o -P para ignorar<br \/>\ndiret\u00f3rios vazios. Ent\u00e3o a c\u00f3pia remota do diret\u00f3rio ser\u00e1 removida do servidor:<br \/>\nrm -f teste\/*<br \/>\ncvs remove teste\/.<br \/>\ncvs commit teste\/.<br \/>\ncd ..<br \/>\ncvs checkout modulo<br \/>\nDepois do checkout, o subdiret\u00f3rio teste ter\u00e1 sido removido.<br \/>\n17.3.13 Dizendo que o m\u00f3dulo atual n\u00e3o est\u00e1 mais em uso<br \/>\nO comando &#8220;release&#8221; faz esta fun\u00e7\u00e3o. Ele n\u00e3o \u00e9 requerido, mas caso voc\u00ea tenha feito modifica\u00e7\u00f5es<br \/>\nque ainda n\u00e3o foram salvas no servidor de cvs (commit), ele alertar\u00e1 de arquivos modificados e<br \/>\nperguntar\u00e1 se deseja continuar. Registrando tamb\u00e9m o abandono das modifica\u00e7\u00f5es no hist\u00f3rico do<br \/>\ncvs. O comando pode ser acompanhado de &#8220;-d&#8221; para remover o m\u00f3dulo anteriormente baixado<br \/>\ncom o &#8220;commit&#8221;:<br \/>\ncvs release modulo<br \/>\ncvs release -d modulo<br \/>\nO release retorna os seguintes c\u00f3digos quando verifica que as duas c\u00f3pias (local e remota) n\u00e3o<br \/>\nest\u00e3o sincronizadas:<br \/>\nU ou P<br \/>\nExiste uma vers\u00e3o nova do arquivo no reposit\u00f3rio. Para corrigir isso, execute o comando<br \/>\n&#8220;update&#8221;.<br \/>\nA<br \/>\nO arquivo n\u00e3o foi adicionado ainda ao reposit\u00f3rio remoto. Se apagar o reposit\u00f3rio local, este<br \/>\narquivo n\u00e3o ser\u00e1 adicionado. Para corrigir isto, executa o comando &#8220;add&#8221; do cvs.<br \/>\nR<br \/>\nO arquivo foi removido localmente, mas n\u00e3o foi removido do servidor remoto. Use os<br \/>\nprocedimentos em Removendo um arquivo do m\u00f3dulo CVS remoto, Se\u00e7\u00e3o 17.3.11 para<br \/>\ncorrigir a situa\u00e7\u00e3o.<br \/>\nM<br \/>\nO arquivo est\u00e1 modificado localmente e n\u00e3o foi salvo ainda no servidor. Use os<br \/>\nprocedimentos em Sincronizando a c\u00f3pia remota com a c\u00f3pia local, Se\u00e7\u00e3o 17.3.7 e Enviando<br \/>\nas mudan\u00e7as para o servidor remoto, Se\u00e7\u00e3o 17.3.8 para salvar o arquivo.<br \/>\n?<br \/>\nO arquivo est\u00e1 em seu diret\u00f3rio de trabalho mas n\u00e3o tem refer\u00eancias no reposit\u00f3rio remoto e<br \/>\ntamb\u00e9m n\u00e3o est\u00e1 na lista de arquivos ignorados do CVS.<br \/>\n17.3.14 Visualizando diferen\u00e7as entre vers\u00f5es de um arquivo<br \/>\nCom o comando &#8220;diff&#8221; \u00e9 poss\u00edvel visualizar que diferen\u00e7as o arquivo que est\u00e1 sendo editado possui<br \/>\nem rela\u00e7\u00e3o ao arquivo do reposit\u00f3rio remoto. Outra funcionalidade \u00fatil do &#8220;diff&#8221; \u00e9 comparar 2<br \/>\nvers\u00f5es de arquivos do mesmo reposit\u00f3rio CVS. Exemplos:<br \/>\ncvs diff main.c<br \/>\nVerifica as diferen\u00e7as entre o arquivo main.c local e remoto.<br \/>\ncvs diff -u -r 1.1 -r 1.2 main.c<br \/>\nMostra as diferen\u00e7as em formato unificado para mostrar as diferen\u00e7as entre as vers\u00f5es 1.1 e<br \/>\n1.2 do arquivo main.c.<br \/>\n17.3.15 Visualizando o status de vers\u00e3o de arquivos<br \/>\nO comando &#8220;status&#8221; permite verificar que vers\u00f5es do arquivo especificado est\u00e1 dispon\u00edvel<br \/>\nlocalmente, remotamente, qual a vers\u00e3o inicial do arquivo no reposit\u00f3rio, sticky tag. Exemplos:<br \/>\ncvs status main.c<br \/>\nVerifica o status do arquivo main.c.<br \/>\ncvs status -v main.c<br \/>\nMostra o status do arquivo main.c, adicionalmente mostra tamb\u00e9m as tags existentes no<br \/>\narquivo (vers\u00e3o inicial, vers\u00e3o do reposit\u00f3rio).<br \/>\n17.3.16 Outros utilit\u00e1rios para trabalho no reposit\u00f3rio<br \/>\nAl\u00e9m dos comandos do cvs descritos aqui, existem comandos no pacote cvsutils que auxiliam<br \/>\ndesde quem est\u00e1 aprendendo a utilizar o CVS (com o comando cvsdo para simular algumas<br \/>\nopera\u00e7\u00f5es de adi\u00e7\u00e3o\/remo\u00e7\u00e3o de arquivos) at\u00e9 profissionais que usam o programa no dia a dia<br \/>\n(cvsu, cvsco, cvschroot).<br \/>\n17.4 Arquivos administrativos em CVSROOT<br \/>\nEsta se\u00e7\u00e3o descreve a fun\u00e7\u00e3o de cada um dos arquivos administrativos, isto pode ser \u00fatil na<br \/>\nconfigura\u00e7\u00e3o e personaliza\u00e7\u00e3o do CVS e de seu reposit\u00f3rio.<br \/>\nPara n\u00e3o alongar muito o cap\u00edtulo, procurei colocar uma breve descri\u00e7\u00e3o da fun\u00e7\u00e3o de cada um<br \/>\ndeles, o coment\u00e1rios e exemplos existentes nos arquivos oferecem uma boa compreens\u00e3o do seu<br \/>\nconte\u00fado.<br \/>\n17.4.1 config<br \/>\nEste arquivo \u00e9 segue os padr\u00f5es do arquivos de configura\u00e7\u00e3o e possui alguns par\u00e2metros que<br \/>\ncontrolam o comportamento do CVS. Segue uma lista deles:<br \/>\nSystemAuth<br \/>\nDefine se ser\u00e1 utilizado a autentica\u00e7\u00e3o via \/etc\/passwd quando o m\u00e9todo pserver for<br \/>\nutilizado. Note que se o arquivo passwd for criado no CVSROOT, o SystemAuth ser\u00e1<br \/>\ndefinido automaticamente para no.<br \/>\nExemplo: SystemAuth=yes.<br \/>\nLockDir<br \/>\nEspecifica o diret\u00f3rio onde ser\u00e3o gravados os arquivos de lock. Caso n\u00e3o seja especificado,<br \/>\nser\u00e1 usado o diret\u00f3rio do CVS.<br \/>\nExemplo: LockDir=\/var\/lock\/cvs<br \/>\nTopLevelAdmin<br \/>\nPermite criar ou n\u00e3o um diret\u00f3rio chamado CVS no root do diret\u00f3rio de trabalho durante o<br \/>\ncvs checkout.<br \/>\nLogHistory<br \/>\nUtiliza op\u00e7\u00f5es para especificar o que ser\u00e1 registrado nos arquivos de log do CVS.<br \/>\n\u2022 TOFEWGCMAR ou all<br \/>\nRegistra todas as opera\u00e7\u00f5es nos logs do cvs.<br \/>\n\u2022 TMAR<br \/>\nRegistra todas as opera\u00e7\u00f5es que modificam os arquivos &#8220;,v&#8221;<br \/>\n17.4.2 modules<br \/>\nEspecifica op\u00e7\u00f5es e programas externos que ser\u00e3o usados durante a execu\u00e7\u00e3o de comandos no<br \/>\nreposit\u00f3rio CVS.<br \/>\n17.4.3 cvswrappers<br \/>\nEste arquivo define a\u00e7\u00f5es de controle de caracter\u00edsticas de arquivos, de acordo com seu nome.<br \/>\nPode ser tamb\u00e9m definidas a\u00e7\u00f5es atrav\u00e9s de arquivos .cvswrappers.<br \/>\n17.4.4 commitinfo<br \/>\nDefine programas para fazer uma checagem baseada no diret\u00f3rio e dizer se o commit \u00e9 permitido.<br \/>\n17.4.5 verifymsg<br \/>\nEspecifica o programa usado para verificar as mensagens de log.<br \/>\n17.4.6 loginfo<br \/>\nPrograma que \u00e9 executado ap\u00f3s o commit. Ele pode ser usado para tratar a mensagem de log e<br \/>\ndefinir onde ela ser\u00e1 gravada\/enviada, etc.<br \/>\n17.4.7 cvsignore<br \/>\nTudo que constar neste arquivo n\u00e3o ser\u00e1 gravado (commit) no cvs. Refer\u00eancias globais podem ser<br \/>\nusadas para especificar estes arquivos. Veja a info page do cvs para detalhes sober seu formato.<br \/>\nPode tamb\u00e9m ser especificado atrav\u00e9s de arquivos .cvsignore.<br \/>\n17.4.8 checkoutlist<br \/>\nEspecifica os arquivos que deseja manter sobre o controle do CVS que se encontram em CVSROOT.<br \/>\nSe adicionar um script adicional, ou qualquer outro arquivo no diret\u00f3rio CVSROOT ele dever\u00e1<br \/>\nconstar neste arquivo.<br \/>\n17.4.9 history<br \/>\n\u00c9 usado para registrar detalhes do comando history do CVS.<br \/>\n17.5 Clientes de CVS<br \/>\nEsta se\u00e7\u00e3o traz alguns programas cliente em modo texto\/gr\u00e1fico e visualizadores de reposit\u00f3rios via<br \/>\nweb. Eles facilitam o trabalho de controle de revis\u00e3o por parte de iniciantes e flexibilidade para<br \/>\npessoas mais experientes, al\u00e9m de ter uma interface de navega\u00e7\u00e3o dispon\u00edvel para todos os<br \/>\ninteressados em fazer pesquisas no reposit\u00f3rio.<br \/>\n17.5.1 cvs<br \/>\nEste \u00e9 o cliente Unix padr\u00e3o, bastante poderoso e que opera em modo texto. As explica\u00e7\u00f5es neste<br \/>\ncap\u00edtulo do guia assumem este cliente de cvs, ent\u00e3o as explica\u00e7\u00f5es sobre sua utiliza\u00e7\u00e3o se encontra<br \/>\nem Criando projetos para serem usados no CVS, Se\u00e7\u00e3o 17.3 e os par\u00e2metros de linha de comando<br \/>\nem Op\u00e7\u00f5es de linha de comando, Se\u00e7\u00e3o 17.1.10<br \/>\n\u00c9 altamente recomend\u00e1vel a leitura caso deseje utilizar um cliente de cvs gr\u00e1fico, pois os<br \/>\nconceitos s\u00e3o os mesmos.<br \/>\n17.5.2 gcvs &#8211; Linux<br \/>\nEste \u00e9 um cliente CVS em GTK+Python para Linux que interage externamente com o cliente cvs<br \/>\nexterno, todas as op\u00e7\u00f5es do cvs est\u00e3o dispon\u00edveis atrav\u00e9s de checkboxes nas telas de comando,<br \/>\nincluindo suporte a compacta\u00e7\u00e3o, visualizador gr\u00e1fico da \u00e1rvore de releases, hist\u00f3rico, diffs, etc.<br \/>\nSua instala\u00e7\u00e3o \u00e9 bastante f\u00e1cil, instale o programa com apt-get install gcvs e execute o<br \/>\nprograma atrav\u00e9s do menu do sistema ou do terminal. Utilize os seguintes procedimentos para<br \/>\nconfigurar e utilizar o programa:<br \/>\n\u2022 Defina o reposit\u00f3rio CVSROOT atrav\u00e9s do menu Admin\/Preferences. Selecione o m\u00e9todo de<br \/>\nacesso, entre com o login, servidor e reposit\u00f3rio.<br \/>\nExemplo: :pserver:anonymous@servidor:\/var\/lib\/cvs<br \/>\nO formato deve ser EXATAMENTE como o usado na vari\u00e1vel CVSROOT no shell, incluindo os &#8220;:&#8221;.<br \/>\nCaso tenha erros de login, verifique o valor de CVSROOT cuidadosamente antes de contactar o<br \/>\nadministrador de sistemas!<br \/>\n\u2022 Agora fa\u00e7a o login no sistema em: Admin, Login. Note que o status de todas as opera\u00e7\u00f5es do<br \/>\ncvs s\u00e3o mostradas na janela de status que fica na parte inferior da tela.<br \/>\n\u2022 Crie um diret\u00f3rio que ser\u00e1 usado para armazenar os fontes baixados do CVS, por exemplo:<br \/>\nmkdir ~\/projetos<br \/>\n\u2022 Acesse o menu Create, Checkout Module para baixar o projeto do CVS para sua m\u00e1quina<br \/>\nlocal. Ele ir\u00e1 te pedir o nome de diret\u00f3rio para onde o c\u00f3digo fonte do servidor CVS ser\u00e1<br \/>\nbaixado. Digite ~\/projetos ou outro diret\u00f3rio que foi criado no passo anterior.<br \/>\nOBS: N\u00e3o utilize o nome &#8220;cvs&#8221; para o diret\u00f3rio local, pois o gcvs oculta automaticamente pois<br \/>\nos arquivos administrativos de controle ficam neste local.<br \/>\n\u2022 Altere o diret\u00f3rio padr\u00e3o do gcvs para o diret\u00f3rio onde baixou o projeto<br \/>\n(~\/projetos)clicando no bot\u00e3o &#8220;set&#8221; no topo da coluna esquerda do gcvs.<br \/>\n\u2022 Para enviar um arquivo modificado de volta ao servidor, selecione os arquivos, clique em<br \/>\nModify, Commit Selection, entre com a mensagem descrevendo as altera\u00e7\u00f5es e clique em<br \/>\n&#8220;OK&#8221;.<br \/>\nNote que os arquivos modificados ser\u00e3o identificados por um \u00edcone vermelho e seu status ser\u00e1<br \/>\n&#8220;Mod. File&#8221; (arquivo modificado).<br \/>\n\u2022 Se desejar adicionar um novo projeto no CVS, entre em Create, Import Module, entre no<br \/>\ndiret\u00f3rio que deseja adicionar como um projeto no servidor de CVS. Ap\u00f3s isto ser\u00e1 feita<br \/>\numa checagem e mostrada uma tela de poss\u00edveis problemas que podem ocorrer durante a<br \/>\nimporta\u00e7\u00e3o do novo projeto.<br \/>\nNa pr\u00f3xima tela, digite o nome do m\u00f3dulo e caminho no servidor remoto no primeiro campo, no<br \/>\nsegundo campo a mensagem de log para adicionar o projeto ao servidor. Em &#8220;Vendor tag&#8221;<br \/>\nespecifique o nome do projeto e sua vers\u00e3o logo abaixo. Clique em &#8220;OK&#8221; e aguarde a transfer\u00eancia<br \/>\ndos arquivos para o servidor.<br \/>\nPara maiores detalhes sobre a cria\u00e7\u00e3o de novos projetos no servidor de CVS, veja Adicionando um<br \/>\nnovo projeto, Se\u00e7\u00e3o 17.3.6.<br \/>\nOBS: Voc\u00ea dever\u00e1 ter permiss\u00e3o de grava\u00e7\u00e3o para criar um novo projeto no servidor CVS.<br \/>\n\u2022 A partir de agora voc\u00ea poder\u00e1 explorar as fun\u00e7\u00f5es do programa e fazer uso das fun\u00e7\u00f5es<br \/>\nhabituais do CVS. Todas as fun\u00e7\u00f5es de opera\u00e7\u00e3o e op\u00e7\u00f5es extras do CVS est\u00e3o dispon\u00edveis<br \/>\nna interface gr\u00e1fica, basta se acostumar com sua utiliza\u00e7\u00e3o.<br \/>\nAp\u00f3s isto, explore bastante as op\u00e7\u00f5es do programa. Todas as funcionalidades do CVS est\u00e3o<br \/>\norganizadas entre os menus do programa. Caso n\u00e3o entenda bem as fun\u00e7\u00f5es do programa, leia<br \/>\natentamente Criando projetos para serem usados no CVS, Se\u00e7\u00e3o 17.3 e tamb\u00e9m n\u00e3o deixe de<br \/>\nconsultar detalhes na info page do cvs.<br \/>\n17.5.3 WinCVS &#8211; Windows<br \/>\nEste \u00e9 um cliente CVS em Python para Windows equivalente ao gcvs para Linux. Suas<br \/>\nfuncionalidades e recomenda\u00e7\u00f5es s\u00e3o id\u00eanticas aos do gcvs. Este cliente pode ser baixado de:<br \/>\nhttp:\/\/telia.dl.sourceforge.net\/sourceforge\/cvsgui\/WinCvs13b13.zip<br \/>\ne o Python para Windows de<br \/>\nhttp:\/\/starship.python.net\/crew\/mhammond\/downloads\/win32all-<br \/>\n153.exe.<br \/>\nPara sua utiliza\u00e7\u00e3o, as explica\u00e7\u00f5es em gcvs &#8211; Linux, Se\u00e7\u00e3o 17.5.2 s\u00e3o totalmente v\u00e1lidas.<br \/>\n17.5.4 MacCVS &#8211; Macintosh (PPC)<br \/>\nId\u00eantico ao gcvs, pode ser baixado de<br \/>\nhttp:\/\/telia.dl.sourceforge.net\/sourceforge\/cvsgui\/MacCvsX-3.3a1-<br \/>\n1.dmg.<br \/>\n17.5.5 viewcvs<br \/>\nEste \u00e9 um visualizador de reposit\u00f3rios CVS via web, ele precisa apenas de um servidor web<br \/>\ninstalado com suporte a CGI. Para instalar, execute o comando apt-get install viewcvs e<br \/>\nsiga os passos para configurar programa. Para adequar melhor o viewcvs ao seu sistema, edite o<br \/>\narquivo \/etc\/viewcvs\/viewcvs.conf.<br \/>\nO viewcvs possui uma interface que se parece com a navega\u00e7\u00e3o de um diret\u00f3rio de ftp, recursos<br \/>\ncomo a extra\u00e7\u00e3o de diffs coloridos entre vers\u00f5es de um arquivo selecionado, visualiza\u00e7\u00e3o de<br \/>\ncommits (com data, log do commit, usu\u00e1rio, etc.), classifica\u00e7\u00e3o da listagem exibida.<br \/>\nOBS:Leve em considera\u00e7\u00e3o as implica\u00e7\u00f5es de seguran\u00e7a impostas por aplicativos cgi sendo<br \/>\nexecutados em seu sistema. Veja Apache, Cap\u00edtulo 12 para entender melhor o assunto.<br \/>\n17.6 Exemplo de uma se\u00e7\u00e3o CVS<br \/>\nNota: este exemplo \u00e9 apenas did\u00e1tico, n\u00e3o foi feita nenhuma modifica\u00e7\u00e3o real no conte\u00fado do<br \/>\nreposit\u00f3rio do dillo \ud83d\ude42<br \/>\n# Definir o CVSROOT<br \/>\nexport CVSROOT=:pserver:gleydson@ima.cipsga.org.br:\/var\/lib\/cvs<br \/>\n# entrar no servidor<br \/>\ngleydson@host:\/tmp\/teste$ cvs login<br \/>\nLogging in to :pserver:gleydson@ima.cipsga.org.br:2401\/var\/lib\/cvs<br \/>\nCVS password: &lt;password&gt;<br \/>\ngleydson@oberon:\/tmp\/teste$<br \/>\n# Pegar o m\u00f3dulo &#8220;dillo do cvs&#8221;<br \/>\ncvs -z 3 co dillo<br \/>\ncvs server: Updating dillo<br \/>\ncvs server: Updating dillo\/CVSROOT<br \/>\nU dillo\/CVSROOT\/checkoutlist<br \/>\nU dillo\/CVSROOT\/commitinfo<br \/>\nU dillo\/CVSROOT\/config<br \/>\nU dillo\/CVSROOT\/cvswrappers<br \/>\nU dillo\/CVSROOT\/editinfo<br \/>\nU dillo\/CVSROOT\/loginfo<br \/>\nU dillo\/CVSROOT\/modules<br \/>\nU dillo\/CVSROOT\/notify<br \/>\nU dillo\/CVSROOT\/rcsinfo<br \/>\nU dillo\/CVSROOT\/taginfo<br \/>\nU dillo\/CVSROOT\/verifymsg<br \/>\ncvs server: Updating dillo\/CVSROOT\/Emptydir<br \/>\ncvs server: Updating dillo\/dillo<br \/>\nU dillo\/dillo\/AUTHORS<br \/>\nU dillo\/dillo\/COPYING<br \/>\nU dillo\/dillo\/ChangeLog<br \/>\nU dillo\/dillo\/ChangeLog.old<br \/>\nU dillo\/dillo\/INSTALL<br \/>\nU dillo\/dillo\/Makefile.am<br \/>\nU dillo\/dillo\/Makefile.in<br \/>\nU dillo\/dillo\/NEWS<br \/>\nU dillo\/dillo\/README<br \/>\nU dillo\/dillo\/aclocal.m4<br \/>\nU dillo\/dillo\/config.h.in<br \/>\nU dillo\/dillo\/configure<br \/>\nU dillo\/dillo\/configure.in<br \/>\nU dillo\/dillo\/depcomp<br \/>\nU dillo\/dillo\/dillorc<br \/>\nU dillo\/dillo\/install-sh<br \/>\nU dillo\/dillo\/missing<br \/>\nU dillo\/dillo\/mkinstalldirs<br \/>\nU dillo\/dillo\/stamp-h.in<br \/>\ncvs server: Updating dillo\/dillo\/doc<br \/>\nU dillo\/dillo\/doc\/Cache.txt<br \/>\nU dillo\/dillo\/doc\/Cookies.txt<br \/>\nU dillo\/dillo\/doc\/Dillo.txt<br \/>\nU dillo\/dillo\/doc\/Dw.txt<br \/>\nU dillo\/dillo\/doc\/DwImage.txt<br \/>\nU dillo\/dillo\/doc\/DwPage.txt<br \/>\n&#8230;<br \/>\n# Modifica o arquivo do projeto<br \/>\ncd \/dillo\/dillo\/doc<br \/>\nvi Cache.txt<br \/>\n# Update no arquivo para atualizar a c\u00f3pia local com a remota<br \/>\ncvs update Cache.txt<br \/>\nM Cache.txt<br \/>\ngleydson@host:\/tmp\/teste<br \/>\n# Damos o commit no arquivo<br \/>\ncvs commit Cache.txt<br \/>\n# Saimos do sistema<br \/>\ncvs logout<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Introdu\u00e7\u00e3o 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\u00e7\u00e3o em equipe, etc. O uso do CVS \u00e9 recomendado para qualquer desenvolvimento de projeto que tenha v\u00e1rios envolvidos trabalhando ao mesmo tempo. Para cada mudan\u00e7a [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[1,42,51],"tags":[147],"class_list":["post-310","post","type-post","status-publish","format-standard","hentry","category-viazap","category-leitura-recomendada","category-linux-linuxrs","tag-cvs"],"_links":{"self":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/310","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=310"}],"version-history":[{"count":1,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/310\/revisions"}],"predecessor-version":[{"id":311,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=\/wp\/v2\/posts\/310\/revisions\/311"}],"wp:attachment":[{"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=310"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=310"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.clusterweb.com.br\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=310"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}