CVS - Slides Parte 2 - Administração

57
2-1 CVS www.mardenneubert.com www.mardenneubert.com © 2005 Marden Neubert Administração do CVS Módulo 2 Foco: Administrador de Sistemas

Transcript of CVS - Slides Parte 2 - Administração

Page 1: CVS - Slides Parte 2 - Administração

2-1

CVS

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Administração do CVS

Módulo 2

Foco: Administrador de Sistemas

Page 2: CVS - Slides Parte 2 - Administração

2-2

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Agenda

• Planejando a capacidade para o CVS• Escolhendo a distribuição mais adequada• Instalando o CVS, de binários e de fontes• Criando e conhecendo melhor os

repositórios• Criando e importando projetos• Copiando, movendo e apagando

repositórios• Controlando acessos e permissões• Configurando o comportamento do CVS

Page 3: CVS - Slides Parte 2 - Administração

2-3

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Planejamento de Capacidade

• O CVS é um sistema cliente/servidor– Um planejamento para sua implantação deve levar em conta

ambas as partes, bem como sua comunicação

• Podemos descartar a necessidade de planejamento de capacidade para o cliente CVS– É muito leve, qualquer estação de trabalho é capaz de

executá-lo– Muitos IDEs modernos já trazem o cliente embutido

• O planejamento de capacidade do servidor pode ser dividido em 4 aspectos (em ordem de relevância):– Armazenamento– Rede– Memória– Processamento

Page 4: CVS - Slides Parte 2 - Administração

2-4

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Armazenamento

• Planejar o armazenamento para o CVS equivale a estimar o tamanho do repositório, ou seja, dos históricos

• Para isso existem 3 fatores a serem considerados, em relação aos arquivos sob controle de versões:– Tamanho dos arquivos– Freqüência de alteração– Tipo dos arquivos (texto ou binário)

• Antes de detalhar cada fator, vejamos como o CVS organiza seus arquivos de histórico:– Para arquivos de texto, os históricos guardam somente as

diferenças entre as revisões– Para binários, cada revisão é mantida integralmente nos

históricos

Page 5: CVS - Slides Parte 2 - Administração

2-5

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Tamanho dos Históricos

• Obviamente, quando maiores os arquivos, mais espaço eles ocuparão no repositório

• Cada arquivo evolui em velocidade decrescente até atingir uma razoável estabilidade– Isso quer dizer que, com o passar do tempo, seu

histórico cresce cada vez menos– Podemos associar a curva de crescimento de um

histórico típico à função logaritmo (próximo slide)

• A questão a ser respondida é: Como estimar o tamanho de estabilidade de um histórico?– Assumindo que sabemos o tamanho do arquivo em si

Page 6: CVS - Slides Parte 2 - Administração

2-6

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Crescimento dos Históricos

0

1

2

3

4

5

6

7

Tempo

Tam

anho r

ela

tivo d

o h

istó

rico

Arquivo 1 Arquivo 2 Arquivo 3

Page 7: CVS - Slides Parte 2 - Administração

2-7

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Calculando o Tamanho dos Históricos

• Tomando estatísticas sobre projetos, criamos algumas “regras do dedão”

• Dado o tamanho F (talvez estimado) do arquivo, o tamanho H de seu histórico é dado por:– Para arquivos texto: H = 3F– Para arquivos binários: H = 5F

• É razoável assumir que F é dado– Para projetos importados, ele é

conhecido, basta verificar o tamanho dos fontes– Para novos projetos, os programadores podem

estimá-lo com base em projetos anteriores

Page 8: CVS - Slides Parte 2 - Administração

2-8

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Projetando o Armazenamento

• A principal recomendação é usar o bom senso na aquisição do equipamento– Os cálculos ajudam, mas lembrem que os históricos demoram

para atingir a estabilidade

• A capacidade de armazenamento pode começar menor e crescer ao longo do projeto– Escolha uma ocupação máxima (p.e., 80%) e, ao alcançá-la,

aumente a capacidade– A movimentação de repositórios é uma tarefa relativamente

simples, assim como o back-up

• Os maiores vilões são os arquivos binários– Normalmente são maiores e seus históricos crescem mais

rápido– Por sorte, muitos deles não devem ficar sob o controle de

versões!

Page 9: CVS - Slides Parte 2 - Administração

2-9

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Rede

• O planejamento da rede leva em conta 2 fatores:– O tamanho total do projeto (arquivos, não históricos)– A taxa de acessos ao repositório, que depende do

