ViewVC Installation and Configuration

ViewVC presents you with a nice browser interface to SVN and CVS
repositories. This is an installation document for ViewVC v1.1.5 on
RHEL 5.4. It depends on Python, but you should have that installed
on RHEL5 (for yum) anyway.

Download and Install

Get it here and extract the
tarball to a temporary location. Within, you will find viewvc-install,
a shell script which makes installation a breeze.

sudo ./viewvc-install  

I chose the installation directory at /var/www/html/viewvc. The
default is /usr/local/viewvc-1.1.5. Adapt to your liking.

Configuration

All configuration is done via /var/www/html/viewvc/viewvc.conf. I’m
now going to set up ViewVC to see SVN and CVS repos on the same host.

Setting up the both Repositories

These are the only lines different from the original file:

[general]  
cvs_roots = cvsroot: /home/cvs  
svn_roots = repository: /home/svn/repository  
root_parents = /home/svn : svn,  
               /home/cvs : cvs  
address = support@example.com  
  
[utilities]  
svn = /usr/bin/svn  
diff = /usr/bin/diff  
  
[options]  
authorizer = svnauthz  
use_rcsparse = 1  
  
[authz-svnauthz]  
authzfile = /home/svn/repository/conf/authz

The configuration file is pretty nicely documented. The configuration
above respects the authz file for an SVN repo. Any user not authorized
to ‘see’ a project will not be able to do so, even via the web. Yay!

Telling Apache about ViewVC and securing the connection

In /etc/httpd/conf.d, create a config directive called viewvc.conf
and add the following:

ScriptAlias /viewvc "/var/www/html/viewvc/bin/cgi/viewvc.cgi"  
ScriptAlias /query "/var/www/html/viewvc/bin/cgi/query.cgi"

You will also want to prevent any external access. We will use LDAP and
SSL to secure access via Apache. The directives are similar to an SVN
setup.

<Location /viewvc>  
    # Integrate with LDAP server  
    AuthType Basic  
    AuthBasicProvider ldap  
    AuthName "CBCB SVN Server"  
    AuthzLDAPAuthoritative off  
    AuthLDAPURL "(ldap://directory.example.com/cn=users,dc=directory,dc=example,dc=com?uid?sub)?(objectClass=*)"  
    Require valid-user  
</Location>

Other Niceties

CVSGraph

Displays a very nice graph
of revisions and branches for a given project. You can find it at
EPEL
. Installation
goes:

yum install cvsgraph --enablerepo=epel  

The binary is /usr/bin/cvsgraph. Configuration is at
/etc/cvsgraph.conf. To configure ViewVC with it, append the following:

Under [utilities]  
  cvsgraph = /usr/bin/cvsgraph  
  
Under [options]  
  use_cvsgraph = 1  
  cvsgraph_conf = /etc/cvsgraph.conf  

I’ve included the config file since I enabled anti-aliasing.

Pygments

This is a python package that prettifies source code views. You will
need the python-setuptools RPM. This installs (among other things) the
easy_install command which can be used to install Pygments and other
python packages.

yum install python-setuptools  
easy_install pygments

And you’re set! Your code displays should be spiffy now.

Custom Highlighting

I wanted to make .module for Drupal highlight as PHP files. For this,
I enabled/added the following to viewvc.conf:

mime_types_files = mimetypes.conf,  
                 /etc/mime.types

This ensures that ViewVC is able to pass on to Pygments (the
highlighter) correct, comprehensive and custom MIME types. Now to enable
my custom config for .module files, I just add this to
mimetypes.conf (in the same folder):

application/x-httpd-php         php module

Errors

Rlog Errors

You might see this for a CVS project:

Error: Rlog output ended early. Expected RCS file...

To remedy this, you need to:

  1. Install RCS (yum install rcs)
  2. Tell Apache to serve them properly
  3. Make sure that the user Apache runs as can run
    rlog /home/cvs/filename.ext,v

For the latter, edit httpd.conf and find the following line:

IndexIgnore .??* *~ *# HEADER* README* RCS CVS *,v *,t

Try removing the CVS and *,v entries.

If they’re still not solved

Just use the “experimental” rcsparse Python module. From this mailing
list
:

use_rcsparse tells ViewVC to use an “experimental” Python-based RCS file
parser library instead of parsing the output of the RCS toolchain
binaries.  It mostly works, but doesn’t support some things (like
keyword substitution).

Find use_rcsparse under [options] and set it to 1.