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 was the predecessor to 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, however, because CVSup is both faster and more flexible.
Installation
The easiest way to install CVSup if you are running FreeBSD 2.2 or
later is to use either from the FreeBSD or the corresponding , 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 it requires a version of
the C library that does not yet exist in FreeBSD-2.1.{6,7}. You can easily
use , 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 , both the package and the port require that the
Modula-3 runtime libraries be installed. These are available as the
port and the 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 either the USA distribution site:
(client).
(server).
or the German mirror:
(client).
(server).
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:
FreeBSD-2.2 or later: static binary, port, or package
FreeBSD-2.1.6, 2.1.7: static binary or port
FreeBSD-2.1.5 or earlier: static binary
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 . These examples are also available
from 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 .
Which files do you want to receive?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.
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 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.
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-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-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-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
X11 software.
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 other 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-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-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.
src-sys release=lite2
The CVS repository for the lite2 kernel merge.
src-sys release=smp
The CVS repository for the SMP project.
www release=current
The installed World Wide Web data. Used by WWW mirror sites.
Announcements, Questions, and Bug Reports
Most FreeBSD-related discussion of CVSup takes place on the
&a.hackers;. New versions of the software are announced there, as
well as on the &a.announce;.
Questions and bug reports should be addressed to the author of the
program at .