número de programadores envolvidos no projeto

• Como vimos, o 1o fator pode ser estimado• Para analisar o 2o fator, façamos considerações:

– Cada programador trabalha a maior parte do tempo em sua área de trabalho e a atualiza algumas vezes ao dia

– Quando uma atualização é feita:• O CVS verifica o timestamp do arquivo local• Se ele for diferente do momento da última atualização, o CVS faz

uma comparação para identificar diferenças, no servidor

Page 10: CVS - Slides Parte 2 - Administração

2-10

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Projetando a Capacidade de Rede

• Mais uma “regra do dedão”:– Dado M, o tamanho total do módulo– Cada dia, cada programador gera:

• 0,5M bytes de tráfego do cliente para o servidor• 1,5M bytes de tráfego do servidor para o cliente

• A regra é uma grande simplificação– Assume que cada programador trabalha em um

projeto– Não estima picos de tráfego

• Dicas para racionalizar o consumo de rede:– Mantenha relógios de clientes e servidor em sincronia– Recomende o uso do parâmetro –z nos clientes

Page 11: CVS - Slides Parte 2 - Administração

2-11

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Memória

• Memória dificilmente será um problema– O CVS tem mais de 15 anos, portanto,

é econômico para os padrões atuais

• Outra regra:– O consumo máximo de memória será 10x o

tamanho do maior arquivo

• Onde podem surgir problemas:– Muitos programadores acessando o servidor ao

mesmo tempo: o CVS cria um processo para cada cliente

– Módulos muito grandes: o check-out será pesado– Arquivos muito grandes: comandos como diff

carregam todos os dados em memória

Page 12: CVS - Slides Parte 2 - Administração

2-12

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Processamento

• É a menor das preocupações– O CVS foi criado quando processadores

de 33MHz eram considerados rápidos

• A regra:– Qualquer máquina que puder ser chamada de

“servidor” comportará o servidor CVS– Procure não colocar muitos outros serviços na

máquina

• A arquitetura da máquina é mais importante que o processador– Um barramento rápido e um I/O eficiente farão a

diferença

Page 13: CVS - Slides Parte 2 - Administração

2-13

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Instalando o CVS

• Passo 1: Definir o sistema operacional– UNIX ou Windows

• Passo 2: Escolher uma distribuição– GNU CVS ou CVSNT

• Passo 3: Compilar a distribuição (opcional)– Caso se tenha optado por uma distribuição-fonte

• Passo 4: Instalar a distribuição– Manualmente ou usando um instalador

• Passo 5: Conferir a instalação– Executar o CVS e testar alguns comandos

Page 14: CVS - Slides Parte 2 - Administração

2-14

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Definindo o Sistema Operacional

• É mais uma questão de política da empresa do que uma necessidade do CVS– Hoje, tanto servidor quanto clientes podem ser instalados

em UNIX, Windows e até Macintosh

• O mais importante é escolher o servidor levando em conta a demanda de acesso a disco e rede

• Entretanto, há algumas restrições:– Escolhendo o Windows como servidor, é recomendável optar

pela distribuição CVSNT; as versões possíveis são NT, 2000 e XP

– Caso se opte pelo uso de SSH para se ter conexões seguras entre cliente e servidor, versões compatíveis de SSH devem ser usadas

– Com clientes em múltiplas plataformas, os programadores devem ficar atentos às quebras de linha em seus editores

Page 15: CVS - Slides Parte 2 - Administração

2-15

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Escolhendo uma Distribuição

• As duas distribuições do CVS são:– GNU CVS: a distribuição original do CVS, de código

aberto (licença GPL) e mantida pela FSF– CVSNT: uma derivação do GNU CVS, também GPL,

mantida pela empresa March-Hare• Suporte comercial e treinamento são oferecidos

• Ambas podem ser instaladas em Windows e Linux– A instalação do servidor e do cliente é a mesma

• A recomendação é:– Em clientes UNIX/Linux: utilizar o GNU CVS– Em clientes Windows e Macintosh: utilizar o CVSNT– Para o servidor CVS: usar UNIX/Linux com o GNU CVS

Page 16: CVS - Slides Parte 2 - Administração

2-16

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Qual Versão Instalar?

• Optando pelo GNU CVS, há duas opções:– Versões stable : estão em uso há bastante tempo,

sem grandes evoluções recentes ou novas funcionalidades

