SML/NJ Project Howto

This is a collection of hints and pointers to help new users of SourceForge and CVS to use the facilities of the SML/NJ project. For general information on using SourceForge, see the SourceForge Documentation Manager and the "Getting Started with SourcForge" link on that page under the heading "General Documentation".

Note: loginname stands for the SourceForge user login name.

Project directory

The SML/NJ project directory path is:
This directory contains subdirectories htdocs and cgi-bin.

Logging in to your sourceforge user account

   ssh -l loginname
Your home directory will look something like: /home/users/m/ma/macqueen.

You can abbreviate the command to (e.g.)

   ssh sf-shell
by defining sf-shell as a host alias in your .ssh/config file:
    Host = sf-shell
    HostName =
    User = loginname

Moving files to sourceforge

SourceForge does not support ftp. You can copy files (localfile) to SourceForge using scp. For instance, you can copy file localfile to your sourceforge home directory by executing a command like:
   scp localfile
or simply
   scp localfile sf-shell:
if you have defined host sf-shell in your ssh config file as illustrated above. Similarly, to copy a file or files to the top-level directory of the web site, you could execute the command:
   scp localfile sf-shell:/home/groups/s/sm/smlnj/htdocs

Setting up CVS access

  1. In your user Account Maintenance page, go to "Shell Account Information" and click [Edit Keys] next to "CVS/SSH Shared Keys". Insert contents of ~/.ssh/ file on your local machine into the text box. Make sure that when you cut and paste your key that it remains a single line of text! Sometimes spurious line breaks are added when your key is printed, and these will prevent CVS from working. You can verify that it worked by checking the contents of the .ssh/authorized_keys file in your SourceForge home directory.

  2. Set CVS_RSH:
         export CVS_RSH=ssh

  3. Run ssh-agent and ssh-add for convenience, to avoid having to repeatedly type in your ssh passphrase or SourceForge password:
         eval `ssh-agent`
         ssh-add -p <<EOF
         your pass phrase
    These last three commands can be, and probably should be, added to your .profile or .login file. "your pass phrase" refers to the pass phrase that you gave when you created your ssh identity files with ssh-keygen. Note that some versions of ssh do not support the -p flag, in which case you will have to run ssh-add interactively and type in your pass phrase. Unfortunately, the version of ssh available on the SourceForge shell servers is one of these, so ssh-add has to be run manually after login.

  4. Create a host entry for in your ssh config file (.ssh/config) like the following (replacing loginname with your SF user name, as usual):
        Host = sf-smlnj
        HostName =
        User = loginname
    This defines a standard alias for the cvs host that agrees with that used the CVS/Root files (in htdocs, for instance).

  5. Set CVSROOT:
         export CVSROOT=sf-smlnj:/cvsroot/smlnj
    Note the use of the alias "sf-smlnj" defined in the config file from the previous item.

  6. Now you can execute cvs commands without needing -d arguments, passwords, or pass phrases, e.g.:
         cvs update bugs
In order to execute cvs commands on the SourceForge shell server, you should run ssh-keygen from your SF account to generate a new ssh key, and then add that key to the end of your .ssh/authorized_keys file. You can also define CVS_RSH and run ssh-agent in your .profile at SourceForge to make things simpler.

Updating web pages

The htdocs directory in the smlnj project home directory (/home/groups/s/sm/smlnj/htdocs) contains the web pages for the project. These web pages can be accessed using either of the following URLs:
The htdocs directory is a CVS working directory created by checking out the htdocs module from the project CVS repository. The Bell Labs copy (in /home/sml/Doc/WWW/smlnj) is also checked-out from the repository ("htdocs" and "smlnj" are both aliases of the pages module in the repository). If you have extensive edits to perform on the web pages, we recommend that you check out your own private working copy, make the edits, test them, and commit the changes. After the changes are commited, "cvs update" must be performed in the two directories
/home/groups/s/sm/smlnj/htdocs (at SF)
/stage/w3serv/ (at U of C)
to synchronize them with the changed repository. You can do the update on the htdocs directory yourself as described in the next paragraph, but you may need to send mail to Bell Labs to have the update done on that copy until we set up automatic email notifications of commits to the web pages repository.

To actually update the pages at SF, you login to your SF account and do (e.g.)

   cd /home/groups/s/sm/smlnj/htdocs
   ... set up cvs ...
   export CVSROOT=sf-smlnj:/cvsroot/smlnj
   cvs update htdocs
The definition of host sf-smlnj for your SF shell account should look like this:
   Host = sf-smlnj
   Hostname = cvs1
   User = username
Note the Hostname definition; "cvs1" is the local name for the cvs server at SF.

Dave MacQueen
Last modified: Thu Mar 20 22:57:22 CST 2003