>_Git e Gitolite no Debian 7.8 – 1.1

gitGit é um sistema de controle de versão distribuído, open source, rápido e eficiente. Desenvolvido inicialmente por Linus Torvalds, mesmo criador do kernel do Linux, começou a ganhar notariedade quando passou a ser utilizado como sistema de versionamento padrão para o projeto do kernel.

Neste tutorial, vou utilizar como exemplo 1 servidor e 3 clientes para demonstrar a sua configuração e manipulação dos comandos.

git

 O servidor será configurado no Debian 7.8. Os clientes serão Linux Mint, Debian 6 e CentOS 6.5.

Mão na obra!

Configurando o Servidor Git.

1 – Instalando os pacotes necessários para o servidor.

root@ba-vm-git-01:~# apt-get install git-core gitolite sudo

2 – Configurando o usuário git no servidor.

		
root@ba-vm-git-01:~# adduser --system --group --shell /bin/bash --disabled-password git

3 – Configurando o usuário git e gerando a chave pública.

root@ba-vm-git-01:~# sudo su - git
root@ba-vm-git-01:~# mkdir .ssh
root@ba-vm-git-01:~# cd .ssh
git@ba-vm-git-01:~/.ssh$ ssh-keygen -t dsa

4 – Copiando a chave pública para o diretório /tmp e alterando o seu nome para server-git.pub.

git@ba-vm-git-01:~/.ssh$ cp id_dsa.pub /tmp/server-git.pub

5 – Passando a chave pública para o gitolite. Perceba que será necessário alterar o conf .gitolite.rc.

git@ba-vm-git-01:~/.ssh$ gl-setup /tmp/server-git.pub 
The default settings in the rc file (/home/git/.gitolite.rc) are fine for most
people but if you wish to make any changes, you can do so now.

hit enter...

5 – Ao abrir o arquivo de configuração, altere a linha abaixo. Em seguida feche o arquivo.

Altere a linha
$REPO_UMASK = 0077;
Para
$REPO_UMASK = 0027;

6 – Neste passo, é preciso corrigir as permissões do arquivo projects.list e do diretório repositories.

git@ba-vm-git-01:~/.ssh$ chmod g+r /home/git/projects.list 
git@ba-vm-git-01:~/.ssh$ chmod -R g+rx /home/git/repositories/

7 – Voltando um diretório abaixo.

git@ba-vm-git-01:~/.ssh$ cd ../

9 – Se tudo correu bem até aqui, basta clonar o gitolite-admin para o servidor git. Neste diretório gitolite-admin será possível cadastrar usuários, alterar permissões de acessos e configurar novos repositórios.

git@ba-vm-git-01:~$ git clone git@ba-vm-git-01:gitolite-admin
Cloning into 'gitolite-admin'...
The authenticity of host 'ba-vm-git-01 (127.0.1.1)' can't be established.
ECDSA key fingerprint is 1b:28:12:fc:e5:42:9e:48:1f:dc:92:02:7f:2b:df:7d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'ba-vm-git-01' (ECDSA) to the list of known hosts.
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
Receiving objects: 100% (6/6), 893 bytes, done.
remote: Total 6 (delta 0), reused 0 (delta 0)

10 – Acessando o diretório gitolite-admin

git@ba-vm-git-01:~$ ls
gitolite-admin	projects.list  repositories
git@ba-vm-git-01:~$ cd gitolite-admin/
git@ba-vm-git-01:~/gitolite-admin$ ls
conf  keydir
git@ba-vm-git-01:~/gitolite-admin$

11 – No diretório keydir contém as chaves públicas de acesso. Já no diretório conf contém o arquivo de configuração gitolite.conf.

Configurando o Cliente Desktop Evandro.

11 – No desktop evandro gerei a chave pública com o comando ssh-keygen -t dsa.

evandro@b000177 ~/.ssh $ ssh-keygen -t dsa

12 – Eem seguida, enviei a chave pública para o servidor git como o comando scp, alterando o nome da chave para o nome evandro.

evandro@b000177 ~/.ssh $ scp id_rsa.pub root@ba-vm-git-01:/tmp/evandro.pub

13 – De volta no servidor git, farei as configurações iniciais para enfim eu poder utilizar o git pela primeira vez.

git@ba-vm-git-01:~ $ git config --global user.name "Evandro Couto"
git@ba-vm-git-01:~ $ git config --global user.email "evandro.couto@d2d.com.br"

14 – Adicionando a chave pública do desktop evandro para o gitolite.

git@ba-vm-git-01:~$ cd gitolite-admin/
git@ba-vm-git-01:~/gitolite-admin$ cd keydir/

15 – Copiando a chave que foi enviada pelo desktop evandro através do comando scp no diretório /tmp.

git@ba-vm-git-01:~/gitolite-admin/keydir$ cp /tmp/evandro.pub .

