tag:linuxfr.org,2005:/tags/gitolite/publicLinuxFr.org : les contenus étiquetés avec « gitolite »2017-06-05T00:43:29+02:00/favicon.pngtag:linuxfr.org,2005:Diary/373382017-05-29T22:28:23+02:002017-05-30T09:01:58+02:00Serveur Git avec GitoliteLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<h2 class="sommaire">Sommaire</h2>
<ul class="toc">
<li><a href="#contexte">Contexte</a></li>
<li><a href="#installation-de-gitolite">Installation de Gitolite</a></li>
<li><a href="#administration">Administration</a></li>
<li><a href="#utilisation">Utilisation</a></li>
<li><a href="#aller-plus-loin">Aller plus loin</a></li>
</ul><p>Bonjour 'nal</p>
<p>La semaine dernière, j'ai eu l'occasion de jouer un peu avec un outil fort sympathique: Gitolite. Il permet de transformer un ordinateur avec un serveur SSH en serveur Git et de gérer les accès de plusieurs développeurs sur plusieurs dépôts Git.</p>
<h2 id="contexte">Contexte</h2>
<p><a href="https://git-scm.com/">Git</a> est un excellent <a href="https://fr.wikipedia.org/wiki/Logiciel_de_gestion_de_versions">gestionnaire de version</a>.<br>
L'un de ses points forts est de permettre de travailler de façon non centralisée. Chaque développeur possède une copie locale du dépôt et peut y faire des commits sans être connecté à un serveur. Pour échanger ses modifications avec d'autres développeurs, il est possible d'<a href="https://git-scm.com/docs/git-send-email">envoyer ces dernières par e-mail</a>. Git possède des options pour <a href="https://git-scm.com/docs/git-format-patch">exporter</a> ses commits (ou des branches entières) avant envoi et de les <a href="https://git-scm.com/docs/git-am">réimporter</a> à leur réception.</p>
<p>Mais si envoyer ses modifications par e-mail fonctionne bien pour des contributions intermittentes, cette méthode devient lourde quand on travaille en équipe et qu'on apporte beaucoup de modifications à son code.<br>
Par chance, il suffit aux développeurs d'avoir un accès SSH commun à un ordinateur et d'y installer Git pour pouvoir s'en servir comme "serveur de référence". Chacune et chacun peut y "pousser" ses modifications et "tirer" celles des autres.</p>
<p>Mais la solution ci-dessus amène son lot de problèmes: Comment gérer la création de dépôts? Comment gérer les droits d'accès? Comment éviter de donner l'accès à un shell à tout le monde? C'est à ces questions que Gitolite répond. Et plutôt bien.</p>
<h2 id="installation-de-gitolite">Installation de Gitolite</h2>
<p>Cette opération se fait en deux étapes:</p>
<ul>
<li> Installer de paquet Gitolite</li>
<li> Configurer un compte utilisateur sur le serveur pour accueillir Gitolite</li>
</ul><p>Pour la première étape, si vous êtes sur Fedora, tapez la commande:</p>
<pre><code class="bash">sudo dnf install -y gitolite3</code></pre>
<p>Si vous êtes sur CentOS avec le <a href="https://fedoraproject.org/wiki/EPEL">dépôt EPEL</a> installé, préférez:</p>
<pre><code class="bash">sudo yum install -y gitolite3</code></pre>
<p>Et si vous êtes sur Debian, tapez la commande:</p>
<pre><code class="bash">sudo apt-get install gitolite3</code></pre>
<p>Pour la seconde étape, on va commencer par créer un utilisateur qui va accueillir les dépôts Git:</p>
<pre><code class="bash">sudo useradd git</code></pre>
<p>Ensuite, on copie la clé SSH publique de l'administrateur de Gitolite dans le dossier <code>home</code> de ce nouveau compte:</p>
<pre><code class="bash">sudo install -o git -g git </chemin/vers/ma/clé.pub> /home/git/<utilisateur>.pub</code></pre>
<p>Remplacez <code></chemin/vers/ma/clé.pub></code> par le chemin vers votre clé publique et <code><utilisateur></code> par votre nom utilisateur</p>
<p>Avant dernière action, lancez la configuration de Gitolite pour l'utilisateur <code>git</code>:</p>
<pre><code class="bash">sudo -u git gitolite setup -pk /home/git/<utilisateur>.pub</code></pre>
<p>Enfin, supprimez la clé SSH publique qui n'est plus nécessaire:</p>
<pre><code class="bash">sudo rm /home/git/<utilisateur>.pub</code></pre>
<p>Pour tester si l'installation s'est bien passée, il faut un compte utilisateur possédant la clé SSH privée liée à la clé publique utilisée plus haut. Depuis ce compte, exécutez la commande:</p>
<pre><code class="bash">ssh git@<mon_serveur> info</code></pre>
<p>Où <code><mon_serveur></code> sera l'adresse de l'ordinateur hébergeant Gitolite.</p>
<p>Vous devriez avoir la réponse suivante:</p>
<pre><code class="bash">hello user, this is git@my_server running gitolite3 on git <span class="m">2</span>.9.4
R W gitolite-admin
R W testing</code></pre>
<p>C'est fait, vous avez un Gitolite tout frais et fonctionnel.</p>
<h2 id="administration">Administration</h2>
<p>Toute la configuration de Gitolite se passe depuis le dépôt <code>gitolit-admin</code> de votre installation.</p>
<p>Pour commencer, clonez le:</p>
<pre><code class="bash">git clone git@<mon_serveur>:gitolite-admin</code></pre>
<p>(N'oubliez pas de remplacer <code><mon_serveur></code> par l'adresse du vôtre)</p>
<p>Dans le dépôt fraîchement cloné, on retrouve cette arborescence:</p>
<pre><code class="bash">gitolite-admin/
├── conf
│ └── gitolite.conf
└── keydir
└── bob.pub</code></pre>
<p>Dans le dossier <code>keydir</code> se trouve la clé SSH publique de toutes celles et ceux qui auront accès à votre serveur Gitolite. Le nom de ces fichiers est important. Il suit la forme <code>utilisateur.pub</code>.<br>
L'utilisateur indiqué dans le nom du fichier sera repris dans la configuration des dépôts git et de leurs politiques d'accès.</p>
<p>Dans le fichier <code>gitolite.conf</code> se trouve la liste des dépôts ainsi que leurs règles d'accès.</p>
<p>La syntaxe du fichier <code>gitolite.conf</code> ressemble à ceci:</p>
<pre><code class="conf">repo<span class="w"> </span>gitolite-admin<span class="w"></span>
<span class="w"> </span>RW+<span class="w"> </span>=<span class="w"> </span>bob<span class="w"></span>
repo<span class="w"> </span>george<span class="w"></span>
<span class="w"> </span>RW+<span class="w"> </span>=<span class="w"> </span>bob<span class="w"></span>
<span class="w"> </span>R<span class="w"> </span>=<span class="w"> </span>alice<span class="w"></span></code></pre>
<p>Pour chaque dépôt on retrouve le mot clé <code>repo</code> suivit du nom du dépôt.<br>
Les lignes qui suivent indiquent une règle d'accès associé à un nom d'utilisateur.</p>
<p>Les règles d'accès peuvent être:</p>
<ul>
<li> <code>R</code>: Accès en lecture (<code>clone</code>, <code>fetch</code>, …)</li>
<li> <code>W</code>: Accès en écriture (<code>push</code>)</li>
<li> <code>+</code>: Opérations de correction (<code>rewinds</code> ou <code>deletes</code>)</li>
</ul><p>D'autres règles d'accès peuvent être trouvées sur le <a href="http://gitolite.com/gitolite/conf/">manuel officiel</a>.</p>
<p>Il est possible de créer des groupes d'utilisateurs ou de dépôts avec la syntaxe:</p>
<pre><code class="conf">@staff<span class="w"> </span>=<span class="w"> </span>bob<span class="w"> </span>alice<span class="w"></span></code></pre>
<p>Vous pouvez ensuite utiliser ce groupe dans votre configuration en invoquant son nom (par exemple <code>@staff</code>). Mais évitez de prononcer ce nom trois fois.</p>
<p>N'oubliez pas de "commiter" vos changements et de les pousser pour qu'ils soient pris en compte par Gitolite.</p>
<h2 id="utilisation">Utilisation</h2>
<p>Chaque utilisateur ayant accès à votre serveur Gitolite peut savoir à quels dépôts il a accès et ce qu'il a le droit d'y faire. Pour cela, il lui suffit d'exécuter depuis son terminal:</p>
<pre><code class="bash">ssh git@<mon_serveur> info</code></pre>
<p>Voici un exemple de ce qu'il peut recevoir en réponse:</p>
<pre><code class="bash">hello bob, this is git@my_server running gitolite3 on git <span class="m">2</span>.9.4
R W gitolite-admin
R W george</code></pre>
<p>Ensuite, il suffit au développeur de cloner le dépôt dont il a besoin, de "commiter" puis de pousser ses changements.</p>
<p>L'URL d'un dépôt ressemble à ceci: <code>git@mon_server:mon_dépôt</code></p>
<p>Essayons, par exemple, de cloner <code>george</code>:</p>
<pre><code class="bash">git clone git@mon_serveur:george</code></pre>
<p>Voilà, reste plus qu'à se mettre au boulot.</p>
<h2 id="aller-plus-loin">Aller plus loin</h2>
<p>Quelques liens utiles:</p>
<ul>
<li> <a href="http://gitolite.com/gitolite/">Site web et documentation officiel de
Gitolite</a>
</li>
<li> <a href="https://spredzy.wordpress.com/2013/01/05/gitolite-openldap/">Un article sur comment intégrer Gitolite avec
LDAP</a>
</li>
</ul><div><a href="https://linuxfr.org/users/postroutine/journaux/serveur-git-avec-gitolite.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/111972/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/postroutine/journaux/serveur-git-avec-gitolite#comments">ouvrir dans le navigateur</a>
</p>
Yuul B. Alwrighthttps://linuxfr.org/nodes/111972/comments.atom