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