Gitolite avec Debian 6 et EGit

Ce billet décrit une procédure d’installation d’un serveur Gitolite sur un serveur Debian 6 fraîchement installé.

Nous utiliserons également Eclipse et son plugin EGit pour une utilisation de Git en tant qu’utilisateur « client » : récupération des sources, paramétrage des dépôts…

Sources d’inspirations principales pour cet article

BigFastBlog.com Génération des clés
Gitolite.com basic-admin Adding / Removing Users
Stackoverflow.com Multiple keys in EGit
Gitolite.com concepts Concept général de Gitolite
sheevaboite.fr Installer un serveur GIT auto hébergé
README.txt Installation de gitolite sur le site d’Ubuntu et le fichier README.txt très bien écrit (une fois les sources de Gitolite récupérées)
Autres sources
github.com Aide utilisateur
pcottle.github.com Tutoriel GIT
soat.fr ([Devoxx FR 2013]) Fast Forward : Comment migrer un gros projet de svn à git

Test Redim :

Dossier home de Gitolite

Création de l’utilisateur « hôte » de Gitolite

Sur le serveur Debian, nous allons créer un nouvel utilisateur dédié à Git / Gitolite.

su -
# On peut tester avec l'option --disabled-password aussi pour n'autoriser qu'une identification en SSH
adduser --system --shell /bin/bash --group --home /var/git git
passwd git
exit

Installation de Git

su -
# Config des proxy apt dans /etc/apt/apt.conf si nécessaire 
# Acquire::http::Proxy "http://myproxy.com:8888";
# Acquire::https::Proxy "http://myproxy.com:8888";
apt-get update
apt-get upgrade
apt-get install git

Création des utilisateurs Gitolite

Ce sont des certificats SSH qui seront introduits dans l’installation de Gitolite. Générons donc ces certificats. Un pour le compte d’administration (admin) et un pour un compte standard (olivier).

La clé admin.pub devra se trouver dans /tmp/admin.pub.

Les 4 fichiers clés (publiques et privées) dans le dossier ~/.ssh/ de la machine cliente (selon les droits désirés : admin et/ou user) (Exemple C:\Users\\.ssh\config)

Par Linux

su git
ssh-keygen -t rsa -f admin
ssh-keygen -t rsa -f olivier

Génération de clés par Linux

Par Eclipse

# Preferences > General > Network Connection > SSH2 > General > Key Mgmt :
# Generate RSA Key + Save Private Key

Fenêtre de génération de clés dans Eclipse.

Installation de Gitolite

su git
# Config initiale du proxy si besoin
# git config --global http.proxy http://myproxy.com:8888
# git config --global https.proxy http://myproxy.com:8888
cd /tmp
git clone http://github.com/sitaramc/gitolite
mkdir -p var/git/bin
/tmp/gitolite/install -to /var/git/bin
/var/git/bin/gitolite setup -pk /tmp/admin.pub

Le setup met à jour les droits et crée les dépôts par défaut dans /var/git/repositories : gitolite-admin.git et testing.git.

A la fin de l’installation votre dossier /var/git doit ressembler à ceci :

Dossier home de Gitolite

EGit : Paramétrage des utilisateurs

Configuration du proxy si nécessaire

Dans Preferences > General > Network Connection > Proxy bybass, ajouter l’IP de votre serveur si besoin, et vérifier l’adresse de votre proxy dans Proxy Entries :

Fenêtre de paramétrage du Proxy dans Eclipse

Création du fichier ssh config

Il nous permettra de pouvoir utiliser plusieurs clés en fonction des projets (admin pour l’administration de gitolite, user pour les projets utilisateurs)

**NB :** Eclipse ne supporte pas le paramétrage de plusieurs clés privées simultanées (Preferences > SSH2 > Private keys)

Créer le fichier ~/.ssh/config (Exemple C:\Users\\.ssh\config)

Host gitAdmin
	Hostname x.x.x.x
	IdentityFile ~/.ssh/admin.priv
	User git

Host gitOlivier
	Hostname x.x.x.x
	IdentityFile ~/.ssh/olivier.priv
	User git

Aperçu de votre dossier .ssh et du fichier config :

Exemple de fichier config. Redémarrez Eclipse si vous rencontrez des problèmes suite à la mise à jour de votre configuration SSH.

Administration de Gitolite

Import du projet gitolite-admin

Importer le projet d’administration des dépôts dans Eclipse depuis File > Import > Projects from Git > Clone URI :

URI : ssh://git@gitAdmin/gitolite-admin.git (Import as General Project)

Import du projet gitolite-admin.git dans Eclipse. Utiliser le profil Admin pour cela.

Modifions le dépôt existant « testing »

Nous allons attribuer le projet testing pour l’utilisateur olivier uniquement :

gitolite-admin/conf/gitolite.conf : repo testing : RW+ = olivier
+ gitolite-admin/keydir/olivier.pub
Add To Index + Commit & push

Mise à jour de la configuration des utilisateurs et des dépôts.

Importer le projet testing

Dans Eclipse, Fichier > Importer > Git :

URI : ssh://git@gitOlivier/testing.git

Import du projet Testing par l’utilisateur standard cette fois.

Conclusion

N’hésitez pas à lire en détail le fichier /tmp/gitolite/README pour en apprendre plus sur la manière de configurer les dépôts Git dans le fichier gitolite.conf.

Un exemple de configuration

repo foo
         RW+                     = alice
         -   master              = bob
         -   refs/tags/v[0-9]    = bob
         RW                      = bob
         RW  refs/tags/v[0-9]    = carol
         R                       = dave
  • clone et fetch sont accessible à tout utilisateur disposant au moins d’un droit ‘R’ (R, RW, RW+)
  • push : git parcourt l’ensemble des règles paramétrées et lorsqu’il trouve une règle compatible avec le nom du dépôt, du filtre (refex), et des permissions. Si la permission trouvée est ‘-‘, le push est interdit. Sinon elle est autorisée. Si aucune règle n’a été trouvée, le push est interdit.
  • Le refex est une expression régulière, optionnelle, permettant de cibler le référentiel (tag, version). Il est toujours préfixé de ‘refs/’ (implicitement si non explicite).
  • RW correspond à fast-forward push ou create
  • RW+ autorise tout type de push quelle que soit la branche ou le tag. rewind autorisé
  • Alice a accès à tout
  • Bob a accès aux versions non taguées master*** et peut créer des tags s’ils ne commencent pas par v + un chiffre.
  • Carol peut créer des tags qui commencent par v+ chiffre
  • Dave peut simplement cloner ou fetcher.

La notion de groupe

On définit un groupe de cette façon (au début du fichier conf) :

@staff = alice carol bob
@interns = ashok

Il est possible de créer des groupes de groupes (@wholeTeam = @staff @interns)

Mise en pratique dans la définition des règles :

repo foo
   RW  = @staff

repo bar
   RW+  = @staff
   RW    = @interns

Quelques commandes d’aide pour aller plus loin

Pour connaître l’ensemble des dépôts accessibles, la version de gitolite, etc.

ssh git@host info

Pour avoir l’aide sur l’utilisation de gitolite

ssh git@host help

One thought on “Gitolite avec Debian 6 et EGit

  1. Pingback: Git – De l’installation à l’utilisation dans Eclipse | Epic Coffee Mix'

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *