|
# Index
|
|
# Index
|
|
|
|
|
|
[[_TOC_]]
|
|
[[_TOC_]]
|
|
|
|
|
|
# mod_lticontainer
|
|
# mod_lticontainer
|
|
|
|
|
|
## 概要
|
|
## 概要
|
|
|
|
|
|
- **mod_ltids** は正式リリースに伴い,名称が [**mod_lticontainer**](https://gitlab.nsl.tuis.ac.jp/iseki/mod_lticontainer) に変更になった.
|
|
- **mod_ltids** は正式リリースに伴い,名称が [**mod_lticontainer**](https://gitlab.nsl.tuis.ac.jp/iseki/mod_lticontainer) に変更になった.
|
|
- [**mod_lticontainer**](https://gitlab.nsl.tuis.ac.jp/iseki/mod_lticontainer) はMoodle のLTIカスタムパラメータの設定をサポートするモジュールである.
|
|
- [**mod_lticontainer**](https://gitlab.nsl.tuis.ac.jp/iseki/mod_lticontainer) はMoodle のLTIカスタムパラメータの設定をサポートするモジュールである.
|
|
- v1.2.0 (2022/07/10) 複数 Moodle Host のサポート
|
|
- v1.2.0 (2022/07/10) 複数 Moodle Host のサポート
|
... | @@ -9,22 +13,25 @@ |
... | @@ -9,22 +13,25 @@ |
|
- [**LTIContainerSpawner**](https://gitlab.nsl.tuis.ac.jp/iseki/lticontainerspawner) との組み合わせで使用する.
|
|
- [**LTIContainerSpawner**](https://gitlab.nsl.tuis.ac.jp/iseki/lticontainerspawner) との組み合わせで使用する.
|
|
- LTIContainerSpawner との組み合わせで使用しなければ意味は無い.
|
|
- LTIContainerSpawner との組み合わせで使用しなければ意味は無い.
|
|
|
|
|
|
|
|
|
|
* 追加参照 Wiki
|
|
* 追加参照 Wiki
|
|
* [**Moodle + JupyterHub**](https://gitlab.nsl.tuis.ac.jp/iseki/lticontainerspawner/-/wikis/Moodle-+-JupyterHub-(J))
|
|
* [**Moodle + JupyterHub**](https://gitlab.nsl.tuis.ac.jp/iseki/lticontainerspawner/-/wikis/Moodle-+-JupyterHub-(J))
|
|
* [**LTIContainerSpawner**](https://gitlab.nsl.tuis.ac.jp/iseki/lticontainerspawner/-/wikis/md/LTIContainerSpawner(J))
|
|
* [**LTIContainerSpawner**](https://gitlab.nsl.tuis.ac.jp/iseki/lticontainerspawner/-/wikis/md/LTIContainerSpawner(J))
|
|
|
|
|
|
<img src="uploads/ba29433830c9066e84ae8c52a2265358/LTICTR.png" width="65%">
|
|
![](uploads/ba29433830c9066e84ae8c52a2265358/LTICTR.png){width="65%"}
|
|
|
|
|
|
|
|
|
|
## 機能
|
|
## 機能
|
|
|
|
|
|
- **LTIカスタムパラメータ**の設定サポートを行う.
|
|
- **LTIカスタムパラメータ**の設定サポートを行う.
|
|
- Docker/Podmanホストとの通信機能を有する.(container_rsock.sh)
|
|
- Docker/Podmanホストとの通信機能を有する.(container_rsock.sh)
|
|
- コンテナイメージの名称を取得する.
|
|
- コンテナイメージの名称を取得する.
|
|
- Volume のリモート作成(デフォルトではこの機能はOFF),リモート削除を行う.
|
|
- Volume のリモート作成(デフォルトではこの機能はOFF),リモート削除を行う.
|
|
|
|
|
|
## インストール
|
|
## インストール
|
|
|
|
|
|
- Moodle ホストにログインし,root で作業.
|
|
- Moodle ホストにログインし,root で作業.
|
|
```
|
|
|
|
|
|
```plaintext
|
|
# cd [Moodle Path]/mod
|
|
# cd [Moodle Path]/mod
|
|
# git clone https://gitlab.nsl.tuis.ac.jp/iseki/mod_lticontainer.git
|
|
# git clone https://gitlab.nsl.tuis.ac.jp/iseki/mod_lticontainer.git
|
|
# mv mod_lticontainer lticontainer
|
|
# mv mod_lticontainer lticontainer
|
... | @@ -32,46 +39,140 @@ |
... | @@ -32,46 +39,140 @@ |
|
adminユーザで Moodleにログインする
|
|
adminユーザで Moodleにログインする
|
|
```
|
|
```
|
|
|
|
|
|
|
|
## 設定
|
|
|
|
|
|
|
|
### モジュールの設定
|
|
|
|
|
|
|
|
- **JupyterHub (container host) URL**
|
|
|
|
- JupyterHub に接続するためのURL. 例) [https://castor5.nsl.tuis.ac.jp:443](https://castor5.nsl.tuis.ac.jp)
|
|
|
|
- **Container system**
|
|
|
|
- 使用するコンテナシステムを Docker と Podman から選択する.(Moodleのホストにインストールされている方を選ぶ)
|
|
|
|
- **Container user**
|
|
|
|
- Docker または Podman が動くホスト上で,mod_lticontainer と通信を行うためのユーザを指定する.
|
|
|
|
- このユーザは Docker または Podman のソケットを読み書き可能で,Moodleホストから ssh ログイン可能でなければならない.
|
|
|
|
- **Password of ~~Docker/Podman~~ container user**
|
|
|
|
- Moodleホストから ssh ログインする場合の **Container user** のパスワード.
|
|
|
|
- **JupyterHub API Token**
|
|
|
|
* ssss
|
|
|
|
- **Show custom parameters**
|
|
|
|
- Yes にすると,**LTI Edit** 画面の下部に現在のLTIカスタムパラメータが表示される.
|
|
|
|
- **Image name filter words**
|
|
|
|
- **LTI Edit** 画面で **Container image** に表示されるコンテナイメージ名のフィルタリング指定.
|
|
|
|
- 名前の一部の文字列を指定すると,それを含んだコンテナイメージ名のみ表示される(**AND選択**).何も指定しない場合は,全てのコンテナイメージ名が表示される.
|
|
|
|
- 文字列の先頭にマイナス(**\-**)を付けると,その文字列を含むコンテナイメージ名は表示されない(**OR選択**).表示指定よりもこちらの指定が優先される.
|
|
|
|
- **Does mod_lticontainer create Docker volumes ?**
|
|
|
|
- 設定を保存したタイミングで Dockerボリュームを作成するかどうかを指定する.
|
|
|
|
- システム的には Yes/No どちらでもよい.
|
|
|
|
|
|
|
|
### Moodle(LMS) ホスト側
|
|
|
|
|
|
|
|
- WWWサーバの実効ユーザは,そのホームディレクトリについて書き込み可能でなければならない.(ssh の設定データを書き込む必要があるため)
|
|
|
|
- 書き込可能でない場合は,"The web server process does not have write access to its own home directory. Please check the permissions" のエラーメッセージが表示される.
|
|
|
|
- 例)Apache の場合,ユーザ apache は /var/www に書き込み権限がなければならない.
|
|
|
|
- Docker ホストを使用する場合は,Moodle ホスト側に,少なくとも docker-ce-cli/docker-cli がインストールされている必要がある.
|
|
|
|
- Podman ホストを使用する場合は,Moodle ホスト側に,少なくとも podman-remote がインストールされている必要がある.
|
|
|
|
- CentOS 7 の場合は **openssh-askpass** パッケージが必要.
|
|
|
|
|
|
|
|
### Docker/Podman ホスト側
|
|
|
|
|
|
|
|
- UNIXソケットファイルに対して,グループユーザが読み書き可能であること.
|
|
|
|
- リモートコントロール用ユーザが UNIXソケットファイルのグループに属していること(UNIXソケットファイルにアクセスするため).
|
|
|
|
- リモートコントロール用ユーザのログインシェルは不要.
|
|
|
|
|
|
|
|
### container_rsock.sh
|
|
|
|
|
|
|
|
- Docker/Podman のリモートコントロール用シェルスクリプト.
|
|
|
|
- Moodleホストから ssh のポートフォワーディングを使って,Docker/Podman ホストに UNIXのソケットファイルを繋げる.
|
|
|
|
- Docker/Podman ホスト側に,sshでログイン可能な(ログイン)ユーザが必要.
|
|
|
|
- そのユーザは Docker/Podman の UNIXソケットファイルを読み書き可能でなければならない.
|
|
|
|
- 最も簡単な手法としては UNIXソケットファイルのグループに対して読み書きのパーミッションを与え,ユーザをそのグループに入れる.またはUNIXソケットファイルのオーナをユーザにしてしまう.
|
|
|
|
- **トラブルシューティング**
|
|
|
|
- CentOS, Rocky Linuxでは一度設定しても元(root.root)に戻ってしまう.
|
|
|
|
- `chown -R podman /var/run/podman/` ユーザがpodmanの場合.
|
|
|
|
|
|
|
|
### Server/Webサービスを利用するためのトークンの取得
|
|
|
|
|
|
|
|
1. 管理者IDで「サイト設定」 -\> 「サーバ」 -\> 「ウェブサービス」 -\> 「外部サービス」
|
|
|
|
1. 「**Jupyter Notebook Data**」の項目を確認
|
|
|
|
2. 「**Jupyter Notebook Data**」の 「許可ユーザ」をクリック
|
|
|
|
2. 適当なユーザ(教師ロールのユーザ)を選択し,許可ユーザとする
|
|
|
|
3. ウェブサービスのメニューまで戻って,「トークンを管理する」を選択.
|
|
|
|
4. 「追加」をクリック.
|
|
|
|
1. ユーザ名に先程選択したユーザ名を入れる.
|
|
|
|
2. サービスは「**Jupyter Notebook Data**」を選択
|
|
|
|
3. 「変更を保存する」をクリック
|
|
|
|
5. 「トークンを管理する」まで戻ると,ユーザ用のトークンができているので,それをコピーする.
|
|
|
|
6. トークンを mod_lticontainer の設定画面の "**Settings of Dashboard and Charts**" / "**XML-RPC Token for Web services**" に設定する.
|
|
|
|
7. 設定が終わったら,LTI Editで一度保存を行うこと.**保存を行わないと設定が LTIに反映されない.**
|
|
|
|
|
|
|
|
## 未サポート
|
|
|
|
|
|
|
|
#### Moodle with CentOS7
|
|
|
|
|
|
|
|
- **openssh-askpass** パッケージが必要.
|
|
|
|
- podman-remote で --url オプションが使用できないので,docker をインストールする.
|
|
|
|
|
|
|
|
#### Moodle 3.9.0 以下
|
|
|
|
|
|
|
|
- Moodle 3.9.0 以下では lti プラグインのカスタムパラメータを保存するカラムが VARCHAR(255) であるため,カスタムパラメータが255バイトを超えると,データベースへの書き込みに失敗する.
|
|
|
|
- どうしても3.9.0 以下で動かしたい場合は以下のコマンドで, **instructorcustomparameters** カラムを **longtext** に変換する.
|
|
|
|
- **alter table mdl_lti modify column instructorcustomparameters longtext;**
|
|
|
|
|
|
## 操作(Tab)
|
|
## 操作(Tab)
|
|
|
|
|
|
### Over View
|
|
### Over View
|
|
|
|
|
|
- 現在の設定を表示
|
|
- 現在の設定を表示
|
|
- **Edit settings** から設定画面に移動可能.
|
|
- **Edit settings** から設定画面に移動可能.
|
|
|
|
|
|
### Dashboard
|
|
### Dashboard
|
|
|
|
|
|
- Dashboard 機能を使用するには,[**Feserver**](https://gitlab.nsl.tuis.ac.jp/iseki/lticontainerspawner/-/wikis/md/Feserver(J)) または [**Ltictr_Proxy**](https://gitlab.nsl.tuis.ac.jp/iseki/lticontainerspawner/-/wikis/md/Ltictr_Proxy(J)) を動かさないといけません.
|
|
- Dashboard 機能を使用するには,[**Feserver**](https://gitlab.nsl.tuis.ac.jp/iseki/lticontainerspawner/-/wikis/md/Feserver(J)) または [**Ltictr_Proxy**](https://gitlab.nsl.tuis.ac.jp/iseki/lticontainerspawner/-/wikis/md/Ltictr_Proxy(J)) を動かさないといけません.
|
|
<img src="uploads/71461918d61f7f5976847e66412d8525/dashboard.png" width="70%">
|
|
|
|
|
|
![](uploads/71461918d61f7f5976847e66412d8525/dashboard.png){width="70%"}
|
|
|
|
|
|
### Charts
|
|
### Charts
|
|
|
|
|
|
- Charts 機能を使用するには,[**Feserver**](https://gitlab.nsl.tuis.ac.jp/iseki/lticontainerspawner/-/wikis/md/Feserver(J)) または [**Ltictr_Proxy**](https://gitlab.nsl.tuis.ac.jp/iseki/lticontainerspawner/-/wikis/md/Ltictr_Proxy(J)) を動かさないといけません.
|
|
- Charts 機能を使用するには,[**Feserver**](https://gitlab.nsl.tuis.ac.jp/iseki/lticontainerspawner/-/wikis/md/Feserver(J)) または [**Ltictr_Proxy**](https://gitlab.nsl.tuis.ac.jp/iseki/lticontainerspawner/-/wikis/md/Ltictr_Proxy(J)) を動かさないといけません.
|
|
|
|
|
|
#### 直近 Charts
|
|
#### 直近 Charts
|
|
|
|
|
|
- デフォルトで直近 90分間のチャートを表示.
|
|
- デフォルトで直近 90分間のチャートを表示.
|
|
<img src="uploads/6045a52a9a06a10811d11a499099fe5b/realtime_per_task_BK.png" width="30%">
|
|
|
|
|
|
![](uploads/6045a52a9a06a10811d11a499099fe5b/realtime_per_task_BK.png){width="30%"}
|
|
|
|
|
|
#### 任意の期間の Charts
|
|
#### 任意の期間の Charts
|
|
|
|
|
|
- デフォルトで過去7日間のチャートを表示.
|
|
- デフォルトで過去7日間のチャートを表示.
|
|
<img src="uploads/ef178e4354c770b7d65782996648be46/per_user_BK.png" width="30%">
|
|
|
|
<img src="uploads/7a9d95674afa32ef40c07727223acaef/per_task_BK.png" width="30%">
|
|
![](uploads/ef178e4354c770b7d65782996648be46/per_user_BK.png){width="30%"} ![](uploads/7a9d95674afa32ef40c07727223acaef/per_task_BK.png){width="30%"}
|
|
|
|
|
|
### LTI Connections
|
|
### LTI Connections
|
|
|
|
|
|
- 制御下に置く,LTIコネクション(外部ツールのインスタンス)の一覧
|
|
- 制御下に置く,LTIコネクション(外部ツールのインスタンス)の一覧
|
|
- **Edit settings** をクリックすると,制御から外す(表示しない)ネクションを指定する画面に移動.
|
|
- **Edit settings** をクリックすると,制御から外す(表示しない)ネクションを指定する画面に移動.
|
|
- 表示されている LTI Nameをクリックするこことにより **LTI Edit** を表示.
|
|
- 表示されている LTI Nameをクリックするこことにより **LTI Edit** を表示.
|
|
|
|
|
|
### Volumes
|
|
### Volumes
|
|
|
|
|
|
- JupyterHubホストで使用しているボリューム一覧(そのコースで使用しているボリュームのみ)とその削除.
|
|
- JupyterHubホストで使用しているボリューム一覧(そのコースで使用しているボリュームのみ)とその削除.
|
|
- Personal volume は操作対象外.
|
|
- Personal volume は操作対象外.
|
|
- ここで表示されるボリューム名は,省略された名前.
|
|
- ここで表示されるボリューム名は,省略された名前.
|
|
- ボリュームのフルネーム(正式名): **lms_[ vol | sub | prs ]\_[ボリューム名]\_[コースID]\_[MoodleホストのFQDN]**
|
|
- ボリュームのフルネーム(正式名): **lms\_\[ vol | sub | prs \]\_\[ボリューム名\]\_\[コースID\]\_\[MoodleホストのFQDN\]**
|
|
- 例:**lms_vol_abc_98_el.mml.tuis.ac.jp**
|
|
- 例:**lms_vol_abc_98_el.mml.tuis.ac.jp**
|
|
|
|
|
|
### LTI Edit
|
|
### LTI Edit
|
|
|
|
|
|
- LTI(外部ツール)インスタンスのカスタムパラメータを書き換える.
|
|
- LTI(外部ツール)インスタンスのカスタムパラメータを書き換える.
|
|
- 通常は DB上のデータを書き換えるだけ.
|
|
- 通常は DB上のデータを書き換えるだけ.
|
|
- カスタムパラメータ自体は,JupyterHubに実際に接続(ログイン)した時に送られる.
|
|
- カスタムパラメータ自体は,JupyterHubに実際に接続(ログイン)した時に送られる.
|
|
- 設定により,データを更新したタイミングで Dockerのボリュームを作成するように設定することも可能.
|
|
- 設定により,データを更新したタイミングで Dockerのボリュームを作成するように設定することも可能.
|
|
|
|
|
|
* LTI カスタムパラメータの設定画面
|
|
|
|
![LTI_Edit](uploads/97bfc80a4377e7d7045c08f381692337/LTI_Edit.png)
|
|
* LTI カスタムパラメータの設定画面 ![LTI_Edit](uploads/97bfc80a4377e7d7045c08f381692337/LTI_Edit.png)
|
|
|
|
|
|
#### Accessible users
|
|
#### Accessible users
|
|
|
|
|
|
- LTIカスタムパラメータ **lms_users** に対応.
|
|
- LTIカスタムパラメータ **lms_users** に対応.
|
|
- Volumeセクションで記述したボリュームをマウントできるユーザを指定する.
|
|
- Volumeセクションで記述したボリュームをマウントできるユーザを指定する.
|
|
- ユーザはMoodleのユーザ名を,カンマ(,)または空白で区切って記述する.
|
|
- ユーザはMoodleのユーザ名を,カンマ(,)または空白で区切って記述する.
|
... | @@ -79,6 +180,7 @@ adminユーザで Moodleにログインする |
... | @@ -79,6 +180,7 @@ adminユーザで Moodleにログインする |
|
- アスタリスク(**\***)は全てのユーザがボリュームをマウントできることを表す.
|
|
- アスタリスク(**\***)は全てのユーザがボリュームをマウントできることを表す.
|
|
|
|
|
|
#### Teachers
|
|
#### Teachers
|
|
|
|
|
|
- LTIカスタムパラメータ **lms_teachers** に対応.
|
|
- LTIカスタムパラメータ **lms_teachers** に対応.
|
|
- コースの教師を指定する.指定の仕方は,**lms_user** と同じ.アスタリスク(**\***)も使用できるが,使う意味はない.(全員教師?)
|
|
- コースの教師を指定する.指定の仕方は,**lms_user** と同じ.アスタリスク(**\***)も使用できるが,使う意味はない.(全員教師?)
|
|
- 途中で教師のメンバを変更した場合は,**Task volume** および **Submit volume** のオーナが教師グループから外れる可能性があるので,注意が必要.
|
|
- 途中で教師のメンバを変更した場合は,**Task volume** および **Submit volume** のオーナが教師グループから外れる可能性があるので,注意が必要.
|
... | @@ -88,27 +190,31 @@ adminユーザで Moodleにログインする |
... | @@ -88,27 +190,31 @@ adminユーザで Moodleにログインする |
|
- 学生は **Task volume** には書き込みできない.
|
|
- 学生は **Task volume** には書き込みできない.
|
|
- 学生は **Submit volume** 内のファイルについて,このボリューム内に自分でコピーしたもの以外にはアクセスできない.
|
|
- 学生は **Submit volume** 内のファイルについて,このボリューム内に自分でコピーしたもの以外にはアクセスできない.
|
|
- 教師が Submit volume 内でコピーしたものは,学生でもアクセスできる.(提示教材扱いになる)
|
|
- 教師が Submit volume 内でコピーしたものは,学生でもアクセスできる.(提示教材扱いになる)
|
|
- ボリュームのアクセス名の先頭に マイナス(**-**) を付けた場合,教師に対してのみアクセス用のリンクが張られる(-が削除された名前でリンクが張られる).
|
|
- ボリュームのアクセス名の先頭に マイナス(**\-**) を付けた場合,教師に対してのみアクセス用のリンクが張られる(-が削除された名前でリンクが張られる).
|
|
- 学生にリンクによるアクセスをさせたくない場合に使用(セキュリティ的な意味ではなく,操作上の学生の混乱を少なくさせるためのもの)
|
|
- 学生にリンクによるアクセスをさせたくない場合に使用(セキュリティ的な意味ではなく,操作上の学生の混乱を少なくさせるためのもの)
|
|
- **Personal volume** を使うときに,**Task volume** にマイナス付きのリンク名を指定してボリューム名を同じにすると教材配布に便利.
|
|
- **Personal volume** を使うときに,**Task volume** にマイナス付きのリンク名を指定してボリューム名を同じにすると教材配布に便利.
|
|
- 環境変数 **GRANT_SUDO** が **no** であっても,コンテナ内で **sudo** コマンドが使用できる.
|
|
- 環境変数 **GRANT_SUDO** が **no** であっても,コンテナ内で **sudo** コマンドが使用できる.
|
|
|
|
|
|
#### Container image
|
|
#### Container image
|
|
|
|
|
|
- LTIのカスタムパラメータ **lms_image** に対応.
|
|
- LTIのカスタムパラメータ **lms_image** に対応.
|
|
- 起動するコンテイメージを指定する.デフォルトの場合は,設定ファイルで指定したイメージ.
|
|
- 起動するコンテイメージを指定する.デフォルトの場合は,設定ファイルで指定したイメージ.
|
|
- Jupyter Lab/Notebook 以外のイメージを選択した場合は,高い確率でシステムは死亡する.
|
|
- Jupyter Lab/Notebook 以外のイメージを選択した場合は,高い確率でシステムは死亡する.
|
|
- 設定の **Image name filter words** で表示するコンテナイメージ名にフィルターを掛けることが可能.
|
|
- 設定の **Image name filter words** で表示するコンテナイメージ名にフィルターを掛けることが可能.
|
|
|
|
|
|
#### Default URL
|
|
#### Default URL
|
|
|
|
|
|
- LTIカスタムパラメータ **lms_defurl** に対応.
|
|
- LTIカスタムパラメータ **lms_defurl** に対応.
|
|
- Lab か Notebook のどちらにアクセスするかを指定する.デフォルトは設定ファイルで指定したURL.
|
|
- Lab か Notebook のどちらにアクセスするかを指定する.デフォルトは設定ファイルで指定したURL.
|
|
- Lab を指定した場合,起動するコンテイメージが Labをサポートしていないと 404 not found になる.
|
|
- Lab を指定した場合,起動するコンテイメージが Labをサポートしていないと 404 not found になる.
|
|
|
|
|
|
#### CPU Limit
|
|
#### CPU Limit
|
|
|
|
|
|
- **lms_cpulimit** に対応.
|
|
- **lms_cpulimit** に対応.
|
|
- コンテナ内での CPU数の上限.
|
|
- コンテナ内での CPU数の上限.
|
|
|
|
|
|
#### Memory Limit
|
|
#### Memory Limit
|
|
|
|
|
|
- **lms_memlimit** に対応.
|
|
- **lms_memlimit** に対応.
|
|
- コンテナ内での メモリの上限.
|
|
- コンテナ内での メモリの上限.
|
|
- CPU Limit は 0.1 でも結構動くが,メモリ 120Mぐらいだと JupyterHub/singleuser のコンテナは起動しない.
|
|
- CPU Limit は 0.1 でも結構動くが,メモリ 120Mぐらいだと JupyterHub/singleuser のコンテナは起動しない.
|
... | @@ -117,6 +223,7 @@ adminユーザで Moodleにログインする |
... | @@ -117,6 +223,7 @@ adminユーザで Moodleにログインする |
|
- mod_lticontainer では,余裕を考えてきりのいい 200M から表示.
|
|
- mod_lticontainer では,余裕を考えてきりのいい 200M から表示.
|
|
|
|
|
|
#### Volume セクション
|
|
#### Volume セクション
|
|
|
|
|
|
- **Task volume**, **Submit volume** はユーザが JupyterHub にアクセスしたときに(許可があれば)マウントされる.
|
|
- **Task volume**, **Submit volume** はユーザが JupyterHub にアクセスしたときに(許可があれば)マウントされる.
|
|
- アクセス(マウント)可能ユーザの書き方は **lms_users**(Accessible users) と同じ.ただしデフォルト(空欄)では,全てのユーザが許可される.
|
|
- アクセス(マウント)可能ユーザの書き方は **lms_users**(Accessible users) と同じ.ただしデフォルト(空欄)では,全てのユーザが許可される.
|
|
- **lms_users**(Accessible users)よりも,ここで指定される個々の許可ユーザの方が優先される.
|
|
- **lms_users**(Accessible users)よりも,ここで指定される個々の許可ユーザの方が優先される.
|
... | @@ -139,23 +246,26 @@ adminユーザで Moodleにログインする |
... | @@ -139,23 +246,26 @@ adminユーザで Moodleにログインする |
|
- 漢字指定可能
|
|
- 漢字指定可能
|
|
- ドット(.)を指定すると,ボリュームのフルネームでリンクが作られる.(ln -s ボリューム名 . が実行されるため)
|
|
- ドット(.)を指定すると,ボリュームのフルネームでリンクが作られる.(ln -s ボリューム名 . が実行されるため)
|
|
- アクセス名の無いエントリを作成すると,カスタムパラメータから削除される.
|
|
- アクセス名の無いエントリを作成すると,カスタムパラメータから削除される.
|
|
- ボリュームのアクセス名の先頭に マイナス(**-**) を付けた場合,教師に対してのみアクセス用のリンクが張られる(-は削除されてリンクが張られる)
|
|
- ボリュームのアクセス名の先頭に マイナス(**\-**) を付けた場合,教師に対してのみアクセス用のリンクが張られる(-は削除されてリンクが張られる)
|
|
|
|
|
|
##### Task volume
|
|
##### Task volume
|
|
- LTIカスタムパラメータの **lms_vol_ボリューム名=アクセス名: 許可ユーザ** に対応.
|
|
|
|
|
|
- LTIカスタムパラメータの **lms_vol\_ボリューム名=アクセス名: 許可ユーザ** に対応.
|
|
- 課題提示用ボリューム.教師は書き込み可能だが,学生は読み出しのみ可能.
|
|
- 課題提示用ボリューム.教師は書き込み可能だが,学生は読み出しのみ可能.
|
|
- Volumes タブで削除可能
|
|
- Volumes タブで削除可能
|
|
- パーミッション:rwxrwsr-x, オーナ:一番最初にアクセスした教師,グループ:教師
|
|
- パーミッション:rwxrwsr-x, オーナ:一番最初にアクセスした教師,グループ:教師
|
|
|
|
|
|
##### Submit volume
|
|
##### Submit volume
|
|
- LTIカスタムパラメータの **lms_sub_ボリューム名=アクセス名: 許可ユーザ** に対応.
|
|
|
|
|
|
- LTIカスタムパラメータの **lms_sub\_ボリューム名=アクセス名: 許可ユーザ** に対応.
|
|
- 課題回収用ボリューム.教師は読み出し(書き込み,削除:これはオーナのみ)が可能だが,学生は課題の提出(書き込み)と自分の提出した課題にのみアクセス(読み出し,削除)可能.
|
|
- 課題回収用ボリューム.教師は読み出し(書き込み,削除:これはオーナのみ)が可能だが,学生は課題の提出(書き込み)と自分の提出した課題にのみアクセス(読み出し,削除)可能.
|
|
- ただし,教師が Submit volume 内でコピーしたものは,学生でもアクセスできる.
|
|
- ただし,教師が Submit volume 内でコピーしたものは,学生でもアクセスできる.
|
|
- Volumes タブで削除可能
|
|
- Volumes タブで削除可能
|
|
- パーミッション:rwxrwsrwt,オーナ:一番最初にアクセスした教師,グループ:教師
|
|
- パーミッション:rwxrwsrwt,オーナ:一番最初にアクセスした教師,グループ:教師
|
|
|
|
|
|
##### Personal volume
|
|
##### Personal volume
|
|
- LTIカスタムパラメータの **lms_prs_ボリューム名=アクセス名: 許可ユーザ** に対応.
|
|
|
|
|
|
- LTIカスタムパラメータの **lms_prs\_ボリューム名=アクセス名: 許可ユーザ** に対応.
|
|
- これはユーザの専用ボリュームに恒久的に作成されるディレクトリである.
|
|
- これはユーザの専用ボリュームに恒久的に作成されるディレクトリである.
|
|
- ユーザ本人しかアクセスできない.(コンテナ起動時の管理プロセスを除く)
|
|
- ユーザ本人しかアクセスできない.(コンテナ起動時の管理プロセスを除く)
|
|
- Task volume, Submit volume は Volumes タブで削除可能だが,これは一度作成するとシステムの管理者またはユーザ本人しか削除できない
|
|
- Task volume, Submit volume は Volumes タブで削除可能だが,これは一度作成するとシステムの管理者またはユーザ本人しか削除できない
|
... | @@ -167,10 +277,10 @@ adminユーザで Moodleにログインする |
... | @@ -167,10 +277,10 @@ adminユーザで Moodleにログインする |
|
- Task volume と同じ名前(ボリューム名)にしても,コピーは行われない.
|
|
- Task volume と同じ名前(ボリューム名)にしても,コピーは行われない.
|
|
|
|
|
|
#### その他のカスタムパラメータ
|
|
#### その他のカスタムパラメータ
|
|
|
|
|
|
- **lms_sessionifo**
|
|
- **lms_sessionifo**
|
|
- このモジュールのインスタンスIDと対応する LTIコネクション(外部ツール)のインスタンスのIDが自動的に設定される.例)lms_sessionifo=6,13
|
|
- このモジュールのインスタンスIDと対応する LTIコネクション(外部ツール)のインスタンスのIDが自動的に設定される.例)lms_sessionifo=6,13
|
|
- ユーザが気にすることは何もない.このデータは実際には [**Feserver**](https://gitlab.nsl.tuis.ac.jp/iseki/lticontainerspawner/-/wikis/md/Feserver(J)) の feplg_nbwsモジュール または [**Ltictr_Proxy**](https://gitlab.nsl.tuis.ac.jp/iseki/lticontainerspawner/-/wikis/md/Ltictr_Proxy(J)) に送られる.
|
|
- ユーザが気にすることは何もない.このデータは実際には [**Feserver**](https://gitlab.nsl.tuis.ac.jp/iseki/lticontainerspawner/-/wikis/md/Feserver(J)) の feplg_nbwsモジュール または [**Ltictr_Proxy**](https://gitlab.nsl.tuis.ac.jp/iseki/lticontainerspawner/-/wikis/md/Ltictr_Proxy(J)) に送られる.
|
|
|
|
|
|
- **lms_iframe**
|
|
- **lms_iframe**
|
|
- iframe サポート.自動的に設定される.
|
|
- iframe サポート.自動的に設定される.
|
|
- host_url を設定しなくとも動くが,デフォルト設定の host_url ではセキュリティ的には少し甘い.可能ならば実際のURLを設定する.
|
|
- host_url を設定しなくとも動くが,デフォルト設定の host_url ではセキュリティ的には少し甘い.可能ならば実際のURLを設定する.
|
... | @@ -179,6 +289,7 @@ adminユーザで Moodleにログインする |
... | @@ -179,6 +289,7 @@ adminユーザで Moodleにログインする |
|
- jupyterhub のエラーメッセージ:http.cookies.CookieError: Invalid attribute 'samesite'
|
|
- jupyterhub のエラーメッセージ:http.cookies.CookieError: Invalid attribute 'samesite'
|
|
- Webブラウザによっても使用できない場合がある.
|
|
- Webブラウザによっても使用できない場合がある.
|
|
- iframe 機能を試す場合は,設定ファウルの以下の 3行のコメントを外す必要がある.
|
|
- iframe 機能を試す場合は,設定ファウルの以下の 3行のコメントを外す必要がある.
|
|
|
|
|
|
```python
|
|
```python
|
|
# if you charenge to show iframe, uncomment bellow 3 lines.
|
|
# if you charenge to show iframe, uncomment bellow 3 lines.
|
|
#if sys.version_info >= (3, 8) :
|
|
#if sys.version_info >= (3, 8) :
|
... | @@ -190,110 +301,43 @@ adminユーザで Moodleにログインする |
... | @@ -190,110 +301,43 @@ adminユーザで Moodleにログインする |
|
- このモジュールが使用するもの以外の カスタムパラメータには一切影響を及ぼさない.
|
|
- このモジュールが使用するもの以外の カスタムパラメータには一切影響を及ぼさない.
|
|
|
|
|
|
#### LTIカスタムパラメータ表示
|
|
#### LTIカスタムパラメータ表示
|
|
- 設定の **Show custom parameters** で Yes を選択すると,現在のLTIカスタムパラメータが表示される.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## 設定
|
|
|
|
### モジュールの設定
|
|
|
|
- **JupyterHub (container host) URL**
|
|
|
|
- JupyterHub に接続するためのURL. 例) https://castor5.nsl.tuis.ac.jp:443
|
|
|
|
- **Container system**
|
|
|
|
- 使用するコンテナシステムを Docker と Podman から選択する.(Moodleのホストにインストールされている方を選ぶ)
|
|
|
|
- **Container user**
|
|
|
|
- Docker または Podman が動くホスト上で,mod_lticontainer と通信を行うためのユーザを指定する.
|
|
|
|
- このユーザは Docker または Podman のソケットを読み書き可能で,Moodleホストから ssh ログイン可能でなければならない.
|
|
|
|
- **Password of ~~Docker/Podman~~ container user**
|
|
|
|
- Moodleホストから ssh ログインする場合の **Container user** のパスワード.
|
|
|
|
- **Show custom parameters**
|
|
|
|
- Yes にすると,**LTI Edit** 画面の下部に現在のLTIカスタムパラメータが表示される.
|
|
|
|
- **Image name filter words**
|
|
|
|
- **LTI Edit** 画面で **Container image** に表示されるコンテナイメージ名のフィルタリング指定.
|
|
|
|
- 名前の一部の文字列を指定すると,それを含んだコンテナイメージ名のみ表示される(**AND選択**).何も指定しない場合は,全てのコンテナイメージ名が表示される.
|
|
|
|
- 文字列の先頭にマイナス(**-**)を付けると,その文字列を含むコンテナイメージ名は表示されない(**OR選択**).表示指定よりもこちらの指定が優先される.
|
|
|
|
- **Does mod_lticontainer create Docker volumes ?**
|
|
|
|
- 設定を保存したタイミングで Dockerボリュームを作成するかどうかを指定する.
|
|
|
|
- システム的には Yes/No どちらでもよい.
|
|
|
|
|
|
|
|
### Moodle(LMS) ホスト側
|
|
|
|
- WWWサーバの実効ユーザは,そのホームディレクトリについて書き込み可能でなければならない.(ssh の設定データを書き込む必要があるため)
|
|
|
|
- 書き込可能でない場合は,"The web server process does not have write access to its own home directory. Please check the permissions" のエラーメッセージが表示される.
|
|
|
|
- 例)Apache の場合,ユーザ apache は /var/www に書き込み権限がなければならない.
|
|
|
|
- Docker ホストを使用する場合は,Moodle ホスト側に,少なくとも docker-ce-cli/docker-cli がインストールされている必要がある.
|
|
|
|
- Podman ホストを使用する場合は,Moodle ホスト側に,少なくとも podman-remote がインストールされている必要がある.
|
|
|
|
- CentOS 7 の場合は **openssh-askpass** パッケージが必要.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Docker/Podman ホスト側
|
|
|
|
- UNIXソケットファイルに対して,グループユーザが読み書き可能であること.
|
|
|
|
- リモートコントロール用ユーザが UNIXソケットファイルのグループに属していること(UNIXソケットファイルにアクセスするため).
|
|
|
|
- リモートコントロール用ユーザのログインシェルは不要.
|
|
|
|
|
|
|
|
### container_rsock.sh
|
|
- 設定の **Show custom parameters** で Yes を選択すると,現在のLTIカスタムパラメータが表示される.
|
|
- Docker/Podman のリモートコントロール用シェルスクリプト.
|
|
|
|
- Moodleホストから ssh のポートフォワーディングを使って,Docker/Podman ホストに UNIXのソケットファイルを繋げる.
|
|
|
|
- Docker/Podman ホスト側に,sshでログイン可能な(ログイン)ユーザが必要.
|
|
|
|
- そのユーザは Docker/Podman の UNIXソケットファイルを読み書き可能でなければならない.
|
|
|
|
- 最も簡単な手法としては UNIXソケットファイルのグループに対して読み書きのパーミッションを与え,ユーザをそのグループに入れる.またはUNIXソケットファイルのオーナをユーザにしてしまう.
|
|
|
|
- **トラブルシューティング**
|
|
|
|
- CentOS, Rocky Linuxでは一度設定しても元(root.root)に戻ってしまう.
|
|
|
|
- ```chown -R podman /var/run/podman/``` ユーザがpodmanの場合.
|
|
|
|
|
|
|
|
### Server/Webサービスを利用するためのトークンの取得
|
|
|
|
1. 管理者IDで「サイト設定」 -> 「サーバ」 -> 「ウェブサービス」 -> 「外部サービス」
|
|
|
|
1. 「**Jupyter Notebook Data**」の項目を確認
|
|
|
|
1. 「**Jupyter Notebook Data**」の 「許可ユーザ」をクリック
|
|
|
|
1. 適当なユーザ(教師ロールのユーザ)を選択し,許可ユーザとする
|
|
|
|
1. ウェブサービスのメニューまで戻って,「トークンを管理する」を選択.
|
|
|
|
1. 「追加」をクリック.
|
|
|
|
1. ユーザ名に先程選択したユーザ名を入れる.
|
|
|
|
1. サービスは「**Jupyter Notebook Data**」を選択
|
|
|
|
1. 「変更を保存する」をクリック
|
|
|
|
1. 「トークンを管理する」まで戻ると,ユーザ用のトークンができているので,それをコピーする.
|
|
|
|
1. トークンを mod_lticontainer の設定画面の "**Settings of Dashboard and Charts**" / "**XML-RPC Token for Web services**" に設定する.
|
|
|
|
2. 設定が終わったら,LTI Editで一度保存を行うこと.**保存を行わないと設定が LTIに反映されない.**
|
|
|
|
|
|
|
|
|
|
|
|
## 未サポート
|
|
|
|
#### Moodle with CentOS7
|
|
|
|
- **openssh-askpass** パッケージが必要.
|
|
|
|
- podman-remote で --url オプションが使用できないので,docker をインストールする.
|
|
|
|
|
|
|
|
#### Moodle 3.9.0 以下
|
|
|
|
- Moodle 3.9.0 以下では lti プラグインのカスタムパラメータを保存するカラムが VARCHAR(255) であるため,カスタムパラメータが255バイトを超えると,データベースへの書き込みに失敗する.
|
|
|
|
- どうしても3.9.0 以下で動かしたい場合は以下のコマンドで, **instructorcustomparameters** カラムを **longtext** に変換する.
|
|
|
|
- **alter table mdl_lti modify column instructorcustomparameters longtext;**
|
|
|
|
|
|
|
|
## 運用例
|
|
## 運用例
|
|
|
|
|
|
### 課題の作成と回収
|
|
### 課題の作成と回収
|
|
|
|
|
|
##### 課題の作成
|
|
##### 課題の作成
|
|
|
|
|
|
1. 設定
|
|
1. 設定
|
|
- Accessible users : 空欄
|
|
- Accessible users : 空欄
|
|
- Teachers : 自分のユーザ名
|
|
- Teachers : 自分のユーザ名
|
|
- Container image : 課題で使用するイメージ
|
|
- Container image : 課題で使用するイメージ
|
|
- Task volume : 先頭にマイナス(**-**)を付けたアクセス名.許可ユーザに自分のユーザ名
|
|
- Task volume : 先頭にマイナス(**\-**)を付けたアクセス名.許可ユーザに自分のユーザ名
|
|
1. JupyterHub にログイン.
|
|
2. JupyterHub にログイン.
|
|
1. Task volume 内で教材を作成.以前作成した教材ファイルとファイル名が被らないように注意する.他の適当なディレクトリで作業しても良い.
|
|
3. Task volume 内で教材を作成.以前作成した教材ファイルとファイル名が被らないように注意する.他の適当なディレクトリで作業しても良い.
|
|
|
|
|
|
##### 課題の公開
|
|
##### 課題の公開
|
|
|
|
|
|
1. 設定
|
|
1. 設定
|
|
- Accessible users : **\***
|
|
- Accessible users : **\***
|
|
- Teachers : 自分のユーザ名
|
|
- Teachers : 自分のユーザ名
|
|
- Container image : 課題で使用するイメージ
|
|
- Container image : 課題で使用するイメージ
|
|
- Task volume : 先頭にマイナス(**-**)を付けたアクセス名,許可ユーザは空欄.学生にはアクセス名は表示されない.
|
|
- Task volume : 先頭にマイナス(**\-**)を付けたアクセス名,許可ユーザは空欄.学生にはアクセス名は表示されない.
|
|
- Submit volume : 課題収集用ボリューム.適当なアクセス名を指定.許可ユーザは空欄.
|
|
- Submit volume : 課題収集用ボリューム.適当なアクセス名を指定.許可ユーザは空欄.
|
|
- **Personal volume : ボリューム名は Task volume と同じにする.アクセス名は適当な名前.許可ユーザは空欄.**
|
|
- **Personal volume : ボリューム名は Task volume と同じにする.アクセス名は適当な名前.許可ユーザは空欄.**
|
|
|
|
|
|
##### 課題の実施と提出(学生)
|
|
##### 課題の実施と提出(学生)
|
|
|
|
|
|
1. **学生は Personal volume 内にあるファイルを使って,そのまま課題を行う.**
|
|
1. **学生は Personal volume 内にあるファイルを使って,そのまま課題を行う.**
|
|
1. 提出は,課題ファイルを指定された提出用 Submit volume にコピーする.この際,ファイル名に自分の学籍番号,名前を追加する.
|
|
2. 提出は,課題ファイルを指定された提出用 Submit volume にコピーする.この際,ファイル名に自分の学籍番号,名前を追加する.
|
|
- ファイル提出の際には submit コマンドが使用できる.submit はファイル名にユーザ名を自動的に付け加えて,指定されたフォルダにコピーする.
|
|
- ファイル提出の際には submit コマンドが使用できる.submit はファイル名にユーザ名を自動的に付け加えて,指定されたフォルダにコピーする.
|
|
- 例)!submit kadai-1.ipynb
|
|
- 例)!submit kadai-1.ipynb
|
|
|
|
|
|
|
|
|
|
## 参考
|
|
## 参考
|
|
|
|
|
|
### [Moodle Moot 2022](https://moodlejapan.org/course/view.php?id=89)
|
|
### [Moodle Moot 2022](https://moodlejapan.org/course/view.php?id=89)
|
|
|
|
|
|
- Moodle Moot 2022 での発表スライド:[Moodle_JupyterHub.pdf](uploads/437b4e14fd3a3440bf4e2d9b001ce4c7/Moodle_JupyterHub.pdf) (2022/2/19)
|
|
- Moodle Moot 2022 での発表スライド:[Moodle_JupyterHub.pdf](uploads/437b4e14fd3a3440bf4e2d9b001ce4c7/Moodle_JupyterHub.pdf) (2022/2/19)
|
|
- 発表時のビデオもあります(デモで最後に Chartsを表示するのを忘れてしまった!) |
|
- 発表時のビデオもあります(デモで最後に Chartsを表示するのを忘れてしまった!) |
|
|
|
\ No newline at end of file |
|
<br> |
|
|