数学オンラインテストモジュール STACK 3.5.* を LMS Moodle 3.1 on Debian GNU/Linux 8 Jessie にインストール

概要

MoodleオープンソースのLMS, 数学オンラインテストSTACKはMoodleのQuizのひとつのQuestion Typeであるモジュール.

Moodle 3.1, STACK 3.5.5, STACK-Maxima library 2016082901 を Debian 8 Jessie にインストールしたときに遭遇した困難と解決, STACK 3.5.6, STACK-Maxima library 2016122100 にアップデートしたときに遭遇した困難と解決の記述.

STACK 3.5.5のインストール

インストール手順は

MoodleがインストールされたDebianの場合,

apt-get install maxima gnuplot

で必要なパッケージが追加され, 実行ファイルは /usr/bin に置かれた.

maxima --list-avail
Available versions:
version 5.34.1, lisp gcl
Maxima 5.34.1 http://maxima.sourceforge.net
using Lisp GNU Common Lisp (GCL) GCL 2.6.12 (a.k.a. GCL)

とのことで, GCL=GNU Common Lispdependency でインストールされた.

ところが Health Check

したところ,

CAS result
loadfile: failed to load /usr/share/maxima/5.34.1/share/draw/draw.lisp -- an error. To debug this try: debugmode(true);

FAILED  あなたの要求したMaximaパッケージのいくつかの読み込みに失敗しているようです。このエラーに対する注意については,インストール手順を参照してください。 CASは期待したとおりデータを返しましたが,エラーがありました。

だそうで, draw.lisp がloadできないというエラー. 即物的には, このファイルはあるのか? Pathが正しいか? Owner and Permisson は正しいのか, などと調べ始めるわけだが, そういうことでなく, もっと深く精妙なことで, バージョン依存であるらしい, というのが下のスレッドで書かれている.

上のスレッドでは回避方法として, ライブラリをあらかじめ読み込んで最適化した maxima のイメージを保存すればいい, と言っている. GCLの場合のその手順はここで説明されている.

ただし, Debian では

apt-get build-essential

であらかじめ gcc がインストールされていることが必要. 最後に Moodle のSTACK設定で, maxima コマンドを

timeout --kill-after=6s 6s /path/to/moodledata/stack/maxima-optimised -eval '(cl-user::run)'

と指定しようとするが, このinput formには single quote や paren を書くと正しく認識されないようだった.

に書かれているように,

#!/bin/sh
/path/to/moodledata/stack/maxima-optimised -eval '(cl-user::run)'

だけからなる wrapper shell script maxima-optimised.sh を作成し

timeout --kill-after=6s 6s /path/to/moodledata/stack/maxima-optimised.sh

とすると, Health Checkを通過した.

追記: STACK 3.5.6 へのアップグレード

その後,

cd /path/to/moodle/question/type/stack
git pull

したところ, 正誤判定は正しくされるものの, プレビューでの「正解を表示」fill in right answer 『正解概要」が効かなくなり, 学生にも, 正解は表示されるが正解入力文字列が表示されなくなった.

Health Check したところ,

FAILED   The version of the STACK-Maxima libraries being used (2016082901) does not match what is expected (2016122100) by this version of the STACK question type. Please rebuild your optimised Maxima executable.

というエラーになった. そう, 最適化した maxima イメージは, STACK の update のたびに再生成しなければいけないのだった. 3.5.5 インストール時の手順をやり直したところ, Health Check を通過し, 正解入力文字列も表示されるようになった.

追記: STACK 4.0.1, Maxima 5.38.1, Moodle 3.3.2, Debian 9 stretch へのアップグレード(2017-09-15)

もちろんまた

FAILED 期待されるMaximaのバージョン:"5.38.1"。実際のMaximaのバージョン:"5.34.1" CASは期待したとおりデータを返しましたが,エラーがありました。

FAILED 使用されているSTACK-Maximaライブラリのバージョン (2016122100) はSTACK問題タイプで必要とされているバージョン (2017082400) と一致していません。最適化されたMaxima実行ファイルの再構築を行ってください。

と言われるようになった. こんどは, WebのSTACK設定で, いったんぜんぶ default に戻して, 「Maximaのイメージを作成」ボタンを押すだけで, Unix-optimised になって, ぜんぶ正常に機能するようになった…ように今のところ見えている. STACK4では, テキスト内に書く CAS expression の dellimiter が @exp(x)@ から {@exp(x)@}になったという表面的には大きな変更がある.