<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
	
		<title>philpep's blog - tag git</title>
		<atom:link href="http://blog.philpep.org/feed/tag/git/rss2" rel="self" type="application/rss+xml" />
		<description>philpep&#39;s blog - tag git rss</description>
	<link>http://blog.philpep.org</link>
	<language>fr</language>
		<lastBuildDate>Sat, 18 Dec 2010 00:00:00 GMT</lastBuildDate>
	<generator>Pblog</generator>
		<item>
			<title>Mon réseau</title>
			<link>http://blog.philpep.org/post/mon-reseau</link>
			<guid>http://blog.philpep.org/post/mon-reseau</guid>
			<pubDate>Sat, 18 Dec 2010 00:00:00 GMT</pubDate>
			<description>&lt;p&gt;Ça faisait un petit moment que je devais refaire &lt;a href=&#34;http://philpep.org&#34;&gt;ma homepage&lt;/a&gt;. C&#39;est chose faite (rechargez la page si vous avez encore l&#39;ancienne en cache, c&#39;est full statique avec un trèèèès long ttl).&lt;/p&gt;
&lt;p&gt;J&#39;y décris un peu ce qui se passe dans les trois serveurs que j&#39;administre, pour moi, pour les amis, pour des logiciels libres comme &lt;a href=&#34;http://wmfs.info&#34;&gt;wmfs&lt;/a&gt; et pour les causes que je défends avec une association, &lt;a href=&#34;http://cerf-gresigne.org&#34;&gt;le cerf de grésigne&lt;/a&gt; et &lt;a href=&#34;http://wikileaks.philpep.org&#34;&gt;un miroir wikileaks&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;En modifiant ma map nagios j&#39;ai réussi à faire quelque chose de pas mal pour mieux visualiser la chose :&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;network&#34; src=&#34;http://philpep.org/philpep.png&#34; /&gt;&lt;/p&gt;
&lt;p&gt;Ça fait maintenant deux ans que l&#39;aventure a commencée, objectif auto-hébergement et auto-formation à l&#39;administration systèmes. Je dois dire que ça a plutôt bien marché puisque l&#39;infrastructure et mes connaissances n&#39;ont cessés de progresser.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fin 2008 Pendant les 3 premiers mois philpep.org n&#39;existait que sur mon portable (sous gentoo, allumé 24h/24), c&#39;était un serveur git pour partager mon code.&lt;/li&gt;
&lt;li&gt;Début 2009 j&#39;ai récupéré un vieux pentium III gracieusement donné par une association Toulousaine sur lequel j&#39;ai installé FreeBSD (7.0 puis 7.1) qui a commencé à faire du mail.&lt;/li&gt;
&lt;li&gt;Mai 2009 je récupère un pentium 4 avec plus de RAM.&lt;/li&gt;
&lt;li&gt;Fin 2009 je m&#39;achète une &lt;a href=&#34;http://www.pcengines.ch/alix2d3.htm&#34;&gt;alix2d3&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Début 2010 je prends une machine virtuelle chez lost-oasis (sous FreeBSD puis Debian) pour fournir un MX et DNS secondaire.&lt;/li&gt;
&lt;li&gt;Juillet 2010 je m&#39;achète une nouvelle machine avec plus de RAM et qui consomme moins&lt;/li&gt;
&lt;li&gt;Fin 2010, la machine virtuelle est maintenant chez Hetzner, et sous FreeBSD 8.1 avec un vpn entre mes deux locations.&lt;/li&gt;
&lt;/ul&gt;</description>
		</item>
		<item>
			<title>installation serveur git avec gitosis, lighttpd et cgit</title>
			<link>http://blog.philpep.org/post/installation-serveur-git-avec-gitosis-lighttpd-et-cgit</link>
			<guid>http://blog.philpep.org/post/installation-serveur-git-avec-gitosis-lighttpd-et-cgit</guid>
			<pubDate>Wed, 11 Aug 2010 03:35:42 GMT</pubDate>
			<description>&lt;p&gt;Pour faire revivre un peu ce blog déserté (en particulier par moi même), un petit billet sur la config de mon serveur git.&lt;/p&gt;
