Running Hunchentoot on ABCL

Overview

Getting Hunchentoot to work with ABCL for abcl-1.1.0-dev trunk needs a patch to set socket timeouts. Using Hunchentoot with SSL will require a patch to CFFI.

Installation

  1. Install Quicklisp if it isn't already installed

    CL-USER> (load "http://beta.quicklisp.org/quicklisp.lisp")

  2. Then add to "~/.abclrc":

    #-quicklisp (let ((ql #P"~/quicklisp/setup.lisp")) (when (probe-file ql) (load ql)))

  3. Restart ABCL.

  4. Simply use Quicklisp to install Hunchentoot

    CL-USER> (ql:quickload :hunchentoot)

  5. Patch Hunchentoot for socket timeouts, and CFFI for access to CL+SSL.

Issues

Hunchentoot uses CFFI to access the OpenSSL libraries, for which two issues might arise:

  1. If you encounter problems loading the jna.jar artifact for CFFI please patch your ~/.abclrc. We're working on figuring out why the default code doesn't work in all instances, but Maven Aether is proving to be quite the counter-intutive beast lacking valid documentation.
  2. When loading Hunchentoot from the compiled fasls (i.e. the second time you run Hunchentoot on a given machine), you will be presented with restarts asking whether you wish to try recompiling classes in the org.armedbear.lisp.dynamic package which provide the callback interfaces. Simply choosing the interactive restart (twice, once for each needed callback), will enable CL+SSL to load.

Patches

The following patches currently need to be applied to the Quicklisp installed software.
Quicklisp system Patch
Hunchentoot for socket timeouts hunchentoot-1.2.6 hunchentoot-1.2.6-abcl-20121020a.patch
CFFI for access to CL+SSL cffi_0.10.7.1 cffi-abcl-20121021a.patch

To apply a given patch, one has to navigate to the directory in which Quicklisp stores the Lisp for the system which will have the parent directory ~/quicklisp/dists/quicklisp/software/. From the directory of the appropiate software (here hunchentoot-1.2.6 and cffi_0.10.7.1) apply the patch via

cmd$ patch -p1 < LOCATION-OF-PATCH

where location-of-patch is replaced with a path which resolves to the location of the patch where you have downloaded it to the local filesystem.

If you are connected to a SLIME session, one can use the Emacs interactive function M-x slime-browse-system to visit the appropiate system in dired mode where it is easy to copy-and-paste the rather long directory names.