Projet

Général

Profil

Git » Historique » Version 23

Mehdi Abaakouk, 09/03/2012 19:11

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