Comandos do Linux e Unix: Sistema; Processos; Sistema de Arquivos; Rede; SSH SCP; VPN com SSH; RSYNC; SUDO; Arquivos Encriptados; Partições Encriptadas; Certificados SSL; CVS; SVN; Comando Úteis; Instalar Software; Converter Mídia; Impressão; Banco de Dados; Quota de Disco; Shells; Scripting; Programação

Comando CVS Linux

Configuração do servidor

Iniciar o CVS

Decida aonde o repositório principal vai permanecer e gerar uma cvs root. Por exemplo /usr/local/cvs (como root):

# mkdir -p /usr/local/cvs
    # setenv CVSROOT /usr/local/cvs      # Define o CVSROOT para o novo local (local)
    # cvs init                           # Gera todos os arquivos internos de configuração do CVS
    # cd /root
    # cvs checkout CVSROOT               # verifica os arquivos de configuração para modificá-los
    # cd CVSROOT
    edit config ( fine as it is)
    # cvs commit config
    cat >> writers                       # Gera um arquivo writers (também o readers opcionalmente)
    colin
    ^D                                   # Utiliza [Control][D] para sair da edição
    # cvs add writers                    # Adiciona o arquivo writers dentro do repositório
    # cvs edit checkoutlist
    # cat >> checkoutlist
    writers
    ^D                                   # Utiliza [Control][D] para sair da edição
    # cvs commit                         # Envia todas as alterações de configuração

Adiciona um arquivo readers se você quiser diferenciar permissões de leitura e escrita (read and write). Nota: Não edite (nunca) os arquivos diretamente no cvs principal, mas verifique o arquivo, modifique-o e verifique. Fizemos isso com o arquivo writers para definir o acesso a escrita.
há três modos populares de acessar o CVS nesse ponto. Os dois primeiros não necessitam de grandes configurações. Veja os exemplos em CVSROOT abaixo para como utilizá-los:

  • Acesso local direto ao file system. O(s) usuário(s) precisa(m) permissão ao arquivo o suficiente para acessar o CS directamente e não há mais autenticação em adição ao login do OS. No entando isso só é útil se o repositório for local.
  • Acesso remoto com o ssh e com o protocolo ext (ext protocol). Qualquer uso de uma conta com shell ssh e permissões de leitura e escrita (read/write) no servidor CVS podem acessar o CVS diretamente com o ext no ssh sem qualquer túneladicional. Não há processo no servidor sendo executado no CVS para ele que funcione. O login ssh faz a autenticação de login.
  • Acesso remoto com o pserver (porta padrão: 2401/tcp). Esse é o uso preferido por grande base de usuário desde que os usuários são autenticados pelo CVS pserver com uma base de dados de senha dedicada, logo não há necessidade para contas de usuários local. Essa configuração é explicada abaixo.

Configuração de rede com o inetd

O CVS pode ser executado localmente somente se um acesso a rede não for necessário. Para um acesso remoto, a daemon inetd pode iniciar o pserver com o seguinte linha em /etc/inetd.conf (/etc/xinetd.d/cvs no SuSE):

cvspserver	stream  tcp  nowait  cvs  /usr/bin/cvs	cvs \
    --allow-root=/usr/local/cvs pserver

Não é uma boa ideia bloquear a porta do port da Internet com o firewall e utilizar um túnel ssh para acessar o repositório remotamente.

Separar a autenticação

É possível ter usuários cvs que não são parte do OS (sem usuários local). Na verdade isso é provavelmente requerido também do ponto de vista da segurança. Simplesmente adicione um arquivo nomeado passwd (no diretório CVSROOT) contendo o login de usuário e senha no formato criptografado. Isso pode ser feito com a ferramenta htpasswd do apache (apache htpasswd tool).
Nota: Esse arquivo passwd é o único arquivo que deve ser editado diretamente no diretório CVSROOT. Também não será verificado. Mais informações com o htpasswd –help

# htpasswd -cb passwd user1 password1  # -c gera o arquivo file
    # htpasswd -b passwd user2 password2

Agora adicione :cvs no final de cada linha para dizer ao servidor cvs que altere o usuário para cvs (ou seja o que for que o ser servidor cvs estiver executando). Parece com isso:

# cat passwd
    user1:xsFjhU22u8Fuo:cvs
    user2:vnefJOsnnvToM:cvs

Testá-lo

Teste o login como usuário normal (por exemplo)

# cvs -d :pserver:colin@192.168.50.254:/usr/local/cvs login
    Logging in to :pserver:colin@192.168.50.254:2401/usr/local/cvs
    CVS password:

Variavel CVSROOT

