FreeBSD Handbook : The Cutting Edge: FreeBSD-current and FreeBSD-stable : Synchronizing Source Trees over the Internet : CVSup
Previous: CTM
Next: Using make world to rebuild your system

18.3.3. CVSup

Contributed by John Polstra <jdp@FreeBSD.ORG>.

18.3.3.1. Introduction

CVSup is a software package for distributing and updating source trees from a master CVS repository on a remote server host. The FreeBSD sources are maintained in a CVS repository on a central development machine in California. With CVSup, FreeBSD users can easily keep their own source trees up to date.

CVSup uses the so-called pull model of updating. Under the pull model, each client asks the server for updates, if and when they are wanted. The server waits passively for update requests from its clients. Thus all updates are instigated by the client. The server never sends unsolicited updates. Users must either run the CVSup client manually to get an update, or they must set up a cron job to run it automatically on a regular basis.

The term "CVSup", capitalized just so, refers to the entire software package. Its main components are the client "cvsup" which runs on each user's machine, and the server "cvsupd" which runs at each of the FreeBSD mirror sites.

As you read the FreeBSD documentation and mailing lists, you may see references to sup. Sup was the predecessor of CVSup, and it served a similar purpose. CVSup is in used in much the same way as sup and, in fact, uses configuration files which are backward-compatible with sup's. Sup is no longer used in the FreeBSD project, because CVSup is both faster and more flexible.

18.3.3.2. Installation

The easiest way to install CVSup if you are running FreeBSD 2.2 or later is to use either the port from the FreeBSD ports collection or the corresponding binary package, depending on whether you prefer to roll your own or not.

If you are running FreeBSD-2.1.6 or 2.1.7, you unfortunately cannot use the binary package versions due to the fact that they require a version of the C library that does not yet exist in FreeBSD-2.1.{6,7}. You can easily use the port, however, just as with FreeBSD 2.2. Simply unpack the tar file, cd to the cvsup subdirectory and type "make install".

Because CVSup is written in Modula-3, both the package and the port require that the Modula-3 runtime libraries be installed. These are available as the lang/modula-3-lib port and the lang/modula-3-lib-3.6 package. If you follow the same directions as for cvsup, these libraries will be compiled and/or installed automatically when you install the CVSup port or package.

The Modula-3 libraries are rather large, and fetching and compiling them is not an instantaneous process. For that reason, a third option is provided. You can get statically linked FreeBSD executables for CVSup from the USA distribution site:

as well as from the many FreeBSD FTP mirror sites around the world.

Most users will need only the client. These executables are entirely self-contained, and they will run on any version of FreeBSD from FreeBSD-2.1.0 to FreeBSD-current.

In summary, your options for installing CVSup are:

18.3.3.3. Configuration

CVSup's operation is controlled by a configuration file called the "supfile". Beginning with FreeBSD-2.2, there are some sample supfiles in the directory /usr/share/examples/cvsup. These examples are also available from ftp://ftp.freebsd.org/pub/FreeBSD/FreeBSD-current/src/share/examples/cvsup/ if you are on a pre-2.2 system.

The information in a supfile answers the following questions for cvsup:

In the following sections, we will construct a typical supfile by answering each of these questions in turn. First, we describe the overall structure of a supfile.

A supfile is a text file. Comments begin with "#" and extend to the end of the line. Lines that are blank and lines that contain only comments are ignored.

Each remaining line describes a set of files that the user wishes to receive. The line begins with the name of a "collection", a logical grouping of files defined by the server. The name of the collection tells the server which files you want. After the collection name come zero or more fields, separated by white space. These fields answer the questions listed above. There are two types of fields: flag fields and value fields. A flag field consists of a keyword standing alone, e.g., "delete" or "compress". A value field also begins with a keyword, but the keyword is followed without intervening white space by "=" and a second word. For example, "release=cvs" is a value field.

