"You make it fun; we'll make it run"


The Coral Content Distribution Network

•• Project home page
•• Brief overview and news
•• Coral Wiki and FAQ
•• Mailing Lists
•• Publications and people

Browser Plugins

Click here for information regarding browser plugins.

Source Code

No official release for Coral is yet available, but you are welcome to check out the latest version from the CVS repository. This "alpha" version is experimental and under active development.

Coral is implemented in C++ and is free software, licensed under the GPLv2. We have successfully run this implementation on Linux, OpenBSD, FreeBSD, and Mac OS X.

Coral currently requires the following:

To install the individual components:


Coral requires the async I/O and RPC libraries supplied by SFS. Note that you only need to build SFS in order to link against the libraries it provides. You do not need to run the SFS file system, nor follow its instructions regarding adding an sfs user or group (as this is only required for running the file system).

Obtain SFS as documented at
fs.net. Please only use the anonymous CVS repository to get the latest version of SFS. Coral will not work with the last "released" version of SFS 0.7.2.
   ~> cvs -d :pserver:[email protected]:/cvs login
   CVS password:  press return 
   ~> cvs -z5 -d :pserver:[email protected]:/cvs co -P sfs1
Coral will likely not build against older versions of SFS (at least up to 0.7.2). To build SFS you'll need a few tools:
  • GCC 2.95 or 3.x (not 2.96 or 4.x)
  • autoconf, automake, etc.
In order to do an "out of place" build, do the following steps. (The SFS build process is documented in depth at the SFS home page). To avoid needing to add the sfs, remove the call to "SFS_USER" in configure.in (line 40). Then, in the sfs source directory:
   ~/sfs1/> ./setup
If your home directory is mounted remotely (such as over NFS), you might want to build the source in some different build directory on your local disk. If you are using a stand-alone workstation, this step is not necessary. From this (optional) build-directory:
   ~/sfs1-bld/> ~/sfs1/configure [--with-dmalloc] 
   ~/sfs1-bld/> make
Certain BSD users may use gmake instead of make. The dmalloc option helps to debug memory issues. It can be downloaded at the dmalloc site.

Berkeley DB

Follow directions at the
BerkeleyDB 4.x download site on how to install Berkeley DB, needed for Coral's stable storage.


Public anonymous CVS access

Coral's anonymous CVS repository is updated hourly. To obtain and build the latest source code, make sure that your environment variable CVS_RSH is set to ssh, then do the following. (Please note that the last letter of the coral directory's name is the number one, as opposed to the letter ell.)

   ~> cvs -d :pserver:[email protected]:/cvs login
   CVS password:  press return 
   ~> cvs -z5 -d :pserver:[email protected]:/cvs co -P coral1

   ~> cd coral1
   ~/coral1> ./setup
   ~/coral1> ./configure [--with-dmalloc] --with-sfs=sfs1-bld --with-db
   ~/coral1> make
As before, configure can be run in a separate build directory if desired. The with-db parameter can also take an optional argument that specifies some alternate location for the database files if they are not installed system-wide. By default, this does not build coralwebsrv; to do that,
   ~/coral1> cd websrv
   ~/coral1/websrv> make

Yes, it's that slow.

Now you are finally ready to start playing!

Read/Write CVS access

Getting read/write access requires an account on the SCS file servers, so this route is probably open only to SCS members and affiliates.

First, make sure you are a part of the coraldev group by editing the /etc/group file on ludlow. Now check out the sources from ludlow:

   ~> cvs -d [email protected]:/disk/u1/coralcvs/ co -P coral1
Then, just follow the same build instructions as for anonymous CVS access.

Running Coral

The source directory includes a number of configuration files in coral1/config. Once you build Coral, you can launch the peer-to-peer indexing daemon by executing (in the base build directory):

   ~/coral1> ./corald/corald -S /tmp/corald.sock -C ./config/corald.conf
pointing to the appropriate executables and configuration file. By default, this runs the coral daemon by itself (that is, not connected to any other peer node.)

If you have multiple peers, you can "link" them together into a network very easily: Simply supply the daemon with the IP address of another running machine, either under WellKnownHost IP:port in corald.conf or on the command line via -j IP:port. Note that multiple well-known hosts may be provided.

To run the Coral web proxy, supply coralwebsrv with the same sockname as given to the corald above:

   ~/coral1> ./websrv/coralwebsrv -S /tmp/corald.sock -C ./config/websrv.conf 
By default, this runs the web server on port 8090. To run it on another port, like 80, change the WebSrvPort option in the configuration file. We recommend against modifying unknown options in the configuration files, otherwise.

Also, the web proxy writes its cache to the directory /tmp/coral-cache by default, which it creates if it is not present. You can change this by setting the environment variable "CORAL_CACHE" to a different directory before running, if desired.

To run the Coral DNS server, supply coraldnssrv with the same sockname as given to the corald above:

   ~/coral1> ./dnssrv/coraldnssrv -S /tmp/corald.sock -C ./config/dnssrv.conf 
You must first, however, modify the PrimaryHostname and SecondaryHostname options in the dns configuration file to use your appropriate domain name.

More detailed documentation will be forthcoming.


Coral uses the Kademlia routing metric (Petar Maymounkov), and it is built atop the
SFS asynchronous I/O and RPC libraries. Coral's web proxy uses some HTTP parsing code from OKWS (Max Krohn). Coral currently uses the AppManager interface to help administer the network (Ryan Huebsch).