• Atualmente, as versões estáveis estão sob o número 1.11• A última versão estável do GNU CVS é a 1.11.21

– Versões feature : introduzem novos recursos ou melhorias arquiteturais

• Atualmente, as novas versões evolutivas estão sob 1.12• A última versão evolutiva do GNU CVS é a 1.12.13

• Optando pelo CVSNT:– A versão paga (CVS Suite) está na versão 2.5.02– A versão open-source está na versão 2.5.03

Page 17: CVS - Slides Parte 2 - Administração

2-17

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Instalação e Verificação

• É recomendado instalar uma distribuição binária– Compilar uma distribuição-fonte só se justifica em

situações muito específicas

• A instalação do CVS é uma tarefa muito simples– Em qualquer distribuição ou sistema operacional, é

possível usar um instalador– Faremos a instalação (Linux e Windows) no próximo lab

• Para conferir a instalação:– cvs –v : mostra a versão instalada localmente– cvs version : mostra as versões do cliente local e do

servidor, se um servidor remoto estiver em uso

Page 18: CVS - Slides Parte 2 - Administração

2-18

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Lab2-1: Instalando o CVS

• Instalar o CVS no Linux– Compilar a distribuição GNU CVS em código-

fonte– Instalar a distribuição binária do GNU CVS

• Instalar o CVS no Windows– Instalar a distribuição binária do CVSNT

• Testar a Instalação– Verificar a instalação local– Verificar a instalação do servidor– Usar o comando version

Page 19: CVS - Slides Parte 2 - Administração

2-19

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Localização do Repositório

• O repositório é um diretório especial contendo históricos– Ao menos um repositório deve estar disponível para o uso do

CVS

• O ideal é cada programador trabalhar em um repositório– Boa prática: criar um repositório por empresa ou departamento

• Um repositório pode ser criado em qualquer disco local no servidor CVS, com algumas observações:– A área escolhida deve preferencialmente ter back-ups diários– O sistema de arquivos escolhido não pode travar o servidor se

atingir sua capacidade máxima– Em sistemas UNIX, um local comum é /var/lib/cvs– Em sistemas Windows, pode-se optar por D:\cvs

• Crie um usuário para ser o dono de todo o repositório– Garanta que ele é o dono da raiz do repositório

• Trate o servidor CVS como um servidor de arquivos!

Page 20: CVS - Slides Parte 2 - Administração

2-20

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Criando um Repositório

• Um repositório é criado pelo comando init– Este comando cria um diretório no local especificado,

com a configuração padrão de um repositório

• O local de criação do repositório é especificado pela opção global -d ou pela variável $CVSROOT– É a mesma forma que usamos para especificar a

localização do repositório para o comando checkout

• Com init, é mais comum usar-se a opção -d– Nem é recomendável para o administrador de sistemas

definir a variável $CVSROOT em seu ambiente

• Não há perigo se init for chamado especificando-se um repositório existente (nada é sobrescrito)

Page 21: CVS - Slides Parte 2 - Administração

2-21

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

O Comando init

• O comando init cria um repositório• cvs [op_glob] init

– op_glob são opções globais do CVS. A única opção que afeta init é –d, que dá a localização do repositório

• Ele não recebe argumentos e, se a opção –d não for especificada, usa a variável $CVSROOT

Page 22: CVS - Slides Parte 2 - Administração

2-22

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Lab2-2: Criando um Repositório

• Criar um repositório com o comando init• Examinar os arquivos criados no repositório• Fazer o check-out do diretório CVSROOT• Alterar um arquivo na cópia de trabalho• Submeter uma alteração em um arquivo

administrativo

Page 23: CVS - Slides Parte 2 - Administração

2-23

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

A Estrutura do Repositório

• É mera curiosidade saber como as informações são armazenadas em um repositório– Todos os acessos devem ser feitos pelos comandos

CVS, pois o formato interno do repositório pode mudar

• Um repositório CVS é um diretório comum, contendo, em um primeiro nível:– Um diretório CVSROOT, contendo arquivos

administrativos (de configuração e controle)• Inclui históricos e as cópias mais recentes desses arquivos

– Zero ou mais diretórios, correspondendo a módulos (projetos) sob o controle de versões

• Cada subdiretório de um módulo inclui os históricos dos arquivos correspondentes (mesmo nome, seguido de ,v)

Page 24: CVS - Slides Parte 2 - Administração

2-24

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Criando Projetos no CVS

