Mettre en oeuvre un dépôt Git sur le Web: la bonne méthode

Introduction

Si vous n'utilisez pas encore Git, sachez que vous devriez ;-). Ces derniers temps, ce logiciel de gestion de version en mode distribué a vraiment le vent en poupe. Son terrain initial était la gestion du code source du noyau Linux et il a été mis en oeuvre dans ce but. Néanmoins, depuis quelques années, son utilisation va en s'accroissant car c'est finalement un outil excellent qui a su bien évoluer et s'adapter aux besoins d'une très grande variété d'utilisation. Par exemple, mon site web personnel est géré avec Git.

Je ne vais pas faire un résumé de ce qu'est Git et en quoi il est formidable. Vous pouvez lire tout un tas de documents sur ce point. Sachant qu'on peut utiliser git pour de nombreuses choses et qu'il est prévu pour être un système décentralisé, il est donc très adapté à la structure éclatée d'Internet. De fait, la facilité d'accès aux dépôts Git, en écriture et en lecture est un critère à ne pas négliger.

Il est possible d'accéder à un dépôt Git via de nombreux protocoles. Celui qui est le plus souvent ouvert partout est le bien connu HTTP et Git gère bien entendu l'accès en lecture par ce protocole mais également en écriture.

Pour mes besoins internes, j'avais envie de tester un accès en écriture sécurisé (HTTPS+Authentification HTTP) afin d'avoir toujours accès à mes dépôts. Lors de mes recherches, j'ai trouvé des informations pas forcément à jour et l'objectif de ce document est de vous livrer la bonne démarche pour répondre à ce besoin sans chercher pendant des heures...

WebDAV pas assez intéressant

Ce qui provoque pas mal de perte de temps c'est qu'on trouve bon nombre d'articles sur le Web qui recommandent de mettre en place un serveur WebDAV pour "écrire" dans un répertoire HTTP. Ca semble de prime abord cohérent: git gère des fichiers et HTTP est un protocole qui donne accès à des fichiers...

Néanmoins, ça ne peut être utile que pour des configurations simples. En effet, Git, c'est plus que de la lecture/écriture de fichiers: les scripts "hooks" n'existent pas pour rien et ils sont particulièrement puissants. Néanmoins, HTTP n'est pas prévu pour lancer des scripts distants ! WebDAV est donc une solution intéressante uniquement si vous ne souhaitez pas lancer de scripts hooks.

Ce problème est préoccupant car dans pas mal de cas, un script hook est vraiment très utile voire nécéssaire. Etant donné que la majeure partie du traffic Internet est filtré en raison de mauvaises pratiques de firewall qui consistent à tout fermer sauf HTTP et qui sont malheureusement tellement répandues, il nous faut donc une solution pour notre problème si commun. Comme c'est un problème préoccupant, une solution a été mise en oeuvre: elle se nomme "smart http".

Git smart-http

Scott Schacon en parle sur son blog. Cet article est très intéressant car il explique comment fonctionnait Git avec HTTP avant la mise en place de smart-http.

Pour faire simple, la solution consiste simplement à mettre en place un script CGI sur le serveur qui gère plus de chose que la simple gestion de fichiers par le protocole HTTP.

Comme git est extrèmement bien documenté, un simple man git-http-backend vous donnera toute l'information de référence sur la mise en place de cette fonctionnalité. Néanmoins, j'ai testé pour vous et voici quelques conseils...

Mise en place du script CGI git-http-backend avec Apache 2.x

Une configuration simpliste ressemble à ça:

    # Dépôts Git (git-http-backend)
    SetEnv GIT_PROJECT_ROOT /var/local/git
    SetEnv GIT_HTTP_EXPORT_ALL
    SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER 
    #Alias /git /var/local/git/
    ScriptAlias /git/ /usr/lib/git-core/git-http-backend/

    <LocationMatch "^/git/.*/git-receive-pack$">
           AuthType Basic
           AuthName "Git depots write Access"
           AuthUserFile /etc/apache2/git-users
           Require valid-user
    </LocationMatch>

Elle permet d'accéder en lecture à tous les dépôts git stockés dans /var/local/git (vous pouvez mettre ce que vous voulez à la place). Les variables d'environnement sont importantes. GIT_HTTP_EXPORT_ALL vous permet d'indiquer que tous les dépôts Git du répertoire précédent sont accessibles en lecture. REMOTE_USER permet de gérer l'authentification.

Le scriptAlias permet à Apache de lancer le CGI (git-http-backend) lors de l'appel de l'URL /git. Enfin, la directive LocationMatch permet de gérer l'authentification pour l'écriture distante dans le dépôt. En effet, lorsque vous allez écrire dans le dépôt, git (le client) va se connecter sur une URL de type http://monsiteweb.sdf/git/projet.git/git-receive-pack (pour la lecture, l'URL se termine par git-fetch-pack). L'accès à cet emplacement est donc protégé par une authentification HTTP de type Basic (en clair donc) en utilisant les comptes disponibles dans le fichier /etc/apache2/git-users.

Bien entendu, l'authentification HTTP Basic expose vos informations de connexion en clair. Vous devez donc activer cette configuration uniquement sur un site accessible en HTTPS. Pour ma part, j'ai placé l'accès en lecture également uniquement en HTTPS: ça fait moins de configuration à maintenir et il suffit d'ajouter une lettre (le s de https) pour avoir accès au dépôt: ça ne va pas me tuer !

Certificats auto-signés

Git, par défaut, s'attend à ce que tout ce qui vient d'un site web SSL respecte les règles de base de sécurité, à savoir, un certificat valide. Toutefois, il n'est pas toujours possible de disposer d'un tel certificat, tant pour des raisons de coûts que de pratique (c'est stupide de demander un certificat valide pour effectuer des tests par exemple).

Pour toutes ces raisons, il est parfois important d'indiquer à Git de ne pas chercher à vérifier le certificat SSL. Vous pouvez le faire grâce à l'option de configuration http.sslVerify:

 git config --global http.sslVerify false

Accès à l'archive en écriture

Malgré la configuration présentée ci-dessus, je n'arrivais toujours pas à écrire dans le dépôt. Après quelques recherches, je me suis rendu compte qu'il y avait un bug dans la dernière version de git qui pose des problèmes avec tout système d'authentification. En effet, il semble que lorsque git reçoit une demande d'authentification de la part du serveur Web (code 401) abandonne le processus en lieu et place de demander le login/password adapté. Ce bug n'était pas présent dans les versions précédentes de git.

Un moyen de contournement consiste à indiquer l'intégralité des éléments d'authentification directement dans l'URL du dépôt distant.

Après avoir lancé la commande:

git clone https://monsiteextraordinaire.sdf.df/git/top_sotfware.git

Vous pouvez afficher la configuration du dépôt:

cd top_software
git config -l 

 user.name=xxxx
 user.email=xxxxx
 http.sslverify=false
 core.repositoryformatversion=0
 core.filemode=true
 core.bare=false
 core.logallrefupdates=true
 remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
 remote.origin.url=https://monsiteextraordinaire.sdf.df/git/top_sotfware.git
 branch.master.remote=origin
 branch.master.merge=refs/heads/master

Pour faire contourner notre problème, il suffit d'indiquer les éléments d'accès dans remote.origin.url:

 git config remote.origin.url https://login:password@monsiteextraordinaire.sdf.df/git/top_sotfware.git

Maintenant, ça devrait fonctionner. Attention, votre login/password est en clair dans le fichier .git/config donc vous devrez bien configurer l'accès à ce fichier (un petit chmod 600 devrait faire l'affaire) ! Néanmoins, c'est la seule solution pratique qui permet de réaliser de nombreux petits commits/push en perdant le moins de temps.

Conclusion

Pouvoir écrire dans un dépôt Git depuis quasiment n'importe quel point d'accès à Internet est un vrai plus. En effet, plus besoin de faire des diff à stocker sur clef USB ou à envoyer par email. Vous pouvez faire vos modifications depuis n'importe où et ça devrait booster votre productivité et également votre utilisation de Git.

Ainsi, il n'y a plus à hésiter à créer un dépôt git pour tout et n'importe quoi (gérer un wiki, un blog, un système de traduction, du code, etc.)...

Posted sam. 07 avril 2012 20:40:15 Tags:

Dans les forêts de Sibérie est un livre écrit par Sylvain Tesson. L'auteur est un habitué des voyages au long cours, en pleine Nature.

L'expérience qu'il nous relate dans le livre sus-citée est bien différente: l'auteur s'enferme durant six mois dans une cabane située au bord du lac Baïkal, au nord d'Irkoustk. Cette cabane dite des deux cèdres est un lieu complètement éloigné de toute habitation humaine: les personnes les plus proches vivent à plus d'une dizaine d'heures de marche.

Je vous conseille fortement ce livre: ça se lit sans fin, le style est très léger et c'est un vrai régal. Le livre idéal des insomniaques qui ont besoin de lire cinq pages d'une histoire qui les rassure pour mieux les bercer et les endormir.

Ce livre m'a particulièrement parlé. J'y ai retrouvé des traits de sentiments qui m'ont traversé durant mes modestes périples en solitaire. A travers quelques mots-clefs, je vous invite à faire le tour de ces moments forts.

