#===============================================================================
# Installation eines Mercurial Servers unter Debian
#===============================================================================
Ziel: hg Repositories mit anderen Entwicklern teilen, so dass diese die
Repositories klonen und branchen können. Ebenso soll es möglich sein,
Änderungen auf den Server zu pushen. Die Inhalt der Repositories sollen
über ein Webinterface sichtbar sein. => Mini-Version von bitbucket.org
#-------------------------------------------------------------------------------
# Einrichten der zentralen Repositories
#-------------------------------------------------------------------------------
1. Installation von mercurial-server. Dies ermöglicht ssh-Zugriff auf die
Repositories.
Website: http://www.lshift.net/mercurial-server.html
Dokumentation: http://dev.lshift.net/paul/mercurial-server/docbook.html
$ sudo apt-get install mercurial-server
VORSICHT: Die Installation führt zu einem Fehler, wenn man seinen root-Account
mit "usermod -l root" deaktiviert hat. Auch "usermod -e 1 root" führt zu einem
Fehler. In diesem Fall muss der root Benutzer wieder aktiviert, das Paket
deinstalliert und wieder installiert werden.
2. Public Keys dur Zugriffsberechtigten Benutzer müssen hierher kopiert werden:
/etc/mercurial-server/keys/users
$ ls /etc/mercurial-server/keys/users
dennis.pub
Auszug aus dem Handbuch für eine komfortable Methode:
jay@spoon:~$ ssh -A jeeves
jay@jeeves:~$ ssh-add -L > my-key
jay@jeeves:~$ sudo mkdir -p /etc/mercurial-server/keys/root/jay
jay@jeeves:~$ sudo cp my-key /etc/mercurial-server/keys/root/jay/spoon
jay@jeeves:~$ sudo -u hg /usr/share/mercurial-server/refresh-auth
jay@jeeves:~$ exit
Connection to jeeves closed.
jay@spoon:~$
Adminbenutzer können auch auf das spezielle Repository "hgadmin" zugreifen. Ihre
Public Keys müssen nach /etc/mercurial-server/keys/root kopiert werden.
Alternativ können eigene Benutzergruppen, derren Keys in das entsprechende
Unterverzeichnis von /etc/mercurial-server/keys kopiert werden müssen in
der Datei /etc/mercurial-server/access.conf konfiguriert werden.
Anschließend müssen die Berechtigungen aktualisiert werden:
$ sudo -u hg /usr/share/mercurial-server/refresh-auth
3. Repositories anlegen
Neue Repositories werden nun einfach durch "Rüberklonen" erzeugt. z.B.
$ cd my_project
$ hg clone . ssh://hg@hermes/dennis/my_project
HINWEIS FEHLERBEHBUNG:
hgserver benutzt ssh für die Benutzerauthentifizierung. Das heißt, durch
das Skript refresh-auth wird die Datei ~/.ssh/authorized_keys des hg Benutzers
neu aufgebaut. Aus Sicherheitsgründen aber nur, wenn im Homeverzeichnis des
hg Benutzers die Datei .mercurial-server vorhanden ist. Zur Fehlersuche kann
es hilfreich sein, die authorized_keys des hg Benutzers einzusehen, z.B. wenn
man beim Versuch, auf ein Repository zuzugreifen, nach einem Passwort gefragt
wird. Unter Debian ist das Home-Verzeichnis des Benutzers /var/lib/mercurial-server.
Dieses beinhaltet auch die Repositories und sollte daher in die Backupstrategie
einbezogen werden.
4. Fremden Benutzern Zugriff auf die Repositories bieten.
s. Dokumentation: http://dev.lshift.net/paul/mercurial-server/docbook.html#id1318222
Hierfür muss der Public Key der fremden Benutzer im speziellen Repository
hgadmin des Benutzers hinterlegt werden, dem das zu teilende Repository
gehört.
jay@spoon:~$ hg clone ssh://hg@jeeves/hgadmin
destination directory: hgadmin
no changes found
updating working directory
0 files updated, 0 files merged, 0 files removed, 0 files unresolved
jay@spoon:~$ cd hgadmin
jay@spoon:~/hgadmin$ mkdir -p keys/users/sam
jay@spoon:~/hgadmin$ cp ~/sam-saucer-key.pub keys/users/sam/saucer
jay@spoon:~/hgadmin$ hg add
adding keys/users/sam/saucer
jay@spoon:~/hgadmin$ hg commit -m "Add Sam's key"
jay@spoon:~/hgadmin$ hg push
pushing to ssh://hg@jeeves/hgadmin
searching for changes
remote: adding changesets
remote: adding manifests
remote: adding file changes
remote: added 1 changesets with 1 changes to 1 files
jay@spoon:~/hgadmin$
#-------------------------------------------------------------------------------
# Einrichten der Web Frontends
#-------------------------------------------------------------------------------
Mercurial beinhaltet hgweb, mit welchem ein richtiges Web Interface im
Vergleich zu "hg serve" eingerichtet werden kann.
Wiki: http://mercurial.selenic.com/wiki/CategoryWeb
Installation: http://mercurial.selenic.com/wiki/HgWebDirStepByStep
Installation: http://mercurial.selenic.com/wiki/PublishingRepositories#multiple
/usr/share/doc/mercurial-common/examples/hgweb.fcgi
/usr/share/doc/mercurial-common/examples/hgweb.wsgi
/usr/share/doc/mercurial-common/examples/hgweb.cgi
/usr/share/mercurial/help/hgweb.txt