Hospedando repositórios git com gitosis em um servidor Arch Linux
março 4, 2009 Deixe um comentário
Ontem resolvi me propor novos desafios e criar um repositório git dentro do meu servidor para projetos pessoais. Antes, eu somente era um usuário da ferramenta, e para montar tal repositório, fui buscar informações com quem havia me dado algumas dicas no início: visitem a wiki do nofxx. Além de algumas explicações e configurações rápidas para o aprendizado da linguagem, também há um screencast muito interessante.
Depois de procurar sobre informações na internet, ele me indicou a gitosis. Uma ferramenta para hospedar repositórios git. Sendo assim, achei alguns artigos que me fizeram ter uma ou outra dor de cabeça, e eis que resolvi escrever o meu.
Instalando a gitosis
Antes de mais nada, faz-se necessária a instalação do git (obviamente) e da python (para instalar a gitosis). Para os dois há pacotes prontos no repositório oficial extra. Utilizando o pacman:
# pacman -S git python
Já com os programas instalados, é preciso criar um novo usuário onde vão residir os arquivos hospedados em disco. Para tal criei um usuário denominado git:
# adduser
Obs: Atenção na hora de criar o usuário, o mesmo pode ter qualquer nome, porém não será possível realizar acesso ao mesmo através do ssh mais tarde, somente acesso físico. Ou seja, uma vez os repositórios criados, o gitosis bloqueia o ssh do usuário para somente acesso via git.
Com o novo usuário já logado, baixe a gitosis através do repositório:
$ cd
$ git clone git://eagain.net/gitosis.git
Para instalá-la, execute o seguinte procedimento:
$ cd gitosis
# python setup.py install
A instalação da gitosis irá criar um repositório inicial na pasta ~/repositories/gitosis-admin.git.
Volte ao seu computador. Caso não haja uma chave de ssh pública ainda, crie uma através do comando:
$ ssh-keygen -t rsa
A chave pública criada geralmente fica em ~/.ssh/id_rsa.pub, utilize o scp para copiar o arquivo para o servidor:
$ scp ~/.ssh/id_rsa.pub git@ENDERECO_DO_SEU_SERVIDOR:/tmp
Obs: Note que git é o nome do usuário criado no servidor anteriormente.
Voltando para o servidor, inicie o servidor da gitosis com a chave copiada e altere a permissão do arquivo post-update:
$ gitosis-init < /tmp/id_rsa.pub
$ chmod 755 ~/repositories/gitosis-admin.git/hooks/post-update
Agora, no seu computador, clone o repositório da gitosis para manipulação do servidor criado:
$ mkdir ~/projects
$ cd ~/projects
$ git clone git@ENDERECO_DO_SEU_SERVIDOR:gitosis-admin.git
Adicionando um novo repositório
Toda manipulação dos repositórios controlados pela gitosis se faz através do arquivo gitosis.conf, encontrado dentro do repositório clonado. Para criar um novo repositório, adicione o seguinte conteúdo ao arquivo gitosis.conf:
$ emacs ~/projects/gitosis-admin/gitosis.conf
[group nome_do_projeto]
writable = nome_do_projeto
members = usuario_do_seu_computador
Obs: não esqueça de apertar <ENTER> ao terminar a linha members.
Obs2: para encontrar encontrar qual conteúdo correto para utilizar na variável usuario_do_seu_computador procure no final da chave pública gerada anteriormente. Por exemplo, usuario@archlinux.
Com o arquivo editado, crie um commit para o mesmo:
$ git commit -a -m "Adicionando permissão ao usuário usuoario_do_seu_computador para o projeto nome_do_projeto."
E logo após de um push para o repositório no seu servidor:
$ git push
Logo em seguida, crie um repositório local para o novo projeto:
$ mkdir ~/projects/new_project
$ cd ~/projects/new_project
$ git init
$ git remote add origin git@ENDERECO_DO_SEU_COMPUTADOR:new_project.git
Então crie algum conteúdo, um commit e faça o push inicial.
$ touch README.txt
$ git add README.txt
$ git commit -m "Criando o repositório"
$ git push origin master:refs/heads/master
Obs: caso ocorra algum erro, preste atenção nas chaves públicas utilizadas e nos dados no arquvio gitosis.conf.
Adicionando novos usuários
O processo pra adicionar novos usuários aos repositórios controlados pela gitosis é bem fácil. Basta copiar os arquivos de chaves públicas dos mesmos para a pasta keydir do repositório renomeando para o nome de usuário e host aos quais os arquivos pertencerem. Segue um exemplo:
Usuário lhe manda o arquivo id_rsa.pub como usuario_pog@computer_do_pog, para achar esses detalhes basta ler o final do arquivo com o cat:
$ cat id_rsa.pub
Sendo assim, faz-se necessário copiar o arquivo para a pasta com o nome alterado:
$ cp id_rsa.pub ~/projects/gitosis/keys/usuario_pog@computer_do_pog
Depois é só adicionar o arquivo a um novo commit e realizar o push do mesmo:
$ cd ~/projects/gitosis/
$ git add keys/usuario_pog@computer_do_pog
$ git push
Pronto, o novo usuário já poderá acessar o repositório permitido no arquivo gitosis.conf.
DICA
Caso você tenha trocado sua porta do ssh, edite o arquivo ~/.ssh/config:
$ emacs ~/.ssh/config
host nome_do_computador
HostName 127.0.0.1
port numero_da_porta
Com essas modificações basta acessar usuario_do_computador@nome_do_computador, não precisando digitar o endereço IP do mesmo.
DICA 2
Adicione o branch master ao arquivo .git/config do repositório do novo projeto:
$ emacs ~/projects/new_project/.git/config
[branch "master"]
remote = origin
merge = refs/heads/master
Realizando esta operação para os branchs não é necessário indicar qual você gostaria de atualizar ao executar o comando git pull.