&lt;p&gt;Les dépôts git peuvent se trouver sous deux formes :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Une forme pour le développeur/contributeur, c&#39;est ce qu&#39;on obtient avec git clone&lt;/li&gt;
&lt;li&gt;Une forme pour le serveur, que l&#39;on a avec git clone --bare&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;En fait on clone toujours depuis un dépôt bare, de la même manière on push sur un dépôt bare.&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;% git clone --bare git://git.wmfs.info/wmfs.git
Initialized empty Git repository in /tmp/wmfs.git/
remote: Counting objects: 5011, done.
remote: Compressing objects: 100% (1096/1096), done.
remote: Total 5011 (delta 3909), reused 5011 (delta 3909)
Receiving objects: 100% (5011/5011), 844.06 KiB, done.
Resolving deltas: 100% (3909/3909), done.

% ls wmfs.git
branches  config  description  HEAD  hooks  info  objects  packed-refs  refs

% git clone ./wmfs.git
Initialized empty Git repository in /tmp/wmfs/.git/

% ls wmfs
CMakeLists.txt  cmake_uninstall.cmake.in  COPYING  rc  README  src  TODO  wmfs.1  wmfs.desktop  wmfs.doxygen.in  wmfsrc.in
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Dans ce dépôt bare il y a tout un tas de choses, notamment les hooks qui permettent de lancer des commandes avant/après un push et tout autre sortes d&#39;événements.&lt;/p&gt;
&lt;p&gt;Git permet de cloner/pusher depuis/vers des dépôts bare d&#39;au moins trois manières différentes.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Par ssh&lt;/li&gt;
&lt;li&gt;Par le protocole git (sur le port 9418 par défaut)&lt;/li&gt;
&lt;li&gt;Par http&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Pour ssh, si la sécurité nécessite d&#39;avoir des droits par utilisateurs on peut utiliser &lt;a href=&#34;http://eagain.net/gitweb/?p=gitosis.git&#34;&gt;gitosis&lt;/a&gt; qui va créer un utilisateur git avec un ~git/.ssh/authorized_keys qui limite l&#39;accès aux utilisateurs.&lt;/p&gt;
&lt;p&gt;L&#39;install et l&#39;utilisation est simplisme, voyez la doc de gitosis pour faire des choses plus velues :&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;% make -C /usr/ports/devel/py-gitosis install
% sudo -H -u git gitosis-init &amp;lt; /votre/clef/ssh/publique/id_rsa.pub
% git clone git@serveur:gitosis-admin.git
% cd gitosis-admin    
% &amp;gt;&amp;gt; gitosis.conf
[repo foo]
daemon = yes
^D
% git commit -a -m &amp;quot;Ajout depot foo&amp;quot; &amp;amp;&amp;amp; git push
% mkdir /tmp/foo &amp;amp;&amp;amp; cd /tmp/foo
% echo &amp;quot;foo&amp;quot; &amp;gt; bar
% git init
% git add bar
% git remote add origin git@serveur:foo.git
% git push origin master:refs/heads/master
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Et voilà votre premier dépot git.&lt;/p&gt;
&lt;p&gt;Bon là par ssh, seuls les utilisateurs autorisés pourront cloner. Il nous faut un moyen public pour permettre à quiconque de cloner.&lt;/p&gt;
&lt;p&gt;Par le protocole git c&#39;est très facile :&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;% &amp;gt;&amp;gt; /etc/rc.conf
git_daemon_enable=&amp;quot;YES&amp;quot;
git_daemon_directory=&amp;quot;--base-path=/usr/local/git/repositories&amp;quot;
^D
% /usr/local/etc/rc.d/git_daemon start
# Testons par le protocole git
% git clone git://serveur/foo.git
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Mais si vous voulez offrir un service un peu plus complet comme &lt;a href=&#34;http://github.com&#34;&gt;github&lt;/a&gt;, il faut permettre le clone par http parce que si les utilisateurs sont derrière un firewall nazi qui laisse passer que le port 80 sortant ils ne pourrons pas contribuer à vos softs.&lt;/p&gt;
&lt;p&gt;Pour celà il suffit de configurer le serveur web qui sert /usr/local/git/repositories, ainsi nos amis nazis pourront faire du git clone http://serveur/foo.git.&lt;/p&gt;
&lt;p&gt;Allons y avec &lt;a href=&#34;http://lighttpd.net&#34;&gt;lighttpd&lt;/a&gt; puisqu&#39;il faut faire un choix.&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;% &amp;gt;&amp;gt; /usr/local/etc/lighttpd.conf
$HTTP[&amp;quot;host&amp;quot;] == &amp;quot;serveur&amp;quot; {
    server.document-root = &amp;quot;/usr/local/git/repositories&amp;quot;
}
% /usr/local/etc/rc.d/lighttpd reload
% git clone http://serveur/foo.git
# Arf ça marche pas, permission denied
% cd /usr/local/git/repositories
% chmod o+rx foo.git
% git clone http://serveur/foo.git
# Arf, ça marche toujours pas, il me cause d&amp;#39;un git update-server-info
% cd /usr/local/git/repositories/foo.git
% git update-server-info
% cp hooks/post-update.sample hooks/post-update
% git clone http://serveur/foo.git
\o/
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Bon et pour faire un peu plus &#34;pro&#34;, il nous faut un gitweb celui par défaut en perl me plait pas trop, je préfère nettement &lt;a href=&#34;http://hjemli.net/git/cgit/&#34;&gt;cgit&lt;/a&gt;&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span class=&#34;c&#34;&gt;% make -C /usr/ports/devel/cgit&lt;/span&gt;
&lt;span class=&#34;c&#34;&gt;% &amp;gt;&amp;gt; /usr/local/etc/cgitrc&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;clone&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;prefix&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;git&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;//&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;serveur&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;virtual&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;-&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;root&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;snapshots&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;tar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;gz&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;tar&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;bz2&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;repo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;url&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;git&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;repo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;usr&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;git&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;repositories&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;foo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;git&lt;/span&gt;
^&lt;span class=&#34;n&#34;&gt;D&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Comme on est malins, on va le mettre sur le même virtualhost. Et on va faire même encore plus fort, on va le mettre le gitweb ET le clone sur &lt;a href=&#34;http://serveur/foo.git&#34;&gt;http://serveur/foo.git&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Pour ça il faut matcher le client git dans la conf lighttpd :&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span class=&#34;nb&#34;&gt;$HTTP&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;host&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;serveur&amp;quot;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;server.document-root&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/usr/local/git/repositories&amp;quot;&lt;/span&gt;
    &lt;span class=&#34;c1&#34;&gt;# Et si ce n&amp;#39;est pas le client git&lt;/span&gt;
    &lt;span class=&#34;nb&#34;&gt;$HTTP&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;useragent&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;]&lt;/span&gt; &lt;span class=&#34;err&#34;&gt;!~&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;^git&amp;quot;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
         &lt;span class=&#34;k&#34;&gt;server.document-root&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/usr/local/www/cgit/&amp;quot;&lt;/span&gt;
         &lt;span class=&#34;k&#34;&gt;index.file.name&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;cgit.cgi&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
         &lt;span class=&#34;k&#34;&gt;cgi.assign&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;cgi.git&amp;quot;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
         &lt;span class=&#34;k&#34;&gt;server.error-handler-&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;404&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;cgit.cgi&amp;quot;&lt;/span&gt;
         &lt;span class=&#34;k&#34;&gt;url.rewrite-once&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s2&#34;&gt;&amp;quot;^/([^?/]+/[^?]*)?(?:\?(.*))?$&amp;quot;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/cgit.cgi?url=$1&amp;amp;$2&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
     &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;(D&#39;ailleurs je me demande si y&#39;a pas un morceau de code qui fait ça tout seul dans cgit... à voir).&lt;/p&gt;
&lt;p&gt;Voilà, mettez vos petits softs sur le nainternet et attendez les contributions ;)&lt;/p&gt;
&lt;p&gt;Si vous voulez aller encore plus loin, mettez &lt;a href=&#34;http://blog.philpep.org/post/Un-bot-IRC-a-la-CIA-en-python&#34;&gt;un bot irc qui parle quand ça push sur le dépôt git&lt;/a&gt;.&lt;/p&gt;</description>
		</item>
		<item>
			<title>Un bot IRC à la CIA en python</title>
			<link>http://blog.philpep.org/post/Un-bot-IRC-a-la-CIA-en-python</link>
			<guid>http://blog.philpep.org/post/Un-bot-IRC-a-la-CIA-en-python</guid>
			<pubDate>Sun, 09 May 2010 00:00:00 GMT</pubDate>
			<description>&lt;p&gt;Quand vous utilisez &lt;a href=&#34;http://git-scm.com/&#34;&gt;git&lt;/a&gt; à plusieurs et qu&#39;en plus vous utilisez IRC pour en discuter, il peut être agréable d&#39;avoir un bot qui informe le canal des commit sur le serveur. En particulier pour éviter des &lt;code&gt;merge branch&lt;/code&gt; à tout va si on oublie de &lt;code&gt;pull&lt;/code&gt; avant de &lt;code&gt;commit&lt;/code&gt;. Il y a un service sur le net qui propose de tels bots IRC, c&#39;est &lt;a href=&#34;http://cia.vc&#34;&gt;CIA.vc&lt;/a&gt;. Sauf que le service est à des fins de statistiques sur les logiciels libres et j&#39;aime pas trop que ces données sortent du serveur même si elles sont publiques, puis leur bot on sait pas trop ce qu&#39;il fait.&lt;/p&gt;
&lt;p&gt;Donc je me suis mis à coder ce petit bot en python qui se connecte sur le canal IRC et attend des ordre via &lt;a href=&#34;http://en.wikipedia.org/wiki/XML-RPC&#34;&gt;xmlrpc&lt;/a&gt;, cet ordre est lancé à chaque commit via un &lt;a href=&#34;http://www.kernel.org/pub/software/scm/git/docs/githooks.html&#34;&gt;hooks&lt;/a&gt; sur le serveur git.&lt;/p&gt;
&lt;p&gt;Pour ça, tout est dans la librairie python standard, sauf &lt;a href=&#34;http://python-irclib.sourceforge.net/&#34;&gt;irclib&lt;/a&gt; et &lt;a href=&#34;http://packages.python.org/GitPython/&#34;&gt;gitpython&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Le serveur (j&#39;ai enlevé toutes les fonctionnalités qui ne rentrent pas dans le cadre de ce billet) :&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span class=&#34;c&#34;&gt;#!/usr/bin/env python&lt;/span&gt;

&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;threading&lt;/span&gt;
&lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;irclib&lt;/span&gt;

&lt;span class=&#34;n&#34;&gt;chan&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#39;#staff&amp;#39;&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;nick&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#39;napalm0&amp;#39;&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;server&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;irc.philpep.org&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;6667&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;xmlrpcserver&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;localhost&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;8888&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;PbotIRCClient&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;irclib&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;SimpleIRCClient&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
    &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;on_welcome&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
        &lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;chan&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;c&#34;&gt;# Classe de contrôle du bot par xmlrpc&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;PbotControl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
        &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;commit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;files&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;summary&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;base&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
                &lt;span class=&#34;c&#34;&gt;# On formate la chaine de commit (Projet: Commiter (fichiers_touchés) sommaire_du_commit&lt;/span&gt;
                &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#39;&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%s&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;: &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%s&lt;/span&gt;&lt;span class=&#34;s&#34;&gt; (&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\x03&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;23&lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%s&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\x03&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;) &lt;/span&gt;&lt;span class=&#34;si&#34;&gt;%s&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;%&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;base&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;files&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;summary&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
                &lt;span class=&#34;n&#34;&gt;pbot&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;connection&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;privmsg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;chan&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;str&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
                &lt;span class=&#34;c&#34;&gt;# Et un lien vers le commit diff&lt;/span&gt;
                &lt;span class=&#34;n&#34;&gt;pbot&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;connection&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;privmsg&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;chan&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#39;http://git.philpep.org/&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;base&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;.git/commit/?id=&amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;+&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;id&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;c&#34;&gt;# Le serveur xmlrpc&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;class&lt;/span&gt; &lt;span class=&#34;nc&#34;&gt;PbotXMLRPCServer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;threading&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;Thread&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
        &lt;span class=&#34;k&#34;&gt;def&lt;/span&gt; &lt;span class=&#34;nf&#34;&gt;run&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;self&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;):&lt;/span&gt;
                &lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;PbotControl&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
                &lt;span class=&#34;n&#34;&gt;srv&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;SimpleXMLRPCServer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;xmlrpcserver&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;allow_none&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
                &lt;span class=&#34;n&#34;&gt;srv&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;register_instance&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;obj&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
                &lt;span class=&#34;n&#34;&gt;srv&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;serve_forever&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;if&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;__name__&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;==&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#39;__main__&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;pbot&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;PbotIRCClient&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;pbot&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;connect&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;server&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;server&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;],&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;nick&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;t&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;PbotXMLRPCServer&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;t&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;start&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
    &lt;span class=&#34;n&#34;&gt;pbot&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;start&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;()&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Et le hooks à mettre dans le bare repo &lt;code&gt;hooks/post-commit&lt;/code&gt; :&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span class=&#34;c&#34;&gt;#!/usr/bin/env python&lt;/span&gt;

