Jail Git et Gitolite

La première chose à faire est de créer un répertoire pour héberger les données des dépôts et de donner un accès en lecture et écriture à ce répertoire à la jail. Pour ça je vais créer les répertoires /home/git et /home/jails/git/home/git et ajouter une ligne à /etc/fstab.git.

mkdir -p /home/git /home/jails/git/home/git echo “/home/git /home/jails/git/home/git nullfs rw 1 1” » /etc/fstab.git

Il suffira alors de redémarrer ezjail pour code prendre ces changements en compte ou de monter le répertoire à la main en attendant :

mount_nullfs /home/git /home/jails/git/home/git

On peut ensuite se rendre dans la jail.

jexec git csh

Histoire d’avoir une gestion fine des accès aux dépôts on utilisera Gitolite (sélectionner GITUSER afin de créer le groupe et l’utilisateur git).

cd /usr/ports/devel/gitolite make install clean

L’utilisateur git ayant été créé lors de l’installation de Gitolite, il ne reste plus qu’à lui attribuer /home/git.

pw usermod git -d /home/git chown git:git /home/git

Gitolite fournit un script d’installation de son contexte auquel on peut fournir sa clé publique afin de pouvoir manipuler le dépôt gitolite-admin.

su git /usr/local/bin/gitolite setup -pk /path/to/key.pub exit

Il ne reste alors plus qu’à modifier /etc/rc.conf pour y ajouter le démarrage du démon SSH (sur un autre port que le 22) ainsi que celui du démon git qui permettra de distribuer les dépôts aux utilisateurs anonymes via le protocole Git.

sshd_enable=“YES” sshd_flags="-p 2222"

git_daemon_enable=“YES” git_daemon_directory="–base-path=/home/git/repositories" git_daemon_flags="–syslog –reuseaddr –detach –user=git –group=git"

On peut alors démarrer les serveurs SSH et Git.

/etc/rc.d/sshd start /usr/local/etc/rc.d/git_daemon start

Il ne restera plus qu’à ajouter les dépôts dans /home/git/repositories.

Afin d’indiquer au démon la disponibilité d’un dépôt à l’accès publique, il suffit d’ajouter le fichier git-daemon-export-ok à la racine du dépôt réel (soit /home/git/depot.git/git-daemon-export-ok).

Configurer Gitolite

Désormais toutes les tâches ayant trait à la gestion des dépôts et de leurs utilisateurs passent par le dépôt gitolite-admin. Cependant, étant donné que le serveur SSH de la jail est sur le port 2222 et qu’il n’est pas possible de préciser le port de l’hôte lors d’un git clone il faut modifier son ~/.ssh/config afin qu’il devienne implicite.

host gitolite User git Hostname domain.tld Port 2222

On peut alors cloner le dépôt, et ce avec une syntaxe minimaliste assez appréciable.

git clone gitolite:gitolite-admin

Pour ajouter un utilisateur, il suffit d’ajouter une clé publique sous la forme d’un fichier .pub dans le répertoire keydir du dépôt.
Ayant été initialisé avec une clé publique, le répertoire la contient déjà. Cette clé est cependant nommée id_rsa.pub, qui est du coup aussi un nom d’utilisateur, celui que vous comptez utiliser au sein de Gitolite serait probablement plus approprié.

cd gitolite-admin git mv keydir/id_rsa.pub keydir/user.pub

On édite ensuite le fichier conf/gitolite.conf afin d’appliquer cette modification et d’ajouter des dépôts, la syntaxe est assez explicite :

@admins = user

repo gitolite-admin RW+ = @admins

repo testing RW+ = @all

On peut ici comprendre que @admins crée un alias pour une liste d’utilisateurs auxquels on donne plus bas tous les droits sur le dépôt gitolite-admin et qu’enfin tous les utilisateurs ayant un clé dans keydir possèdent tous les droits sur le dépôt testing.
Pour appliquer ces modifications il ne reste plus qu’à créer un commit et à le pousser.

git add . git commit -m ‘Rename id_rsa to user and modify the configuration consequently’ git push

Reste à quitter la jail pour s’en aller vers de nouvelles aventures.

exit