Afficher la pageAnciennes révisionsLiens de retourHaut de page Cette page est en lecture seule. Vous pouvez afficher le texte source, mais ne pourrez pas le modifier. Contactez votre administrateur si vous pensez qu'il s'agit d'une erreur. <jumbotron> ====== Donner accès à vos dépôt git ====== C'est devenu la norme aujourd'hui, pour leurs projets, les développeurs donnent accès à un dépôt git pour permettre à d'autres de télécharger leur travail. De base, [[https://git-scm.com/|git]] s'installe avec un démon et un serveur web pour faciliter cette approche. </jumbotron> Vous devez vous préparer à fournir les [[https://www.freebsd.org/doc/handbook/ports.html|ports]] suivants: - [[https://www.freshports.org/devel/git|devel/git]] ; - [[https://www.freshports.org/devel/git|www/fcgiwrap]] si vous utilisez [[ports:nginx]]; ===== Mise en place ===== Préparez une [[jails:zfs|jail]] nommée ''git'', dans le répertoire ''/jails/git'' avec les paramètres standards. Installez [[https://www.freshports.org/devel/git|devel/git]] qui amène le démon ''git_daemon''. Cnfigurez le tout pour recevoir vos dépôts dans ''/usr/local/git'': <file bash rc.conf> git_daemon_enable="YES" git_daemon_flags="--syslog --reuseaddr --detach --verbose --base-path=/usr/local/git --export-all" </file> Ajoutez un premier dépôt: <code bash> 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 * </code> 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: <code bash> root@popeye:/ # service -j git git_daemon start </code> Redirigez le port ''git'',''9418'', vers votre //jail//.Ici, avec pf(4): <file bash /etc/pf.conf> 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 </file> ====== 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 [[https://www.freshports.org/www/fcgiwrap|www/fcgiwrap]] pour fonctionner sous [[ports:nginx]]. De plus, il va nous fournir une socket unix bien pratique pour accéder à notre //jail//. Installez et configurez le: <code bash> root@popeye:/ # pkg -j git install www/fcgiwrap root@popeye:/ # service -j git fcgiwrap start </code> Configurez **nginx** comme suit: <file javascript 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; } } </file> ===== 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: <code bash> 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/ </code> <file diff /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 </file> Et [[http://popeye.lapinbilly.eu/git/|voilà]]. <code bash> 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. </code> ===== Utilisateur à distance ===== Jusqu'ici, vous utilisateurs peuvent //cloner// les dépôts via le protocole //git//: <code bash> 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. </code> Vous pouvez bien sûr autoriser n'importe qui à faire n'importe quoi^W^W^W^W pousser ses propres modifications, en ajoutant les autorisations idoines à ''git_daemon''. \\ Mais la plupart du temps, vous voudrez restreindre les modifications sur vos dépôts à quelques personnes triées sur le volet. Le seul protocole pris en charge par **git**, qui vous permette de faire cela simplement est ssh(1). 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: <code bash> 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 </code> Ou, faites en sorte que ce soit l'utilisateur qui créé le dépôt. Aussi, affecter à ce dernier le groupe principal ''git_daemon'': <code bash> root@git:/usr/local/git # pw usermod david -g git_daemon </code> Attribuez les [[:net:ssh|clefs ssh]] de votre utilisateur distant à l'utilisateur local à la //jail//. N'autorisez que cet utilisateur à ce connecter via ssh: <file sshconfig /etc/ssh/sshd_config> AllowUsers david </file> ==== 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. <code bash> root@popeye:/ # sysrc -j git sshd_enable='YES' sshd_enable: no -> YES root@popeye:/ # sysrc -j git sshd_flags="-o ListenAddress=192.168.0.13 -o ListenAddress=fc00::168:13" sshd_flags: -> -o ListenAddress=192.168.0.13 -o ListenAddress=fc00::168:13 root@popeye:/ # service -j git sshd start </code> <callout type="primary" icon="true">Par défaut //sshd// écoute sur toutes les interfaces, les options sont là pour le restreindre aux adresses de la //jail//.</callout> 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: <file bash /etc/pf.conf> # allow jail_git to connect to internet nat on $ext_if inet6 from $jail_git to any -> ($ext_if):0 # 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 </file> Du coté du client, adaptez votre configuration ssh à la connexion git: <file javascript .ssh/config> Host git.popeye.lapinbilly.eu HostName popeye.lapinbilly.eu IdentityFile ~/.ssh/git_rsa User git Port 9022 </file> Enfin: <code bash> 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. </code> net/git.txt Dernière modification : 2023/05/22 10:25de david