VCS/Git/CreateRemoteRepository

De TartareFR
Aller à la navigation Aller à la recherche
LogoGit.svg

Configurer Git-daemon

Installation

# yum install git-daemon

Initialisation du repository

Le paquet git-daemon offre une configuration initiale satisfaisante utilisant le service xinetd.

On vérifie la présence de la ligne suivante dans le fichier /etc/services :

$ grep 9418 /etc/services
git             9418/tcp                # git pack transfer service
git             9418/udp                # git pack transfer service

Par défaut, la configuration exporte les dépôts git présents dans les répertoires utilisateurs <path>~/vcs</path> (paramètre user-path) et <path>/var/lib/git</path> (paramètre base-path).

On supprimera le switch --export-all pour limiter l'export aux seuls dépôts possédant le fichier <path>git-daemon-export-ok</path>.

 $ cat /etc/xinetd.d/git
 # default: off
 # description: The git dæmon allows git repositories to be exported using \
 #	the git:// protocol.
 service git
 {
 	 disable	= no
         socket_type     = stream
         wait            = no
         user            = git
         server          = /usr/libexec/git-core/git-daemon
         server_args     = --base-path=/var/lib/git --user-path=~/vcs --syslog --inetd --verbose
         log_on_failure  += USERID
         # xinetd doesn't do this by default. bug #195265
         flags		= IPv6
 }

Bien évidemment, il faudra redémarrer le service xinetd pour que celui-ci prenne en compte les modifications apportées.

systemctl restart xinetd.service

Ajout d'un utilisateur et un groupe dédié au service

useradd -r -d /var/lib/git -s /bin/bash -c 'Git user' git

et mise en place d'un mot de passe

passwd git

Création du répertoire de travail de git

mkdir -p /var/lib/git
cp /etc/skel/.bash* /var/lib/git/
chown -R git:git /var/lib/git

Initialisation de ssh

su - git
ssh-keygen -t rsa
touch .ssh/known_hosts .ssh/authorized_keys
chmod 600 .ssh/authorized_keys
chmod 644 .ssh/known_hosts

Selinux

semanage fcontext -a -t ssh_home_t '/var/lib/git/.ssh(/.*)?'
restorecon -R -v /var/lib/git

Ajout d'un utilisateur local

cat /home/$USER/.ssh/id_rsa.pub >> /var/lib/git/.ssh/authorized_keys

Mise en place du dépôt nu

Avec un compte user, on exporte notre dépôt

cd /tmp
git clone --bare file:///home/didier/vcs/scripts scripts.git

Déplacement du dépôt précédemment exporté et on change l'utilisateur et le groupe

mv /tmp/*.git /var/lib/git/
chown -R git:git *.git

On autorise l'export de notre projet par le service git

# touch /var/lib/git/scripts.git/git-daemon-export-ok

Pour permettre le push, il faudra configurer un accès ssh pour chaque développeur. Attribuer le dépôt git à un groupe unix puis rattacher les développeurs à celui-ci est une bonne pratique. Git offre un shell de connexion minimaliste git-shell ne permettant que les opérations push et pull.
Ici, on crée un compte pour l'utilisateur joe avec git-shell pour shell de connexion et l'ajouter au groupe repo1 :

# groupadd repo1
# useradd joe -s /usr/bin/git-shell -G repo1
# chgrp -R repo1 /var/lib/git/repo1

Tests

Accès lecture seule

$ git clone git://localhost/rpm
Cloning into 'rpm'...
remote: Counting objects: 96, done.
remote: Compressing objects: 100% (89/89), done.
remote: Total 96 (delta 6), reused 96 (delta 6)
Receiving objects: 100% (96/96), 56.60 MiB | 41.59 MiB/s, done.
Resolving deltas: 100% (6/6), done.
$ touch test
$ git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       test
nothing added to commit but untracked files present (use "git add" to track)

$ git add test

$ git commit -m 'Add test file'
[master 4fc0b91] Add test file
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test
$ git push
fatal: remote error: access denied or repository not exported: /rpm

Accès en lecture écriture

$ git clone git@localhost:rpm.git
Cloning into 'rpm'...
remote: Counting objects: 96, done.
remote: Compressing objects: 100% (89/89), done.
remote: Total 96 (delta 6), reused 96 (delta 6)
Receiving objects: 100% (96/96), 56.60 MiB | 21.12 MiB/s, done.
Resolving deltas: 100% (6/6), done.
$ cd rpm
$ touch test
]$ git add test
$ git commit -m 'Add test file'
[master e6bab0d] Add test file
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test

$ git push
Counting objects: 4, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 269 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
To git@localhost:rpm.git
   af18a33..e6bab0d  master -> master