&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;sys&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;argv&lt;/span&gt;
&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;git&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Repo&lt;/span&gt;
&lt;span class=&#34;kn&#34;&gt;from&lt;/span&gt; &lt;span class=&#34;nn&#34;&gt;xmlrpclib&lt;/span&gt; &lt;span class=&#34;kn&#34;&gt;import&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ServerProxy&lt;/span&gt;

&lt;span class=&#34;c&#34;&gt;# Path vers le bare repo (peut être avec &amp;#39;.&amp;#39; ça marche aussi ?)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;Repo&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;/usr/home/git/repositories/pblog2.git&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;commit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;argv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;ServerProxy&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;s&#34;&gt;&amp;#39;http://localhost:8888&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;allow_none&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;bp&#34;&gt;True&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;c&#34;&gt;# Liste des fichiers touchés par le commit&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;try&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
        &lt;span class=&#34;nb&#34;&gt;file&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#39; &amp;#39;&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;join&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;([&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;e&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;a_blob&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;path&lt;/span&gt; &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;e&lt;/span&gt; &lt;span class=&#34;ow&#34;&gt;in&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;diff&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;r&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;parents&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;0&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])])&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;except&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt;
        &lt;span class=&#34;nb&#34;&gt;file&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#39;&amp;#39;&lt;/span&gt;
