ViewVC Installation and Configuration Raw

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](http://www.viewvc.org/download.html) 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.

*   I have an SVN repository in `/home/svn/repository` (served over
    Apache as `svn.example.com/repository`)
*   The CVS repository is located in `/home/cvs`.

### 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.

      
        # 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  
    

Other Niceties
--------------

### CVSGraph

[Displays a very nice graph](http://www.akhphd.au.dk/~bertho/cvsgraph/)
of revisions and branches for a given project. You can find it [at
EPEL](http://fedoraproject.org/wiki/EPEL/FAQ#howtouse). 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](http://markmail.org/message/l6tujq2zvh4z5wzt#query:%22Rlog%20output%20ended%20early.%20Expected%20RCS%20file%22+page:1+mid:5zkeunyusumiu3rj+state:results):

> `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`.