opening it up with Common Lisp

Favorite weblogs

Lisp Related

Bill Clementson

Finding Lisp


Planet Lisp



Talking Points Memo

This Modern World

Working for Change

Other home


Recent Readings

Book review: Darwinia
Reviewed: Friday, August 11, 2006

Summer reading: Spin
Reviewed: Saturday, August 5, 2006

Reviewed: Tuesday, July 18, 2006

the Omnivoire's Delimma
Reviewed: Wednesday, July 12, 2006

the Golem's Eye
Reviewed: Wednesday, May 31, 2006


announce: system-check (beta)
Tuesday, June 6, 2006

Enterprise Lisp has been rumbling and grumbling slowly to life around me. Today I'm announcing the first beta of System-check, an asdf-upgrade like facility, that will eventually integrate with an improved ASDF-Install-tester and other cool things. The idea behind system-check is that it's easier to centralize the testing of Lisp libraries that it is to get all of the library developers to agree on versioning schemes and the like. Therefore Enterprise Lisp will regularly check on all ASDF installable systems and

  • make sure the system can be downloaded,
  • make sure that the GPG signature can be retrieved,
  • make sure that the signature file is valid,
  • make sure that the tar archive can be decompressed and
  • that the archive contains a valid system definition
  • that can be properly loaded into a lisp system

This will be coupled with an improved and distributed ASDF-Install-tester that can go on to make sure that systems actually do install on a variety of Lisps and environments.

System-Check is the client that you can run to see if your systems are up to date. Here is an example session (in OpenMCL). First, we load system-check. It displays instructions when it finishes loading:

? (asdf:oos 'asdf:load-op 'system-check)
; loading system definition from user-home:darcs;asdf-systems;system-check.asd.newest into #<Package "ASDF0">

;; System-check helps keep your ASDF-Installable systems up to date 
;; by communicating with via HTTP. Enterprise Lisp 
;; checks ASDF-Installable systems regularly to make sure that they 
;; work properly and install correctly.  
;; System-check has three main entry 
;; 1. update - checks all of your ASDF-Installed systems against the 
;; most recent available version and lets you select which ones to 
;; 2. gather - performs the same check as update but returns the 
;; results as a 
;; 3. check-system - performs a check on a single 
;; More information can be found in the documentation or at 
;; System-check can look for systems in several different 
;; * installed-systems (used by default) - returns a list of systems 
;; that seem to have been ASDF installed (see its documentation for 
;; * installable-systems - returns a list of all of the available 
;; systems (using 
;; Both of these functions take the keyword argument 
;; :only-asdf-installable?. If this is true, then System-check will 
;; query the CLiki to see if the system is ASDF installable.  

We cut to the chase and call the update function.

? (system-check:update)
Searching for systems.
; loading system definition from /Users/gwking/.asdf-install-dir/systems/cl-difflib.asd into #<Package "ASDF1">
; registering #<SYSTEM :CL-DIFFLIB #x84E1786> as CL-DIFFLIB
; loading system definition from /Users/gwking/.asdf-install-dir/systems/uffi.asd into #<Package "ASDF1">
; registering #<SYSTEM UFFI #x8514DE6> as UFFI

Checking 59 systems...........................................................

  4    we-are-latest  (local system has more recent changes than the remote)
  xmls                          mk-defsystem                  
  cl-prevalence                 cl-html-diff                  

  6     both-changed  (system has modifications locally and remotely)
  system-check                  metatilities                  
  lml2                          defsystem-compatibility       
  cl-graph                      cl-containers                 

  8            error  (the server was unable to check the system)
  split-sequence                net-telent-date               
  ironclad                      clx                           
  cl-store                      asdf-install                  
  asdf-binary-locations         arnesi                        

 11      need-update  (remote system has changes)
  trivial-http                  tinaa                         
  moptilities                   metacopy                      
  metabang-bind                 lift                          
  cl-variates                   cl-mathstats                  
  cl-html-parse                 asdf-system-connections       

 30               ok  (local system is up to date)
  xlunit                        wilbur-ext                    
  uffi                          trivial-configuration-parser  
  s-xml-rpc                     s-xml                         
  s-utils                       s-sysdeps                     
  s-http-server                 s-http-client                 
  s-base64                      rt                            
  puri                          md5                           
  lw-compat                     kmrcl                         
  html-encode                   diff                          
  contextl                      clsql                         
  closer-mop                    cl-utilities                  
  cl-fad                        cl-dot                        
  cl-difflib                    cl-base64                     
  cl-ajax                       cffi                          
  asdf-upgrade                  anaphora                      

Now that we've seen the report, we're asked what we want to update and ASDF-Install takes away the show.

We'll now ask which kinds of systems you want to update. 
You will be able to confirm before the update process 

11 systems need to be updated. Do you want to update them? (y or n)  y

Marking these systems for update: araneida, asdf-system-connections, cl-html-parse, cl-mathstats, cl-variates, lift, metabang-bind, metacopy, moptilities, tinaa, trivial-http.

6 systems are changed locally and remotely. Do you want to update them? (y or n)  n

Updating 11 systems
Install where?
0) System-wide install: 
   System in /Users/gwking/.asdf-install-dir/systems/site-systems/
   Files in /Users/gwking/.asdf-install-dir/systems/site/ 
1) Personal installation: 
   System in /Users/gwking/.asdf-install-dir/systems/
   Files in /Users/gwking/.asdf-install-dir/site/ 
2) Abort installation.
 --> 1
;;; ASDF-INSTALL: Downloading 531636 bytes from to araneida.asdf-install-tmp ...

"gpg: Signature made Fri Dec  2 12:55:13 2005 EST using DSA key ID 5E55AFEB" 
"[GNUPG:] ERRSIG 19876FCE5E55AFEB 17 2 00 1133546113 9" 
"gpg: Can't check signature: public key not found" 
> Error in process listener(1): No key found for key id 0x#1=(19876FCE5E55AFEB 17 2 00 1133546113 9). Try some command like 
>                                 gpg  --recv-keys 0x#1#
> While executing: #<Anonymous Function #x8426CE6>
> Type :POP to abort.
Type :? for other options.
1 > :r
0. Return to break level 1.
2. Don't check GPG signature for this package
3. Retry GPG check (e.g., after downloading the key)
4. Return to toplevel.
6. Reset this process
7. Kill this process
1 > (:c 2)
Invoking restart: Don't check GPG signature for this package
;;; ASDF-INSTALL: Installing araneida.asdf-install-tmp in /Users/gwking/.asdf-install-dir/site/, /Users/gwking/.asdf-install-dir/systems/
;;; and so on...

We can also check the status of a single system. I'll turn on the verbose mode so that you can see what gets passed back and forth.

? (system-check:check-system 'anaphora :verbose? t)
Signature: (:SYSTEM :ANAPHORA :SIGNATURE (("anaphora.asd" . 3287421247)
 ("packages.lisp" . 3287421247) ("early.lisp" . 3287421247) ("symbolic.lisp" . 3287421247) 
("anaphora.lisp" . 3287421247)) 
:IMPLEMENTATION "openmcl-1.0-darwin-powerpc" 
:VERSION "0.1" 
  Response: 200
  Headers: ((:DATE . "Wed, 07 Jun 2006 16:24:23 GMT") (:SERVER . "Apache/1.3.33 (Darwin) mod_lisp/2.43") 
(:CONTENT-LENGTH . "772") (:REMOTE-IP-ADDR . "") (:REMOTE-IP-PORT . "30528") (:SCRIPT-FILENAME . "/Library/WebServer/Documents/compare.lsp") (:SERVER-IP-ADDR . "") (:SERVER-IP-PORT . "80") (:SERVER-PROTOCOL . "HTTP/1.0") (:METHOD . "POST") 
(:URL . "") (:SERVER-ID . "metabang") (:SERVER-BASEVERSION . "Apache/1.3.28") (:MODLISP-VERSION . "2.43") (:HOST . "") (:USER-AGENT . "simple HTTP for Common Lisp")
 (:CONNECTION . "close") (:CONTENT-TYPE . "x-www-form-urlencoded"))

System-check and the Enterprise Lisp system checker are both in beta at the moment. I've tested on several lisps but expect that problems and edge cases remain. Please let me know if you try system-check and it fails. I'm also working on some improvements to ASDF-Install so that it can behave more reasonably when installing multiple systems and with improving the back and forth between the client and the server. Enterprise Lisp is all about making Lisp easier for everyone, so please let me know if anything seems awry.


Home | About | Quotes | Recent | Archives

Copyright -- Gary Warren King, 2004 - 2006