To think I'd tried to set upon the path of setting up a CVS server a few weeks back to allow me and several friends sharing a dedicated server to have our own private CVS repositories. The approach I took was to setup the server for password authentication (pserver). Naturally, I failed to get it running (had some issues with xinetd), and had given up since. Little thought did I give to alternative ways of setting up a CVS repository, and probably the most common sense way, using RSH - specifically, SSH, to connect. Well, that worked, and it was amazingly simple to do too.

I'm going to assume you have a shell account to your webserver accessible via SSH. Also, your server should have the cvs client installed - you can test it by logging into your shell account and typing 'cvs -v', whereupon it should print the CVS version and the usual blurb.

Now, my server is and I have a user account chuyeow. First, I'd have to create a repository on my server. I do that by logging in to my shell account (using SSH) and creating a directory where I'd have read-write access. The simplest place is to create a directory in your home directory (mine's /home/chuyeow).

$ mkdir /home/chuyeow/cvsroot

Create the CVS repository:

$ cvs -d /home/chuyeow/cvsroot init

There I'm done! I now have a CVS repository that's accessible from any location so long as I have a SSH client and a CVS client.

To access my repository, I'd first have to set my CVSROOT to :ext:[email protected]:/home/chuyeow/cvsroot, and the CVS_RSH environment variable to "ssh". I do that by entering these lines below into my ~/.bashrc file.

export CVSROOT=:ext:[email protected]:/home/chuyeow/cvsroot
export CVS_RSH=ssh

Now, all that's left to do is to import my existing sources into the repository:

$ cvs import -m "Imported sources" sources_dir vendor start

That's it! You can checkout a copy and then do CVS checkins, merges, etc. as you normally would from now on.