Feeds:
Posts
Comentários

Archive for 17 novembro, 2008

Olá, hoje vou demonstrar como criar um servidor de controle de versão distribuído Bazaar. Para tanto temos basicamente 2 alternativas:

  1. Não fazer nenhuma configuração de Bazaar no servidor, apenas utilizar a estrutura existente.
  2. Instalar o Bazaar no servidor para prover o recurso do “Fast Server” que dá uma melhora na performance, ( em alguns testes que eu fiz baixar uma arvore de codigo direto do meu servidor para minha maquina tive um ganho de aproximadamente 20% )

Alguns protocolos de comunicação são suportados pelo Bazaar, são eles:

file:// => Este é o padrão, o protocolo utilizado quando você trabalha com branches no mesmo computador ou em um compartilhamento da rede no computador local, ou seja, se você fizer o seguinte:

$ bzr init meubranch
$ cd meu branch
hack
hack
hack
$ bzr commit -m "tudo pronto!"
$ cd ..
$ bzr checkout meubranch meubranch1

o último comando irá utilizar o protocolo file://

sftp:// => Este é o protocolo para usar em uma conexão segura ssh+ftp com o servidor, claro que se também é possível trabalhar localmente com este protocolo, mas é totalmente desnecessário. Este protocolo é o mais comum para servidores sem setup de Bazaar, pois fornece um bom nível se segurança. É necessário informar o usuário e senha do usuário do servidor para fazer operações com sftp, por exemplo:

bzr branch sftp://usuario@meuservidor/~/branch
usuario@meuservidor's password:_

Então você deve informar a senha do usuário para continuar a operação.
se não quiser entrar com a senha para cada operação é possível guardar as configurações de usuário e senha em um arquivo de autenticação, você pode ver mais osbre este procedimento aqui: http://doc.bazaar-vcs.org/latest/en/user-reference/bzr_man.html#authentication-settings

ftp:// => Este protocolo utiliza ftp, pode ser necessário informar um usuário e senha assim como no sftp a maior diferença é que os dados irão trafegar sem criptografia, o restante vale o mesmo do sftp.

http:// ou https:// => O Bazaar pode acessar qualquer branch que esteja visível via http ou https (com criptografia ssl), porém estes branches são apenas para leitura, é possível configurar o Apache por exemplo para permitir gravação em repositórios Bazaar sobre http, mas não é seguro e nem muito simples, então descarte a não ser que seja a última alternativa. Entretanto é um ótimo protocolo para repositórios publicados como somente leitura.

bzr:// => Este é o protocolo interno do Bazaar para utilizar em modo FastServer. Note que este protocolo sozinho não oferece segurança.

bzr+ssh:// => Este é o mesmo protocolo acima porém, utilizando um túnel ssh para trafegar os dados. É necessário possuir um servidor ssh instalado no servidor.

Servidor Sem Configuração.

Bem você vai precisar de um servidor linux instalado, de preferência o Ubuntu Server Edition 8.04 ou 8.10. As instruções de como instalar um servidor estão fora do escopo deste guia, mas, vá até o Google e digite “instalando ubuntu server”. Também é possível utilizar um servidor Windows mas eu particularmente não recomendo.

Considerando que o servidor já esteja funcionando, ele deve ter um servidor ssh com sftp rodando, e você ter acesso a ele é claro.
Pronto! Seu servidor Bazaar já está pronto para uso!:). Mas como isso? Não é preciso fazer configurações adicionais? De fato não, como o Bazaar é um controle de versão distribuído (4a Geração) que não precisa de nenhum setup no servidor.

Servidor com configuração.

Vou assumir que seu servidor usa Ubuntu ou Debian, ou alguma distribuição baseada em um dos dois. Você vai precisar de acesso root (sudo) no servidor e uma conexão com a Internet é claro :).
Para instalar o Bazaar no servidor execute:

sudo apt-get install bzr

depois deste comando o Bazaar já deve estar funcionando, para verificar digite:

$ bzr
Bazaar -- a free distributed version-control tool
http://bazaar-vcs.org/

Basic commands:
  bzr init           makes this directory a versioned branch
  bzr branch         make a copy of another branch

  bzr add            make files or directories versioned
  bzr ignore         ignore a file or pattern
  bzr mv             move or rename a versioned file

  bzr status         summarize changes in working copy
  bzr diff           show detailed diffs

  bzr merge          pull in changes from another branch
  bzr commit         save some or all changes

  bzr log            show history of changes
  bzr check          validate storage

  bzr help init      more help on e.g. init command
  bzr help commands  list all commands
  bzr help topics    list all help topics

Se o comando retornar algo similar ao texto acima, o Bazaar deve ter sido instalado corretamente.
Neste momento a parte de Bazaar já está pronta! Nossa mas só isso? Sim só isso :). Mas vamos colocar algo mais palpável para uso em produção.
Primeiro para não precisar encher o servidor de usuários, vamos criar um usuário que terá direitos de acesso aos branches, você pode usar o nome que você quiser para o usuário, em nosso exemplo vamos utilizar bzr.
digite o seguinte no servidor:

$ sudo adduser \
    --system \
    --shell /bin/sh \
    --gecos 'Bazaar version control' \
    --group \
    --disabled-password \
    --home /home/bzr \
    bzr