La cabane, le havre de paix: Un truc qui est assez génial et que de nombreuses personnes ont déjà connu c'est l'intensité et la force du sentiment de sécurité lorsqu'on est à l'abri dans sa cabane pendant la tempête. J'ai connu ça dans les pyrénnées et je dois avouer que c'est un sentiment intense qui procure une sérénité agréable, quasiment foetale !

Solitude: Visiblement, je n'ai pas relevé trace d'un ennui quelquonque. A aucun moment Sylvain Tesson ne relève un sentiment de lassitude dans ses écrits. D'ailleurs, ce qui est relaté est souvent un vrai condensat d'une journée et c'est assez court. On peut en déduire qu'il avait soit la flemme d'écrire, soit tout simplement, pas suffisamment de temps pour raconter sa vie.

Ce sentiment va même plus loin: Tesson se met à fuir toute relation avec autrui. Les visites deviennent dérangeantes, des troubles de l'ordre établi. Sans devenir associal, l'individu isolé, l'ermite, se remet à vivre sans le dialogue, sans ce bruit permanent auquel nous sommes tellement habitués et que nous avons du mal à supporter.

Alcool: Je ne sais pas si c'était relevé de manière éxagérée mais l'auteur semble souvent picoler sérieusement. Seul ou en groupe, il relate très souvent ses abus de boisson. Du moins, c'est ce que j'ai relevé et ce qui m'a marqué. Pourtant, c'est peut-être tout simplement dû au fait que l'ivresse est un fait marquant dans une journée (voir sur plusieurs journées suivant la cuite).

Tesson n'est pas hypocrite: il a clairement fait un stock pour se mettre des piles et il ne dit pas qu'il boit de la vodka pour le goût mais bien pour connaître l'ivresse. Un vrai amérindien ! Ça plus un petit cigare (ou une bonne pipe), et il ne manque rien...

Livres: Sylvain Tesson est écrivain et ça se sent: il dévore littéralement les livres. Son chargement était vraiment complet et bien fourni. Du policier aux essais philosophiques, il est tout le temps en train de lire et de vivre ce qu'il lit. Un jour c'est Thoreau (bien adapté à la situation non ?), l'autre c'est Nietzsche. A chaque fois, la citation est de circonstance. La solitude et la vie dans la forêt vous laissent finalement beaucoup de temps pour l'essentiel: les activités de l'esprit. C'est sans doute cela qui explique la résistance à l'ennui.

Auto-suffisance: Dans ces contrées de Sibérie, l'auto-suffisance ne passe pas par l'agriculture mais bien par la chasse-cueillette. La chasse étant interdite car la cabane est située dans une réserve naturelle, l'auteur se rabat sur la pêche des ombles. D'ailleurs pendant quelques mois, c'est quasiment sa seule nourriture. Ce régime carné a aussi une conséquence sur son corps qui change, devient plus pâle et plus ferme avec les exercices physiques que lui procurent le fait de couper son bois pour se chauffer.

Il fait remarquer, à juste titre, que l'individu qui souhaite se mettre en marge de la société ou qui souhaite la changer doit rompre complètement avec tout ce qui vient d'elle. Il cite l'exemple du révolutionnaire qui utilise le courant électrique produit par les capitalistes pour faire sa propagande et montre l'ambiguité du message. L'ermite, n'a pas se problème: tout ce qu'il a , tout ce qu'il fait, il le doit à lui même et à la Nature.

Déchirement amoureux: Au cours de l'histoire, il semble que Sylvain Tesson apprend qu'il s'est fait plaquer par un SMS de 5 lignes qu'il reçoit sur son téléphone cellulaire. Cette nouvelle le terrasse mais il semble remonter la pente grâce à quelques visites de la part de connaissances et, sans doute aussi, par la vie dans la cabane.

Bon, je ne me fais pas trop de souci pour lui: vu sa notoriété et le fait qu'il vive ce qu'il écrit, il ne devrait pas avoir trop de mal à trouver quelqu'un qui est passionné comme lui dans son groupe de fans... A moins que la vie soit vraiment mal faite !

Vision de la civilisation: J'ai particulièrement apprécié la vision du monde qu'offre Sylvain Tesson. Je constate que certaines personnes ont besoin de s'éloigner des autres et qu'ils arrivent très bien à vivre heureux comme ça, voire que cet isolement est nécéssaire.

PS: Si par hasard l'auteur lit cette page (probabilité proche de 10^-6), je tiens juste à lui dire qu'il ne faut pas confondre hacker et pirate informatique. Un hacker est une personne qui aime comprendre le fonctionnement interne d'un système, en particulier des ordinateurs et réseaux informatiques. Mais ses activités ne sont pas limitées à ces thèmes. Par exemple, je crois qu'on peut dire que Sylvain Tesson est un hacker du voyage au long cours et de la vie sauvage...