• Na terminologia do CVS, projetos e módulos são sinônimos– Conceitualmente, são unidades independentes de trabalho,

como programas, projetos, artigos, sites– Para o CVS, são diretórios sob a raiz do repositório

• Para criar um projeto no CVS é preciso importá-lo– Esta tarefa cabe em geral ao gestor de configuração

• Preparação– Crie um conjunto inicial de arquivos para a importação– Organize-os em uma estrutura quase definitiva de

diretórios

• Importação– Execute o comando import, para popular o repositório

• Declaração (opcional)– Edite o arquivo modules, incluindo a declaração do módulo

Page 25: CVS - Slides Parte 2 - Administração

2-25

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

O Comando import

• O comando import cria um novo projeto ou atualiza arquivos fornecidos por terceiros– Deve ser executado de dentro do diretório onde se

encontram os arquivos a importar

• cvs [op_glob] import [op_cmd]nome_projeto ramo_fornec etiq_versão...– op_glob e op_cmd são opções globais e do

comando– nome_projeto é o nome do projeto a ser criado– ramo_fornec é o nome do ramo do fornecedor dos

arquivos; as revisões criadas ficarão sob esse ramo– etiq_versão... são uma ou mais etiquetas a serem

aplicadas sobre as revisões criadas, marcando a versão

Page 26: CVS - Slides Parte 2 - Administração

2-26

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Lab2-3: Importando Projetos

• Importar um conjunto de arquivos para o CVS, criando um novo projeto

• Importar um novo conjunto de arquivos do mesmo fornecedor para o mesmo módulo

• Alterar um arquivo do projeto e importar novamente, causando um conflito

• Entender o funcionamento dasopções de arquivos ignoradose filtrados

Page 27: CVS - Slides Parte 2 - Administração

2-27

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Importando de Outros SCVs

• Ao migrar para o CVS, o ideal é importar os arquivos mantendo seus históricos

• A forma geral para se importar históricos para o CVS é através de arquivos RCS– Basta criar um diretório para o projeto no repositório e

copiar os arquivos RCS para ele

• Há scripts disponíveis para exportar arquivos RCS– SCCS: usar o script sccs2rcs na distribuição GNU CVS– PVCS: usar o script pvcs_to_rcs no GNU CVS– Outros sistemas podem disponibilizar seus conversores

• Em último caso, a opção é importar as últimas revisões e algumas liberações mais relevantes

Page 28: CVS - Slides Parte 2 - Administração

2-28

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Gerenciando Back-ups

• Um repositório CVS é uma árvore de diretórios– Back-ups podem ser feitos com as mesmas

ferramentas utilizadas para outras áreas de dados– É importante que estrutura, propriedades,

permissões e outros atributos sejam mantidos como no original

• As seguintes atividades estão relacionadas à gerência de back-ups de um repositório CVS– Congelar o repositório: pré-requisito para efetuar a

cópia do repositório– Copiar os dados: criar uma foto do repositório– Restaurar um back-up: voltar a um estado anterior– Espelhar um repositório: replicar os dados para

leitura

Page 29: CVS - Slides Parte 2 - Administração

2-29

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Congelando um Repositório

• Significa impedir que usuários modifiquem o repositório– Visa garantir que uma cópia encontre todos os dados em um

estado consistente– Caso isso não seja feito, uma cópia pode ser feita em meio a

um check-in de vários arquivos

• Há diversas alternativas para atingir esse objetivo– Desligar o processo servidor do CVS– Impedir logins no servidor (ou deixá-la em modo single user)– Bloquear o servidor com um firewall (ou desligar a rede)– Travar o repositório no modo exclusivo para leitura

• Travar o servidor é a forma preferida– Permite que usuários continuem usando o servidor para leitura– Os materiais do aluno incluem scripts para congelar e

descongelar

Page 30: CVS - Slides Parte 2 - Administração

2-30

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Criando e Restaurando Back-ups

• Uma vez congelado o repositório, uma cópia pode ser criada usando uma ferramenta de back-up– Todos os atributos devem ser preservados, para

manter as configurações de segurança do repositório– Exemplo de ferramenta simples e acessível: tar

• Para restaurar um back-up:– Certifique-se que os atributos serão preservados– Congele totalmente o repositório durante a

restauração– Garanta que o diretório CVSROOT foi restaurado; os

projetos podem ser restaurados em qualquer ordem– Peça que usuários façam novo check-out de seus

projetos e refaçam mudanças pendentes

Page 31: CVS - Slides Parte 2 - Administração

