SME Pages

Using CVS on SME

1st May 2005 Ian Wells

CVS is installed as default on SME Server, but it does need to be configured before use. This HowTo shows how to make use of CVS, and how to install a WWW interface to the CVS repositories. Instructions are given for installation of ViewCVS and CVSweb. I have also written installation guides for the Windows clients TortoiseCVS and WinCVS. This HowTo has been tested on SME Server versions 5.x and 6.x.

The CVS documents on, written by Dan York and Michael Soulier, are no longer referenced as they are sadly no longer available.

Set up CVS on server

Initially set up the CVS ibay and user access, this is a summary from on Dan York's earlier document.

  1. Create an ibay from Server Manager,cvsroot, description 'CVS ibay',
Group = Everyone
User access, Write = Group, Read = Everyone
Public access = No access
Dynamic = disabled
  1. You now need to initialize the repository so that it can contain data, as root
#cvs  -d  /home/e-smith/files/ibays/cvsroot/files/  init
  1. For each user account, username, that needs cvs access
# db accounts setprop username Shell /bin/bash
# signal-event user-modify username
  1. From Server Manager (Remote Access) allow ssh access if this has not already been done.

  2. CVS can now be tested from a client, eg TortoiseCVS on Windows PC, or from a Linux command line.

Windows Clients

I have written simple installation guides for two popular clients.

The client that I normally use is TortoiseCVS, and I have also managed to use WinCVS.

SSH Public-Private Keys

When using CVS it is recommended to use SSH to communicate to the CVS Server. It is then useful to use a Public-Private Key pair for authentication.

There is a new guide to SSH Public-Private Keys, how to generate them, and how to install them onto the server and clients.

Installation of WWW interface

A WWW interface allows you to browse the file hierarchy of the CVS repositories, to view each file's revision history and display diffs between versions. Two very similar interfaces are described below, to allow a choice.

Installation of CVSweb

The latest stable version in May 2005 is 3.0.5, but I currently use 2.0.6 due to its ease of installation.

CVSweb 2.0.6 only requires two files on the server. To work with SME Server only a one line change is needed to each file.

  1. CVSweb can be downloaded from
# tar xvzf cvsweb-2.0.6.tar.gz
  1. Enter the cvsweb-2.0.6 directory, and modify cvsweb.cgi. Only the location of cvsweb.conf needs to be changed.
for ("$mydir/cvsweb.conf", '/etc/cvsweb.conf') {
  1. Then modify cvsweb.conf where the CVS repositories needs to be changed.
@CVSrepositories = (
    'local'   => ['Local Repository', '/home/e-smith/files/ibays/cvsroot/files'],
  1. Copy cvsweb.cgi to the cgi-bin of your choice.

# cp cvsweb.cgi /home/e-smith/files/ibays/ibayname/cgi-bin/
  1. Copy cvsweb.conf to /etc
# cp cvsweb.conf /etc
  1. At this point you can remove the temporary directory cvsweb-2.0.6, although you may want to save the INSTALL & README files

  2. Start a Web browser and point it at the cgi above, and you should be able to see your CVS Repository.

Installation of ViewCVS

  1. ViewCVS can be downloaded from
# tar xvzf viewcvs-0.9.2.tar.gz
  1. Enter the viewcvs-0.92 directory, and then install viewcvs
# ./viewcvs-install
When prompted, enter /opt/viewcvs as the installation directory
  1. At this point you can remove the temporary directory viewcvs-0.92, although you may want to save the INSTALL file

  2. Now edit viewcvs.conf which is in /opt/viewcvs - the file is well commented. Only cvs_roots needs to be changed.
cvs_roots =
        Development : /home/e-smith/files/ibays/cvsroot/files/
  1. Copy the cgi's from the cgi directory to the cgi-bin of your choice.
# cp cgi/* /home/e-smith/files/ibays/ibayname/cgi-bin/
  1. Start a Web browser and point it at the cgi above, and you should be able to see your CVS Repository.

Common Problem: The following error is seen,

You don't have permission to access /ibayname/cgi-bin/viewcvs.cgi/ on this server.

This is due to the permissions to ibayname which needs to be changed from the Server Manger.

Public access = Local Network (no password) or any value apart from No access.
Dynamic = enabled