RaspbianをインストールしたRaspberry PiでQuicklispを使いたかったのだけど、提供されているLispパッケージでは、
CLISP → quicklisp.lisp のロードでSIGSEGVエラー
ECL → quicklisp.lispをインストールできたが、setup.lispでエラー(だったかな?)
となって、どちらもNGだった。
困ったなーと、Google検索していて見つけたのが、こちらのページ。
Installing Clozure Common Lisp on the Raspberry Pi
http://lispm.dyndns.org/ccl
このページを参考に、Clozure CL(以下CCL) と QuicklispをRaspberry Piにインストールし、
Webサーバーであるhunchentootを動かしてみた。
以下、hunchentootを動かすまでの手順。
前提
Raspberry PiにインストールしたOSはRaspbian
ビルドに必須のパッケージsubversion, m4を追加でインストール済み
インストール先は ~/opt
CCLインストール
$ mkdir ~/opt
$ cd ~/opt
$ svn co http://svn.clozure.com/publicsvn/openmcl/trunk/linuxarm/ccl
$ cd ccl
cclディレクトリ直下に armcl がある。
'armcl' is an executable with the CCL runtime.
実行できる。
$ ./armcl
Welcome to Clozure Common Lisp Version 1.10-dev-r15791M (LinuxARM32)!
? (quit)
このままだとsoft floatsなので、hard floatsにコンパイルオプションを変更してビルドする。
$ cd lisp-kernel/linuxarm/
$ emacs float_abi.mk → ◆どのように変更すれば良いかは見れば分かる
$ make clean
$ make
少し待つ。こちらのmakeはそれほど時間はかからない。
makeが終ったら、CCLをフルビルドする。
$ cd ../../ → cclディレクトリへ
$ ./armcl
Welcome to Clozure Common Lisp Version 1.10-dev-r15791M (LinuxARM32)!
? (ccl:rebuild-ccl :full t)
しばらく待つ。
完了したら (quit)。
上記ブログによると、Saving a CCL Application が便利のようだけど、今は不要。
Quicklispインストール
Quicklispをダウンロード。
curlが必要。
$ cd ~/opt
$ curl http://beta.quicklisp.org/quicklisp.lisp >quicklisp.lisp
Quicklispをインストール。
$ cd ccl
$ ./armcl
? (load "quicklisp.lisp")
? (quicklisp-quickstart:install)
初期化ファイル .ccl-init.lispで起動時にQuicklispを読み込むようにする。
? (ql:add-to-init-file)
これで完了。
Slimeインストール
Emacsからslimeを使えるようにする。
$ ./armcl
起動するまで少々時間がかかる。
(Quicklispのパッケージの依存関係でも調べているのだろうか?)
? (ql:quickload "quicklisp-slime-helper")
こんなパッケージがあったのかー!知らなかった。
ロードが完了したら、emacsの初期化ファイルに以下を書く。
(load (expand-file-name "~/quicklisp/slime-helper.el"))
(setq inferior-lisp-program "/home/pi/opt/ccl/armcl")
→ piユーザではない場合は変更。
(setq slime-net-coding-system 'utf-8-unix) ; ← 2013/4/7 追加
emacsを起動して、
M-x slime
でreplが起動する。
自分の環境では起動するまで50秒弱かかった。
swankサーバ
Emacsからいちいちslimeコマンドを実行して、cclを起動するよりも、
swankサーバを起動しておき、Emacsから接続する方が便利。
ccl-swank.lispを次の内容で作成しておく。
(ql:quickload :swank)
(swank:create-server :port 4005 :dont-close t)
./armcl -l ccl-swank.lisp
→ ccl-swank.lispの置き場所に応じてパスを変更。
しばらく待つと、サーバーが起動するので、
別ターミナルでemacsを起動する。
M-x slime-connect
ホストとポート番号を聞いてくる。
デフォルトのlocalhost、4005番でOK。
すぐにreplが起動する。
hunchentoot
replから
(ql:quickload :hunchentoot)
ロードが完了したら、サーバーを起動。
(hunchentoot:start (make-instance 'hunchentoot:easy-acceptor :port 4242))
起動したら、ブラウザより http://localhost:4242 を開く。
Welcome画面が表示される。
以上の手順で、hunchentootが使えるようになった。
何を作ろうかなー?
ブラウザ経由でRaspberry PiのIOを使うようなものが面白いかな。