2-31

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Espelhando um Repositório

• Muitos projetos têm cópias públicas disponíveis – Projetos open-source de instituições como FSF, Apache

• As cópias devem permitir somente leitura– CVS não trata modificações em diferentes repositórios

• Os repositórios-espelho podem estar desde na mesma máquina até em uma rede distante

• O processo de espelhamento é similar ao back-up– Congele o repositório original (permita somente leitura) e

o destino (totalmente)– Faça a cópia usando uma ferramenta (ex.: rsync)– Descongele ambos os repositórios

Page 32: CVS - Slides Parte 2 - Administração

2-32

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Editando um Repositório

• Editar um repositório significa realizar uma das seguintes operações:– Mover ou apagar todo um repositório– Mover ou apagar um módulo– Mover ou apagar arquivos e diretórios em um módulo

• As operações listadas têm diferentes motivações– Move-se um repositório para colocá-lo em uma partição de

um novo disco, ou em uma área com back-up– Move-se um módulo quando se muda de idéia sobre seu

nome– Move-se um arquivo ou um diretório quando o projeto

demanda essa alteração– Remove-se qualquer um dos itens listados quando ele não

está mais em uso

Page 33: CVS - Slides Parte 2 - Administração

2-33

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Movendo e Apagando Repositórios

• Mover um repositório é similar a criar um back-up e depois restaurá-lo– Congele o repositório– Copie os arquivos para a nova área, mantendo atributos

como propriedade, permissões e datas de alteração (cp –a)

– Peça para que os usuários alterem suas variáveis $CVSROOT, façam check-outs do novo repositório e refaçam alterações

• Antes de remover um repositório certifique-se do que está fazendo– Faça um back-up dos dados (nunca se sabe!)– Verifique se há scripts usados pelos arquivos

administrativos repositório e que podem ser removidos– Remova recursivamente a raiz do repositório

• Por exemplo: rm –rf /var/lib/cvs

Page 34: CVS - Slides Parte 2 - Administração

2-34

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Movendo e Apagando Módulos

• Há duas opções para mover (renomear) um módulo:– Mover o diretório correspondente ao módulo

• Alternativa mais radical; o nome original não é mais acessível

• Invalida as áreas de trabalho dos usuários

– Definir o novo módulo no arquivo modules• Opção mais moderada, não necessita acesso direto ao

servidor• O nome original do módulo continua acessível, cópias de

trabalho antigas continuam válidas

• Ao remover um módulo, antes faça um back-up– Verifique se há referências ao diretório em modules– Remove recursivamente o diretório do módulo

Page 35: CVS - Slides Parte 2 - Administração

2-35

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Movendo Arquivos

• O CVS permite adicionar e remover arquivos com add e remove, mas não tem um comando para mover arquivos

• Há 3 alternativas para isso:– Renomear o arquivo na área de trabalho, remover do

repositório e então adicionar, usando remove e add• É simples, não requer acesso privilegiado ao repositório,

liberações são preservadas, mas o histórico é interrompido

– Renomear o arquivo de histórico no repositório (mv)• Preserva as revisões no histórico do arquivo, mas requer acesso

shell ao repositório e pode danificar liberações anteriores

– Copiar o arquivo antigo para criar o novo e mover o antigo para o Attic, como uma revisão morta

• Preserva as revisões no histórico e liberações antigas, mas é bem mais complexo e pode levar a problemas com ramos

Page 36: CVS - Slides Parte 2 - Administração

2-36

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Movendo e Apagando Diretórios

• Ao contrário de arquivos, o CVS não possui comandos para manipular diretórios

• Um diretório é adicionado ao repositório se algum arquivo debaixo dele for adicionado

• Para apagar um diretório, remova todos seus arquivos– Fazendo isso, o diretório vazio continua sendo visto; evita-se

isso com a opção –P em checkout e update

• Para mover um diretório há 3 formas:– Mover todos os arquivos para o novo nome na cópia local,

removê-los do local antigo no repositório e adicionar os “novos” arquivos

– Renomeá-lo diretamente no repositório– Copiá-lo para o novo nome no repositório e depois remover

todos os arquivos sob o nome antigo a partir de uma área de trabalho

Page 37: CVS - Slides Parte 2 - Administração

2-37

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Segurança no CVS

• A segurança de projetos sob controle de versões no CVS depende dos seguintes aspectos:– A área de armazenamento do repositório– O servidor CVS e seu ambiente– Todos os computadores contendo áreas de trabalho– Os métodos de acesso ao repositório– O armazenamento dos back-ups