&lt;span class=&#34;c&#34;&gt;# Appel de la méthode xmlrpc&lt;/span&gt;
&lt;span class=&#34;n&#34;&gt;s&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;commit&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;author&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;name&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;nb&#34;&gt;file&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;c&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;summary&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;s&#34;&gt;&amp;#39;pblog2&amp;#39;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;argv&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;[&lt;/span&gt;&lt;span class=&#34;mi&#34;&gt;1&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;])&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Voilà, en quelques lignes de python vous avez un bot sympa et vous savez comment il fonctionne laissez parler votre imagination pour l&#39;améliorer.&lt;/p&gt;</description>
		</item>
		<item>
			<title>git-daemon sous FreeBSD</title>
			<link>http://blog.philpep.org/post/git-daemon-sous-FreeBSD</link>
			<guid>http://blog.philpep.org/post/git-daemon-sous-FreeBSD</guid>
			<pubDate>Tue, 26 Jan 2010 21:09:39 GMT</pubDate>
			<description>&lt;p&gt;Si vous avez un serveur git sous FreeBSD, vous aurez très rapidement des problèmes avec &lt;code&gt;/usr/local/etc/rc.d/git_daemon&lt;/code&gt;, genre il démarre mal, et refuse de redémarrer.&lt;/p&gt;