16 – Adicioando a chave evandro.pub.

git@ba-vm-git-01:~/gitolite-admin/keydir$ git add evandro.pub 

17 – Gerando o primeiro commit da alteração.

git@ba-vm-git-01:~/gitolite-admin/keydir$ git commit -a -m "Add novo usuário: Evandro Couto"

18 – Enviando alterações

git@ba-vm-git-01:~/gitolite-admin/keydir$ git push 

19 – No desktop Evandro, irei realizar o clone do repositório gitolite-admin. Vejamos o exemplo:

evandro@b000177 ~ $  git clone git@ba-vm-git-01:gitolite-admin
Cloning into 'gitolite-admin'...
R access for gitolite-admin DENIED to evandro
(Or there may be no repository at the given path. Did you spell it correctly?)
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Opa, deu erro!
Isso mesmo, este erro explica que não temos a permissão de leitura no repositório gitolite-admin e que por isso não foi possível realizar o clone para o desktop evandro.

Pequena introdução ao permissionamento do gitolite.

O metódo de permissionamento é bem parecido como um outro qualquer.
R significa ‘ler’ permissão
RW significa ‘ler e escrever’, mas não de retrocesso
RW + significa ‘ler e escrever’, com retrocesso permitidos

É importante entender que existem dois níveis em que o controle de acesso acontece. Grande parte da complexidade aplica-se apenas para o segundo teste de nível. Essa verificação é feita pelo hook da atualização, determinando se o push foi bem ou mal sucedido.

Para permissões básicas, a correspondência é simples. O Gitolite já conhece os seguinte parâmetros:
O utilizador
O repo
do branches ou a etiqueta de referência(ref) do push.
se é um (ff) é o impulso normal ou um (no-ff) que é o push de retrocesso.

O Gitolite verificar de baixo da lista as regras correspondentes a cada usuário, repo e ref. A primeira regra de correspondência que tenha a permissão que você está procurando (W ou +), resulta em sucesso. A fallthrough resulta em um fracasso.

Voltando no servidor git, vou adicionar o desktop evandro no gitolite-admin para ele enfim poder clonar o repositório gitolite-admin e também poder administrar o gitolite.

21 – Criando o arquivo permissoes.conf dentro do diretório gitolite-admin/conf.

git@ba-vm-git-01:~/gitolite-admin/conf$ vim permissoes.conf 

conteúdo do arquivo

@admins = server-git evandro

22 – Criado o arquivo, vou incluir no gitolite.conf o arquivo permissoes.conf e configurar a permissão para o grupo admins.

git@ba-vm-git-01:~/gitolite-admin/conf$ vim gitolite.conf 
include "permissoes.conf"

repo    gitolite-admin
        RW+     =       server-git
        RW+     =       @admins

repo    testing
        RW+     =   @all

23 – Com os comandos abaixo, vou adicionar o arquivo permissoes.conf no gitolite-admin e em seguida gerar um commit das alterações e por fim subir as alterações para produção com o comando git push.

git@ba-vm-git-01:~/gitolite-admin/conf$ git add permissoes.conf 
git@ba-vm-git-01:~/gitolite-admin/conf$ git commit -a -m "Alteracao de permissao"
[master 572ba78] Alteracao de permissao
 1 file changed, 1 insertion(+)
 create mode 100644 conf/permissoes.conf
git@ba-vm-git-01:~/gitolite-admin/conf$ git push
Counting objects: 11, done.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (8/8), 773 bytes, done.
Total 8 (delta 0), reused 0 (delta 0)
remote: 
remote: 		***** WARNING *****
remote:         the following users (pubkey files in parens) do not appear in any access rules:
remote: evandro(evandro.pub)
To git@ba-vm-git-01:gitolite-admin
   18348cb..572ba78  master -> master

24 – Voltando para o desktop evandro, realizei o clone novamente.

evandro@b000177 ~ $  git clone git@ba-vm-git-01:gitolite-admin
Cloning into 'gitolite-admin'...
remote: Counting objects: 22, done.
remote: Compressing objects: 100% (18/18), done.
remote: Total 22 (delta 2), reused 0 (delta 0)
Receiving objects: 100% (22/22), done.
Resolving deltas: 100% (2/2), done.
Checking connectivity... done.

Opa sucesso!

evandro@b000177 ~/gitolite-admin $ ls
conf  keydir

Até aqui falei da configuração do servidor git, da configuração de um cliente e também um pouco do permissionamento. No próximo tutorial, vou comentar sobre a configuração de mais 2 clientes, também de outros repositórios e possivelmente a configuração do gitweb. Até lá!

>_Git e Gitolite no Debian 7.8 – 1.1
Tagged on:

Deixe uma resposta

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

%d blogueiros gostam disto: