24 March 2012

coding experience return git gitorious gitblit

Depuis un certain temps je code différent bouts de programme. En général je ne finis pas grand chose, mais j’accumoncele des bouts de code qui peuvent être intéressants à garder.

J’aime beaucoup l’idée de pouvoir partager ces quelques lignes de code et surtout de pouvoir suivre leur évolution au fur et à mesure que je les modifies.

C’est pourquoi, après avoir pendant un temps utilisé Subversion, j’ai décidé de passer à Git. Git, étant à la mode, et étant facilement installable à peut près partout où je passe (poste personnel sous OS X, travail sous Windows ou Linux).

Malgré une lacune énorme dans le fonctionnement de Git (principalement, les branches et merge), j’en connais assez pour créer un projet et sauvegarder mes modifications.

Maintenant viens le problème de partage, j’aurais pu utiliser Github, très bon site qui propose des un moyen simple de mettre en ligne ses projets gratuitement.

Mais je suis actuellement assez réticent à utiliser des ressources dont je ne contrôle rien, et c’est pour cela que j’avais cherché un moyen d’héberger un système proche du fonctionnement de Github, mais sur un serveur personnel. Ainsi je maitrise la chaine de A à Z.

Le plus proche que j’avais finit par adopter est donc Gitorious, solution logicielle semblant assez proche de Github, ce logiciel est graphiquement magnifique, mais hélas son installation nécessite tellement de manipulation que j’avais décidé de lui dédier une machine virtuelle complète basée sur Linux Gentoo. Cela à fonctionné sans trop de problème pendant pas mal de temps.

De par mon utilisation spécifique de Gitorious dans une VM, j’ai du faire face à un petit problème assez spécial. En effet Gitorious, utilise SSH comme protocole de soumission (ainsi que git://, mais je ne l’ai jamais essayé, et semble nécessiter l’ouverture d’un port spécifique).

L’utilisation de SSH est gérée par Gitorious en passant par la partie WEB pour pouvoir ajouter des clefs SSH pour l’utilisateur git qui est en frontal quelque soit l’utilisateur web que vous utilisez.

Mon problème le plus ennuyeux, c’est que mon port ssh est donc partagé entre 2 machines : le serveur hôte (OS X serveur) et la machine invitée (Gentoo), comme on se connecte sur une seule adresse ip vue d’internet, il a fallut mettre en place une redirection ssh entre les 2 machines.

Cela se fait assez facilement (je ne rentrerais pas ici dans les détails, sauf si on me le demande) mais posait un problème : en effet, lorsque l’on veux rajouter un utilisateur, ou une machine, une clef ssh publique / privée spécifique doit être ajoutée au compte local git du serveur Gitorious.

Pour cela Gitorious propose un serveur qui écoute les demandes de rajout de clef par l’intermédiaire de l’interface web. Et ajout les clef dans le fichier qui va bien (~/.ssh/authorized_keys).

Mais hélas, à cause de la manière dont j’ai monté cette solution, Gitorious ajoutais la clef au compte SSH de la VM, alors que la VM ne voyait des connexions que de la machine hôte. Il me fallait donc manuellement synchroniser la configuration ssh de la machine hôte et de la machine invitée.

Pas vraiment génial. Mais surmontable.

Jusqu’à ce que Gatchan me demande un compte sur mon serveur (vous pouvez trouver son blog dans mes liens). Il avait un besoin assez simple : pouvoir utiliser un serveur Git distant, sans pour autant permettre le partage à tout le monde.

Donc la possibilité d’avoir des projets privée en résumé.

Et c’est là que çà coince, Gitorious ne propose pas cette possibilité. C’est une évolution est devrait être en cours d’ajout. Mais n’est toujours pas disponible.

J’ai donc décidé d’abandonner Gitorious.

Et j’ai donc listé les fonctionnalités que je voulais en priorité :

  • Installation ultra simple. Donc on oublie RoR (que j’aime bien, mais sur Gitorious c’est vraiment n’importe quoi) pour favoriser PHP, ou autre

  • Projets privés

  • Simple d’utilisation

  • Pas trop moche

J’en ai listé un paquet, et j’ai regardé le premier venu : Gitblit. Assez sympa d’aspect je lui ai trouvé un gros positif : existe en vers autonome, et écrit en Java.

Il utilise l’implémentation du client Git du projet Eclipse, et ne nécessite aucune installation. On le pose dans un coin du disque, on ne touche à rien, on le lance et voilà. Un serveur Git qui fonctionne bien et que est évidemment moins lourd qu’une machine virtuelle.

Un seul point m’a posé problème : Gitblit utilise le caractère / pour la partie web lorsque l’on navigue dans des sous projets. Or j’utilise en frontal un serveur proxy nginx. Et il semble que nginx ré-encode le caractère / et Gitblit ne sait plus voir /.

Pas de panique c’est prévu, il suffit de modifier la configuration pour remplacer le caractère / par le caractère ! ou | (par exemple) et plus de problèmes.

J’ai donc migré mes projets sur Gitblit et éteint ma VM Gitorious.

Mon serveur est content, mes requêtes web sont plus réactive, et je peut tout déplacer sur une autre machine juste en déplaçant un dossier.

Vraiment génial !