Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 14 Dec 1996 11:58:54 -0800
From:      John Polstra <jdp@polstra.com>
To:        freebsd-hackers@freebsd.org
Subject:   CVSup 14.0 is now available
Message-ID:  <199612141958.LAA19998@austin.polstra.com>

next in thread | raw e-mail | index | archive | help
                     Announcing CVSup 14.0
		     ---------------------
Release 14.0 of CVSup, the CVS-aware network distribution system, is now
available.

Where to Get CVSup
------------------
CVSup is free software.  It is available from the following FTP sites:

  ftp://freefall.freebsd.org/pub/CVSup/
  ftp://ftp.polstra.com/pub/FreeBSD/CVSup/     (slow; avoid if possible)

Full sources as well as FreeBSD binaries are available:

  cvsup-bin-14.0.tar.gz		FreeBSD static binaries for the client
  cvsupd-bin-14.0.tar.gz	FreeBSD static binaries for the server
  cvsup-14.0.tar.gz		Sources **

MD5 signatures for these files are:

  MD5 (cvsup-bin-14.0.tar.gz) = 7a5cef5919d28979d6e33dcf7b2898c0
  MD5 (cvsupd-bin-14.0.tar.gz) = 5c29e36e339582693f2bc2db23254449
  MD5 (cvsup-14.0.tar.gz) = 331bb5c114bac2053eeaa46eaa8f19c3

An updated port will appear in the FreeBSD ports and packages
collections soon:

  ftp://ftp.freebsd.org/pub/FreeBSD/ports-current/net/cvsup/
  ftp://ftp.freebsd.org/pub/FreeBSD/packages-current/net/cvsup-14.0.tgz

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:

  ftp://ftp.freebsd.org/pub/FreeBSD/ports-current/lang/modula-3-socks/
  ftp://ftp.freebsd.org/pub/FreeBSD/packages-current/lang/modula-3-socks-1.0.tgz

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.

Should You Bother to Upgrade?
-----------------------------
Yes, you should.  This release has many enhancements over the previous
release, not to mention a few non-negligible bug fixes and security
precautions.  People running servers are particularly urged to upgrade.
Clients won't be able to take advantage of the enhancements unless their
servers support them.

Compatibility with Previous Releases
------------------------------------
There are a couple of very minor compatibility issues which could affect
a few users upgrading from an earlier release.

Clients:  The default for the "base" directory has changed from "/usr"
to "/usr/local/etc/cvsup".  Practically everybody specifies the base
explicitly in their supfiles, so this change will have no impact for
most people.  If you have been using the default value, you will need to
add a line "*default base=/home" to your supfile, or specify "-b /home"
on the cvsup command line.

Servers:  The "hostbase" is no longer taken from the client's supfile.
It is now controlled on the server host.  On the FreeBSD project,
"hostbase=/home" was always used in the past.  People operating servers
will need to specify "-b /home" on the cvsupd command line to get the
same effect.  Alternatively, move your server configuration files from
"/home" to the new default location, "/usr/local/etc/cvsup".  (As
before, most of the configuration files appear under a subdirectory
named "sup".)

What Has Changed Since the Previous Release?
--------------------------------------------
CVSup now uses Tridgell & Mackerras' "rsync" algorithm for updating
non-RCS files.  It is enabled by default, though it can be turned
off for individual collections by specifying the "norysnc" keyword.

The supfile can now have special collections named "*default" to
specify default parameters for subsequent collections.

The "base" and "host" supfile settings can now be overridden on
the client's command line.

The client now supports multiple "refuse" files:  a global one
which applies to all collections; a per-collection one; and one
that is specific to a release+tag within its collection.

There is now a client option to specify a lock file, to prevent
multiple cvsup processes from interfering with each other.  It
is useful when the client is run periodically from cron, to avoid
trouble if a job runs unusually long because of network problems.

The client now refuses to create the "base" or "prefix" directory
for any collection.  Instead, it emits a diagnostic if either
directory doesn't exist.  As a special case, if the "prefix" is
a symbolic link pointing to a nonexistent file named "SKIP", the
associated collection will be skipped without complaint.

The default "base" for the client is now "/usr/local/etc/cvsup".

Both the server's and client's "prefix" directories are now
interpreted relative to their base directories, if they are not
absolute pathnames.

The client now silently refuses to set the setuid, setgid, and
sticky bits in files that it creates or updates.

The client now does a better job of cleaning up its temporary
files when it is killed by a signal.

The client now tries harder to look up the IP address of the
server host.

There is a new "keywordprefix" keyword for the server's "releases"
file.  It specifies a prefix that is used when constructing the
pathnames generated by the Header and Source RCS keywords.  This
allows the actual repositories to be in different places on
different machines, while still producing identical expansions
of the RCS keywords.

The server will now accept connections from certain "friends"
listed in a configuration file, regardless of whether the maximum
number of simultaneous connections has been exceeded.

The server can now do its logging via syslog.

The server log messages have been cleaned up quite a bit.

The server now logs any repository problems that it notices,
e.g., unparsable RCS files, non-RCS files in the Attic, and so
forth.

The server now ignores any "hostbase" specified in the client's
supfile.  A new server argument "-b base" specifies the base
directory.  The default is now "/usr/local/etc/cvsup".

The server now validates all collection names to make sure they
contain no slashes and are not equal to "." or "..".

The server now checks for certain errors earlier, before becoming
a daemon.

All of the programs except the server now install into
"/usr/local/bin".  The server still installs into "/usr/local/sbin".

Fixed a bug in the ordering of the "branches" list in the RCS file,
which on very rare occasions caused a "fixup" to be required.

Fixed a bug which could cause the client to hang trying to flush
its network buffers after the user pressed the "stop" button in
the GUI.

Fixed a bug that caused the client to complain "file exists" when
trying to create directories leading up to a new file, if the
pathname contained a "." (current directory) component in it.
This prevented "upgrade ." from being used in the server collection
list files.  Unfortunately, since it's a client-side bug, such
lines still should not be used for a while, until older releases
of the client have evaporated away.

Fixed a bug which produced a misleading error message when a
failure occurred in making the directories leading up to the
temporary file that is used for the list file in the client.

When bad tokens or protocol errors are encountered, the offending
text is no longer included in the error message.  Sometimes it
contained voluminous amounts of garbage.

Messages reporting errors in the client-side list files are
accompanied by line numbers now.

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.

To update non-RCS files, CVSup uses the highly efficient rsync
algorithm, developed by Andrew Tridgell and Paul Mackerras.

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
programs.

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
sites:

    USA:
	cvsup.freebsd.org
	cvsup2.freebsd.org

    The Netherlands:
	cvsup.nl.freebsd.org

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 FreeBSD-2.1.6 and later releases, 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.

Portability Issues
------------------
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 is 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@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
others.

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@polstra.com>.

--
   John Polstra                                       jdp@polstra.com
   John D. Polstra & Co., Inc.                Seattle, Washington USA
   "Self-knowledge is always bad news."                 -- John Barth



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199612141958.LAA19998>