Jonathan M. Bresler
Fri Nov 1 13:54:09 PST 1996
Announcing CVSup 13.5
Release 13.5 of CVSup, the CVS-aware network distribution system, is now
Where to Get CVSup
CVSup is free software. It is available from the following FTP sites:
ftp://ftp.polstra.com/pub/FreeBSD/CVSup/ (slow; avoid if possible)
Full sources as well as FreeBSD binaries are available:
cvsup-bin-13.5.tar.gz FreeBSD static binaries for the client
cvsupd-bin-13.5.tar.gz FreeBSD static binaries for the server
cvsup-13.5.tar.gz Sources **
MD5 signatures for these files are:
MD5 (cvsup-bin-13.5.tar.gz) = 6ee6a4b335c18d0d00b2f140928d6a3d
MD5 (cvsupd-bin-13.5.tar.gz) = 005791d8483570f2a093b7e202876d95
MD5 (cvsup-13.5.tar.gz) = 82c6dc9290fb1ce055a6027670af57f6
An updated port will appear in the FreeBSD ports and packages
The FreeBSD package now depends only on the "modula-3-lib" package,
a subset of the Modula-3 installation consisting of only the shared
libraries. Because of this, you can now install and use the "cvsup"
package in a reasonable amount of disk space. The package is much
smaller than the statically linked binary distribution, so updates
to new versions of CVSup should be more convenient now. The package
is the recommended distribution for binary-only users. The static
binary distributions will probably be phased out soon.
If you want SOCKS support, you must also install the "modula-3-socks"
port or package:
SOCKS is supported only under FreeBSD, and only with dynamically linked
executables. The static binary distributions do not support SOCKS.
** If you wish to build CVSup from the sources, be sure to read the
discussion further on in this announcement.
What Has Changed Since the Previous Release?
Support SOCKS, using a new add-on library in ports/lang/modula-3-socks.
Add command line options "-z" and "-Z" for directly controlling the
"compress" option, overriding what is in the supfile. Likewise, add
"-d" and "-D" for overriding the "delete" option.
Make the client retry automatically when transient failures occur.
This is done only in batch (non-GUI) mode. Retries use randomized
exponential backoff. The retry delay starts out at about 5 minutes,
and increases to a maximum of about 2 hours.
Programs are now built fully dynamically linked by default. If
"-DSTATIC" is in the "M3FLAGS" environment variable, then they are
linked fully static. If "-DM3STATIC" is present, then the Modula-3
libraries are linked statically, and the system libraries are linked
dynamically. (This used to be the default.)
It is now possible to build the client without the GUI, by adding
"-DNOGUI" to the "M3FLAGS" environment variable.
What Is CVSup?
CVSup is a software package for distributing and updating collections
of files across a network. CVSup is specifically tailored to
distributing CVS repositories. By taking advantage of the special
properties of the files contained in CVS repositories, CVSup is
able to perform updates much faster than traditional systems. It is
especially valuable for people with slow Internet connections.
CVSup parses and understands the RCS files making up a CVS repository.
When updates occur, CVSup extracts new deltas directly from the RCS
files on the server and edits them into the client's RCS files.
Likewise, CVSup notes the addition of new symbolic tags to the files
on the server and sends only the new tags to the client.
CVSup is able to merge new deltas and tags from the server with deltas
and tags added locally on the client machine. This makes it possible
for the client to check local modifications into his repository
without their being obliterated by subsequent updates from the server.
Note: Although this feature is fully implemented in CVSup, it will
probably not be practical to use it until some small changes have been
made to CVS.
In addition to distributing the RCS files themselves, CVSup is able to
distribute specific checked-out versions. The client can specify a
symbolic tag, a date, or both and CVSup will extract the appropriate
versions from the server's CVS repository. Checked-out versions do
not need to be stored on the server since CVSup can extract any
version directly from the CVS repository.
If the client has an existing checked-out tree, CVSup will apply the
appropriate edits to update the tree or transform it into the
requested version. Only the differences between the existing version
and the desired version are sent across the network.
CVSup uses lightweight processes (threads) to implement a streaming
protocol across the network. This completely eliminates the delays
associated with the lock-step, request-reply form of communication
used by many existing protocols, such as sup and NNTP. Information
is transferred at the full available speed of the network in both
directions at once. Network latency and server response delays
are rendered practically irrelevant.
CVSup uses the "zlib" compression package to optionally compress all
communications. This provides an additional 65-75% compression, on
top of the diff-based compression already built into CVSup.
For efficiency, all processing is built into the CVSup package
itself. Neither the client nor the server executes any other
For further information about how CVSup works, see the "Blurb" document
in the CVSup distribution.
Using CVSup to Maintain FreeBSD Sources
CVSup servers are currently running at the following FreeBSD mirror
Using CVSup, you can easily receive or update any of the standard
FreeBSD source releases, namely, "cvs", "current", and "stable".
The manual page for cvsup(1) describes how to do that.
If all goes well, additional servers will come on-line soon.
Building CVSup from the Sources
CVSup is written in Modula-3, a modern, compiled, object-oriented
language. Modula-3 integrates threads, exceptions, and garbage
collection, providing an ideal vehicle for this sort of application.
Without Modula-3, CVSup would almost certainly not exist today.
If you wish to build CVSup from the sources, you will first need
to install the free Modula-3 compiler and runtime libraries from
DEC SRC. A port is available in the FreeBSD ports collection, in
"lang/modula-3". The corresponding package is, of course, available
in the packages collection.
You will also need version 1.0.4 or later of the "zlib" library.
In recent versions of FreeBSD-2.2-current, this library has been
incorporated into the system sources, in "src/lib/libz". Prior
to that, a FreeBSD port was available in "devel/libz" of the FreeBSD
ports collection. For other sources of this library, see the "Install"
file. Do not try to use versions earlier than 1.0.4.
You will also need Poul-Henning Kamp's "libmd" library. It is a
standard library on FreeBSD systems.
I intend for CVSup to be portable to most POSIX systems. The
present release has only been tested under FreeBSD versions 2.1
and later. Primarily because of packaging problems, this release
of CVSup probably won't build out-of-the-box on other systems.
Among other things, it relies on Poul-Henning Kamp's "libmd"
encapsulation of the MD5 subroutines. The library itself appears
to be quite portable, but its Makefiles are BSD-specific. There
are probably some other FreeBSD-specific things in CVSup that have
not been found yet.
Anybody who succeeds in porting CVSup to other systems is encouraged
to send his changes to <cvsup-bugs at polstra.com>. As long as the
changes are reasonably palatable, they will be incorporated into
future CVSup releases.
CVSup uses several POSIX-specific functions which may make it more
of an effort to port the package to non-POSIX systems such as Win32.
These functions include mmap, fork, syslog, stat, and chmod, among
Status of this Release
CVSup has seen heavy use and has been quite stable for months.
Like all software, though, it is not perfect. Please be prepared
to find bugs -- without a doubt, there are some. Please report
bugs to <cvsup-bugs at polstra.com>.
John Polstra, <jdp at polstra.com>
Copyright 1996 John D. Polstra
More information about the freebsd-announce