Raspberry Pi 2上でNingleを動かせなかったので、調査してみた。
結論
- そのままningleをquickloadできなかった。
- CFFIのバージョンを上げるとできた。
- コミットNo.は、
07d5940c869072f2e91444bacb9683bc300243e2
- コミットNo.は、
前提条件
RaspberryPi側の設定とバージョン情報
操作メモ
1. Ningleのインストール
Quicklispからインストールできるので、 (ql:quickload :ningle)
を実行してみる。
すると、以下のエラーが発生した。
pi@raspberrypi:~ $ sbcl This is SBCL 1.2.4.debian, an implementation of ANSI Common Lisp. More information about SBCL is available at <http://www.sbcl.org/>. SBCL is free software, provided as is, with absolutely no warranty. It is mostly in the public domain; some portions are provided under BSD-style licenses. See the CREDITS and COPYING files in the distribution for more information. * (ql:quickload :ningle) To load "ningle": Load 1 ASDF system: ningle ; Loading "ningle" ..............; ; caught ERROR: ; READ error during COMPILE-FILE: unmatched close parenthesisLine: 82, Column: 19, File-Position: 2874Stream: #<SB-SYS:FD-STREAM for "file /home/pi/quicklisp/dists/quicklisp/software/cffi_0.17.1/toolchain/c-toolchain.lisp" {52B306F9}> debugger invoked on a LOAD-SYSTEM-DEFINITION-ERROR: Error while trying to load definition for system static-vectors from pathname /home/pi/quicklisp/dists/quicklisp/software/static-vectors-1.6/static-vectors.asd: COMPILE-FILE-ERROR while compiling #<CL-SOURCE-FILE "cffi-toolchain" "toolchain" "c-toolchain"> Type HELP for debugger help, or (SB-EXT:EXIT) to exit from SBCL. restarts (invokable by number or by possibly-abbreviated name): 0: [RETRY ] Retry compiling #<CL-SOURCE-FILE "cffi-toolchain" "toolchain" "c-toolchain">. 1: [ACCEPT ] Continue, treating compiling #<CL-SOURCE-FILE "cffi-toolchain" "toolchain" "c-toolchain"> as having been successful. 2: [RETRY ] Retry EVAL of current toplevel form. 3: [CONTINUE ] Ignore error and continue loading file "/home/pi/quicklisp/dists/quicklisp/software/static-vectors-1.6/static-vectors.asd". 4: [ABORT ] Abort loading file "/home/pi/quicklisp/dists/quicklisp/software/static-vectors-1.6/static-vectors.asd". 5: Retry ASDF operation. 6: [CLEAR-CONFIGURATION-AND-RETRY] Retry ASDF operation after resetting the configuration. 7: Give up on "ningle" 8: Exit debugger, returning to top level. ((FLET #:HANDLER1576 :IN ASDF/FIND-SYSTEM:LOAD-ASD) #<COMPILE-FILE-ERROR {52C39DA9}>) 0] 8 ; ; compilation unit aborted ; caught 3 fatal ERROR conditions ; caught 1 ERROR condition *
; READ error during COMPILE-FILE: unmatched close parenthesisLine: 82, Column: 19, File-Position: 2874Stream: #<SB-SYS:FD-STREAM for “file /home/pi/quicklisp/dists/quicklisp/software/cffi_0.17.1/toolchain/c-toolchain.lisp” {52B306F9}>
なにやら、cffiのc-toolchain.lisp内で、括弧が足りない様子
2. 調査のため、CFFIの最新コードを取得
とりあえず、cffiの最新コードをとってきて原因を見てみる。
Quicklispからquickloadできるように、 quicklisp/local-projects
に置く。
pi@raspberrypi:~ $ cd ~/quicklisp/local-projects/ pi@raspberrypi:~/quicklisp/local-projects $ git clone https://github.com/cffi/cffi.git Cloning into 'cffi'... remote: Counting objects: 5877, done. remote: Compressing objects: 100% (3/3), done. remote: Total 5877 (delta 0), reused 0 (delta 0), pack-reused 5874 Receiving objects: 100% (5877/5877), 2.39 MiB | 988.00 KiB/s, done. Resolving deltas: 100% (3871/3871), done. Checking connectivity... done.
ためしに、原因のcffi-toolchainをquickloadしてみる。
* (ql:quickload :cffi-toolchain) To load "cffi-toolchain": Load 1 ASDF system: cffi-toolchain ; Loading "cffi-toolchain" .................................................. [package cffi-sys]................................ [package cffi].................................... .................................................. [package cffi-features]... (:CFFI-TOOLCHAIN) *
読みこめた…
3. Ningleの再インストール
まさかと思い、この状態でNingleをquickloadしてみる。
* (ql:quickload :ningle) To load "ningle": Load 1 ASDF system: ningle ; Loading "ningle" .................................................. [package static-vectors].; cc -marm -o /home/pi/.cache/common-lisp/sbcl-1.2.4.debian-linux-arm/home/pi/quicklisp/dists/quicklisp/software/static-vectors-1.6/src/ffi-types__grovel-tmp8UG37QJ5 -I/home/pi/quicklisp/local-projects/cffi/ /home/pi/.cache/common-lisp/sbcl-1.2.4.debian-linux-arm/home/pi/quicklisp/dists/quicklisp/software/static-vectors-1.6/src/ffi-types__grovel.c ; /home/pi/.cache/common-lisp/sbcl-1.2.4.debian-linux-arm/home/pi/quicklisp/dists/quicklisp/software/static-vectors-1.6/src/ffi-types__grovel /home/pi/.cache/common-lisp/sbcl-1.2.4.debian-linux-arm/home/pi/quicklisp/dists/quicklisp/software/static-vectors-1.6/src/ffi-types__grovel.grovel-tmp.lisp ......................... [package fast-io]................................. [package jonathan.error].......................... [package jonathan.util]........................... [package jonathan.encode]......................... [package jonathan.decode]......................... [package jonathan.helper]......................... [package jonathan]................................ [package http-body.multipart]..................... [package http-body.util].......................... [package http-body.json].......................... [package http-body.urlencoded].................... [package http-body]............................... [package lack.request]............................ [package ningle.context].......................... [package ningle.route]............................ [package ningle.app].............................. [package ningle] (:NINGLE) *
こっちも読み込めた…
ということで、clackをインストールし、READMEのプログラムを実行してみる。
* (ql:quickload :clack) To load "clack": Load 1 ASDF system: clack ; Loading "clack" ..... (:CLACK) * (defvar *app* (make-instance 'ningle:<app>)) *APP* * (setf (ningle:route *app* "/") "Welcome to ningle!") "Welcome to ningle!" * (setf (ningle:route *app* "/") "Welcome to ningle!") WARNING: Redefining a route for "/" #(GET). "Welcome to ningle!" * (clack:clackup *app*) Hunchentoot server is going to start. Listening on localhost:5000.
どうやら問題なさそうだ。
ブラウザでもアクセスできる。
原因っぽいもの
どうやら、quicklispでインストールできるのがcffi-0.18.0らしく、それがRaspberryPiと相性が悪いようだ。(詳細は調べてないから、原因ははっきり分からないけど)
今後について
cffiのリリースに注意しつつ、とりあえず運用してみる。
元々、家のローカルネットワーク内でしか動かさないから自分しか困らないし。