Freitag, 4. März 2011

Mercurial per Ubuntu und Apache2






Die folgende Anleitung basiert unter anderem auf folgende Artikel:
http://malor.se/blog/?p=60
http://wiki.ubuntuusers.de/Mercurial_Repository_aufsetzen
http://stackoverflow.com/questions/2671279/hgwebdir-push-permission-denied-error
Voraussetzung:

Eine frische Ubuntu 10.10 Installation in eine VirtualBox. (Da Tomcat später noch benötigt wird, habe ich bei der Installation Tomcat direkt installieren lassen).
Die Ubuntu-Version kann wie folgt überprüft werden:
$ cat /etc/issue
Ubuntu 10.10 \n \l
Mecurial und Apache installieren
$ sudo apt-get install apache2
$ sudo apt-get install mercurial
Mercurial Repository vorbereiten
$ sudo mkdir /srv/hg
$ sudo mkdir /srv/hg/cgi-bin
Statt hgwebdir.cgi nutze ich hgweb.cgi (da hgwebdir.cgi nicht mit installiert wurde).
$ sudo cp /usr/share/doc/mercurial/examples/hgweb.cgi /srv/hg/cgi-bin/
$ sudo chmod a+x /srv/hg/cgi-bin/hgweb.cgi
Folgende Zeile in der hgweb.cgi muss angepasst werden:
$ sudo nano /srv/hg/cgi-bin/hgweb.cgi

# Path to repo or hgweb config to serve (see 'hg help hgweb')
config = "/srv/hg/cgi-bin/hgweb.config"
Dateien anlegen mit dem jeweiligem Inhalt:
$ sudo nano /srv/hg/cgi-bin/hgweb.config

[collections]
/srv/hg/ = /srv/hg/
$ sudo nano /srv/hg/hgrc-template

[web]
allow_push = *
push_ssl = false
Das hgrc-template wird in jedem neuen Projekt kopiert und erlaubt das pushen von allen registreirten Benutzern (mehr zu den Benutzern weiter unten).
Skript erstellen, zu einfachen Erzeugung neuer Mercurial Projekte:
$ sudo touch /srv/hg/create-new-project.sh
$ sudo chmod +x /srv/hg/create-new-project.sh
$ sudo nano /srv/hg/create-new-project.sh

#!/bin/bash

usage(){ echo "You gave me no Projectname. Use me like this: $0 new_project_name"; exit 1; }

[ "$(whoami)" != "root" ] && { echo "Sorry, you are not root."; usage; }

[ $# -eq 0 ] && { usage; }

PROJECT_NAME=$1
DIR_NAME=`dirname "$0"`

echo "Creating new Mercurial Project in $DIR_NAME/$PROJECT_NAME"

sudo mkdir $DIR_NAME/$PROJECT_NAME

cd $DIR_NAME/$PROJECT_NAME

hg init

sudo cp ../hgrc-template .hg/hgrc

sudo chmod -R 777 .hg

echo Done.

Ein neues Projekt kann nun angelegt werden mit:
$ sudo /srv/hg/create-new-project.sh test-projekt
Apache configurieren

Datei anlegen:
$ sudo nano /etc/apache2/sites-available/hg
NameVirtualHost *
<VirtualHost *>
ServerAdmin webmaster@localhost

DocumentRoot /srv/hg/cgi-bin/

ScriptAliasMatch ^/hg(.*) /srv/hg/cgi-bin/hgweb.cgi$1

<Directory "/srv/hg/cgi-bin/">
SetHandler cgi-script
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
AuthUserFile /etc/hg/htpasswd
AuthName "Dev Repo"
AuthType Basic
<Limit GET POST PUT>
Require valid-user
</Limit>
</Directory>

ErrorLog /var/log/apache2/hg.log
</VirtualHost>
Nun wird die standard Apache Seite dektiviert und die neue Mercurial Seite aktiviert:
$ sudo a2dissite default
$ sudo a2ensite hg
$ sudo /etc/init.d/apache2 reload
Um einen neuen Benutzer anzulegen wird folgendes ausgeführt:
$ sudo mkdir /etc/hg/
$ sudo htpasswd -c /etc/hg/htpasswd cheneym
Weitere Benutzer werden ohne "-c" angelegt.
Voalá! Fertig ist das Mondgesicht.

Web-Oberfläche, pullen und pushen:
$ http://deine-url/hg/
$ hg clone http://deine-url/hg/

Keine Kommentare:

Kommentar veröffentlichen