mardi 8 juin 2010

Installation de gitolite sur debian

Git

Citation : Wikipédia (fr)
Git est un logiciel de gestion de versions décentralisé. C'est un logiciel libre créé par Linus Torvalds, le créateur du noyau Linux, et distribué sous la GNU GPL version 2.
Git seul permet de créer et d'utiliser pleinement un dépot privé (local), ou un dépot public sans gestion des droits d'accès) via git-daemon.

Pour héberger un dépot git, et avoir une gestion plus fine des droits d'accès, il faudra passer par un serveur tiers : gitosis, ou comme ici, gitolite, une réécriture du premier.

Gitolite

Gitolite permet d'héberger des dépôts git, en y ajoutant une gestion des droits d'accès, non seulement par dépôt (comme le fait déjà gitosis) mais aussi par branche et par tag. Il permet notamment de préciser si un utilisateur (ou groupe d'utilisateur) a le droit de push sur une branche.

Gitolite permet de gérer un grand nombre de dépôt et d'utilisateurs, sans même avoir besoin de leur donner un compte sur le serveur, mais juste en intégrant leur clef publique.

Installation


Pré-requis


Pour ces explications, je me base sur une Debian Squeeze, mais le principe reste le même pour une autre distribution. Attention cependant aux distributions un peu anciennes : la version packagée de git sur Lenny est trop ancienne pour gitolite.

Préparation


Gitolite nécessite un utilisateur particulier pour gérer les dépots, il est possible d'utiliser root, mais je préfère créer un compte gitadmin.
L'utilisateur gitadmin doit pouvoir se connecter sur le compte git, il faut donc jouer un peu avec les clef ssh :
adduser --system --shell /bin/bash --password gitadmin --gecos 'git version control' --group --home /home/gitadmin gitadmin
adduser --system --shell /bin/bash --password git --gecos 'git version control' --group --home /home/git git

Se connecter avec le compte gitadmin, créer sa clef publique et ajouter la clef de gitadmin à la liste des clefs autorisées de git:
su - gitadmin
ssh-keygen
ssh-copy-id -i ~/.ssh/id_rsa.pub git@localhost


Installation de gitolite


La première chose à installer est bien entendu git :
apt-get install git-core

Ensuite, pour installer gitolite, nous allons cloner le dépot :
git clone git://github.com/sitaramc/gitolite.git
cd gitolite
src/gl-easy-install git localhost gitadmin

Le script d'installation va poser plusieurs questions, la réponse par défaut ira très bien.

Configuration


La configuration de Gitolite est très simple. Elle se fait via un dépôt de configuration gitolite-admin, clôneé dans le répertoire personnel de gitadmin. C'est dans celui-ci que nous configurerons les dépôts.
Cette configuration comprend un fichier et un dossier :
  • conf/gitolite.conf : fichier de configuration de Gitolite, contenant les dépôts, leurs utilisateurs/groupes et leurs droits associés.
  • keydir/ : dossier contenant les clés publiques des utilisateurs, sous la forme username.pub.:

La configuration de Gitolite utilisant un dépôt Git spécifique, il sera nécessaire de commiter les changements effectués pour qu'ils prennent effet, c'est pour cela qu'il est nécessaire de se situer dans le dossier de configuration pour appliquer des changements.

Rendez-vous donc dans le dépôt gitolite-admin de votre utilisateur admin :
cd ~/gitolite-admin


Utilisation


Nous allons créer un dépôt, ou gitadmin aura les droits lecture/écriture, mais où un utilisateur gituser (utilisateur non lié au serveur), n'aura que le droit de lecture.
vi conf/gitolite.conf
repo test
RW+ = gitadmin
R = gituser

git add conf/gitolite.conf


Ensuite, on doit importer le clef publique de gituser (créé sur son poste), et la commiter.
vi keydir/gituser.pub

git add keydir/gituser.pub
git commit -m "add repo test and user gituser"
git push

Le push permet de réellement mettre les modifications en production.

Ensuite, il nous reste à tester sur notre poste que tout va bien :
git clone git@localhost/test.git
cd test
touch README
git add README
git commit -m "readme file"
git push
=> W access for test DENIED to gituser


On voit donc bien que gituser n'a pas le droit d'ecrire sur le dépôt.

Voilà, on a maintenant un serveur git disponible, sur lequel on peut gérer finement les droits d'accès.
Pour plus d'informations, je vous invite à vous rendre sur le site de gitolite.

Ma prochaine étape sera d'essayer de pousser plus loin la gestion des droits, notamment sur les branches.

2 commentaires:

  1. Merci pour ce tuto.

    Petite remarque :

    adduser --system --shell /bin/bash --pasword git --gecos 'git version control' --group --home /home/git git

    me donne --pasword option inconnue.


    adduser -v
    adduser version 3.112+nmu2

    Pourtant je tourne sous squeeze..

    RépondreSupprimer
  2. Il manque un s à password, mais visiblement l'argument ne marche pas meme avec 2 S. J'ai lancé la commande sans, et il suffit de lancer l'utilitaire passwd pour changer le mdp.

    RépondreSupprimer