Projet

Général

Profil

Git » Historique » Version 22

Antoine Lubineau, 22/02/2012 21:57

1 1 Antoine Lubineau
h1. Installation et utilisation d’un serveur Git
2 1 Antoine Lubineau
3 15 Antoine Lubineau
{{>toc}}
4 15 Antoine Lubineau
5 2 Antoine Lubineau
"Git":http://git-scm.com/ est un gestionnaire de versions décentralisé, libre et développé en C. À noter la traduction française du "Git community book":http://www.alexgirard.com/git-book/index.html.
6 1 Antoine Lubineau
7 17 Antoine Lubineau
La configuration se fera essentiellement au travers de "Gitolite":https://github.com/sitaramc/gitolite, qui permet de créer des dépôts, gérer les accès push/pull pour des accès en SSH, déléguer des droits, etc. @git-daemon@ permet de donner un accès au travers du protocole @git@, et "@cgit@":http://hjemli.net/git/cgit/ sera utilisé pour l’interface web et le pull en HTTP (ou HTTPS).
8 1 Antoine Lubineau
9 17 Antoine Lubineau
Les explications qui suivent ont été mises en pratique sur le serveur "@git.tetaneutral.net@":http://git.tetaneutral.net/ de Tetaneutral.net, donc avec une Debian Squeeze.
10 10 Antoine Lubineau
11 2 Antoine Lubineau
h2. "Gitolite":https://github.com/sitaramc/gitolite
12 1 Antoine Lubineau
13 4 Antoine Lubineau
h3. Installation
14 4 Antoine Lubineau
15 1 Antoine Lubineau
h3. Configuration
16 1 Antoine Lubineau
17 17 Antoine Lubineau
Gitolite est *très* polyvalent, pour des usages poussés, se reporter à la "documentation en ligne":http://sitaramc.github.com/gitolite/.
18 17 Antoine Lubineau
19 8 Antoine Lubineau
Une fois Gitolite installé, la configuration des dépôts et des utilisateurs se fait *uniquement* au travers du dépôt @gitolite-admin.git@. Ce dépôt contient deux dossiers:
20 1 Antoine Lubineau
* @conf@ qui va contenir les fichiers de configuration (le plus souvent un seul, @gitolite.conf@) ;
21 1 Antoine Lubineau
* @keydir@, qui va stocker les clés publiques SSH des utilisateurs.
22 17 Antoine Lubineau
23 17 Antoine Lubineau
Example de configuration :
24 17 Antoine Lubineau
<pre>
25 17 Antoine Lubineau
repo    testing
26 17 Antoine Lubineau
        RW+     =   @all
27 17 Antoine Lubineau
</pre>
28 17 Antoine Lubineau
29 17 Antoine Lubineau
Dans cet example, tous les utilisateurs ayant une clé dans le dépôt @gitolite-admin@ ont tous les droits sur le dépôt @testing@.
30 17 Antoine Lubineau
31 18 Antoine Lubineau
Pour mettre à jour cette configuration, il suffit de la commiter et de la pusher, Gitolite appliquera les changements instantanément.
32 18 Antoine Lubineau
33 17 Antoine Lubineau
h4. Ajouter un utilisateur
34 17 Antoine Lubineau
35 17 Antoine Lubineau
Il suffit d’ajouter sa clé publique dans le dossier @keydir@, en la nommant soit @user.pub@, soit @user@machine.pub@, ce qui permet d’avoir plusieurs clés pour un même utilisateur. On peut avoir des sous-dossier dans @keydir@, c’est sans incidence sur le nommage.
36 17 Antoine Lubineau
Dans la configuration de Gitolite, l’utilisateur est désigné par @user@, et on peut faire des groupes :
37 17 Antoine Lubineau
<pre>
38 20 Antoine Lubineau
@mongroupe = user1 user2
39 1 Antoine Lubineau
</pre>
40 19 Antoine Lubineau
41 19 Antoine Lubineau
Et ensuite on peut donner des droits au groupe :
42 19 Antoine Lubineau
<pre>
43 19 Antoine Lubineau
repo    testing
44 20 Antoine Lubineau
        R     =   @mongroupe user3
45 19 Antoine Lubineau
</pre>
46 20 Antoine Lubineau
Le droit de lecture s’applique donc à @user1@, @user2@ et @user3@.
47 17 Antoine Lubineau
48 17 Antoine Lubineau
h4. Créer un dépôt
49 17 Antoine Lubineau
50 17 Antoine Lubineau
Il suffit de créer la ligne
51 17 Antoine Lubineau
<pre>
52 17 Antoine Lubineau
repo monrepo
53 17 Antoine Lubineau
</pre>
54 17 Antoine Lubineau
et de préférence d’y ajouter des utilisateurs :)
55 8 Antoine Lubineau
56 1 Antoine Lubineau
h2. git-daemon
57 1 Antoine Lubineau
58 15 Antoine Lubineau
h3. Installation
59 15 Antoine Lubineau
60 15 Antoine Lubineau
Rien à faire, @git-daemon(1)@ vient avec @git(1)@.
61 15 Antoine Lubineau
62 15 Antoine Lubineau
h3. Configuration
63 15 Antoine Lubineau
64 15 Antoine Lubineau
La configuration de @git-daemon@ se fait sous Debian dans @/etc/default/git-daemon@.
65 15 Antoine Lubineau
@git-daemon(1)@ peut être lancé avec l’option @--export-all@, mais c’est peu recommandé si on ne veut pas donner un accès en lecture à tous. On préférera créer dans chaque dépôt à exporter le fichier @git-daemon-export-ok@.
66 14 Antoine Lubineau
67 4 Antoine Lubineau
h2. "cgit":http://hjemli.net/git/cgit/
68 4 Antoine Lubineau
69 4 Antoine Lubineau
h3. Installation
70 2 Antoine Lubineau
71 1 Antoine Lubineau
Comme il n’y a pas de paquet Debian, il faut le compiler à la main. Au moment de la rédaction de ce guide, on ne pouvait pas compiler cgit contre la dernière version de Git (fonctionnel avec cgit 0.9.2.0 et Git 1.7.4).
72 1 Antoine Lubineau
<pre>
73 8 Antoine Lubineau
wget http://hjemli.net/git/cgit/snapshot/cgit-0.9.0.2.tar.bz2
74 8 Antoine Lubineau
wget http://arch.p5n.pp.ru/~sergej/dl/2011/git-1.7.4.tar.bz2
75 8 Antoine Lubineau
tar xf cgit-0.9.0.2.tar.bz2
76 8 Antoine Lubineau
cd cgit-0.9.0.2
77 8 Antoine Lubineau
tar xf -C git ../git-1.7.4.tar.bz2
78 1 Antoine Lubineau
</pre>
79 1 Antoine Lubineau
80 8 Antoine Lubineau
On peut modifier le @Makefile@ en mettant
81 8 Antoine Lubineau
<pre>CGIT_SCRIPT_PATH = /var/www</pre>
82 8 Antoine Lubineau
et
83 8 Antoine Lubineau
<pre>prefix = /usr/local/cgit</pre>
84 4 Antoine Lubineau
85 9 Antoine Lubineau
Ensuite :
86 9 Antoine Lubineau
<pre>
87 9 Antoine Lubineau
make
88 1 Antoine Lubineau
make install
89 1 Antoine Lubineau
</pre>
90 9 Antoine Lubineau
91 10 Antoine Lubineau
h3. Configuration de cgit
92 1 Antoine Lubineau
93 22 Antoine Lubineau
cgit récupère la liste des projets dans @~git/projects.list@. Cette liste est générée automatiquement par Gitolite pour les dépôts dont @gitweb@ a les droits en lecture (c’est une dénomination spécifique à gitolite, qui n’est pas incluse dans @@all@). Dans @gitolite.conf@ :
94 12 Antoine Lubineau
<pre>
95 12 Antoine Lubineau
repo    testing
96 12 Antoine Lubineau
        RW+     =   pipo
97 12 Antoine Lubineau
        R       =   gitweb
98 12 Antoine Lubineau
</pre>
99 10 Antoine Lubineau
100 13 Antoine Lubineau
Pour spécifier le propriétaire et la description d’un dépôt, voir le "manuel de gitolite":http://sitaramc.github.com/gitolite/confother_.html, section « specifying gitweb and daemon access ».
101 13 Antoine Lubineau
102 10 Antoine Lubineau
La configuration de @cgit@ se trouve dans @cgitrc(5)@ :
103 1 Antoine Lubineau
<pre>
104 10 Antoine Lubineau
virtual-root=/
105 10 Antoine Lubineau
project-list=/home/git/projects.list
106 16 Antoine Lubineau
scan-path=~git/repositories/
107 16 Antoine Lubineau
snapshots=tar.gz tar.bz2
108 16 Antoine Lubineau
enable-commit-graph=1
109 16 Antoine Lubineau
enable-tree-linenumbers=1
110 16 Antoine Lubineau
enable-index-links=1
111 16 Antoine Lubineau
enable-log-filecount=1
112 16 Antoine Lubineau
enable-log-linecount=1
113 16 Antoine Lubineau
max-stats=quarter
114 16 Antoine Lubineau
clone-prefix=http://git.tetaneutral.net git://git.tetaneutral.net
115 10 Antoine Lubineau
</pre>
116 10 Antoine Lubineau
117 21 Antoine Lubineau
h3. Configuration d’Apache
118 10 Antoine Lubineau
119 10 Antoine Lubineau
Pour que le serveur web ait les droits de lecture sur les dépôts, il faut ajouter l’utilisateur @www-data@ (ou l’utilisateur sous lequel tourne Apache) au groupe @git@ :
120 10 Antoine Lubineau
<pre>
121 6 Antoine Lubineau
usermod -aG git www-data
122 1 Antoine Lubineau
</pre>
123 1 Antoine Lubineau
124 11 Antoine Lubineau
Dans @~git/.gitolite.rc@, changer
125 1 Antoine Lubineau
<pre>
126 1 Antoine Lubineau
$REPO_UMASK = 0077;
127 1 Antoine Lubineau
</pre>
128 1 Antoine Lubineau
en
129 1 Antoine Lubineau
<pre>
130 1 Antoine Lubineau
$REPO_UMASK = 0027;
131 1 Antoine Lubineau
</pre>
132 11 Antoine Lubineau
Ce réglage n’étant valable que pour les nouveaux dépôts, il faut effectuer un @chmod -R g+rX@ sur les dépôts existants (*pas gitolite-admin.git* en général).
133 1 Antoine Lubineau
134 10 Antoine Lubineau
À mettre dans un _virtual host_ d’Apache :
135 1 Antoine Lubineau
<pre>
136 10 Antoine Lubineau
        DocumentRoot /var/www
137 10 Antoine Lubineau
        <Directory /var/www/>
138 10 Antoine Lubineau
                Addhandler cgi-script .cgi
139 10 Antoine Lubineau
                DirectoryIndex cgit.cgi
140 10 Antoine Lubineau
                Options +FollowSymLinks +ExecCGI
141 10 Antoine Lubineau
                AllowOverride None
142 10 Antoine Lubineau
                Order allow,deny
143 10 Antoine Lubineau
                allow from all
144 2 Antoine Lubineau
145 10 Antoine Lubineau
                RewriteEngine On
146 10 Antoine Lubineau
                RewriteBase /
147 10 Antoine Lubineau
                RewriteCond %{REQUEST_FILENAME} !-f
148 10 Antoine Lubineau
                RewriteCond %{REQUEST_FILENAME} !-d
149 10 Antoine Lubineau
                RewriteRule (.*) cgit.cgi/$1
150 10 Antoine Lubineau
                RewriteRule ^cgit.cgi$  cgit.cgi/
151 10 Antoine Lubineau
        </Directory>
152 10 Antoine Lubineau
</pre>