<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>lucmult &#187; linux</title>
	<atom:link href="http://blog.lucmult.com.br/tag/linux/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.lucmult.com.br</link>
	<description>Python, Django and Plone</description>
	<lastBuildDate>Thu, 12 Nov 2009 01:30:48 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Customize o hg web</title>
		<link>http://blog.lucmult.com.br/2009/07/customize-hg-web/</link>
		<comments>http://blog.lucmult.com.br/2009/07/customize-hg-web/#comments</comments>
		<pubDate>Sun, 12 Jul 2009 23:16:01 +0000</pubDate>
		<dc:creator>lucmult</dc:creator>
				<category><![CDATA[admin]]></category>
		<category><![CDATA[hg]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://blog.lucmult.com.br/?p=75</guid>
		<description><![CDATA[No post anterior configuramos o hg web, mas temos mais algumas opções que podemos configurar, por exemplo:

Configurar permissões de usuários
Tema do seu repositório
Informações dos projetos
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 [...]]]></description>
			<content:encoded><![CDATA[<p>No<a href=": http://blog.lucmult.com.br/2009/07/hg-mercurial-web"> post anterior configuramos o hg web</a>, mas temos mais algumas opções que podemos configurar, por exemplo:</p>
<ol>
<li>Configurar permissões de usuários</li>
<li>Tema do seu repositório</li>
<li>Informações dos projetos</li>
<li>Habilitar downloads de snapshots do repositório</li>
</ol>
<p>
As configurações podem ir na home do usuário que roda o serviço <strong>~/.hgrc</strong>, ou como é mais utilizado, dentro de cada projeto hospedado<strong> /path/do/projeto/.hg/hgrc</strong>, ou ainda como utilizamos no<strong> hgweb.config</strong> que configura o serviço <strong>WSGI</strong>, funciona também para <strong>CGI</strong>
</p>
<p>
Dentro de cada projeto você pode gerenciar os usuários que podem fazer commit (pull):
</p>
<p>
Uma configuração útil para ir no <strong>hgweb.config</strong> é qual tema você quer utilizar:
</p>
<p>Os temas disponíveis estão em:</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="sy0">/</span>usr<span class="sy0">/</span>share<span class="sy0">/</span>mercurial<span class="sy0">/</span>templates</div>
</li>
</ol>
</div>
<p>E são eles:</p>
<blockquote><p><strong>coal gitweb monoblue paper spartan<br />
</strong></p></blockquote>
<p>
Ainda no <strong>hgweb.config </strong>você pode configurar quais projetos você quer publicar.
</p>
<p>Podemos fazer estaticamente cada um dos projetos</p>
<div class="geshi no python">
<ol>
<li class="li1">
<div class="de1"><span class="br0">&#91;</span>paths<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">repo1 = c:/webdata/repos.<span class="me1">merc</span>/images</div>
</li>
<li class="li1">
<div class="de1">repo2 = c:/webdata/repos.<span class="me1">merc</span>/web/htdocs/</div>
</li>
</ol>
</div>
<p>
Ou como eu utilizei no post anterior:
</p>
<div class="geshi no python">
<ol>
<li class="li1">
<div class="de1"><span class="br0">&#91;</span>paths<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">/trunk = /webdata/hg_repos/trunk/<span class="sy0">**</span>  <span class="co1"># verifica recursivamente os repositórios</span></div>
</li>
</ol>
</div>
<p>
ou ainda:
</p>
<div class="geshi no python">
<ol>
<li class="li1">
<div class="de1"><span class="br0">&#91;</span>paths<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">/trunk = /webdata/hg_repos/trunk/<span class="sy0">*</span>  <span class="co1"># verifica somentes repositórios em trunk</span></div>
</li>
</ol>
</div>
<p>
Você pode configurar por projeto, <strong>contat,</strong> <strong>description,</strong> <strong>name</strong> e <strong>permissões </strong>de push
</p>
<div class="geshi no python">
<ol>
<li class="li1">
<div class="de1"><span class="br0">&#91;</span>web<span class="br0">&#93;</span></div>
</li>
<li class="li1">
<div class="de1">allow_archive = gz <span class="kw2">zip</span> <span class="kw3">bz2</span>  <span class="co1"># permite o download do repositório nesses formatos</span></div>
</li>
<li class="li1">
<div class="de1">push_ssl = false                     <span class="co1"># permite o push por http puro</span></div>
</li>
<li class="li1">
<div class="de1">deny_push = saruman         <span class="co1"># negar o push para o usuário saruman</span></div>
</li>
<li class="li1">
<div class="de1">allow_push = frodo, sam     <span class="co1"># permitir o push para frodo e sam</span></div>
</li>
<li class="li1">
<div class="de1">allow_push = <span class="sy0">*</span>                       <span class="co1"># permitir o push para todos</span></div>
</li>
<li class="li1">
<div class="de1">contact = Bilbo Baggins        <span class="co1"># informações de contato sobre o repositório, pode colocar o seu e-mail por exemplo</span></div>
</li>
<li class="li1">
<div class="de1">description = My precious<span class="sy0">!</span>  <span class="co1"># Um descrição do projeto</span></div>
</li>
<li class="li1">
<div class="de1">name = lord/rings                  <span class="co1"># Um noe para o projeto</span></div>
</li>
</ol>
</div>
<p>
É isso ai, agora já dá para deixar os seus repositórios na publicados e personalizados. <img src='http://blog.lucmult.com.br/blog/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />
</p>
<hr />
<p>Referências:<br />
<a href="http://mercurial.selenic.com/wiki/HgWebDirStepByStep">http://mercurial.selenic.com/wiki/HgWebDirStepByStep</a><br />
<a href="http://mercurial.selenic.com/wiki/PublishingRepositories">http://mercurial.selenic.com/wiki/PublishingRepositories</a><br />
<a href="http://mercurial.selenic.com/wiki/Theming">http://mercurial.selenic.com/wiki/Theming</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lucmult.com.br/2009/07/customize-hg-web/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Mercurial &#8211; Publique seu repositórios</title>
		<link>http://blog.lucmult.com.br/2009/07/hg-mercurial-web/</link>
		<comments>http://blog.lucmult.com.br/2009/07/hg-mercurial-web/#comments</comments>
		<pubDate>Sat, 11 Jul 2009 23:44:26 +0000</pubDate>
		<dc:creator>lucmult</dc:creator>
				<category><![CDATA[admin]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[hg]]></category>
		<category><![CDATA[linux]]></category>

		<guid isPermaLink="false">http://blog.lucmult.com.br/?p=36</guid>
		<description><![CDATA[Hg - Mercurial Web - Publique seus repositórios na Web, usando o wsgi]]></description>
			<content:encoded><![CDATA[<div class="wp-caption alignright" style="width: 170px"><a href="http://mercurial.selenic.com/wiki/"><img class=" " title="Mercurial Logo" src="http://www.selenic.com/hg-logo/logo-droplets-200.png" alt="Mercurial Logo" width="160" height="192" /></a><p class="wp-caption-text">Mercurial Logo</p></div>
<p>
Já tem um tempo que eu quero começar a usar o <a href="http://mercurial.selenic.com/wiki/">Mercurial</a> de verdade e como agora eu tenho um host nada mais justo de disponibilizar meus repositórios <a href="http://hg.lucmult.com.br/">lá</a> &#8211; ou seria <a href="http://hg.lucmult.com.br/">aqui</a> !?</p>
<p>
O Mercurial tem algumas maneiras de disponibilizar o repositório, mas eu queria:</p>
<ol>
<li> Uma página que dê para navegar no código</li>
<li> Permitir fazer o clone via http</li>
<li> Permitir fazer o pull (subir as alterações) para o servidor também via http</li>
<li> Usar WSGI ao invés de CGI</li>
<li> Integrar no apache que eu já tenho configurado lá</li>
</ol>
<p>
<strong>Servidor:</strong> Ubuntu 8.10</p>
<p>
Eu estou utilizando o <a href="https://launchpad.net/~mercurial-ppa">repositóro do mercurial</a>, assim eu tenho a última versão, mas deve funcionar com a versão padrão do Ubuntu.</p>
<p><pre><strong>Pacotes necessários</strong>: mercurial, mercurial-common, libapache2-mod-wsgi</pre>
<p>
Talvez tenha mais algum, mas eu não lembrei de anotar durante a instalação :-/</p>
<p>
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.</p>
<p>
Verifique se o mod_wsgi já está habilitado:</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1"><span class="co0"># a2enmod wsgi</span></div>
</li>
<li class="li1">
<div class="de1">Module wsgi already <span class="kw3">enable</span></div>
</li>
</ol>
</div>
<p>
A configuração é dividia em 3 partes:</p>
<p>
1 &#8211; VirtualHost no Apache<br />
2 &#8211; A aplicação mercurial.web (WSGI)<br />
3 &#8211; Os repositórios hg (mercurial)</p>
<p>
Eu criei uma pasta na home para manter a aplicação e os repositórios</p>
<p>
Criei o arquivo hgwebdir.wsgi, ou baixe direto do <a href="http://selenic.com/repo/hg-stable/file/67389a94825a/contrib/hgwebdir.wsgi">repositório contrib do Mercurial</a>.</p>
<div class="geshi no python">
<div class="head">Arquivo: <strong>/home/lucmult/hg/hgwebdir.wsgi</strong></div>
<ol>
<li class="li1">
<div class="de1"><span class="kw1">from</span> mercurial <span class="kw1">import</span> demandimport<span class="sy0">;</span> demandimport.<span class="me1">enable</span><span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">from</span> mercurial.<span class="me1">hgweb</span>.<span class="me1">hgwebdir_mod</span> <span class="kw1">import</span> hgwebdir</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">application = hgwebdir<span class="br0">&#40;</span><span class="st0">&#39;/home/lucmult/hg/hgweb.config&#39;</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>O arquivo só precisa dessas 3 linhas.</p>
<p>
<strong>IMPORTANTE</strong>: Utilize o caminho absoluto do arquivo de configuração, eu perdi muito tempo por conta desse detalhe.</p>
<p>
Crie o arquivo de configuração que referenciamos no arquivo anterior.</p>
<p>
Hoje, o modo correto de publicar vários repositórios é assim:</p>
<div class="geshi no ini">
<div class="head">Arquivo: <strong>/home/lucmult/hg/hgweb.config</strong></div>
<ol>
<li class="li1">
<div class="de1"><span class="re0"><span class="br0">&#91;</span>paths<span class="br0">&#93;</span></span></div>
</li>
<li class="li1">
<div class="de1">/ <span class="sy0">=</span> /home/lucmult/hg/projects/*</div>
</li>
</ol>
</div>
<p>
Onde os subdiretórios de <strong> projects</strong> são repositórios mercurial distintos.</p>
<p>
<p>
Crie um repositório como exemplo:</p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">$ <span class="kw2">mkdir</span> -p <span class="sy0">/</span>home<span class="sy0">/</span>lucmult<span class="sy0">/</span>hg<span class="sy0">/</span>projects<span class="sy0">/</span>sandbox</div>
</li>
<li class="li1">
<div class="de1">$ <span class="kw3">echo</span> <span class="st0">&quot;lero lero&quot;</span> <span class="sy0">&gt;</span> <span class="sy0">/</span>home<span class="sy0">/</span>lucmult<span class="sy0">/</span>hg<span class="sy0">/</span>projects<span class="sy0">/</span>sandbox<span class="sy0">/</span>readme.txt</div>
</li>
<li class="li1">
<div class="de1">$ <span class="kw3">cd</span> <span class="sy0">/</span>home<span class="sy0">/</span>lucmult<span class="sy0">/</span>hg<span class="sy0">/</span>projects<span class="sy0">/</span>sandbox</div>
</li>
<li class="li1">
<div class="de1">$ hg init</div>
</li>
<li class="li1">
<div class="de1">$ hg add</div>
</li>
<li class="li1">
<div class="de1">$ hg ci -m <span class="st0">&quot;meu primeiro commit&quot;</span></div>
</li>
<li class="li1">
<div class="de1">$ <span class="kw3">echo</span> <span class="st0">&quot;bip bip&quot;</span> <span class="sy0">&gt;&gt;</span> readme.txt</div>
</li>
<li class="li1">
<div class="de1">$ hg st</div>
</li>
<li class="li1">
<div class="de1">$ hg ci -m <span class="st0">&quot;segundo commit&quot;</span></div>
</li>
</ol>
</div>
</pre>
<p>Agora só falta o VirtualHost:</p>
<div class="geshi no apache">
<div class="head">Arquivo: <strong>/etc/apache2/sites-available/hg.lucmult.com.br</strong></div>
<ol>
<li class="li1">
<div class="de1">&lt;VirtualHost *:<span class="nu0">80</span>&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">ServerName</span> hg.lucmult.com.br</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">ServerAlias</span> hg.lucianopacheco.com.br</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">ErrorLog</span> /var/log/apache2/hg.lucmult.com.br-error_log</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">CustomLog</span> /var/log/apache2/hg.lucmult.com.br-access_log common</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; WSGIScriptAliasMatch ^<span class="br0">&#40;</span>.*<span class="br0">&#41;</span> /home/lucmult/hg/hgwebdir.wsgi$<span class="nu0">1</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1"># To enable &quot;daemon&quot; mode, uncomment following lines. (Read mod_wsgi docs for more info)</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; WSGIDaemonProcess hg.lucmult.com.br <span class="kw1">user</span>=lucmult <span class="kw1">group</span>=lucmult threads=<span class="nu0">15</span> maximum-requests=<span class="nu0">1000</span> processes=<span class="nu0">2</span> umask=<span class="nu0">0007</span> display-name=wsgi-hg.lucmult.com.br</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1"># some more interesting options (tested on mod_wsgi 2.0):</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; WSGIProcessGroup hg.lucmult.com.br</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;Location /&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">Allow</span> <span class="kw1">from</span> <span class="kw1">all</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">AuthType</span> Digest</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">AuthName</span> <span class="st0">&quot;lucmult Mercurial repositories&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; AuthDigestProvider file</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">AuthUserFile</span> /home/lucmult/hg/hgusers</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;LimitExcept GET&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">Require</span> valid-<span class="kw1">user</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &lt;/LimitExcept&gt;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &lt;/Location&gt;</div>
</li>
<li class="li1">
<div class="de1">&lt;/VirtualHost&gt;</div>
</li>
</ol>
</div>
<div class="geshi no bash">
<div class="head">Habilitar o Virtual Host</div>
<ol>
<li class="li1">
<div class="de1"><span class="co0"># a2ensite hg.lucmult.com.br</span></div>
</li>
<li class="li1">
<div class="de1">Site hg.lucmult.com.br already enabled</div>
</li>
</ol>
</div>
<p>No arquivo de configuração do VirtualHost tá configurado para fazer autenticação, quando for fazer o push para o servidor.</p>
<div class="geshi no bash">
<div class="head">Para criar os usuários utilize:</div>
<ol>
<li class="li1">
<div class="de1">$ htdigest &nbsp;-c hgusers <span class="st0">&#39;lucmult Mercurial repositories&#39;</span> lucmult</div>
</li>
</ol>
</div>
<p>
Onde:<br />
<strong>-c hgusers </strong>  Criar o arquivo hgusers<br />
<strong>'lucmult Mercurial repositories'</strong> Identificação, mesmo texto que foi configurado em <strong>AuthName</strong> no Virtual Host<br />
<strong>lucmult</strong> Nome do usuário a ser criado
</p>
<p>Mais uma configuração que tem que ser feita, agora com relação a permissão.<br />
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.</p>
<div class="geshi no bash">
<div class="head">Atribuindo permissão para o grupo do apache <strong>www-data</strong></div>
<ol>
<li class="li1">
<div class="de1">$ <span class="kw2">chown</span> -R lucmult:www-data <span class="sy0">/</span>home<span class="sy0">/</span>lucmult<span class="sy0">/</span>hg<span class="sy0">/</span>projects</div>
</li>
<li class="li1">
<div class="de1">$ <span class="kw2">chmod</span> -R g+rw &nbsp;<span class="sy0">/</span>home<span class="sy0">/</span>lucmult<span class="sy0">/</span>hg<span class="sy0">/</span>projects</div>
</li>
</ol>
</div>
<p>
<strong>Imporante</strong> o endereço DNS hg.lucmult.com.br, tem que ser configurado no seu DNS.</p>
<p>Pronto agora é só reiniciar o seu apache e acessar o seu repositório, via browser ou via linha de comando. <img src='http://blog.lucmult.com.br/blog/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<div class="geshi no bash">
<ol>
<li class="li1">
<div class="de1">hg clone http:<span class="sy0">//</span>hg.lucmult.com.br<span class="sy0">/</span>sandbox</div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">cd</span> sandbox</div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span> <span class="st0">&quot;lero lero&quot;</span> <span class="sy0">&gt;&gt;</span> readme.txt</div>
</li>
<li class="li1">
<div class="de1">hg st</div>
</li>
<li class="li1">
<div class="de1">hg ci</div>
</li>
<li class="li1">
<div class="de1">hg push</div>
</li>
</ol>
</div>
<p>Fontes:<br />
<a href="http://devlog.waltercruz.com/mercurial_web">http://devlog.waltercruz.com/mercurial_web </a><br />
<a href="http://mercurial.selenic.com/wiki/PublishingRepositories">http://mercurial.selenic.com/wiki/PublishingRepositories </a><br />
<a href="http://mercurial.selenic.com/wiki/modwsgi">http://mercurial.selenic.com/wiki/modwsgi</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.lucmult.com.br/2009/07/hg-mercurial-web/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
	</channel>
</rss>