Essa é uma variável de ambiente utilizada para especificar o local do repositório que estamos realizando as operações. Para uso local, Pode ser definido apenas para o diretório do repositório. Para uso na rede, o protocolo de transporte deve ser especificado. Defina a variável CVSROOT com o setenv CVSROOT string em um shell csh, tcsh shell, ou com o export CVSROOT=string em um shell sh, bash.

# setenv CVSROOT :pserver:<username>@<host>:/cvsdirectory
    Por exemplo:
    # setenv CVSROOT /usr/local/cvs                               # Utilizado localmente (somente)
    # setenv CVSROOT :local:/usr/local/cvs                        # O mesmo que acima
    # setenv CVSROOT :ext:user@cvsserver:/usr/local/cvs           # Acesso direto com o SSH
    # setenv CVS_RSH ssh                                          # para o acesso ext
    # setenv CVSROOT :pserver:user@cvsserver.254:/usr/local/cvs   # rede com o pserver

Quando o login for bem sucedido, a pessoa pode importar um novo projeto para dentro do repositório:
cd dentro do diretório root do seu projeto

cvs import <module name> <vendor tag> <initial tag>
    cvs -d :pserver:colin@192.168.50.254:/usr/local/cvs import MyProject MyCompany START

Aonde MyProject é o nome do novo projeto no repositório (utilizado mais tarde para verificar). Cvs importará o conteúdo do diretório atual para dentro do novo projeto.

Verificar:

# cvs -d :pserver:colin@192.168.50.254:/usr/local/cvs checkout MyProject
    ou
    # setenv CVSROOT :pserver:colin@192.168.50.254:/usr/local/cvs
    # cvs checkout MyProject

Tunelamento SSH para CVS

Precisamos de 2 shells para isso. No primeiro shell conectamos o servidor cvs com o ssh e direcionamos (port-forward) a conexão cvs. No segundo shell utilizamos o cvs normalmente como se estivesse sendo executado localmente.

no shell 1:

# ssh -L2401:localhost:2401 colin@cvs_server   # Conecte diretamente ao servidor CVS. Ou:
    # ssh -L2401:cvs_server:2401 colin@gateway     # Utilize um gateway para alcançar o CVS

no shell 2:

# setenv CVSROOT :pserver:colin@localhost:/usr/local/cvs
    # cvs login
    Logging in to :pserver:colin@localhost:2401/usr/local/cvs
    CVS password:
    # cvs checkout MyProject/src

Comandos CVS e uso

Import

O comando import é utilizado para adicionar um diretório inteiro, ele deve ser executado dentro do diretório para ser importado. Digamos que ao diretório /devel/ contem todos os arquivos e subdiretórios a serem importados. O nome do diretório no CVS (o módulo) será chamado “myapp”.

# cvs import [options] directory-name vendor-tag release-tag
    # cd /devel                          # Deve estar dentro do projeto para importá-lo
    # cvs import myapp Company R1_0      # libera tag, pode ser qualquer coisa em uma palavra

Depois de algum tempo um novo diretório “/devel/tools/” foi adicionado e precisa ser importado também.

# cd /devel/tools
    # cvs import myapp/tools Company R1_0

Verificar adição da atualização

# cvs co myapp/tools                 # Verificará somente as ferramentas do diretório
    # cvs co -r R1_1 myapp               # Verifica myapp no release R1_1 (está colado)
    # cvs -q -d update -P                # Uma atualização típica do CVS
    # cvs update -A                      # Redefine qualquer etiqueta colada (sticky tag) (ou data, opção)
    # cvs add newfile                    # Adiciona um novo arquivo
    # cvs add -kb newfile                # Adiciona um novo arquivo binário
    # cvs commit file1 file2             # Envia somente os dois arquivos
    # cvs commit -m "message"            # Envia todas as alterações feitas com uma mensagem

Gerar um patch

É melhor gerar e aplicar um a partir do diretório de desenvolvimento de trabalho relacionado ao projeto, ou de dentro do diretório fonte.

# cd /devel/project
    # diff -Naur olddir newdir > patchfile # Gera um patch a partir de um diretório ou de um arquivo
    # diff -Naur oldfile newfile > patchfile

Aplicar um patch

As vezes é necessário espanar um nível de diretório do patch, dependendo de como ele foi gerado. Em caso de dificuldades, simplesmente nas primeiras linhas do patch e tente -p0, -p1 ou -p2.

# cd /devel/project
    # patch --dry-run -p0 < patchfile    # Teste o caminho (path) sem aplicá-lo
    # patch -p0 < patchfile
    # patch -p1 < patchfile              # espana o primeiro nível do path

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *