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