InhaltsverzeichnisGIT-Repository als Webanwendung mit AD-Authentifizierung
Git ist (noch) ein verteiltes Versionskontrollsystem und sehr schlecht gegen äußere Einblicke abzuschirmen. Installation
(bis wheezy) apt-get install winbind apache2 git-core git-web libapache2-mod-auth-pam libapache2-mod-auth-sys-group
anschließend muss der Rechner für die Authentifizierung an das Active Directory konfiguriert werden. siehe dazu : Winbind a2enmod dav dav_fs cgi (ab jessie) apt-get install winbind apache2 git-core git-web libapache2-mod-authnzpam libapache2-mod-auth-sys-group echo "auth required pam_succeed.so quiet user ingroup git_gruppe" >/etc/pam.d/git
/etc/init.d/winbind restart /etc/init.d/samba restart /etc/init.d/apache restart Programmkonfiguration
Als Beispiel soll im Verzeichnis mkdir /daten su www-data mkdir /daten/git_repos cp -avr /usr/share/gitweb/* /daten/git_repos/ cp -avr /usr/lib/cgi-bin/gitweb.cgi /daten/git_repos/
editiere die Datei vi /daten/git_repos/gitweb.cgi ... our $projectroot = "/daten/git_repos"; ...
editiere die Datei vi /etc/gitweb.conf # path to git projects (<project>.git) $projectroot = "/daten/git_repos/"; $site_name = "GIT-Repository meiner Firma"; # directory to use for temp files $git_temp = "/tmp"; # target of the home link on top of all pages $home_link = $my_uri || "/"; # html text to include at home page $home_text = "indextext.html"; # file with project list; by default, simply scan the projectroot dir. $projects_list = $projectroot; # stylesheet to use $stylesheet = "/git/gitweb.css"; # logo to use $logo = "/git/git-logo.png"; # the 'favicon' $favicon = "/git/git-favicon.png";
erstelle die Datei vi /etc/apache2/conf.d/git # Zugriff auf das tolle GIT-Repo / rb Alias /git "/daten/git_repos" DAVLockDB "/var/lock/apache2/DAV.lock" <Directory "/daten/git_repos"> DAV On Allow from all AllowOverride all Order allow,deny Options ExecCGI DirectoryIndex gitweb.cgi SetEnv GITWEB_CONFIG /etc/gitweb.conf <Files gitweb.cgi> SetHandler cgi-script </Files> AuthType Basic AuthPAM_Enabled On AuthName "GIT Repository erfordert eine Anmeldung" AuthUserFile /dev/null AuthPAM_FallThrough On AuthBasicAuthoritative off AuthGroup_Enabled On #erstellte globale Gruppe klein geschrieben! Require group git_gruppe </Directory>
Anschließend muss der apache und der winbind neu gestartet werden. /etc/init.d/apache2 restart /etc/init.d/winbind restart Repositoryerstellung und -konfigurationauf dem Server: su www-data cd /daten/git_repos mkdir MyGITRepo cd /daten/git_repos/MyGITRepo git init --bare git config http.receivepack true echo "meine Beschreibung zum Repo">.git/description #bei jeder Änderung muss unbedingt ein "git update-server-info" ausgeführt werden, sonst werden die Änderungen nicht sichtbar! chmod +x .git/hooks/postupdate #Info: bei SUSE heisst die Datei postupdate.example und muss umbenannt werden ./git/hooks/postupdate
erster Test schon auf dem Server: cd git clone https://meinserver/git/MyGITREPO #oder lokal per #git clone file:///daten/git_repos/MyGITREPO cd MyGITREPO git branch #eine erste Datei erstellen echo "Willkommen im Repo">willkommen.txt git add . git commit -a -m "initialer commit von rb" git push origin master Sonderfall mehrere mehrere Repos für mehrere Benutzergruppen trennenRepo von einem Linuxclient per HTTP aus clonen
Jetzt sollte im Webbrowser die Seite http://meinserver/git/MyGITRepo für alle Mitglieder der Gruppe „GIT_GRUPPE“ nach Authentifizierung erreichbar sein. cd git clone http://domuser:domuserpasswort@meinserver/git/MyGITRepo/.git/ ## oder "git clone git@meingithub.dom.ain:MyGITRepo/my.git" wenn der publickey auf dem github vorhanden ist
(Jetzt wird das vollständige Repo im Homeverzeichnis des Benutzers cd MyGITREPO git branch #eine erste Datei erstellen echo "Willkommen im Repo">willkommen.txt git add . git commit -a -m "initialer commit per http von rb" git push origin master Repo von einem Linuxclient per HTTPS aus clonen
erstelle zusätzlich in Deinem Benutzerverzeichnis (z.B.) [http] sslVerify = false
alternativ ist auch das Setzen einer Umgebungsvariable möglich: export GIT_SSL_NO_VERIFY=true oder: git config --global http.sslVerify false
cd git clone https://domuser:domuserpasswort@meinserver/git/MyGITRepo/.git/ cd MyGITREPO git branch #eine erste Datei erstellen echo "Willkommen im Repo">willkommen.txt git add . git commit -a -m "initialer commit per https von rb" git push origin master Fehlerquellen
Benutzer www-data kann auf das /tmp-Verzeichnis nicht schreibend zugreifen. Cannot optain needed tree abcdefghijk....\\ while processing commit xyzuvw......\ error: Fetch failed
Lösung: git update-server-info git fsck git gc
check gnutls_handshake_set_max_packet_length().
Lösung: Cloning into 'fxa-auth-server'... fatal: unable to connect to github.com: github.com[0: 192.30.252.128]: errno=Connection timed out
Lösung: git config --global http.proxy http://Benutzer:Passwort@proxy:Port
error: Cannot access URL https://meinserver/git/meinrepo/,return code 22 fatal: git-http-push failed
Lösung: git config --global credential.helper cache git clone https://benutzername@meinserver/git/meinrepo git push origin master
Fehler: gitweb.cgi: Undefined subroutine CGI::startform
Lösung: export GIT_CURL_VERBOSE=1 export GIT_TRACE=1 Repoerstellungsscript
Code prüfen bevor er gepusht wirdam Beispiel von yamldateien. yamllint und git müssen installiert sein. apt install pre-commit #if needed# export https_proxy="http://myproxy:3128" #if needed# export http_proxy="http://myproxy:3128" pre-commit install pre-commit autoupdate cd myrepo pre-commit sample-config >> .pre-commit-config.yaml pre-commit run --all-files
dann folgende Funktion in die ### gitte nach github.com ### Bsp.: gitpush winbind gitpush () { if [[ -z "$1" ]] then echo "usage: gitpush meincommittext" else pushd `pwd` cd ~/myrepo git add . && \ git commit -a -m "$1" && \ git push popd fi } export -f gitpush und dann noch einmalig zur Aktivierung ausführen: source ~/.bashrc |