A supfile typically specifies more than one collection to receive. One way to structure a supfile is to specify all of the relevant fields explicitly for each collection. However, that tends to make the supfile lines quite long, and it is inconvenient because most fields are the same for all of the collections in a supfile. CVSup provides a defaulting mechanism to avoid these problems. Lines beginning with the special pseudo-collection name "*default" can be used to set flags and values which will be used as defaults for the subsequent collections in the supfile. A default value can be overridden for an individual collection, by specifying a different value with the collection itself. Defaults can also be changed or augmented in mid-supfile by additional "*default" lines.

With this background, we will now proceed to construct a supfile for receiving and updating the main source tree of FreeBSD-current.

18.3.3.4. Running CVSup

You are now ready to try an update. The command line for doing this is quite simple:

  cvsup supfile

where "supfile" is of course the name of the supfile you have just created. Assuming you are running under X11, cvsup will display a GUI window with some buttons to do the usual things. Press the "go" button, and watch it run.

Since you are updating your actual "/usr/src" tree in this example, you will need to run the program as root so that cvsup has the permissions it needs to update your files. Having just created your configuration file, and having never used this program before, that might understandably make you nervous. There is an easy way to do a trial run without touching your precious files. Just create an empty directory somewhere convenient, and name it as an extra argument on the command line:

  mkdir /var/tmp/dest
  cvsup supfile /var/tmp/dest

The directory you specify will be used as the destination directory for all file updates. CVSup will examine your usual files in "/usr/src", but it will not modify or delete any of them. Any file updates will instead land in "/var/tmp/dest/usr/src". CVSup will also leave its base directory status files untouched when run this way. The new versions of those files will be written into the specified directory. As long as you have read access to "/usr/src", you do not even need to be root to perform this kind of trial run.

If you are not running X11 or if you just do not like GUIs, you should add a couple of options to the command line when you run cvsup:

  cvsup -g -L 2 supfile

The "-g" tells cvsup not to use its GUI. This is automatic if you are not running X11, but otherwise you have to specify it.

The "-L 2" tells cvsup to print out the details of all the file updates it is doing. There are three levels of verbosity, from "-L 0" to "-L 2". The default is 0, which means total silence except for error messages.

There are plenty of other options available. For a brief list of them, type "cvsup -H". For more detailed descriptions, see the manual page.

Once you are satisfied with the way updates are working, you can arrange for regular runs of cvsup using cron(8). Obviously, you should not let cvsup use its GUI when running it from cron.

18.3.3.5. CVSup File Collections

The file collections available via CVSup are organized hierarchically. There are a few large collections, and they are divided into smaller sub-collections. Receiving a large collection is equivalent to receiving each of its sub-collections. The hierarchical relationships among collections are reflected by the use of indentation in the list below.

The most commonly used collections are src-all, cvs-crypto, and ports-all. The other collections are used only by small groups of people for specialized purposes, and some mirror sites may not carry all of them.

cvs-all release=cvs

The main FreeBSD CVS repository, excluding the export-restricted cryptography code.

distrib release=cvs

Files related to the distribution and mirroring of FreeBSD.

doc-all release=cvs

Sources for the FreeBSD handbook and other documentation.

ports-all release=cvs

The FreeBSD ports collection.

ports-archivers release=cvs

Archiving tools.

ports-astro release=cvs

Astronomical ports.

ports-audio release=cvs

Sound support.

ports-base release=cvs

Miscellaneous files at the top of /usr/ports.

ports-benchmarks release=cvs

Benchmarks.

ports-biology release=cvs

Biology.

ports-cad release=cvs

Computer aided design tools.

ports-chinese release=cvs

Chinese language support.

ports-comms release=cvs

Communication software.

ports-converters release=cvs

character code converters.

ports-databases release=cvs

Databases.

ports-deskutils release=cvs

Things that used to be on the desktop before computers were invented.

ports-devel release=cvs

Development utilities.

ports-editors release=cvs

Editors.

ports-emulators release=cvs

Emulators for other operating systems.

ports-games release=cvs

Games.

ports-german release=cvs

German language support.

ports-graphics release=cvs

Graphics utilities.

ports-japanese release=cvs

Japanese language support.

ports-korean release=cvs

Korean language support.

ports-lang release=cvs

Programming languages.

ports-mail release=cvs

Mail software.

ports-math release=cvs

Numerical computation software.

ports-mbone release=cvs

MBone applications.

ports-misc release=cvs

Miscellaneous utilities.

ports-net release=cvs

Networking software.

ports-news release=cvs

USENET news software.

ports-plan9 release=cvs

Various programs from Plan9.

ports-print release=cvs

Printing software.

ports-russian release=cvs

Russian language support.

ports-security release=cvs

Security utilities.

ports-shells release=cvs

Command line shells.

ports-sysutils release=cvs

System utilities.

ports-textproc release=cvs

text processing utilities (does not include desktop publishing).

ports-vietnamese release=cvs

Vietnamese language support.

ports-www release=cvs

Software related to the World Wide Web.

ports-x11 release=cvs

Ports to support the X window system.

ports-x11-clocks release=cvs

X11 clocks.

ports-x11-fm release=cvs

X11 file managers.

ports-x11-fonts release=cvs

X11 fonts and font utilities.

ports-x11-toolkits release=cvs

X11 toolkits.

ports-x11-wm release=cvs

X11 window managers.

src-all release=cvs

The main FreeBSD sources, excluding the export-restricted cryptography code.

src-base release=cvs

Miscellaneous files at the top of /usr/src.

src-bin release=cvs

User utilities that may be needed in single-user mode (/usr/src/bin).

src-contrib release=cvs

Utilities and libraries from outside the FreeBSD project, used relatively unmodified (/usr/src/contrib).

src-etc release=cvs

System configuration files (/usr/src/etc).

src-games release=cvs

Games (/usr/src/games).

src-gnu release=cvs

Utilities covered by the GNU Public License (/usr/src/gnu).

src-include release=cvs

Header files (/usr/src/include).

src-kerberosIV release=cvs

KerberosIV security package (/usr/src/kerberosIV).

src-lib release=cvs

Libraries (/usr/src/lib).

src-libexec release=cvs

System programs normally executed by other programs (/usr/src/libexec).

src-release release=cvs

Files required to produce a FreeBSD release (/usr/src/release).

src-sbin release=cvs

System utilities for single-user mode (/usr/src/sbin).

src-share release=cvs

Files that can be shared across multiple systems (/usr/src/share).

src-sys release=cvs

The kernel (/usr/src/sys).

src-tools release=cvs

Various tools for the maintenance of FreeBSD (/usr/src/tools).

src-usrbin release=cvs

User utilities (/usr/src/usr.bin).

src-usrsbin release=cvs

System utilities (/usr/src/usr.sbin).

www release=cvs

The sources for the World Wide Web data.

cvs-crypto release=cvs

The export-restricted cryptography code.

src-crypto release=cvs

Export-restricted utilities and libraries from outside the FreeBSD project, used relatively unmodified (/usr/src/crypto).

src-eBones release=cvs

Kerberos and DES (/usr/src/eBones).

src-secure release=cvs

DES (/usr/src/secure).

distrib release=self

The CVSup server's own configuration files. Used by CVSup mirror sites.

gnats release=current

The GNATS bug-tracking database.

mail-archive release=current

FreeBSD mailing list archive.

www release=current

The installed World Wide Web data. Used by WWW mirror sites.

18.3.3.6. Announcements, Questions, and Bug Reports

Most FreeBSD-related discussion of CVSup takes place on the FreeBSD technical discussions mailing list <freebsd-hackers@FreeBSD.ORG>. New versions of the software are announced there, as well as on the FreeBSD announcements mailing list <freebsd-announce@FreeBSD.ORG>.

Questions and bug reports should be addressed to the author of the program at cvsup-bugs@polstra.com.


FreeBSD Handbook : The Cutting Edge: FreeBSD-current and FreeBSD-stable : Synchronizing Source Trees over the Internet : CVSup
Previous: CTM
Next: Using make world to rebuild your system