Scientific Linux

  Reply to this topicStart new topicStart Poll

> Mercurial (Hg) and Apache: web repo, howto install and configure with WSGI
 Posted: May 27 2014, 09:45 AM
Quote Post

SLF Rookie

Group: Members
Posts: 21
Member No.: 2836
Joined: 2-December 13

How to install and configure Mercurial (Hg) source control / versioning system using a Apache / SL server as a central repository.

Install Mercurial WSGI on Scientific Linux 6.5

For a nicely formatted text with working hyperlinks, please visit the link above. Below, I have copied the raw text of the post above.



Programmers, writers and other creative persons use source code version control systems to keep track of changes, histories and milestones of their work. They also use such systems to work together in teams. The Mercurial (Hg) system is especially popular with Python programmers. A good introduction can be fout at Hg Init.

This guide shows how to install a web-based Hg (Mercurial hgweb) repository on your Apache webserver that runs soms version of Enterprise Linux 6, e.g. Red Hat Enterprise Linux (RHEL), CentOS, or Scientific Linux. It will use the fast WSGI method instead of CGI. This guide was tested with Scientific Linux 6.5.

I must attribute much gratitude to an earlier guide written by Josip Medved (Medo) titled Mercurial on CentOS 6.2. You might still want to read that guide too; it is somewhat more verbose.

Furthermore, I have used the fine documentation from Mercurial itself, located at:

Install Mercurial

I assume you already have installed Apache and Python on your server.

yum install mercurial

Create directories and files

Create directories

mkdir -p /srv/hg/repos
mkdir -p /srv/hg/cgi-bin

Create /srv/hg/cgi-bin/hgweb.wsgi

# An example WSGI for use with mod_wsgi, edit as necessary
# See for more information
# Path to repo or hgweb config to serve (see 'hg help hgweb')
config = "/srv/hg/cgi-bin/hgweb.config"
# Uncomment and adjust if Mercurial is not installed system-wide
# (consult "installed modules" path from 'hg debuginstall'):
#import sys; sys.path.insert(0, "/path/to/python/lib")
# Uncomment to send python tracebacks to the browser if an error occurs:
#import cgitb; cgitb.enable()
# enable demandloading to reduce startup time
from mercurial import demandimport; demandimport.enable()
from mercurial.hgweb.hgwebdir_mod import hgwebdir
application = hgwebdir(config)

Create /srv/hg/cgi-bin/hgweb.config

# Themes: see
# bundles themes include {paper, coal, gitweb}
style = paper
allow_push = *
push_ssl = false
/ = /srv/hg/repos/**

Create a test repository

cd /srv/hg/repos
hg init test

Apache configuration

I assume you use vhost.d virtual domains. If you don’t, you might consider creating /etc/httpd/conf.d/vhost.conf

# added to activate the non-RHEL-standard vhost.d directory
Include vhost.d/*

Add to /etc/httpd/vhost.d/your-domain-name

# Mercurial (Hg) version control system, using WSGI
WSGIScriptAlias /hg "/srv/hg/cgi-bin/hgweb.wsgi"
<Location /hg>
AuthType Basic
AuthName "mercurial"
AuthUserFile /srv/hg/repos/.htpasswd
Require valid-user
# The "Directory" blocks seems unneccesarry but YMMV
#<Directory /srv/hg/repos>
# Options FollowSymlinks
# DirectoryIndex index.html
# AllowOverride None
# Order allow,deny
# Allow from all
#<Directory /srv/hg/cgi-bin>
# Options ExecCGI FollowSymlinks
# AddHandler wsgi-script .wsgi
# AllowOverride None
# Order allow,deny
# Allow from all

Create users and passwords

touch /srv/hg/repos/.htpasswd
htpasswd /srv/hg/repos/.htpasswd testuser

(You could also use the htpasswd -c option, but be careful — it destoys an existing file, including all earlier created users.)

Set ownership of files and SELinux labels

chown -R apache:apache /srv/hg
chcon -t httpd_sys_content_t -R /srv/hg

Restart Apache

service httpd restart


It should work now. Test it using your browser.

firefox http://your-domain-name/hg

Remember: When creating new repositories, you must make apache the owner of the files. Also, make sure SELinux labels are right using ls -alZ or repeat the chcon command from above.

If you like Markdown, then you should consider the Markdown Extension for hgweb as well.

Happy hacking!
PMUsers Website
1 User(s) are reading this topic (1 Guests and 0 Anonymous Users)
0 Members:

Topic Options Reply to this topicStart new topicStart Poll