isso vai retornar algo como:

Adding system user `bzr' (UID 110) ...
Adding new group `bzr' (GID 118) ...
Adding new user `bzr' (UID 110) with group `bzr' ...
Creating home directory `/home/bzr' ...

o que estamos fazendo é criando um usuário e dando a ele um shell válido, para que o ssh funcione porém ele não poderá se logar no servidor usando qualquer senha. Ai você me pergunta, mas se não tem senha, como vamos fazer para autenticar no servidor? a resposta é, usando autenticação por ssh. Vou explicar aqui como fazer isso usando linux, para usar windows é possível fazer algo similar usando o PuTTY, mas o uso do PuTTY também está for do nosso escopo.
O primeiro passo é gerar uma chave pública e privada ssh, para fazer isso digite em um promt no seu computador cliente:

$ ssh-keygen

O comando vai pedir o local onde salvar a chave publica e privada, deixe o padrão, também vai pedir uma senha, que é opcional, se você não digitar nada ele não vai pedir nenhuma senha para efetuar a autenticação, entretanto eu recomendo que cada usuário coloque uma senha em suas chaves.
Bem, foi criada uma chave publica em ~/.ssh/id_rsa.pub e precisamos enviar esta chave para o servidor e colocar ela em um lugar que o usuário bzr conheça para que ele possa comparar a chave publica com a chave privada de cada usuário e efetuar a autenticação. Coloque o arquivo no servidor, vou exemplificar usando sftp:

$ scp ~/.ssh/id_rsa.pub usuario@servidor:id_rsa.pub

Agora acesse o servidor (via ssh ou outro) e lá iremos adicionar a chave publica que acabamos de criar para o cliente, na lista de chaves conhecidas do usuário bzr. já no servidor é preciso tornar-se o usuário bzr utilizando sudo e em seguida jogar o conteúdo da chave para a lista de chaves conhecidas do usuário bzr:

$ sudo su bzr
$ mkdir ~/.ssh (necessário apenas se o diretório ainda não existir)
$ cat id_rsa.pub >> ~/.ssh/authorized_keys

A sequência de comandos acima assume que você está no diretório home do usuário ao qual foi enviado o arquivo id_rsa.pub. Pronto!, a partir deste momento você já pode  utilizar o servidor e criar seus branches Bazaar nele, tanto usando sftp, quanto bzr+ssh (que é o mais recomendado).
Agora volte para sua máquina e vamos criar o nosso primeiro branch usando sftp (este não necessitaria ter o Bazaar instalado no servidor):

$ mkdir meubranch
$ cd meubranch
$ bzr init
$ touch arquivo1.txt
$ bzr add
$ bzr commit -m "branch teste"
$ bzr push sftp://bzr@servidor/~/meubranch

Isto vai publicar (push) as alterações de seu branch local para o servidor remoto via sftp.
para usar via bzr+ssh e ter um ganho de performance em algumas operações troque o ultimo comando por:

$ bzr push bzr+ssh://bzr@servidor/home/bzr/meubranch

Note que neste caso utilizamos o caminho completo para o branch no servidor, pois até o presente momento o ~ (til) que representa a pasta home do usuário ainda não é suportada pelo Bazaar, mas será em breve. Lembre que informar o camhinho do branch é necessário apenas no primeiro chechout/pull/push depois o caminho fica gravado. Mas se você resolver colocar os repositórios em alguma parte do servidor que seja muito difícil de digitar, como por exemplo “/var/projetos/vcs/bzr/branch” então você pode criar um link simbólico para a pasta raís, dentro do /.

sudo ln -s /home/bzr /bzr

isto vai criar um link com o nome bzr no sistema de arquivos raíz, então a o comando com a url vai ficar assim:

$ bzr push bzr+ssh://bzr@servidor/bzr/meubranch

Se não quiser publicar diretamente a pasta do usuário como /bzr, você pode (e deve) criar um subdiretório para os projetos dentro de “/home/bzr/projetos” e apontar o link simbólico para lá. (não esqueça de tornar-se(sudo su bzr) o usuário bzr antes de criar o diretório).

Toda a parte de configuração do servidor termina aqui. Claro que você pode criar seu servidor de outros modos, como por exemplo criando um usuário para cada desenvolvedor, etc, e aplicar suas próprias regras de segurança, mas isso é uma questão estrutural de cada projeto e/ou empresa.

foi comentado do protocolo bzr:// sem o ssh, para levantar um servidor desta natureza utilize o seguinte comando dentro de um branch:

bzr serve

Ele vai levantar um servidor somente leitura que ficará ouvindo maquina local (se você tiver o Ipv6 ativado, este comando vai dar um erro, então utilize bzr serve –port=127.0.0.1:4155 ) que é bastante útil quando queremos publicar um branch temporariamente com outro membro da equipe para que ele faça um merge por exemplo. se quiser que seja publicado para leitura e escrita utilize o parametro –allow-writes.

bzr serve --port=127.0.0.1:4155 --allow-writes

Para saber mais sobre o Bazaar acesse a seguinte página: http://doc.bazaar-vcs.org/latest/
Lá você vai encontrar a documentação completa de cada comando entre outras informações úteis.

Read Full Post »