Git e Gitweb no DreamHost
Queria colocar no meu site uma área com repositórios de código no qual estou trabalhando. Git foi minha primeira escolha, vendo que deixei o SVN para trás a algum tempo. Infelizmente o DreamHost, que hospeda meu site, não tem suporte oficial a Git.
Neste tutorial explico como configurar um repositório Git no DreamHost, inclusive com o Gitweb ativado. Você terá acesso de commit no seu repositório usando SSH e ele estara publicamente disponível para ser clonado via HTTP (uma vez que não temos o git-daemon rodando).
Aviso que o objetivo aqui não é ensinar a usar o Git, e sim, ensinar como publicar um repositório no DreamHost.
Preparando um hostname
Seu repositório Git pode ser instalado em qualquer um de seus sites hospedados no DreamHost. Preferi criar um sub-domínio exclusivo para isolar o conteúdo e facilitar meu gerenciamento.
Atualizando o Git
Neste momento, a versão instalada nos servidores do DreamHost é a 1.5.6.5. Achei prudente atualizar para uma versão >= 1.6 na tentativa de manter a compatibilidade com a versão do Git que acompanha as distros mais recentes (ex. Ubuntu Jaunty).
Acesse sua conta no DreamHost via SSH e faça download da última versão estável do Git. Algumas coisas devem ser observadas antes de instalar:
- Não é necessário a dependência da libcurl, uma vez que só vamos hospedar o repositório.
- Devemos desativar o mmap(2) para o DreamHost não achar que o Git está consumindo muita memória e matar o processo.
- Os arquivos devem ser instalados dentro de /home/$USER/packages. Este diretório é correto para instalações de software do usuário no DreamHost. O /home/$USER/packages/bin inclusive já está na sua variável de ambiente $PATH por padrão.
Portanto, após descompactar o código fonte, atente-se para rodar o script de configuração com as seguintes opções (o restante da instalação é convencional):
$ ./configure --prefix=/home/$USER/packages NO_CURL=1 NO_MMAP=1
Criando o repositório
Como criei um sub-domínio para meus repositórios, a raíz do meu domínio está em /home/$USER/git.example.com. Dentro deste diretório, crie seu repositório:
$ mkdir test.git $ cd test.git $ git init --bare
Edite o arquivo description com algo relevante para aparecer no Gitweb. Por se tratar de um repositório que será clonado via HTTP, é necessário ativar um hook a ser executado após cada commit. Este hook atualiza algumas informações necessárias para clonar o repositório que convecionalmente é feito pelo git-daemon.
$ mv hooks/post-update.sample hooks/post-update
Na sua máquina local, dentro de um repositório Git válido já com alguns commits, adicione o seu repositório remoto (usei o nome “public” no exemplo). Em seguida faça o push para criar o branch master:
$ git remote add public ssh://username@example.com/home/username/git.example.com/test.git $ git push public master
Caso não queira passar pela amolação de digitar senha a todo momento para atualizar o repositório, copie sua chave para o servidor remoto.
Quem quiser clonar o seu repositório público o fará via HTTP pelo comando a seguir:
$ git clone http://git.example.com/test.git
Instalando o Gitweb
Para usar o Gitweb, você precisa ter o suport a CGI ativado no DreamHost, como normalmente se tem por padrão. Copie o conteúdo da pasta gitweb que acompanha o tarball do Git para qualquer lugar acessível externamente (exemplo: crie a pasta cgi-bin/ e mova o arquivo para lá para termos http://git.example.com/cgi-bin/gitweb.cgi).
Nesta pasta, crie o arquivo gitweb_config.perl com o seguinte conteúdo:
$GIT = "/home/USERNAME/packages/bin/git";
$projectroot = "/home/USERNAME/git.example.com/";
$home_link_str = "http://git.example.com";
@stylesheets = ("gitweb.css");
$logo = "git-logo.png";
$favicon = "git-favicon.png";
$site_name = "git repositories";
Polindo a instalação
Desativei o directory listing que é comportamento padrão editando o arquivo .htaccess e acrescentando a seguinte linha:
Options -Indexes
Recomendo também criar um arquivo index.php que redirecione os acessos a http://git.example.com para o Gitweb:
<?php
header("location:http://git.example.com/cgi-bin/gitweb.cgi");
?>
Considerações finais
Este material foi fortemente baseado no conteúdo citado nas referências. É basicamente uma compilação atualizada das melhores partes com alguns poucos toques pessoais.
Por fim, sugiro que você, dono de uma conta no DreamHost, vote para que a equipe técnica que administra os servidores, proveja suporte nativo.
Referências:
Em: artigo, desenvolvimento, en, pt_br · Com as tags: dreamhost, git

