Instalando o git (utilizando o gitosis)

Há várias formas para começar usar um servidor git. Dentre elas podemos citar:

É possível apenas instalar o git em um servidor e colocar os repositórios em pastas públicas do servidor.

Outra possibilidade é hospedar utilizando algum serviço web como por exemplo github e o gitorious

O Gitorious pode ser instalado em um servidor próprio como mostrado no tutorial do Akita

Outro modo bem rápido de se instalar o servidor git, utilizando ssh é através do Gitosis.

Segui o tutorial em http://scie.nti.st/2007/11/14/hosting-git-repositories-the-easy-and-secure-way e não tive problemas na instalação. E é este artigo que segui como base para fazer este post.

Fiz a instalação no ubuntu e o que fiz foi:

Primeiramente voce deve ter o git instalado no seu servidor. Caso não tenha basta utilizar o apt para instalar

sudo apt-get install git-core

Após instalado o git, deve-se baixar o gitosis.

git clone git://eagain.net/gitosis.git 

Depois de baixar o gitosis deve-se instalá-lo, para isto:


cd gitosis
python setup.py install

Caso receba uma mensagem como:

-bash: python: command not found

ou

Traceback (most recent call last):
File "setup.py", line 2, in ?
from setuptools import setup, find_packages
ImportError: No module named setuptools

Estas mensagens ocorrem porque voce não tem o pacote python-setuptools instalado. Para instalá-los basta:

sudo apt-get install python-setuptools

Após instalado o pacote python-setuptools execute a instalação do gitosis novamente.

Com o gitosis instalado, agora voce deve criar um usuário para o git. O usuário que o autor recomenda é o usuário git, sem password válido, e ele pode ser criado com o comando:

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

Se a criação do usuário foi feita com sucesso, deve aparecer algo como:

Adding system user `git'...
Adding new group `git' (211).
Adding new user `git' (211) with group `git'.
Creating home directory `/home/git'.

Após criado o usuário no servidor, é necessário criar uma chave rsa no seu computador. Para isto utilizamos o ssh-keygen e o comando para criar uma chave rsa é (digitado no seu computador):

ssh-keygen -t rsa

Após executado o comando a chave pública e privada são criadas em ~/.ssh

Para copiar a chave gerada para o servidor podemos utilizar o comando abaixo:

scp .ssh/id_rsa.pub git@ENDERECO DO SERVIDOR:/tmp

No servidor, para iniciar o servidor basta digitar:

sudo -H -u git gitosis-init < /tmp/id_rsa.pub

É necessário ter permissão no arquivo post-update, portanto digite:

sudo chmod 755 /home/git/repositories/gitosis-admin.git/hooks/post-update

Agora em sua máquina execute:

git clone git@ENDEREÇO DO SERVIDOR:gitosis-admin.git
cd gitosis-admin

No diretório gitosis-admin haverá um arquivo chamado gitosis.conf que será utilizado para a configuração do gitosis.

Adicionando um novo projeto

Para se adicionar um novo projeto adicione as linhas no gitosis.conf com as informações do seu novo projeto:


[group meu_time]
members = nome_do_usuario
writable = nome_novo_projeto

Deste modo, voce criará permissão para o usuário no seu novo projeto

Após alterado o arquivo gitosis.conf dê commit nele para o servidor:

git commit -a -m "Permissão de acesso ao novo projeto para o usuário"
git push

Agora deve-se criar o repositório e enviá-lo:


mkdir nome_novo_projeto

cd nome_novo_projeto
git init
git remote add origin git@NOME_SERVIDOR:nome_novo_projeto.git

#Adicione arquivos e dê commits (git add, git commit)

git push origin master:refs/heads/master


Adicionando usuários

Para adicionar usuários, deve-se copiar as chaves públicas para o diretório gitosis-admin/keydir


cd gitosis-adimn
cp ~/jose.pub keydir/
cp ~/maria.pub keydir/
git add keydir/jose.pub keydir/maria.pub

no arquivo gitosis.conf adicione:

[group meu_time]
members = nome_do_usuario maria joao
writable = novo_projeto

Dê commit e push:

git commit -a -m "Adicionar permissão à Maria e João ao novo projeto"

Agora Maria e João têm acesso ao novo_projeto.

No windows:

Para adicionar as chaves no windows, criei as chaves utilizando o ssh-keygen no mac
(Lembre-se que ao gerar a chave em outro computador, voce deve editar a chave pública e alterar o usuário pois a chave será gerada para o usuário que está logado no computador que a chave for gerada)

ssh-keygen -t dsa -f

Depois copie para a pasta “c:\Documents and Settings\\.ssh” com os nomes “id_dsa” e “id_dsa.pub”

Utilizando o ssh em outras portas

Para se utilizar o ssh em outras portas deve-se alterar o arquivo ~/.ssh/config

Host meuservidor.com
  Port 1234

12 comments ↓

#1 andre fonseca on 10.23.08 at 7:00 am

cade o dito techtalk sobre o git? A equipe está no aguardo :)

#2 Marco Rodrigues on 01.21.09 at 6:10 pm

Há um typo nesta linha “cd gitosis-adimn”

#3 Filipe Chagas on 02.01.09 at 1:47 am

Rapaz, estou seguindo os passos propostos…
Quando chego no momento de executar o comando
scp .ssh/id_rsa.pub git@ENDERECO DO SERVIDOR:/tmp
me pede um password….

Alguma idéia do que pode ser?

#4 bruno on 02.03.09 at 7:44 pm

O comando scp utiliza ssh para copiar um arquivo. Portanto ao digitar o comando scp .ssh/id_rsa.pub git@ENDERECO DO SERVIDOR:/tmp voce está tentando acessar o seu servidor utilizando o usuário git que voce criou e provavelmente o password é relativo a ele. É indicado criar o usuário git sem password (como é feito no comando acima) portanto voce pode substituir o usuário git por um usuário que possa logar no sistema ou criar uma senha para o usuário git. O objetivo deste comando é consegui transferir sua chave criada para o servidor!

#5 Git - Gitosis - Ubuntu « Blog notes on 02.05.09 at 3:59 am

[…] o tutorial que encontrei no Dito.blog, conseguí utilizar o gitosis para gerenciar meus repositórios git! Encontrei alguns problemas que […]

#6 Filipe Chagas on 02.05.09 at 4:11 am

No meu ubuntu, mesmo usando o comando –disabled-password, o ssh pede a senha. A solução pra isso foi definir um password pro usuário git (sudo passwd git) e informá-la quando solicitada.
Tomei a liberdade de blogar (no meu recém-criado blog) sobre este assunto e linkei o seu post. Algum problema acerca disso?

#7 bruno on 02.05.09 at 6:40 pm

Ok Filipe, sem problemas!

#8 Adriano on 03.05.09 at 2:33 pm

Fala bruno tudo bem? rapaiz, estou com uns problemas aqui! quando tento fazer o clone ele da este erro:
“fatal: ‘gitosis-admin.git’: unable to chdir or not a git archive
fatal: The remote end hung up unexpectedly

O que pode ser isso? Abraço

#9 bruno on 03.05.09 at 8:21 pm

Blz Adriano?

Me parece ser um problema de permissão na chave de acesso, em que o usuário git não está conseguindo acessar o diretório onde está o repositório.

Você conseguiu executar todos os comandos de configuração da chave de acesso com sucesso? (gerar chave, copiar para o servidor e executar o gitosis utilizando ela)

O comando “sudo -H -u git gitosis-init < /tmp/id_rsa.pub” deve ser executado no servidor e ele cria as pastas necessárias dentro de /home/git. Verifique se exite a pasta /home/git/repositories que é a pasta onde o gitosis salva os repositórios.

Abraço

#10 Adriano on 03.05.09 at 9:09 pm

Baum também =) mais veja hehehehe acho que o erro está na chave ssh, pois aqui no meu computador já utilizo chaves de acesso ssh. Então eu preciso de uma chave ssh para o user git?

abraços

#11 Adriano on 03.05.09 at 9:13 pm

Opa eu coloquei a chave agora no authorizedkeys do user git mas mesmo assim voltou a dar o mesmo erro! aoo lasqueira. …

#12 bruno on 03.06.09 at 2:46 pm

Oi Adriano, o comando no “scp .ssh/id_rsa.pub git@ENDERECO DO SERVIDOR:/tmp” o arquivo id_rsa.pub deve ser o arquivo da chave que voce utiliza no seu pc. Este comando serve para copiar a chave do seu pc para o seu servidor para a pasta /tmp. Depois que for copiada voce digita o comando no servidor “sudo -H -u git gitosis-init < /tmp/id_rsa.pub” para iniciar o gitosis com o usuário git (-u git) utilizando a chave /tmp/id_rsa.pub que é a chave que voce copiou para o servidor no comando anterior entendeu? Talvez as chaves do seu pc e da inicialização do gitosis estejam diferentes.

Leave a Comment