Mercurial für mehrere Repositories auf einem Debian mit NTLM-Authentifizierung über HTTP/HTTPS-Zugriff installieren

Es sollen mehrere Repositories erstellt werden die für bestimmte Active-Directory-Benutzer über einen Webserver zugänglich sein sollen.
zuerst muss der Rechner mit fester IP konfiguriert werden.
Die DNS-Auflösung im Netz muss stimmen. Evt. muss der Rechner manuell auf dem DNS-Server eingetragen werden.
Die Uhrzeit muss per ntpd konfiguriert werden. siehe dazu ntp
Die Softwarepakete mercurial, apache2, libapache2-authenntlm-perl müssen installiert werden:

apt-get install mercurial apache2 libapache2-authenntlm-perl

Es muss ein Datenverzeichnis für Mercurial bestimmt werden (z.B. /daten/hg):

mkdir -p /daten/hg/projekt1

Jetzt wird das erste Repository erstellt:

cd /daten/hg/projekt1 ; hg init

jetzt wird eine Testdatei im repo projekt1 erstellt:

echo "meine erste mercurialdatei" >blabla.txt
hg add blabla.txt
hg commit -Am "first commit" -u benutzername<

jetzt wird das Projekt1-Repo zweimal geklont:

cd /daten/hg
hg clone projekt1 projekt2
hg clone projekt1 projekt3

Jetzt wird die Apache-Konfigurationsdatei /etc/apache2/conf/hg.conf erstellt und dann wie folgt konfiguriert:

der eigene NT-Domänenname und mindesten ein Domänencontroller müssen hier eigetragen werden! ( rote Hervorhebungen )

hg.conf
##apacheconfigdatei für mercurial / richard@borwinius.de
ScriptAlias /daten/hg /daten/hg/hgweb.cgi
<Directory /daten/hg>
  Options ExecCGI FollowSymLinks
  PerlAuthenHandler Apache2::AuthenNTLM
  AuthType ntlm,basic
  AuthName "Mercurial Repository erfordert eine Anmeldung"
  require valid-user
  # oder: require user willi walter paul richard
  PerlAddVar ntdomain "MyNTDOMAIN mypdc mybdc"
  PerlAddVar defaultdomain MyNTDOMAIN
  PerlSetVar splitdomainprefix 1
  Order allow,deny
  Allow from all
</Directory>

jetzt wird die Datei /usr/share/doc/mercurial/examples/hgweb.cgi in das Repo-Verzeichnis kopiert.

cp /usr/share/doc/mercurial/examples/hgweb.cgi /daten/hg/

Diese Datei (/daten/hg/hgweb.cgi) wird jetzt wie folgt editiert:

hgweb.cgi
#!/usr/bin/env python
#
# An example CGI script to use hgweb, edit as necessary
# adjust python path if not a system-wide install:
#import sys
#sys.path.insert(0, "/path/to/python/lib")
config = "/daten/hg/hgweb.config"
# enable importing on demand to reduce startup time
from mercurial import demandimport; demandimport.enable()
 
# Uncomment to send python tracebacks to the browser if an error occurs:
#import cgitb
#cgitb.enable()
 
# If you'd like to serve pages with UTF-8 instead of your default
# locale charset, you can do so by uncommenting the following lines.
# Note that this will cause your .hgrc files to be interpreted in
# UTF-8 and all your repo files to be displayed using UTF-8.
#
#import os
#os.environ["HGENCODING"] = "UTF-8"
 
from mercurial.hgweb.hgweb_mod import hgweb
import mercurial.hgweb.wsgicgi as wsgicgi
 
application = hgweb(config)
wsgicgi.launch(application)

Jetzt wird noch die Konfigurationsdatei hgweb.config erstellt und konfiguriert.

cd /daten/hg
echo "[paths]" >> hgweb.config
echo "/daten/hg/ = /daten/hg/*" >> hgweb.config

Dem Apachebenutzer www-data muss noch der Zugriff auf das Repo-Verzeichnis erlaubt werden:

chown -R www-data:www-data /daten/hg

Jetzt müssen die Dateien hgweb.c* für den Apache ausführbar gemacht werden:

chmod 750 /daten/hg/hgweb.c*

Zuletzt muss der Apachedienst neu gestartet werden:

/etc/init.d/apache2 restart

Jetzt kann vom Webserver auf einem anderen Mercurialclient das repo heruntergeladen werden:

hg clone http://meinhgserver/hg/projekt1 meinCode
user: meinNTAccount
password: meinNTPasswort

Auf dem Client wurde jetzt das Verzeichnis „meinCode“ mit der Datei „blabla.txt“ erstellt.
Um auch Dateien oder Änderungen auf den Server hochladen (pushen) zu können,
muss auf dem Server die Datei /daten/hg/projekt1/.hg/hgrc erstellt und wie folgt konfiguriert werden:

hgrc
[web]
allow_push = *
# oder allow_push user1 user2
# push_ssl = true
# description = "mein erstes Projekt"
# contact = ich@irgendwo.de
# name = " wichtiges Projekt1"
# allow_read = user1 user2
# style = gitweb

Danach sollte der apache nochmal neu reloaded werden.

apachectl graceful

fertig.

Zugriff ist jetzt möglich über: http://meinserver/hg

Mercurial über HTTP
siehe auch:
Mercurial auf einem Debian mit PAM-Authentifizierung mit HTTP/HTTPS-Zugriff installieren

Mercurial