Archive for July, 2009

Customize o hg web

July 12th, 2009

No post anterior configuramos o hg web, mas temos mais algumas opções que podemos configurar, por exemplo:

  1. Configurar permissões de usuários
  2. Tema do seu repositório
  3. Informações dos projetos
  4. Habilitar downloads de snapshots do repositório

As configurações podem ir na home do usuário que roda o serviço ~/.hgrc, ou como é mais utilizado, dentro de cada projeto hospedado /path/do/projeto/.hg/hgrc, ou ainda como utilizamos no hgweb.config que configura o serviço WSGI, funciona também para CGI

Dentro de cada projeto você pode gerenciar os usuários que podem fazer commit (pull):

Uma configuração útil para ir no hgweb.config é qual tema você quer utilizar:

Os temas disponíveis estão em:

  1. /usr/share/mercurial/templates

E são eles:

coal gitweb monoblue paper spartan

Ainda no hgweb.config você pode configurar quais projetos você quer publicar.

Podemos fazer estaticamente cada um dos projetos

  1. [paths]
  2. repo1 = c:/webdata/repos.merc/images
  3. repo2 = c:/webdata/repos.merc/web/htdocs/

Ou como eu utilizei no post anterior:

  1. [paths]
  2. /trunk = /webdata/hg_repos/trunk/**  # verifica recursivamente os repositórios

ou ainda:

  1. [paths]
  2. /trunk = /webdata/hg_repos/trunk/*  # verifica somentes repositórios em trunk

Você pode configurar por projeto, contat, description, name e permissões de push

  1. [web]
  2. allow_archive = gz zip bz2  # permite o download do repositório nesses formatos
  3. push_ssl = false                     # permite o push por http puro
  4. deny_push = saruman         # negar o push para o usuário saruman
  5. allow_push = frodo, sam     # permitir o push para frodo e sam
  6. allow_push = *                       # permitir o push para todos
  7. contact = Bilbo Baggins        # informações de contato sobre o repositório, pode colocar o seu e-mail por exemplo
  8. description = My precious!  # Um descrição do projeto
  9. name = lord/rings                  # Um noe para o projeto

É isso ai, agora já dá para deixar os seus repositórios na publicados e personalizados. 😉


Referências:
http://mercurial.selenic.com/wiki/HgWebDirStepByStep
http://mercurial.selenic.com/wiki/PublishingRepositories
http://mercurial.selenic.com/wiki/Theming

Mercurial – Publique seu repositórios

July 11th, 2009
Mercurial Logo

Mercurial Logo

Já tem um tempo que eu quero começar a usar o Mercurial de verdade e como agora eu tenho um host nada mais justo de disponibilizar meus repositórios – ou seria aqui !?

O Mercurial tem algumas maneiras de disponibilizar o repositório, mas eu queria:

  1. Uma página que dê para navegar no código
  2. Permitir fazer o clone via http
  3. Permitir fazer o pull (subir as alterações) para o servidor também via http
  4. Usar WSGI ao invés de CGI
  5. Integrar no apache que eu já tenho configurado lá

Servidor: Ubuntu 8.10

Eu estou utilizando o repositóro do mercurial, assim eu tenho a última versão, mas deve funcionar com a versão padrão do Ubuntu.

Pacotes necessários: mercurial, mercurial-common, libapache2-mod-wsgi

Talvez tenha mais algum, mas eu não lembrei de anotar durante a instalação :-/

Como eu já disse, eu já tinha o apache rodando com alguns Virtuais Hosts, eu queria apenas adicionar mais um Virtual Host naparte do apache.

Verifique se o mod_wsgi já está habilitado:

  1. # a2enmod wsgi
  2. Module wsgi already enable

A configuração é dividia em 3 partes:

1 – VirtualHost no Apache
2 – A aplicação mercurial.web (WSGI)
3 – Os repositórios hg (mercurial)

Eu criei uma pasta na home para manter a aplicação e os repositórios

Criei o arquivo hgwebdir.wsgi, ou baixe direto do repositório contrib do Mercurial.

Arquivo: /home/lucmult/hg/hgwebdir.wsgi
  1. from mercurial import demandimport; demandimport.enable()
  2. from mercurial.hgweb.hgwebdir_mod import hgwebdir
  3.  
  4. application = hgwebdir('/home/lucmult/hg/hgweb.config')

O arquivo só precisa dessas 3 linhas.

IMPORTANTE: Utilize o caminho absoluto do arquivo de configuração, eu perdi muito tempo por conta desse detalhe.

Crie o arquivo de configuração que referenciamos no arquivo anterior.

Hoje, o modo correto de publicar vários repositórios é assim:

Arquivo: /home/lucmult/hg/hgweb.config
  1. [paths]
  2. / = /home/lucmult/hg/projects/*

Onde os subdiretórios de projects são repositórios mercurial distintos.

Crie um repositório como exemplo:

  1. $ mkdir -p /home/lucmult/hg/projects/sandbox
  2. $ echo "lero lero" > /home/lucmult/hg/projects/sandbox/readme.txt
  3. $ cd /home/lucmult/hg/projects/sandbox
  4. $ hg init
  5. $ hg add
  6. $ hg ci -m "meu primeiro commit"
  7. $ echo "bip bip" >> readme.txt
  8. $ hg st
  9. $ hg ci -m "segundo commit"

Agora só falta o VirtualHost:

Arquivo: /etc/apache2/sites-available/hg.lucmult.com.br
  1. 80>
  2.     ServerName hg.lucmult.com.br
  3.     ServerAlias hg.lucianopacheco.com.br
  4.  
  5.     ErrorLog /var/log/apache2/hg.lucmult.com.br-error_log
  6.     CustomLog /var/log/apache2/hg.lucmult.com.br-access_log common
  7.  
  8.     WSGIScriptAliasMatch ^(.*) /home/lucmult/hg/hgwebdir.wsgi$1
  9.  
  10.     # To enable "daemon" mode, uncomment following lines. (Read mod_wsgi docs for more info)
  11.     WSGIDaemonProcess hg.lucmult.com.br user=lucmult group=lucmult threads=15 maximum-requests=1000 processes=2 umask=0007 display-name=wsgi-hg.lucmult.com.br
  12.     # some more interesting options (tested on mod_wsgi 2.0):
  13.  
  14.     WSGIProcessGroup hg.lucmult.com.br
  15.  
  16.    
  17.         Allow from all
  18.  
  19.         AuthType Digest
  20.         AuthName "lucmult Mercurial repositories"
  21.         AuthDigestProvider file
  22.         AuthUserFile /home/lucmult/hg/hgusers
  23.        
  24.             Require valid-user
  25.        
  26.    
Habilitar o Virtual Host
  1. # a2ensite hg.lucmult.com.br
  2. Site hg.lucmult.com.br already enabled

No arquivo de configuração do VirtualHost tá configurado para fazer autenticação, quando for fazer o push para o servidor.

Para criar os usuários utilize:
  1. $ htdigest  -c hgusers 'lucmult Mercurial repositories' lucmult

Onde:
-c hgusers Criar o arquivo hgusers
‘lucmult Mercurial repositories’ Identificação, mesmo texto que foi configurado em AuthName no Virtual Host
lucmult Nome do usuário a ser criado

Mais uma configuração que tem que ser feita, agora com relação a permissão.
Tudo que fizemos na pasta /home/lucmult/hg, foi com o usuário lucmult, com isso o usuário que roda o apache (www-data) não tem permissão de escrita na pasta e isso impede o funcionamento.

Atribuindo permissão para o grupo do apache www-data
  1. $ chown -R lucmult:www-data /home/lucmult/hg/projects
  2. $ chmod -R g+rw  /home/lucmult/hg/projects

Imporante o endereço DNS hg.lucmult.com.br, tem que ser configurado no seu DNS.

Pronto agora é só reiniciar o seu apache e acessar o seu repositório, via browser ou via linha de comando. :-)

  1. hg clone http://hg.lucmult.com.br/sandbox
  2. cd sandbox
  3. echo "lero lero" >> readme.txt
  4. hg st
  5. hg ci
  6. hg push

Fontes:
http://devlog.waltercruz.com/mercurial_web
http://mercurial.selenic.com/wiki/PublishingRepositories
http://mercurial.selenic.com/wiki/modwsgi

Postgres e psycopg2 8.4 no Mac OSX

July 9th, 2009

Hoje precisei instalar o Postgres e o psycopg2 no Mac. Não foi muito difícil, mas não foi uma instalação normal, portanto vamos compartilhar! :-)

Para instalar o Postgres é fácil, basta ir no site e fazer o download do pacote compilado para o Mac que já vem tudo pronto.

Aqui o cara tem a explicação passo a passo do instalação.

Agora vem o psycopg2 que é o diferente.

pg_config=/Library/PostgreSQL/8.4/bin/pg_config
include_dirs=/Library/PostgreSQL/8.4/include
library_dirs=/Library/PostgreSQL/8.4/lib

  • $ python setup.py config
  • $ python setup.py build
  • $ sudo python setup.py install

Pronto, verifique:

$ python
>>> import psycopg2
>>>

Agora espero que eu não deixe aqui abandonado novamente! :-)