Git

From A-Eskwiki
Jump to: navigation, search

Git en gitweb initialiseren

Kerberos en IPA

Installeer als eerste git en gitweb en de benodigde mod_auth_kerb voor htaccess:

yum install git-core gitweb mod_auth_kerb

Zet vervolgens de kerberos-authenticatie erbij in /etc/httpd/conf.d/git.conf:

<Location /git>
  Options Indexes FollowSymLinks Includes ExecCGI
  AuthType Kerberos
  AuthName "Kerberos Login"
  KrbMethodNegotiate On
  KrbMethodK5Passwd On
  KrbAuthRealms AESKWADRAAT
  Krb5KeyTab /etc/httpd/krb5.keytab
  Require valid-user
</Location>

Je moet er natuurlijk ook wel voor zorgen dat de juiste kerberos-keytab-file aanwezig is. Maak daarvoor op de ipaserver de http-service voor de gitserver aan en haal dan de keytab binnen op de gitserver:

ipa-getkeytab -s <ipa-server> -p HTTP/<gitserver> -k /etc/httpd/krb5.keytab
chown apache:apache /etc/httpd/krb5.keytab

en restart de httpd

service httpd restart

LDAP

Installeer als eerste git en gitweb en de benodigde mod_authz_ldap voor htaccess:

yum install git-core gitweb mod_auth_kerb

Zet vervolgens de kerberos-authenticatie erbij in /etc/httpd/conf.d/git.conf:

<Location /git>
  Options Indexes FollowSymLinks Includes ExecCGI
  AuthType Basic
  AuthName "GitWeb"
  AuthBasicProvider ldap
  AuthLDAPURL ldap://ldap/ou=mensjes,ou=accounts,dc=a-eskwadraat,dc=nl
  Require valid-user
</Location>

en restart de httpd

service httpd restart

Als laatste moet er in de gitweb.conf bijgezet worden dat de lijst van repos afhangt van de user die inlogt op gitweb. Zet het volgende erbij in /etc/gitweb.conf:

use CGI;
my $user = $ENV{'REMOTE_USER'};
our $projects_list = "/var/lib/git/" . "$user";
our $strict_export = true;

Dit zegt dat er in de map /var/lib/git per user een bestandje 'user' is waar de repos van die user in staan.

Vergeet niet om de selinux-context van /var/lib/git goed te zetten (restorecon -Rvv /var/lib/git/)!

Vervolgens moet je om de repo te clonen via http het volgende in /etc/httpd/conf.d/git.conf zetten:

Alias /gitrepos/*repo* /var/lib/git/*repo*

<Location /gitrepos/*repo*>
  Options Indexes FollowSymLinks Includes ExecCGI
  AuthType Basic
  AuthBasicProvider ldap
  AuthLDAPURL ldap://ldap/ou=mensjes,ou=accounts,dc=a-eskwadraat,dc=nl
  AuthName 'Sysop repo'
  Require valid-user (of hier de groep als dat nodig is)
</Location>

Nieuwe git-repo aanmaken

Maak een directory aan voor je repo in /var/lib/git/ en initialiseer een nieuwe gitrepo hierin:

cd /var/lib/git
mkdir *repo*
cp *repo*
git --bare init
cd *repo*
git update-server-info
cd ..
chown -R apache:apache *
chcon -Rt httpd_git_rw_content_t *repo*

Vervolgens kan je voor iedere user die bij die git-repo moet kunnen de regel *repo* *owner*+<owner-email> in het bestandje user zetten.

Misschien is het ook handig om de ownership naar de juiste user en groep te zetten.

Userfile van de lijst met repos

In de map /var/lib/git staat voor elke user die bij een git repo mag, een bestandje 'user' waarin staat bij welke repos de user mag. Het format van het bestand is als volgt:

*repo* *owner*+<owner-email>

Repo clonen

Als user kan je de repo clonen door het volgende uit te voeren:

  git clone http://vm-gitsvn.a-eskwadraat.nl/gitrepos/*repo*

en verander de volgende regel in *repo*/.git/config

  url = http://*user*@vm-gitsvn.a-eskwadraat.nl/gitrepos/*repo*