&lt;p&gt;En fait il suffit d&#39;utiliser l&#39;option &lt;code&gt;--reuseaddr&lt;/code&gt; qui passe SO_REUSEADDR à &lt;a href=&#34;http://www.freebsd.org/cgi/man.cgi?query=setsockopt&#34;&gt;setsockopt&lt;/a&gt; pendant la création du socket serveur. Du coup il peut redémarrer même si il y avait une connexion active sur le port.&lt;/p&gt;
&lt;p&gt;En lisant le script &lt;a href=&#34;http://www.freebsd.org/cgi/man.cgi?query=rc&#34;&gt;rc&lt;/a&gt;, on peut même éviter de le modifier et devoir le refaire à chaque mise à jours de git, dans &lt;code&gt;/etc/rc.conf&lt;/code&gt;&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;git_daemon_enable=&amp;quot;YES&amp;quot;
git_daemon_directory=&amp;quot;--reuseaddr --base-path=/usr/home/git/repositories&amp;quot;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;EDIT : ce n&#39;est plus nécessaire maintenant &lt;a href=&#34;http://www.freebsd.org/cgi/query-pr.cgi?pr=143275&#34;&gt;PR ports/143275&lt;/a&gt;&lt;/p&gt;</description>
		</item>
		<item>
			<title>Gitweb fastcgi lighttpd et FreeBSD</title>
			<link>http://blog.philpep.org/post/Gitweb-fastcgi-lighttpd-et-FreeBSD</link>
			<guid>http://blog.philpep.org/post/Gitweb-fastcgi-lighttpd-et-FreeBSD</guid>
			<pubDate>Thu, 10 Sep 2009 22:04:31 GMT</pubDate>
			<description>&lt;p&gt;Vu la galère pour mettre en place un gitweb sous lighttpd en fastcgi, voici un petit mémo pour moi et j&#39;èspère qu&#39;il servira à d&#39;autres. (J&#39;explique sous FreeBSD mais ça peut être transposé facilement sur d&#39;autres OS)&lt;/p&gt;
