Projet

Général

Profil

Git » Historique » Version 30

Laurent GUERBY, 22/08/2013 22:46

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 28 Laurent GUERBY
Lire aussi http://homepages.laas.fr/matthieu/cours/git.pdf
12 28 Laurent GUERBY
13 2 Antoine Lubineau
h2. "Gitolite":https://github.com/sitaramc/gitolite
14 1 Antoine Lubineau
15 23 Mehdi Abaakouk
h3. Installation de gitolite
16 23 Mehdi Abaakouk
17 24 Antoine Lubineau
Installation est très simple, sur la VM @git.tetaneutral.net@ :
18 24 Antoine Lubineau
* On créé l’utilisateur @git@ dédié
19 24 Antoine Lubineau
* On clone l’application Gitolite avec @git(1)@
20 24 Antoine Lubineau
* On installe Gitolite dans le répertoire personnel de l’utilisateur @git@
21 24 Antoine Lubineau
* On ajoute la clé SSH d’un des administrateurs
22 23 Mehdi Abaakouk
23 23 Mehdi Abaakouk
<pre>
24 23 Mehdi Abaakouk
useradd -m git
25 23 Mehdi Abaakouk
su - git
26 23 Mehdi Abaakouk
git clone git://github.com/sitaramc/gitolite.git
27 23 Mehdi Abaakouk
gitolite/src/gl-system-install
28 23 Mehdi Abaakouk
gl-setup -q sileht.pub
29 23 Mehdi Abaakouk
</pre>
30 23 Mehdi Abaakouk
31 24 Antoine Lubineau
Ensuite récupération sur mon ordi du dépôt @gitolite-admin@ :
32 23 Mehdi Abaakouk
33 23 Mehdi Abaakouk
<pre>
34 23 Mehdi Abaakouk
git clone git@git.tetaneutral.net:gitolite-admin
35 23 Mehdi Abaakouk
cd gitolite-admin
36 23 Mehdi Abaakouk
</pre>
37 4 Antoine Lubineau
38 1 Antoine Lubineau
h3. Configuration
39 1 Antoine Lubineau
40 17 Antoine Lubineau
Gitolite est *très* polyvalent, pour des usages poussés, se reporter à la "documentation en ligne":http://sitaramc.github.com/gitolite/.
41 17 Antoine Lubineau
42 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:
43 1 Antoine Lubineau
* @conf@ qui va contenir les fichiers de configuration (le plus souvent un seul, @gitolite.conf@) ;
44 1 Antoine Lubineau
* @keydir@, qui va stocker les clés publiques SSH des utilisateurs.
45 17 Antoine Lubineau
46 17 Antoine Lubineau
Example de configuration :
47 17 Antoine Lubineau
<pre>
48 17 Antoine Lubineau
repo    testing
49 17 Antoine Lubineau
        RW+     =   @all
50 17 Antoine Lubineau
</pre>
51 17 Antoine Lubineau
52 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@.
53 17 Antoine Lubineau
54 18 Antoine Lubineau
Pour mettre à jour cette configuration, il suffit de la commiter et de la pusher, Gitolite appliquera les changements instantanément.
55 18 Antoine Lubineau
56 17 Antoine Lubineau
h4. Ajouter un utilisateur
57 17 Antoine Lubineau
58 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.
59 25 Laurent GUERBY
60 25 Laurent GUERBY
<pre>
61 25 Laurent GUERBY
git add keydir/user.pub
62 25 Laurent GUERBY
</pre>
63 25 Laurent GUERBY
64 25 Laurent GUERBY
To check and commit push
65 25 Laurent GUERBY
66 25 Laurent GUERBY
<pre>
67 25 Laurent GUERBY
git diff master
68 25 Laurent GUERBY
git commit -a -m "add user"
69 25 Laurent GUERBY
git push
70 25 Laurent GUERBY
</pre>
71 25 Laurent GUERBY
72 17 Antoine Lubineau
Dans la configuration de Gitolite, l’utilisateur est désigné par @user@, et on peut faire des groupes :
73 17 Antoine Lubineau
<pre>
74 20 Antoine Lubineau
@mongroupe = user1 user2
75 1 Antoine Lubineau
</pre>
76 19 Antoine Lubineau
77 19 Antoine Lubineau
Et ensuite on peut donner des droits au groupe :
78 19 Antoine Lubineau
<pre>
79 19 Antoine Lubineau
repo    testing
80 20 Antoine Lubineau
        R     =   @mongroupe user3
