OpenBSD Source repository access: CVSync and rsync


OpenBSD uses the CVS version control system. It is described in more detail here. The cvs(1) command is used to checkout a working tree and perform standard operations (log, diff, etc). It can either contact an CVS server (in most cases this will be an OpenBSD anoncvs server), or operate against a local copy of the repository.

If you would like to operate a local anoncvs server, use cvs(1) commands offline, or simply have faster access, you may use CVSync or rsync to fetch a local copy of the repository.

What Is CVSync?

CVSync is a software package specifically used for distributing and updating cvs(1) repositories. As it has knowledge of the file format it can operate more efficiently than a general-purpose file synchronization program, however it is not bug-free and can have problems updating at times.

The client cvsync runs on each user's machine (typically from a cron(8) job), and fetches from a server running cvsyncd.

Getting Started Using CVSync

CVS is part of OpenBSD's base system. CVSync is an entirely different program and can be installed from packages:

# pkg_add cvsync
Do not build your own copy from unmodified upstream source - the port/package has been modified to support commitid which is now used in the OpenBSD repository.

In order to mirror the OpenBSD repository with CVSync, the following configuration file might be used:

config {
    hostname anoncvs.eu.openbsd.org
    # If your network link is a T1 or faster, comment out the following line.
    compress
    collection {
	name openbsd release rcs
	prefix /cvs
	umask 002
    }
}

This directs cvsync to fetch or refresh all OpenBSD distributions from anoncvs.eu.openbsd.org with a umask(2) that permits group write permission to the local repository. The local copy of the files are stored in /cvs.

Assuming this file is saved as cvs-syncfile, the following command would be used to invoke cvsync

$ cvsync -c cvs-syncfile

Getting Started Using Rsync

Some repository mirrors offer access via rsync, a general-purpose file synchronization program. Again this should be installed from packages. Two flavours are available:
# pkg_add rsync
Ambiguous: choose package for rsync
a	0: 
	1: rsync-3.1.2p0
	2: rsync-3.1.2p0-iconv
Your choice:
Unless you have other requirements, simply install the standard version (option 1 on the list above). You can select the flavour on the command-line to avoid pkg_add(1) prompting for the version like so:
# pkg_add rsync--
In order to mirror the OpenBSD repository with rsync, the following command line might be used:
$ rsync -avz --delete rsync://obsdacvs.cs.toronto.edu/obsdcvs/ /cvs/

Using CVS to Work With Your Repository

Now that you have a local copy of the CVS repository, it is now simple to check out, update, or do any of the other CVS operations you would normally do against a remote repository, locally. For example:
$ cvs -d/cvs checkout -P src
$ cvs -d/cvs up -Pd
$ cvs -d/cvs diff -u file.c
More details on CVS operation can be found in FAQ5, Fetching appropriate source code and in the cvs(1) man page.

Available Repository Servers

The following CVSync and rsync repository servers are available: Note: If your server is listed on here with inaccurate or unknown information, please contact mirrors-discuss@openbsd.org

You may want to use traceroute(8) to find out which server is nearest you. Problems with a server should be reported to the maintainer of the server in question.

As of December 2017, the CVS repository sizes are:

openbsd-ports - 1220MB
openbsd-src - 2865MB
openbsd-www - 704MB
openbsd-xenocara - 1658MB
openbsd-cvsroot - 158MB

The overall repository size currently increases at a rate of about 400MB per annum. The src repository increases by about 150MB.

IMPORTANT NOTE: There are a few issues relating to cryptographic software that everyone should be aware of: