#===============================================================================
# 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
 


attachments

imageappend Append an Image
>