• A segurança do servidor, das estações de trabalho e dos back-ups é comum a qualquer ambiente

• Destacaremos questões relativas às permissões no repositório e aos métodos de acesso

Page 38: CVS - Slides Parte 2 - Administração

2-38

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Controlando Permissões

• A segurança do armazenamento do repositório depende das permissões do sistema de arquivos– É dependente do sistema operacional no qual o servidor executa– Discutiremos as configurações para um servidor UNIX

• Raiz do repositório– Apenas os usuários que podem criar projetos devem ter

permissão de leitura, escrita e execução; os demais, leitura e execução

– Deve ter o bit SGID ligado

• Diretório CVSROOT– Todos usuários devem ter acesso de leitura a todos os arquivos e

permissão de escrita aos arquivos history e val-tags– Só usuários avançados podem ter acesso de escrita aos demais

arquivos (administrador de sistemas e gestor de configuração)

Page 39: CVS - Slides Parte 2 - Administração

2-39

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Permissões em Projetos

• Só é possível controlar permissões no nível de diretórios– Quando se faz um check-in, o CVS cria uma cópia

temporária do histórico e depois a joga sobre o original

– Consequentemente, permissões são sobrescritas e o dono é trocado a cada nova revisão de um arquivo

• A segurança em projetos é garantida por grupos– Cada projeto deve ser propriedade de um grupo e as

permissões dos diretórios devem refletir isso• Configuração geral: u=rwx, g=rwx, o=rx

– O bit SGID também deve estar ativo

Page 40: CVS - Slides Parte 2 - Administração

2-40

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Permissões de Somente Leitura

• Para configurar permissões de somente leitura em um projeto, é preciso mudar o local de criação de travas– Por default, o CVS cria travas dentro do diretório do projeto

• Como o CVS também cria travas para leitura, se o default for mantido, ocorrerá uma dos seguintes casos:– Se tirarmos a permissão de escrita do módulo para outros,

impedimos a leitura por quem não é do grupo do projeto– Se dermos permissão de escrita no módulo para outros, quem

não pertence ao grupo do projeto poderá alterar os arquivos

• O arquivo que controla o local das travas é config– A propriedade a ser alterada chama-se LockDir

• Para impedir a leitura de um projeto, deve-se tirar as permissões de leitura e execução de outros

Page 41: CVS - Slides Parte 2 - Administração

2-41

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Lab2-4: Controlando Permissões

• Criar um grupo e associá-lo a usuários e projetos

• Configurar o repositório CVS para permitir acessos de somente leitura a um projeto

• Testar a configuração, tentando check-outs e check-ins com usuários dentro e fora do grupo

• (Opcional) Configurar um projetopara não permitir a leitura porusuários fora de seu grupo

Page 42: CVS - Slides Parte 2 - Administração

2-42

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Repositórios Locais e Remotos

• O CVS opera com repositórios locais ou remotos– No primeiro caso, ele funciona como um programa

independente, no segundo, como cliente/servidor

• Quando optar pelo uso local?– Em um projeto particular– Com uma equipe usando um único

servidor por terminais

• E o uso remoto?– Em projetos

distribuídos– Com equipes onde cada um usa sua

própria estação de trabalho Repositório

LAN

