Git » Historique » Version 31
Laurent GUERBY, 21/01/2014 10:43
1 | 31 | Laurent GUERBY | h1. Installation et utilisation d’un serveur Git |
---|---|---|---|
2 | 1 | Antoine Lubineau | |
3 | 15 | Antoine Lubineau | {{>toc}} |
4 | 15 | Antoine Lubineau | |
5 | 31 | Laurent GUERBY | "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 | 31 | Laurent GUERBY | 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 | 31 | Laurent GUERBY | 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 | 31 | Laurent GUERBY | Installation est très simple, sur la VM @git.tetaneutral.net@ : |
18 | 31 | Laurent GUERBY | * On créé l’utilisateur @git@ dédié |
19 | 31 | Laurent GUERBY | * On clone l’application Gitolite avec @git(1)@ |
20 | 31 | Laurent GUERBY | * On installe Gitolite dans le répertoire personnel de l’utilisateur @git@ |
21 | 31 | Laurent GUERBY | * 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 | 31 | Laurent GUERBY | 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 | 31 | Laurent GUERBY | 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 | 31 | Laurent GUERBY | 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 | 31 | Laurent GUERBY | * @conf@ qui va contenir les fichiers de configuration (le plus souvent un seul, @gitolite.conf@) ; |
44 | 31 | Laurent GUERBY | * @keydir@, qui va stocker les clés publiques SSH des utilisateurs. |
45 | 17 | Antoine Lubineau | |
46 | 31 | Laurent GUERBY | 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 | 31 | Laurent GUERBY | 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 | 31 | Laurent GUERBY | 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 | 31 | Laurent GUERBY | 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 | 31 | Laurent GUERBY | 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 | 31 | Laurent GUERBY | 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 | 31 | Laurent GUERBY | Le droit de lecture s’applique donc à @user1@, @user2@ et @user3@. |
83 | 17 | Antoine Lubineau | |
84 | 31 | Laurent GUERBY | h4. Créer un dépôt |
85 | 17 | Antoine Lubineau | |
86 | 31 | Laurent GUERBY | Il suffit de créer la ligne |
87 | 17 | Antoine Lubineau | <pre> |
88 | 17 | Antoine Lubineau | repo monrepo |
89 | 17 | Antoine Lubineau | </pre> |
90 | 31 | Laurent GUERBY | 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 | 31 | Laurent GUERBY | Rien à faire, @git-daemon(1)@ vient avec @git(1)@. |
104 | 15 | Antoine Lubineau | |
105 | 15 | Antoine Lubineau | h3. Configuration |
106 | 15 | Antoine Lubineau | |
107 | 1 | Antoine Lubineau | La configuration de @git-daemon@ se fait sous Debian dans @/etc/default/git-daemon@. |
108 | 31 | Laurent GUERBY | @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 | 15 | Antoine Lubineau | |
110 | 15 | Antoine Lubineau | h2. "cgit":http://hjemli.net/git/cgit/ |
111 | 14 | Antoine Lubineau | |
112 | 4 | Antoine Lubineau | h3. Installation |
113 | 4 | Antoine Lubineau | |
114 | 31 | Laurent GUERBY | Comme il n’y a pas de paquet Debian, il faut le compiler à la main. |
115 | 2 | Antoine Lubineau | <pre> |
116 | 29 | Antoine Lubineau | wget http://git.zx2c4.com/cgit/snapshot/cgit-0.9.2.tar.xz |
117 | 1 | Antoine Lubineau | tar xf cgit-0.9.2.tar.xz |
118 | 29 | Antoine Lubineau | cd cgit-0.9.2 |
119 | 29 | Antoine Lubineau | make get-git |
120 | 29 | Antoine Lubineau | </pre> |
121 | 26 | Antoine Lubineau | |
122 | 1 | Antoine Lubineau | On peut modifier le @Makefile@ en mettant |
123 | 1 | 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 | 8 | Antoine Lubineau | |
127 | 31 | Laurent GUERBY | Ensuite : |
128 | 4 | Antoine Lubineau | <pre> |
129 | 9 | Antoine Lubineau | make |
130 | 1 | Antoine Lubineau | make install |
131 | 1 | Antoine Lubineau | </pre> |
132 | 1 | Antoine Lubineau | |
133 | 1 | Antoine Lubineau | h3. Configuration de cgit |
134 | 9 | Antoine Lubineau | |
135 | 31 | Laurent GUERBY | interface web http://git.tetaneutral.net/ |
136 | 31 | Laurent GUERBY | |
137 | 31 | Laurent GUERBY | 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@ : |
138 | 12 | Antoine Lubineau | <pre> |
139 | 12 | Antoine Lubineau | repo testing |
140 | 12 | Antoine Lubineau | RW+ = pipo |
141 | 12 | Antoine Lubineau | R = gitweb |
142 | 10 | Antoine Lubineau | </pre> |
143 | 1 | Antoine Lubineau | |
144 | 31 | Laurent GUERBY | 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 ». |
145 | 13 | Antoine Lubineau | |
146 | 10 | Antoine Lubineau | La configuration de @cgit@ se trouve dans @cgitrc(5)@ : |
147 | 1 | Antoine Lubineau | <pre> |
148 | 10 | Antoine Lubineau | virtual-root=/ |
149 | 10 | Antoine Lubineau | project-list=/home/git/projects.list |
150 | 16 | Antoine Lubineau | scan-path=~git/repositories/ |
151 | 16 | Antoine Lubineau | snapshots=tar.gz tar.bz2 |
152 | 16 | Antoine Lubineau | enable-commit-graph=1 |
153 | 16 | Antoine Lubineau | enable-tree-linenumbers=1 |
154 | 16 | Antoine Lubineau | enable-index-links=1 |
155 | 16 | Antoine Lubineau | enable-log-filecount=1 |
156 | 16 | Antoine Lubineau | enable-log-linecount=1 |
157 | 16 | Antoine Lubineau | max-stats=quarter |
158 | 16 | Antoine Lubineau | clone-prefix=http://git.tetaneutral.net git://git.tetaneutral.net |
159 | 10 | Antoine Lubineau | </pre> |
160 | 10 | Antoine Lubineau | |
161 | 31 | Laurent GUERBY | h3. Configuration d’Apache |
162 | 10 | Antoine Lubineau | |
163 | 31 | Laurent GUERBY | 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@ : |
164 | 10 | Antoine Lubineau | <pre> |
165 | 6 | Antoine Lubineau | usermod -aG git www-data |
166 | 1 | Antoine Lubineau | </pre> |
167 | 1 | Antoine Lubineau | |
168 | 11 | Antoine Lubineau | Dans @~git/.gitolite.rc@, changer |
169 | 1 | Antoine Lubineau | <pre> |
170 | 1 | Antoine Lubineau | $REPO_UMASK = 0077; |
171 | 1 | Antoine Lubineau | </pre> |
172 | 1 | Antoine Lubineau | en |
173 | 1 | Antoine Lubineau | <pre> |
174 | 1 | Antoine Lubineau | $REPO_UMASK = 0027; |
175 | 1 | Antoine Lubineau | </pre> |
176 | 31 | Laurent GUERBY | 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). |
177 | 1 | Antoine Lubineau | |
178 | 31 | Laurent GUERBY | À mettre dans un _virtual host_ d’Apache : |
179 | 1 | Antoine Lubineau | <pre> |
180 | 29 | Antoine Lubineau | DocumentRoot /var/www/cgit |
181 | 29 | Antoine Lubineau | <Directory /var/www/cgit> |
182 | 29 | Antoine Lubineau | AddHandler cgi-script .cgi |
183 | 10 | Antoine Lubineau | DirectoryIndex cgit.cgi |
184 | 10 | Antoine Lubineau | Options +FollowSymLinks +ExecCGI |
185 | 10 | Antoine Lubineau | AllowOverride None |
186 | 1 | Antoine Lubineau | Order allow,deny |
187 | 10 | Antoine Lubineau | allow from all |
188 | 10 | Antoine Lubineau | |
189 | 2 | Antoine Lubineau | RewriteEngine On |
190 | 10 | Antoine Lubineau | RewriteBase / |
191 | 10 | Antoine Lubineau | RewriteCond %{REQUEST_FILENAME} !-f |
192 | 10 | Antoine Lubineau | RewriteCond %{REQUEST_FILENAME} !-d |
193 | 10 | Antoine Lubineau | RewriteRule (.*) cgit.cgi/$1 |
194 | 10 | Antoine Lubineau | RewriteRule ^cgit.cgi$ cgit.cgi/ |
195 | 29 | Antoine Lubineau | |
196 | 10 | Antoine Lubineau | </Directory> |
197 | 10 | Antoine Lubineau | </pre> |