Moodle + JupyterHub 連携システム シリーズ(4)
4. Moodle モジュール mod_lticontainer のインストールと設定
4.1 mod_lticontainer のインストール
以下,Moodle のトップディレクトリを /var/www/html_ssl/moodle として解説を行います.
mod_lticontainer は,まだ moodle.org のプラグインディレクトリには登録されていませんので,github から直接ダウンロードします.
cd /var/www/html_ssl/moodle/mod
git clone https://github.com/moodle-fumihax/mod_lticontainer.git
mv mod_lticontainer lticontainer
chown -R apache:apache lticontainer/
配置が終了したら,Moodle に管理者としてログインします.自動的にモジュールのインストール画面になりますので,そのままインストールを続けます.
4.2 コース(トピック)への配置
各コース毎に,使用する JupyterHub サーバ 1 台につき 1 つのインスタンス を追加します.追加方法は他のモジュールと同様です.追加時に最低限 インスタンス名を指定する必要があります.
4.3 mod_lticontainer の設定
mod_lticontainer は現時点では英語表記のみとなっています.
日本語化はされていませんが,設定項目は平易な英語で構成されているため,教員が設定する分には大きな支障はありません.
追加した mod_lticontaine インスタンスの 名前部分をクリック すると,mod_lticontaine の画面になります.
初期タブは 「Over View」 です.デフォルト設定の内容が表示されていますが,一番下の 「Edit settings」 リンクをクリックすると,設定画面に移動できます.
必須の設定項目は 「一般」 の Name と 「Settings of Container and LTI」 内の項目です.「Settings of Dashboard and Charts」 内はオプションの設定であり,現時点では設定する必要はありません.
4.3.1 「Settings of Container and LTI」 内の設定
JupyterHub (必須)
https://jupyterhub.nsl.tuis.ac.jp:443 のように JupyterHub への接続 URLを記述します.ここで 443 は JupyterHub サーバのポート番号を表します.
ただし,ポート番号が 443番の場合はの指定は省略可能ですので,https://jupyterhub.nsl.tuis.ac.jp としても問題ありません.
JupyterHub サーバのポート番号は,サーバの設定ファイル /usr/local/etc/ltictr/jupyterhub_lticontainer_config.py の my_port_num で指定できます.デフォルトは 443 です.
Container system (必須)
接続対象の JupyterHub サーバ で稼働しているコンテナシステムの種類 を指定します.
選択可能なのは Docker または Podman のみで,デフォルトは Docker です.
Moodle サーバ側には,JupyterHub サーバで稼働しているコンテナシステムと通信するためのプログラムをインストールする必要があります.「4.4 コンテナシステムのインストール」 を参照してください.
Container user (必須)
JupyterHub サーバ上で,コンテナシステムの情報を取得するために使用するユーザの ID(ユーザ名) を指定します.このユーザは,JupyterHub サーバ上に実際に存在し,コンテナシステムにアクセス可能な権限 を持っている必要があります.
またこのユーザは,Moodle サーバからの SSH ポートフォワーディングの接続先 となるため,リモートから SSH 接続可能 である必要があります.
ただし,対話的なログインを行う必要はないため,ログインシェルは不要 です.
ユーザの作成方法については,「3.1.1 Rocky Linux 9 へのインストール」または「3.2.1 Ubuntu Server 24 へのインストール」の 「接続用ユーザの作成」 を参照してください.通常は,そこで作成したユーザを指定します.
Password of container user (必須)
上記で指定した Container user の JupyterHub 上でのパスワードを指定します.
JupyterHub API Token (必須)
8文字以上のランダムな英数字の文字列(トークン) を指定します.特に内容についての制限はありません.
例)ABCDEFGH
Show custom parameters
YES を選択した場合,LTI カスタムパラメータの設定画面で,実際に設定された内容が表示されます.画面を縦にスクロールする必要がありますが,LTI カスタムパラメータの内容を確認したい場合は YES にします.No にした場合は表示されません.デフォルトは YES です.
Image name filter words
JupyterHub サーバ上にイメージファイルが多数ある場合に,このシステム上に表示するイメージファイル名にフィルタを掛けることができます.
単にワードを指定した場合は,指定したすべてのワードを含む イメージ名が表示されます.ワードの前に -(マイナス) を付けると,そのワードを含まない イメージ名が表示されます.
ワードは複数個指定できます.デフォルトは jupyterhub です.
Does mod_lticontainer create container volumes ?
どのタイミングでコンテナシステムのボリュームが作成されるかを指定します.
YES を指定した場合,mod_lticontainer で LTI Connection を設定した時点で,ボリュームが作成されます.
No を指定した場合,誰かが一番最初に該当コンテナを起動したタイミングで作成されます.
システム的にはどちらでもかまいません.デフォルトは No です.
Pattern of names displayed
ユーザ名の表示方法を指定します.デフォルトは fullname(ユーザフルネーム) です.
4.4 コンテナシステムのインストール
mod_lticontainer は Moodle サーバ上から SSH ポートフォワーディング を用いて,リモートの JupyterHub サーバ上のコンテナシステムに対してコマンドを実行し,その情報を取得します.
このため,Moodle サーバ上にも,JupyterHub サーバで使用しているコンテナシステムに対応したクライアント環境を用意する必要があります(実際にコンテナを起動するのは JupyterHub サーバ側であり,Moodle サーバ側では情報取得と制御のみを行います).
4.4.1 Rocky Linux の場合
相手が Podman の場合
サーバが Rocky Linux で,相手が Podman の場合は,Podman のリモート操作用クライアントである podman-remote をインストールします.
dnf -y install podman-remote
相手が Docker の場合
サーバが Rocky Linux で,相手が Docker の場合,エンジンは不要で,docker CLI のみ をインストールします.
dnf -y install dnf-plugins-core
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
dnf -y install docker-ce-cli docker-buildx-plugin docker-compose-plugin
4.4 コンテナシステムのインストール
mod_lticontainer は Moodle サーバ上から SSH ポートフォワーディングを用いて,リモートの JupyterHub サーバ上のコンテナシステムにコマンドを実行し,情報を取得します.
このため,Moodle サーバ側にも,相手(JupyterHub サーバ)で使用しているコンテナシステムに対応したクライアント環境のみを用意します(実際にコンテナを起動するのは相手側であり,Moodle 側は情報取得と制御のみ).
4.4.1 Rocky Linux の場合
相手が Podman の場合
Podman のリモート操作用クライアント podman-remote をインストールします.
dnf -y install podman-remote
相手が Docker の場合
エンジンは不要で,docker CLI のみをインストールします.
dnf -y install dnf-plugins-core
dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
dnf -y install docker-ce-cli docker-buildx-plugin docker-compose-plugin
4.4.2 Ubuntu の場合
Ubuntu でも考え方は同じで,相手に合わせたクライアントのみを入れます.
相手が Docker の場合(CLI のみ)
Docker 公式リポジトリを追加し,CLI のみ 導入します(エンジンは入れません).
snap remove docker --purge # もしかすると Snap版が先にインストールされている可能性がある
install -d -m 0755 /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
| gpg --dearmor -o /etc/apt/keyrings/docker.gpg
chmod a+r /etc/apt/keyrings/docker.gpg
. /etc/os-release
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu ${VERSION_CODENAME} stable" \
| tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update
apt -y install docker-ce-cli docker-buildx-plugin docker-compose-plugin
# ※ docker-ce や containerd.io は不要.systemctl 有効化も不要.
相手が Podman の場合
Ubuntu では podman パッケージでリモート操作用のクライアント機能が利用できます.
apt update
apt -y install podman
注記:Moodle サーバ側ではコンテナエンジンの常駐は不要です.既存スクリプトが SSH 転送されたソケットを前提に docker-ce-cli/podman(または podman-remote) を呼び出します.
シリーズ「LTI カスタムパラメータによる Moodle+JupyterHub 連携システムの構築と運用」第4回
第1回に戻る | 前へ:JupyterHub(LTIContainerSpawner)のインストールと設定 | 次へ:Moodle と JupyterHub の連携