81 19 Antoine Lubineau
</pre>
82 20 Antoine Lubineau
Le droit de lecture s’applique donc à @user1@, @user2@ et @user3@.
83 17 Antoine Lubineau
84 17 Antoine Lubineau
h4. Créer un dépôt
85 17 Antoine Lubineau
86 17 Antoine Lubineau
Il suffit de créer la ligne
87 17 Antoine Lubineau
<pre>
88 17 Antoine Lubineau
repo monrepo
89 17 Antoine Lubineau
</pre>
90 17 Antoine Lubineau
et de préférence d’y ajouter des utilisateurs :)
91 8 Antoine Lubineau
92 30 Laurent GUERBY
h4. Checkout Utilisateur
93 30 Laurent GUERBY
94 30 Laurent GUERBY
<pre>
95 30 Laurent GUERBY
git config user.name "Mon Nom" 
96 30 Laurent GUERBY
git config user.email "mon.nom@example.org"
97 30 Laurent GUERBY
</pre>
98 30 Laurent GUERBY
99 1 Antoine Lubineau
h2. git-daemon
100 1 Antoine Lubineau
101 15 Antoine Lubineau
h3. Installation
102 15 Antoine Lubineau
103 15 Antoine Lubineau
Rien à faire, @git-daemon(1)@ vient avec @git(1)@.
104 15 Antoine Lubineau
105 15 Antoine Lubineau
h3. Configuration
106 15 Antoine Lubineau
107 15 Antoine Lubineau
La configuration de @git-daemon@ se fait sous Debian dans @/etc/default/git-daemon@.
108 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@.
109 14 Antoine Lubineau
110 4 Antoine Lubineau
h2. "cgit":http://hjemli.net/git/cgit/
111 4 Antoine Lubineau
112 4 Antoine Lubineau
h3. Installation
113 2 Antoine Lubineau
114 29 Antoine Lubineau
Comme il n’y a pas de paquet Debian, il faut le compiler à la main.
115 1 Antoine Lubineau
<pre>
116 29 Antoine Lubineau
wget http://git.zx2c4.com/cgit/snapshot/cgit-0.9.2.tar.xz
117 29 Antoine Lubineau
tar xf cgit-0.9.2.tar.xz
118 29 Antoine Lubineau
cd cgit-0.9.2
119 26 Antoine Lubineau
make get-git
120 1 Antoine Lubineau
</pre>
121 1 Antoine Lubineau
122 8 Antoine Lubineau
On peut modifier le @Makefile@ en mettant
123 29 Antoine Lubineau
<pre>CGIT_SCRIPT_PATH = /var/www/htdocs/cgit</pre>
124 8 Antoine Lubineau
et
125 29 Antoine Lubineau
<pre>prefix = /var/www/cgit</pre>
126 4 Antoine Lubineau
127 9 Antoine Lubineau
Ensuite :
128 9 Antoine Lubineau
<pre>
129 9 Antoine Lubineau
make
130 1 Antoine Lubineau
make install
131 1 Antoine Lubineau
</pre>
132 9 Antoine Lubineau
133 10 Antoine Lubineau
h3. Configuration de cgit
134 1 Antoine Lubineau
135 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@ :
136 12 Antoine Lubineau
<pre>
137 12 Antoine Lubineau
repo    testing
138 12 Antoine Lubineau
        RW+     =   pipo
139 12 Antoine Lubineau
        R       =   gitweb
140 12 Antoine Lubineau
</pre>
141 10 Antoine Lubineau
142 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 ».
143 13 Antoine Lubineau
144 10 Antoine Lubineau
La configuration de @cgit@ se trouve dans @cgitrc(5)@ :
145 1 Antoine Lubineau
<pre>
146 10 Antoine Lubineau
virtual-root=/
147 10 Antoine Lubineau
project-list=/home/git/projects.list
148 16 Antoine Lubineau
scan-path=~git/repositories/
149 16 Antoine Lubineau
snapshots=tar.gz tar.bz2
150 16 Antoine Lubineau
enable-commit-graph=1
151 16 Antoine Lubineau
enable-tree-linenumbers=1
152 16 Antoine Lubineau
enable-index-links=1
153 16 Antoine Lubineau
enable-log-filecount=1
154 16 Antoine Lubineau
enable-log-linecount=1
155 16 Antoine Lubineau
max-stats=quarter
156 16 Antoine Lubineau
clone-prefix=http://git.tetaneutral.net git://git.tetaneutral.net
157 10 Antoine Lubineau
</pre>
158 10 Antoine Lubineau
159 21 Antoine Lubineau
h3. Configuration d’Apache
160 10 Antoine Lubineau
161 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@ :
162 10 Antoine Lubineau
<pre>
163 6 Antoine Lubineau
usermod -aG git www-data
164 1 Antoine Lubineau
</pre>
165 1 Antoine Lubineau
166 11 Antoine Lubineau
Dans @~git/.gitolite.rc@, changer
167 1 Antoine Lubineau
<pre>
168 1 Antoine Lubineau
$REPO_UMASK = 0077;
169 1 Antoine Lubineau
</pre>
170 1 Antoine Lubineau
en
171 1 Antoine Lubineau
<pre>
172 1 Antoine Lubineau
$REPO_UMASK = 0027;
173 1 Antoine Lubineau
</pre>
174 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).
175 1 Antoine Lubineau
176 10 Antoine Lubineau
À mettre dans un _virtual host_ d’Apache :
177 1 Antoine Lubineau
<pre>
178 29 Antoine Lubineau
        DocumentRoot /var/www/cgit
179 29 Antoine Lubineau
        <Directory /var/www/cgit>
180 29 Antoine Lubineau
                AddHandler cgi-script .cgi
181 10 Antoine Lubineau
                DirectoryIndex cgit.cgi
182 10 Antoine Lubineau
                Options +FollowSymLinks +ExecCGI
183 10 Antoine Lubineau
                AllowOverride None
184 1 Antoine Lubineau
                Order allow,deny
185 10 Antoine Lubineau
                allow from all
186 10 Antoine Lubineau
187 2 Antoine Lubineau
                RewriteEngine On
188 10 Antoine Lubineau
                RewriteBase /
189 10 Antoine Lubineau
                RewriteCond %{REQUEST_FILENAME} !-f
190 10 Antoine Lubineau
                RewriteCond %{REQUEST_FILENAME} !-d
191 10 Antoine Lubineau
                RewriteRule (.*) cgit.cgi/$1
192 10 Antoine Lubineau
                RewriteRule ^cgit.cgi$  cgit.cgi/
193 29 Antoine Lubineau
194 10 Antoine Lubineau
        </Directory>
195 10 Antoine Lubineau
</pre>