`

Terminal

Internet

Servidor

1

2

3

Page 43: CVS - Slides Parte 2 - Administração

2-43

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Métodos de Acesso Remoto

• Como vimos no módulo introdutório, um repositório pode ser especificado no formato:– [:método:][usuário[:senha]@][servidor[:porta]]raiz

• O elemento método pode ser um dentre:– local: para repositórios na máquina local– ext: método de conexão por shell externo, estilo rsh ou ssh– fork: para conectar na máquina local como se fosse remota– server: método de conexão rsh, interno ao CVS– gserver: conexões usando a GSS-API (Kerberos 5)– kserver: conexões usando Kerberos 4– pserver: conexões usando o servidor de senhas interno

• Dependendo do método especificado, alguns dos outros elementos podem ser omitidos

Page 44: CVS - Slides Parte 2 - Administração

2-44

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Os Métodos local e fork

• São usados para acessar repositórios locais• Usar o método local é equivalente a

especificar diretamente o caminho do repositório– –d :local:/var/lib/cvs é idêntico a –d /var/lib/cvs

• O método fork força o CVS a funcionar no modo cliente/servidor, mas não usa a rede– Cliente e servidor executam sob o mesmo usuário:

o processo servidor é um fork do cliente– É usado para depuração, ajudando a verificar se um

problema está na rede ou no modo cliente/servidor

Page 45: CVS - Slides Parte 2 - Administração

2-45

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Os Métodos ext e server

• O método ext é um dos mais utilizados– Ele usa um shell externo para a conexão remota– Combinado com o SSH, é a opção para redes inseguras

• Algumas configurações de variáveis de ambiente:– O executável do shell cliente deve ser especificado pela

variável de ambiente $CVS_RSH, na máquina cliente– O executável do CVS deve estar no $PATH do servidor, ou o

cliente deve apontar $CVS_SERVER para ele

• O shell dispara o comando cvs no servidor com as permissões do usuário remoto que conectou

• O método server é similar e usa um shell interno– Depende de um processo servidor: comando server

Page 46: CVS - Slides Parte 2 - Administração

2-46

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Os Métodos gserver e kserver

• O método gserver usa a GSS-API para permitir autenticação e criptografia da conexão CVS– Essa API apenas define uma interface, quem

autentica e criptografa é outro sistema, tal como Kerberos 5

• O método kserver usa diretamente Kerberos 4– Este sistema tem falhas que foram corrigidas na

versão 5 e deve ser evitado em novas instalações do CVS

• Servidor e cliente CVS devem ser recompilados para permitir o uso desses métodos

• Um processo deve ser iniciado no servidor para receber conexões por pserver e kserver– Em sistemas UNIX, deve-se editar inetd.conf

Page 47: CVS - Slides Parte 2 - Administração

2-47

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

O Método pserver

• Permite conexões com o repositório usando usuários e senhas armazenados no servidor– O administrador deve criar um arquivo passwd

• O método pserver tem algumas vantagens– Já é automaticamente suportado pelo CVS– Permite acesso anônimo, sem senha e somente leitura

• Há algumas desvantagens– A codificação das senhas no servidor é trivial– A comunicação cliente/servidor não é criptografada

• Para receber conexões pserver, um processo deve ser iniciado no servidor (inetd.conf)

• Para invocar comandos pelo método pserver, o cliente deve antes executar login e, ao fim da sessão, logout

Page 48: CVS - Slides Parte 2 - Administração

2-48

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Lab2-5: Configurando oAcesso Remoto

• Testar a instalação do servidor SSH no Linux• Instalar um cliente SSH no Windows (PuTTY)• Testar a conexão cliente/servidor• Criar e configurar chaves pública e privada• Configurar $CVS_RSH e realiza um check-

out usando o método ext• (Opcional) Realizar um check-out usando o

método pserver

Page 49: CVS - Slides Parte 2 - Administração

2-49

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Configurando o Servidor CVS

• O comportamento do servidor é configurado por:– Arquivos administrativos– Variáveis de ambiente

• Arquivos administrativos estão no repositório sob o diretório CVSROOT– São únicos por repositório; aplicam-se a todos os

projetos e todos os usuários

• Variáveis de ambiente são definidas pelo cliente– Quando o CVS funciona em modo cliente/servidor,

elas são lidas pelo cliente e passadas para o servidor– Portanto, o usuário final é capaz de configurar alguns

comportamentos do servidor

Page 50: CVS - Slides Parte 2 - Administração

2-50

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Os Arquivos Administrativos

• O CVS funciona satisfatoriamente sem que seja necessário editar os arquivos administrativos

• Porém, alguns comportamentos avançados podem ser obtidos usando corretamente tais arquivos

• Os principais arquivos administrativos são:– modules: lista os módulos presentes no repositório– cvsignore: especifica padrões de arquivos ignorados– cvswrappers: especifica padrões de arquivos filtrados– config: define configurações variadas do repositório– commitinfo, verifymsg, loginfo: definem gatilhos

que configuram o processo de check-in

Page 51: CVS - Slides Parte 2 - Administração

2-51

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

O Arquivo modules

• Lista projetos (módulos) presentes no repositório– Um projeto não precisa estar em modules para ser visível: basta

que ele seja um subdiretório da raiz do repositório

• Entretanto, incluir projetos em modules tem vantagens:– Os projetos listados em modules são exibidos pelo comando

checkout, quando se usa –c ou –s– É possível definir módulos especiais ou excluir diretórios

• Cada linha é uma definição de módulo:– Módulo normal: nome [opções] dir [arquivos...]

• É possível especificar em dir um subdiretório qualquer do repositório

• Se arquivos forem especificados, somente eles serão obtidos– Módulo alias: nome –a [!dir_excluído] alias...

• É possível excluir diretórios precedendo-os por !– Inclusão de módulo: nome [opções] &módulo_inc...

• Quando nome for obtido, ele terá um subdiretório módulo_inc

Page 52: CVS - Slides Parte 2 - Administração

2-52

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Opções Permitidas em modules

• Os módulos normais e com inclusão permitem as seguintes opções:– -d outro_nome: o diretório de trabalho terá

outro_nome, não o nome do módulo– -e programa: programa será executado sempre

que o módulo for exportado– -o programa: programa será executado sempre

que foi feito um check-out do módulo– -t programa: programa será executado sempre

que uma etiqueta for aplicada pelo comando rtag– -s status: define um status para o módulo. Este

status é consultado por checkout, com a opção -s

Page 53: CVS - Slides Parte 2 - Administração

2-53

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

O Arquivo cvsignore

• Alguns arquivos devem ser ignorados pelos comandos CVS, tais como import e update– Esses arquivos nunca serão colocados sob controle

de versões e nem queremos que o CVS os veja– Exemplos: arquivos resultantes de compilação,

temporários, arquivos de back-up, links (atalhos)

• Padrões de nomes de arquivos que devem ser ignorados são listados em cvsignore– O CVS já oferece alguns padrões ignorados por

default

• Outros padrões podem ser especificados de outras formas– Arquivo .cvsignore, variável $CVSIGNORE, opção -I

Page 54: CVS - Slides Parte 2 - Administração

2-54

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

O Arquivo cvswrappers

• O CVS permite que algumas configurações de arquivos sejam controladas de acordo com padrões de nome

• Tratamento de palavras-chave: o CVS pode tentar expandir algumas palavras envolvidas por $– A opção –k controla se elas serão expandidas ou não

• Metodologia de atualização: o CVS pode atualizar um arquivo usando diferenças ou uma cópia nova– A opção –m controla se será tentada a atualização por

diferenças ou se será feita uma cópia da nova revisão

• O arquivo cvswrappers especifica padrões e suas opções

• O uso mais comum desse arquivo é listar padrões de nomes de arquivos binários, com a opção –k b

Page 55: CVS - Slides Parte 2 - Administração

2-55

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

O Arquivo config

• O arquivo config é uma miscelânea de configurações do repositório CVS

• Ele mudou bastante nas últimas versões do CVS• Algumas configurações que config permite:

– Especificar o diretório onde as travas são criadas– Controlar o que é registrado no arquivo history, que

armazena o histórico de atividade do repositório– Fazer com que os diretórios CVS das cópias de trabalho

sejam criados em uma árvore de diretórios à parte– Permitir que o servidor pserver procure um usuário no

sistema operacional se ele não estiver em passwd

Page 56: CVS - Slides Parte 2 - Administração

2-56

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Os Arquivos de Suporte ao Check-in

• Alguns arquivos administrativos configuram programas externos a serem executados– Os eventos que podem disparar tais programas

são a aplicação de etiquetas e o check-in

• Os arquivos de suporte ao check-in são:– commitinfo: especifica programas para validar

a revisão submetida em um commit– verifymsg: especifica programas para verificar

a mensagem de log de um commit (opção –m)– loginfo: especifica programas para pós-

processar a mensagem de log de um commit

• Outros arquivos similares: taginfo e rcsinfo

Page 57: CVS - Slides Parte 2 - Administração

2-57

www.mardenneubert.comwww.mardenneubert.com© 2005 Marden Neubert

Variáveis de Ambiente

• Principais variáveis de ambiente vistas pelo CVS:– $CVSIGNORE, $CVSWRAPPERS: listam padrões de

nomes de arquivos a serem ignorados e filtrados– $CVSREAD: se definida, checkout e update deixam

os arquivos da área de trabalho read-only– $CVSEDITOR, $EDITOR, $VISUAL: configuram o

editor invocado pelo CVS. São consultadas nesta ordem– $PATH: no cliente, usada para achar o shell para o

método ext e no servidor, para o executável do CVS– $CVS_RSH: nome do executável do shell externo– $CVS_SERVER: nome do executável do CVS, invocado

pelo processo servidor nos métodos ext, server e fork– $TMPDIR: diretório temporário usado pelo CVS