&lt;p&gt;Donc, d&#39;abord mettre en place git et lighttpd :&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;make -C /usr/ports/devel/git install clean
make -C /usr/ports/www/lighttpd install clean
&lt;span class=&#34;nb&#34;&gt;echo &lt;/span&gt;&lt;span class=&#34;nv&#34;&gt;lighttpd_enable&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\&amp;quot;&lt;/span&gt;YES&lt;span class=&#34;se&#34;&gt;\&amp;quot;&lt;/span&gt; &amp;gt;&amp;gt; /etc/rc.conf
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Ensuite j&#39;ai utilisé un script de la doc lighttpd.&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;fetch http://philpep.org/pub/perl-cgi
mv perl-cgi /usr/local/bin
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Ce script utilise deux modules Perl qu&#39;il faut installer, le premier (CGI::Fast) est dans les ports FreeBSD, mais je n&#39;ai pas trouvé le second (Embed::Persistent) donc je l&#39;ai installé &#34;à la mano&#34;&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;make -C /usr/ports/www/p5-FastCGI install clean
fetch http://search.cpan.org/CPAN/authors/id/D/DO/DOUGM/ExtUtils-Embed-1.14.tar.gz
tar xvzf ExtUtils-Embed-1.14.tar.gz
&lt;span class=&#34;nb&#34;&gt;cd &lt;/span&gt;ExtUtils-Embed-1.14
perl Makefile.PL
make
make install
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Ensuite la conf lighttpd : (je met tout dans /usr/local/www)&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;cp /usr/local/share/examples/git/gitweb/gitweb* /usr/local/www
cp /usr/local/share/examples/git/gitweb/*.png /usr/local/www
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Et ceci dans /usr/local/etc/lighttpd.conf&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span class=&#34;c1&#34;&gt;# /usr/local/etc/lighttpd.conf&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;server.port&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;m&#34;&gt;80&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;server.bind&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;10.0.0.3&amp;quot;&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;server.username&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;www&amp;quot;&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;server.groupname&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;www&amp;quot;&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;server.document-root&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/usr/local/www/&amp;quot;&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;server.event-handler&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;freebsd-kqueue&amp;quot;&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;server.pid-file&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/var/run/lighttpd.pid&amp;quot;&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;index-file.names&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;gitweb.cgi&amp;quot;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;server.errorlog&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/var/log/error_log&amp;quot;&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;server.modules&lt;/span&gt;  &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
      &lt;span class=&#34;s2&#34;&gt;&amp;quot;mod_setenv&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
      &lt;span class=&#34;s2&#34;&gt;&amp;quot;mod_fastcgi&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
      &lt;span class=&#34;s2&#34;&gt;&amp;quot;mod_rewrite&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
      &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;fastcgi.server&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;.cgi&amp;quot;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;
      &lt;span class=&#34;p&#34;&gt;((&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;socket&amp;quot;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/tmp/application.fcgi.socket&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
         &lt;span class=&#34;s2&#34;&gt;&amp;quot;bin-path&amp;quot;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/usr/local/bin/perl-cgi&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
       &lt;span class=&#34;p&#34;&gt;))&lt;/span&gt;
      &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;setenv.add-environment&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
      &lt;span class=&#34;s2&#34;&gt;&amp;quot;GITWEB_CONFIG&amp;quot;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/home/git/gitweb.conf&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
      &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;c1&#34;&gt;# Le petit rewrite qui fait bien&lt;/span&gt;
&lt;span class=&#34;k&#34;&gt;url.rewrite-once&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;^/([a-zA-Z]+.git)(.*)$&amp;quot;&lt;/span&gt; &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;quot;/gitweb.cgi/$1$2&amp;quot;&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;

&lt;span class=&#34;k&#34;&gt;mimetype.assign&lt;/span&gt;             &lt;span class=&#34;o&#34;&gt;=&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;(&lt;/span&gt;
      &lt;span class=&#34;s2&#34;&gt;&amp;quot;.png&amp;quot;&lt;/span&gt;          &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;      &lt;span class=&#34;s2&#34;&gt;&amp;quot;image/png&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
      &lt;span class=&#34;s2&#34;&gt;&amp;quot;.css&amp;quot;&lt;/span&gt;          &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;      &lt;span class=&#34;s2&#34;&gt;&amp;quot;text/css&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;span class=&#34;c1&#34;&gt;# default mime type&lt;/span&gt;
      &lt;span class=&#34;s2&#34;&gt;&amp;quot;&amp;quot;&lt;/span&gt;              &lt;span class=&#34;o&#34;&gt;=&amp;gt;&lt;/span&gt;      &lt;span class=&#34;s2&#34;&gt;&amp;quot;application/octet-stream&amp;quot;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
      &lt;span class=&#34;p&#34;&gt;)&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;


&lt;p&gt;Et voilà, un petit&lt;/p&gt;
&lt;div class=&#34;codehilite&#34;&gt;&lt;pre&gt;&lt;span class=&#34;sr&#34;&gt;/usr/&lt;/span&gt;&lt;span class=&#34;nb&#34;&gt;local&lt;/span&gt;&lt;span class=&#34;sr&#34;&gt;/etc/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;rc&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;.&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;d&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;/&lt;/span&gt;&lt;span class=&#34;n&#34;&gt;lighttpd&lt;/span&gt; &lt;span class=&#34;n&#34;&gt;start&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;</description>
		</item>
	</channel>
</rss>