Posted mar. 17 avril 2012 22:40:30 Tags:

Apache et la gestion des fichiers webm

Je viens de mettre en ligne quelques screencasts. Mettre une vidéo sur le web est maintenant devenu à la portée du premier quidam: il suffit de choisir un format de fichier vidéo ouvert de type webm ou theora (ogv) et de les lier à une page HTML en utilisant la balise video.

Pour faire la vidéo au format Webm, il existe plein de moyens qui vont de la capture vidéo par ffmpeg au montage complet de rushs vidéos avec un outil dédié. Pour ma part, je préfere le moyen le plus adapté à la situation et, bien souvent, c'est par la ligne de commande: mon bureau étant sous i3, il est d'une apparence spartiate et il n'y a pas besoin de faire du montage pour supprimer toutes les fioritures. J'ai d'ailleurs rédigé une petite documentation sur le sujet.

Le logiciel que j'utilise pour "propulser" ce blog (et le reste aussi) est Ikiwiki. Il gère nativement la balise vidéo: il suffit de le rajouter à la main comme indiqué dans la documentation officielle.

J'avais néanmoins un souci: mes vidéos étaient indisponibles alors que le fichier était bien en ligne. Je me suis vite rendu-compte d'un élément important: lorsque vous stockez un fichier vidéo qui sera accessible par HTTP, vous devez faire en sorte que votre serveur renvoie le bon type MIME. Sinon, le navigateur web sera incapable d'afficher la vidéo (c'est plutôt une bonne pratique !).

Je fus surpris de voir qu'avec une vidéo OGV, ça fonctionnait très bien. En fouillant un peu, je me suis rendu compte que mon problème venait de la déclaration des types MIME dans Apache. Sous Debian, cette définition est située non pas dans la configuration d'Apache mais tout simplement dans le fichier /etc/mime.types. Ça peut sembler logique: on a besoin de gérer les types MIME dans de nombreux cas différents de l'utilisation d'un serveur HTTP...

L'explication du pourquoi tient simplement dans le fait que le fichier /etc/mime.types de Debian Squeeze est assez ancien et qu'il y manque la ligne:

 video/webm                                      webm

La correction fut triviale !

Posted dim. 22 avril 2012 13:08:47 Tags:

Expédition de l'extrême: l'Endurance.

Dans les annales des aventures polaires, je viens d'en découvrir une dont le récit est particulièrement d'intérêt: l'expédition Endurance.

Imaginez une expédition antarctique qui tourne court, un navire pris dans la glace qui finit par se briser et un équipage coincé sur la banquise qui dérive ! On peut facilement imaginer que tous ces hommes sont condamnés... et pourtant, tous en réchappèrent, au pris d'effort et d'une tenacité hors du commun.

Je viens de voir un documentaire sur le sujet et je peux vous dire que cette histoire vaut son pesant de cacahuètes ! Ce qui arrive à ces personnes est tout simplement incroyable. A chaque fois qu'ils semblent toucher au but, une série de problèmes s'abattent sur eux, sous forme de tempêtes, de courants contraires ou encore de montagnes infranchissables et non cartographiées. Ce n'est plus un défi, c'est plus que ce qu'on peut qualifier d'aventure: il n'y a pas de qualificatif à la mesure de l'épreuve.

Pendant quelques jours, vous pouvez revoir ce documentaire (en flashçapuecestpaslibre certes) sur l'excellente chaîne de télévision qui se nomme Arte. Si vous aimez les expéditions, les histoires extrêmes, vous allez être servis...

Voici également quelques liens pour remplir votre liseuse de livres électroniques:

A noter que Frank Worsley, le capitaine de l'équipage à qui on doit sans doute la survie de tout le groupe, est mort il y a 69 ans (1943). Ce qui signifie que dès l'année prochaine, les oeuvres qu'il a publiées s'élèveront dans le domaine public et que chacun pourra lire ses récits qui, à mon humble avis, sont d'un intérêt incontestable !

Posted lun. 23 avril 2012 20:51:05 Tags:

Jour de pluie

Aujourd'hui, toute la journée,
Il a plu.
Dehors, dans toutes ces allées,
Les gens ont disparu.

La pluie en continu,
A su ramener calme, sérénité.
Bien naïf et ingénu,
J'ai cru la paix enfin revenue.

A quel point je fus déçu
D'avoir trop rêvé.
Quelques gouttes ne peuvent effacer
Ces huluberlus.

De toute la journée, la pluie n'a cessé.
Trop longtemps que ce n'était pas arrivé.
Posted sam. 28 avril 2012 20:47:00 Tags: