Differences between revisions 2 and 16 (spanning 14 versions)
Revision 2 as of 2005-09-18 16:48:51
Size: 2918
Comment:
Revision 16 as of 2008-05-09 14:11:31
Size: 3678
Editor: abuehl
Comment: removing spaces from page name
Deletions are marked like this. Additions are marked like this.
Line 1: Line 1:
## page was renamed from CGI Install
Line 5: Line 6:
The following example shows you one way of doing making a repository named {{{repo-name}}} available on the host {{{example.org}}} The following example shows you one way of making a repository named {{{repo-name}}} available on the host {{{example.org}}}
Line 8: Line 9:
== Create a user for the repository. == == Create a user and setup a repository ==
Line 10: Line 11:
This is not strictly necessary, but it will make it easier to update the repository remotely.
Create a user {{{hg}}} and setup a repository in {{{/home/hg/repo-name}}}:
Line 13: Line 13:
$ adduser hg
$ cd /home/hg
$ mkdir repo-name; cd repo-name
# adduser hg
# su - hg
$ mkdir /home/hg/repo-name; cd /home/hg/repo-name
Line 18: Line 18:
This will create a repository in''home''hg/repo-name. If you create a directory in {{{/home/hg/.ssh}}} and set up its {{{authorized_keys}}} file appropriately, you will be able to remotely update the repository via the command
Line 20: Line 19:
You should add a bit of information about your hg repository by making sure the following
lines in the config file {{{repo-name/.hg/hgrc}}} are set:
{{{
[web]
description = short description of repo-name
author = Example User <hg@example.com>
}}}

Not strictly necessary, but if you want to allow remote updates to your
repository, you can create a directory {{{/home/hg/.ssh}}} and set up
its {{{authorized_keys}}} file appropriately (See ["SharedSSH"]). You will be able to remotely
update the repository via the command:
Line 25: Line 36:
== Setup the cgi script to refer to your repository == == Setup a cgi script to refer to your repository ==
Line 29: Line 40:
mercurial sources to {{{/var/www/cgi-hg/index.cgi}}} and change the call to hgweb.hgweb() so that the
first argument lists the path to the repository and the second argument gives the name of the repository.  
mercurial sources to {{{/var/www/cgi-hg/index.cgi}}} and change the call to {{{hgweb.hgweb()}}} so that the
first argument lists the path to the repository and the second argument gives the name of the repository.
Line 84: Line 95:


== Multiple repositories ==
[[Anchor(multiple_repos)]]

You'll probably setup several repositories and not only one. The apache configuration can stay the same,
but you then copy the file {{{hgwebdir.cgi}}} to {{{/var/www/cgi-hg/index.cgi}}} and for each repository
the file {{{hgweb.cgi}}} to {{{/var/www/cgi-hg/repo-name/index.cgi}}}.

A better solution is documented in HgWebDirStepByStep.
----
CategoryWeb

Setting up a Mercurial CGI Server

If you would like to publish your repository to the world, it must be made available via a web server. ["Mercurial"] does have a built-in web server which can be used for this, which can be accessed via hg serve. However, it will only allow one connection at a time, and it is not very robust; a broken connection at the wrong time can cause the hg serve to exit. A much better way to do things is to access Mercurial from a CGI script using an Apache web server.

The following example shows you one way of making a repository named repo-name available on the host example.org

Create a user and setup a repository

Create a user hg and setup a repository in /home/hg/repo-name:

# adduser hg
# su - hg
$ mkdir /home/hg/repo-name; cd /home/hg/repo-name
$ hg init

You should add a bit of information about your hg repository by making sure the following lines in the config file repo-name/.hg/hgrc are set:

[web]
description = short description of repo-name
author = Example User <hg@example.com>

Not strictly necessary, but if you want to allow remote updates to your repository, you can create a directory /home/hg/.ssh and set up its authorized_keys file appropriately (See ["SharedSSH"]). You will be able to remotely update the repository via the command:

$ hg push ssh://hg@example.org/repo-name

Setup a cgi script to refer to your repository

Most people adding new content to the repository don't need to change the cgi script, so keeping that separate (maybe even protected by root permissions) is best. Copy the hgweb.cgi script from the mercurial sources to /var/www/cgi-hg/index.cgi and change the call to hgweb.hgweb() so that the first argument lists the path to the repository and the second argument gives the name of the repository.

Using the example names as used above, the index.cgi file might look like this:

import cgitb, os, sys
cgitb.enable()

# sys.path.insert(0, "/path/to/python/lib") # if not a system-wide install
from mercurial import hgweb

h = hgweb.hgweb("/home/hg/repo-name", "name of repository")
h.run()

Make sure the index.cgi file is executable:

$ chmod a+x index.cgi

Edit your apache configuration file

Place the following in your apache configuration file and reload the apache server so that the configuration changes take effect:

Alias /hg /var/www/cgi-hg
<Directory "/var/www/cgi-hg">
    DirectoryIndex index.cgi
    AddHandler cgi-script .cgi
    Options ExecCGI
    Order allow,deny
    Allow from all
</Directory>

In case you also want to make the repository available as static html files (which should normally not be necessary), you could add:

Alias /hg-static /home/hg/repo-name
<Directory "/home/hg/repo-name">
    Options Indexes
    Order allow,deny
    Allow from all
</Directory>

That's it!

Once you have populated the repository, users will be able to access the repositry using the URL: http://example.org/hg/.

Multiple repositories

Anchor(multiple_repos)

You'll probably setup several repositories and not only one. The apache configuration can stay the same, but you then copy the file hgwebdir.cgi to /var/www/cgi-hg/index.cgi and for each repository the file hgweb.cgi to /var/www/cgi-hg/repo-name/index.cgi.

A better solution is documented in HgWebDirStepByStep.


CategoryWeb

CGIinstall (last edited 2009-11-30 17:50:03 by PaulBoddie)