Ceci est une ancienne révision du document !
Donner accès à vos dépôt git
C'est la norme aujourd'hui, les projets, les utilisateurs donnent accès à un dépôt *git* pour permettre à d'autres de télécharger leur travail. De base, git s'installe avec un démon et un serveur web pour faciliter cette approche.
Vous devez vous préparer à fournir les ports suivants:
devel/git
;www/fcgiwrap
si vous utilisez nginx;
Mise en place
Préparez une jail nommée git
, dans le répertoire /jails/git
avec les paramètres standards.
Installez /devel/git ce qui amène le démon git_daemon
.
Cnfigurez le tout pour recevoir vos dépôts dans /usr/local/git
:
- rc.conf
git_daemon_enable="YES" git_daemon_flags="--syslog --reuseaddr --detach --verbose --base-path=/usr/local/git --export-all"
Ajoutez un premier dépôt:
root@git:/ # mkdir -p /usr/local/git root@git:/ # cd /usr/local/git root@git:/usr/local/git # git clone --bare --shared https://gitlab.com/TurtleCrazy/inkscape-1.0-freebsd.git root@git:/usr/local/git # git init --bare --shared test root@git:/usr/local/git # chown -R git_daemon:git_daemon *
La dernière ligne, qui donne des droits d'écriture à 'git_daemon' ne sera utile qui si vous voulez permettre via un ou plusieurs utilisateurs un accès git distant.
Accéder aux dépôts
Démarrez le service:
root@popeye:/ # service -j git git_daemon start
Redirigez le port git
,9418
, vers votre jail:
rdr pass on $ext_if proto tcp from any to ($ext_if) port 9418 -> $jail_git port 9418 rdr pass on $ext_if inet6 proto tcp from any to ($ext_if) port 9418 -> $jail_git port 9418
Serveur web
git-web
est une interface *gci* qui va offrir un accès web vers vos dépôts.
Il peut être utilisé directement sous Apache, mais nécessite le port www/fcgiwrap pour fonctionner sous nginx. De plus, il va nous fournir une socket unix bien pratique pour accéder à notre jail.
Installez et configurez le:
root@popeye:/ # pkg -j git install www/fcgiwrap root@popeye:/ # service -j git fcgiwrap start
Configurez nginx comme suit:
- nginx.conf
http{ location /git { alias /jails/git/usr/local/www/gitweb/; index gitweb.cgi; } location ~ ^/git/gitweb.cgi { include fastcgi_params; fastcgi_param SCRIPT_NAME gitweb.cgi; fastcgi_param SCRIPT_FILENAME /usr/local/www/gitweb/gitweb.cgi; fastcgi_pass unix:/jails/git/var/run/fcgiwrap/fcgiwrap.sock; } }
git-web
C'est l'outil embarqué avec git pour fournir une interface web. Il suffit d'en copier les fichiers d'exemple et de le configurer:
root@git:/usr/local/git # mkdir -p /usr/local/www root@git:/usr/local/git # cp -r /usr/local/share/examples/git/gitweb /usr/local/www/
- /usr/local/www/gitweb/gitweb.cgi
--- /usr/local/share/examples/git/gitweb/gitweb.cgi 2020-05-20 09:07:32.000000000 +0000 +++ gitweb.cgi 2020-05-21 16:38:46.625856000 +0000 @@ -84,7 +84,7 @@ # absolute fs-path which will be prepended to the project path #our $projectroot = "/pub/scm"; -our $projectroot = "/pub/git"; +our $projectroot = "/usr/local/git"; # fs traversing limit for getting project list # the number is relative to the projectroot @@ -98,7 +98,7 @@ # name of your site or organization to appear in page titles # replace this with something more descriptive for clearer bookmarks -our $site_name = "" +our $site_name = "popeye.lapinbilly.eu" || ($ENV{'SERVER_NAME'} || "Untitled") . " Git"; # html snippet to include in the <head> section of each page
Et voilà.
david@loin:~>git clone git://popeye.lapinbilly.eu/inkscape-1.0-freebsd Clonage dans 'inkscape-1.0-freebsd'... remote: Enumerating objects: 68, done. remote: Counting objects: 100% (68/68), done. remote: Compressing objects: 100% (29/29), done. remote: Total 68 (delta 37), reused 68 (delta 37), pack-reused 0 Réception d'objets: 100% (68/68), 27.65 Kio | 272.00 Kio/s, fait. Résolution des deltas: 100% (37/37), fait.
Utilisateur à distance
La première difficulté est la question des droits d'accès et l'emplacement des dépôts.
Les utilisateurs doivent avoir le droit d'écriture dans les dépôts et git_daemon
doit pouvoir y accéder en lecture.
Le plus simple est de laisser les dépôts dans /usr/local/git
et de connecter un répertoire de l'utilisateur vers ce dernier:
root@git:/usr/local/git # su - david $ ln -s /usr/local/git git $ exit root@git:/usr/local/git # chown -R david:git_daemon /usr/local/git/le_depot_a_david
Ou, faites en sorte que ce soit l'utilisateur qui créé le dépôt.
Aussi, affecter à ce dernier le groupe principal git_daemon
:
root@git:/usr/local/git # pw usermod david -g git_daemon
Le seul protocole qui permettent un accès sécurisé aux utilisateurs est ssh(1).Attribuez les clefs ssh de votre utilisateur distant.
Redirection ssh
Il faut que l'utilisateur puisse accéder à la jail en ssh(1).
Démarrez d'abord le service sshd(8) dans la jail.
root@popeye:/ # sysrc -j git sshd_enable='YES' sshd_enable: no -> YES root@popeye:/ # service -j git sshd start
Maintenant, il faut connecter l'hôte à la jail. A moins d'interdire totalement l'accès ssh(1) sur l'hôte, il est peu probable que cela vous convienne, il faudra utiliser un autre port que le classique 22
pour se connecter à la jail.
Ici, le port 9022 est attribué par pf(4) pour cela:
# allow jail_git to connect to internet nat on $ext_if inet6 from $jail_git to any -> ($ext_if) # rdr pass on $ext_if proto tcp from any to ($ext_if) port 9022 -> jail_git port 22 rdr pass on $ext_if inet6 proto tcp from any to ($ext_if) port 9022 -> $jail_git port 22 rdr pass on $ext_if proto tcp from any to ($ext_if) port 9418 -> jail_git port 9418 rdr pass on $ext_if inet6 proto tcp from any to ($ext_if) port 9418 -> $jail_git port 9418
Du coté du client, adaptez votre configuration ssh à la connexion git:
Host git.popeye.lapinbilly.eu HostName popeye.lapinbilly.eu IdentityFile ~/.ssh/git_rsa User git Port 9022
Enfin:
david]loin:~>git clone david@git.popeye.lapinbilly.eu:git/inkscape-1.0-freebsd Clonage dans 'inkscape-1.0-freebsd'... Enter passphrase for key '/home/david/.ssh/llanura': remote: Enumerating objects: 68, done. remote: Counting objects: 100% (68/68), done. remote: Compressing objects: 100% (29/29), done. remote: Total 68 (delta 37), reused 68 (delta 37), pack-reused 0 Réception d'objets: 100% (68/68), 27.65 Kio | 363.00 Kio/s, fait. Résolution des deltas: 100% (37/37), fait.