flagflag  
1: 2021-09-14 (Tue) 19:13:53 iseki source
Line 1: Line 1:
 +* Moodle & JupyterHub 連携 [#t72c88ce]
 +- LTI カスタムパラメータを使用した Moodle + JupyterHub 連携を研究中
 +- iseki@rsch.tuis.ac.jp
 +- [[Moodle]]
 +- [[JupyterHub]]
 +- [[Docker]]
 +- [[LTI]]
 +- [[LTI Hack>Moodle/Moodle-LTI]]
 +
 +- [[MDLDockerSpawner>JupyterHub/MDLDockerS​pawner]]
 +- [[mod_mdlds]]
 +-  [[feserver]]
 +#br
 +
 +** 既存システム [#yb4a054d]
 +
 +*** [[Moodle]] [#y96f887e]
 +- Moodle 3.5以上(それ未満でも動くかもしれない.要 LTIサポート)
 +- JupyterHub が動くホストとは別のホストでもOK
 +- 外部サービス,Webサービスを使用する.
 +#br
 +
 +**** 外部サービス [#ia78ee48]
 +- LTI 認証モジュールと連携して SSOを実現する.
 +- 管理者IDで,「サイト管理」=> 「プラグイン」=> 「外部ツール:ツールを管理する」(=>「ツールを手動設定する」)
 +-- デフォルト起動コンテナは「新しいウィンドウ」にする.
 +#br
 +
 +**** Webサービス [#k4138c47]
 +- Feserver からの XML-RPC を受け入れて,データをDBに格納する.
 +#br
 +
 +*** [[Docker]] [#cd2ef212]
 +**** CentOS8 [#ufeb99f8]
 + (base) # dnf config-manager --add-repo https://download.docker.com/linux/centos​/docker-ce.repo
 + (base) # dnf -y install docker-ce docker-ce-cli containerd.io --nobest --allowerasing
 + (base) # systemctrl enable docker
 + (base) # systemctrl start docker
 + (base) # docker pull jupyterhub/singleuser
 + (base) # docker pull jupyter/datascience-notebook
 +#br
 +
 +*** [[JupyterHub]]/[[SystemUserSpawner>Jupyt​erHub/SystemUserSpawner]]  [#z52a6900]
 +**** [[JupyterHub]] [#m57f62f0]
 + (base) # conda create -n jupyterhub python=3.8 -y
 + (base) # conda activate jupyterhub
 + (jupyterhub) # conda install -c conda-forge notebook -y
 + (jupyterhub) # conda install -c conda-forge jupyterlab -y
 + (jupyterhub) # conda install -c conda-forge jupyterhub==1.4.2  -y
 + (jupyterhub) # conda install -c conda-forge voila -y
 + (jupyterhub) # conda install jupyter_client -y
 + (jupyterhub) # pip --no-cache-dir install git+https://github.com/jupyterhub/docker​spawner.git   #(必要なら)
 +- 作業ディレクトリ
 +-- mkdir -p /var/lib/jupyterhub/
 +- FireWall
 +-- firewall-cmd --add-port 8000/tcp --permanent
 +-- firewall-cmd --reload
 +
 +- vi jupyterhub_config.py
 +-- IPアドレス,サーバ証明書,Dockerイメージの選択
 +- 起動
 +-- conda activate jupyterhub
 +-- jupyterhub -f jupyterhub_config.py
 +#br
 +
 +****  [[SystemUserSpawner>JupyterHub/SystemUse​rSpawner]]  [#m07110de]
 +- JupyterHub の DockerSpawner を継承.
 +-- システムのユーザを使用可能.
 +-- システムのユーザのホーム領域をマウント可能.
 +
 +- 2021 7/12(またはそれ以降) 版推奨
 +- https://github.com/jupyterhub/dockerspaw​ner/blob/master/dockerspawner/systemuser​spawner.py
 +- JupyterHub のインストールで,一緒にインストールされる.(バージョンが古い場合は手動インストール)
 +
 +- SystemUserSpawner を動かすには /etc/passwd(/etc/group) 情報が必要
 +-- LDAP か下記の altfiles を使用する
 +#br
 +
 +**** [[altfiles>NSS]] [#n90bdca5]
 +- SystemUserSpawner 用の [[NSS]] を使用した システムのユーザ情報の入手方法([[LDAP]] を使用する手もある)
 +- getent passwd と getent group で情報が取れるようになれば OK
 +- ファイルの設置場所はコンパイル時に指定
 +
 + # git clone https://github.com/aperezdc/nss-altfiles​.git
 + # cd nss-altfiles/
 + # ./configure --prefix=/usr --datadir=/usr/local/etc --with-type=pwd,grp
 + # make
 + # make install
 + # ln -s /usr/lib/libnss_altfiles.so.2 /usr/lib64/libnss_altfiles.so
 + # ldconfig
 +
 + # cd /usr/local/etc
 + # wget https://XXXX.tuis.ac.jp/.../passwd
 + # wget https://XXXX.tuis.ac.jp/.../group          (group は 必要な物だけ /etc/group を編集しても良い)
 +
 +- /etc/nsswitch.conf
 + passwd: files altfiles
 + group:  files altfiles
 +- ユーザアカウントの整合性を取る.
 +#br
 +
 +**** [[LTI]] [#g284e3bf]
 +- Moodle と連携する為の 認証モジュール(Moodleの外部サービスを使用)
 +- 先に authlib を入れておく.
 +-- conda install oauthlib
 +
 +- v1.2.0 release (2021 9/2)
 +-- https://pypi.org/project/jupyterhub-ltia​uthenticator/1.2.0/
 +-- Patch 不要
 +
 + (jupyterhub)# pip install jupyterhub-ltiauthenticator==1.2.0
 +
 +- Jupyterhub_conifg.py
 +
 + # for LTI v1.2.0
 + c.JupyterHub.authenticator_class = 'ltiauthenticator.LTIAuthenticator'
 + c.LTI11Authenticator.consumers = {
 +   "b18e82ec683724743236fade71350720029a2914​4a585c66f6741d8e9c6e0d83" : "c0fe2924dbb0f4701d898d36aaf9fd89c7a3ed3a​7db6f0003d0e825a7eccb41c"
 + }
 + c.LTI11Authenticator.username_key = 'ext_user_username'
 +
 +***** old [#i7f50c71]
 +- ltiauthenticator-1.0.0.path は MDLDockerSpanwer に同梱
 + pip install jupyterhub-ltiauthenticator
 + cd ......./ltiauthenticator
 + patch -p1 < ~/mdldockerspawner/etc/ltiauthenticator-​1.0.0.path
 +#br
 +
 +**** cull_idle_servers.py [#n8a3f52c]
 +- [[cull_idle_servers>JupyterHub/DockerSpa​wner#zc9428f7]]
 +- 接続の切れた docker コンテナを削除
 +
 +- https://github.com/jupyterhub/jupyterhub​/tree/a6b7e303df03865d6420f6bccdf627b39f​1d0dc1/examples/cull-idle
 +- wget で DLして /usr/local/bin にコピー
 +-- wget https://raw.githubusercontent.com/jupyte​rhub/jupyterhub/a6b7e303df03865d6420f6bc​cdf627b39f1d0dc1/examples/cull-idle/cull​_idle_servers.py
 +#br
 +
 +** 連携拡張 by [[NSL]] [#ma810a39]
 +- MS Windows のことは何も考慮していませんので,MS Windowsでは多分動きません.
 +#br
 +
 +*** [[MDLDockerSpawner>JupyterHub/MDLDockerS​pawner]] [#k758b918]
 +- https://gitlab.nsl.tuis.ac.jp/iseki/mdld​ockerspawner
 +
 +- [[Moodle]] と [[JupyterHub]] の連携をとるための Spawner クラス.
 +- [[SystemUserSpawner>JupyterHub/SystemUse​rSpawner]] クラスを継承.
 +- 現時点(2021/08)では jupyterhub_config.py  の中で実装
 +#br
 +
 +**** 機能 [#o44dc5d5]
 +- ユーザグループ機能の完全サポート
 +- Moodle からの LTI カスタムパラメータを受信して動作.
 +- 環境変数を使用した start.sh による Jupyter Lab/Notebook コンテナの動作制御.
 +#br
 +- 教師ユーザと学生ユーザの分離.
 +- ユーザ毎の Volume のマウント,及びアクセス権(教師と学生)の設定.
 +-- 教材の配布と収集に便利
 +- Volume への任意名でのアクセス.
 +- 起動イメージのリモート選択.Jupyter Lab/Notebook でないイメージを選択すると漏れなく死にます :-o
 +- 起動 URL(Lab/Notebook)のリモート選択.
 +- iframe サポート
 +#br
 +
 +**** Volume 名に関する制約 [#q7b847fc]
 +- ボリューム名には小文字のアルファベット・数字以外は使用できない.特殊文字も使用できない.
 +- 大文字のボリューム名は小文字に変換される.
 +- 同じボリューム名・アクセス名を指定した場合は,最初の物が優先される.
 +- 一個の JupyterHub に対して複数の Moodle からのアクセスをサポート
 +
 +#br
 +
 +**** 注意事項 [#n57178a3]
 +- Moodle で埋め込み(iframe)表示を行う場合は,Moodle と JupyterHub を同じホストにするか,Moodle のホスト上で feserver を動かす.
 +#br
 +
 +**** 起動 [#bdc8edbc]
 +- jupyterhub -f mdldockerspawner/etc/jupyterhub_config.p​y
 +#br
 +
 +*** [[mod_mdlds]]  [#hbfc4f2f]
 +- https://gitlab.nsl.tuis.ac.jp/iseki/mod_​mdlds
 +
 +- MDLDockerSpawner サポート用 Moodleモジュール
 +
 +- docker のリモート制御について
 +-- docker クライアント(/usr/bin/docker)が必要
 +-- dockerd が動いているホストに ssh できる,ホスト上のユーザ(dockerグループに所属)が必要
 +#br
 +
 +**** 機能 [#m538ed2a]
 +- LTI のカスタムパラメータ管理
 +- Docker のリモート制御
 +-- イメージの一覧の取得
 +-- Volume 管理(作成,表示,削除)
 +- WebService
 +-- feserver (feplg_nbws.so)からのデータを XML-RPC で受信し,データベースに格納
 +-- データ利用については ''&font(Red){未実装};''.
 +- https://docs.moodle.org/dev/Charts_API
 +
 +#br
 +
 +*** [[feserver]]  [#va0d030b]
 +- http://www.nsl.tuis.ac.jp/svn/linux/fese​rver/trunk
 +
 +- feserver フロントエンドサーバ(TCP中継サーバ)
 +- MITM 的動作を行う私的試験用ツール.(一応公開もしている)
 +- 各種モジュールを読み込むことにより,色々な通信データの処理が可能.
 +- コンパイルに [[JunkBox_Lib]] が必要
 +#br
 +**** 起動例 [#d9e04c03]
 +-  ./fesvr -h 172.22.1.75:8000 -p 9000 -m feplg_nbws.so -c -s --conf nbsw.conf
 +
 +- Usage... ./fesvr -h host_name[:port] -p port -m module_path [-s] [-c] [-i] [-u user] [-f pid_file] [-d]  [--conf config_file]  [--cert cert_file] [--key key_file]
 +-- -h : サーバFQDN + ポート番号.サーバのポート番号を省略した場合は,ローカルポートの番号と同じになる.必須
 +-- -p : ローカルポート番号.必須
 +-- -m : 処理モジュール.必須
 +-- -u : 実効ユーザ名
 +-- -i : デーモンモードを無効化.スーパデーモン経由で使用する場合に指定する
 +-- -d : デバッグモード.喧しモード.
 +-- -s : サーバに対してSSL/TLS接続になる(fesrv はSSL/TLSクライアントとなる).サーバ証明書の検証は行わない.
 +-- -c : クライアントに対してSSL/TLS接続になる(fesrv はSSL/TLSサーバとなる).
 +-- --conf : 設定ファイル指定
 +-- --cert : -c を指定した場合のサーバ証明書:PEM形式.  デフォルトは /etc/pki/tls/certs/postfix.pem
 +-- --key  : -c を指定した場合のサーバの秘密鍵:PEM形式.デフォルトは /etc/pki/tls/private/postfix.key
 +#br
 +
 +**** feplg_nbws.so モジュール [#abc6a346]
 +- Moodle と JupyterHub の中間に位置し,通信情報(主に WebSocktの通信情報)を収集して XML-RPC で Moodle に返すためのモジュール
 +- ユーザから見ると,リバースプロキシのように見える.
 +- 機能
 +-- 通信の中継
 +-- WebSocket 通信の解析.
 +-- HTTP(S)通信の解析.
 +-- Cookie の挿入.
 +-- Moodle への XML-RPC 通信.(MoodleのWebサービスを使用)
 +#br
 +
 +***** feplg_nbws.so の 設定ファイル [#jce86de4]
 +- Moodle_Host = XML-RPC を行うホスト名(FQDNまたはIPアドレス).デフォルトは localhost
 +- Moodle_Port = XML-RPC を行うホストのポート番号.デフォルトは 80
 +- Moodle_TLS = XML-RPC を行う際に HTTPS を使用するかどうか.デフォルトは FALSE.
 +-- 注:HTTPS通信を行う場合,相手(Moodleホスト)のサーバ証明書は検証しない.
 +- Moodle_URL = XML-RPC を行うURLのディレクトリ情報.デフォルトは /webservice/xmlrpc/server.php
 +- Moodle_Token = Moodle から発行されたトークン.下記参照(必須)
 +- Moodle_DBAns = XML-RPC を行った場合の返答を表示するかどうか.デバッグ用.デフォルトは FALSE
 +- Moodle_Servide = XML-RPC のサービス名.デフォルトから変更する必要はない.変更すると動かなくなる.デバッグ用.デフォルトは mod_mdlds_write_nbdata
 +- Moodle_HTTP = XML-RPC を行う際の HTTPのプロトコルバージョン.1.1 か 1.0 を指定.多分 1.1 で問題ない.デフォルトは 1.1
 +#br
 +- 以下,各モジュール共通の設定.コマンドラインで指定した場合は,そちらが優先.
 +-- Fesvr_Server_Cert = Feserver 本体用の設定.HTTPS通信を行う場合のサーバ証明書(PEM形式)
 +--- デフォルトは /etc/pki/tls/certs/postfix.pem
 +-- Fesvr_Private_Key = Feserver 本体用の設定.HTTPS通信を行う場合の秘密鍵ファイル(PEM形式)
 +---デフォルトは /etc/pki/tls/private/postfix.key
 +
 +#br
 +
 +***** Moodle 側の設定 (Webサービスを利用するためのトークンの取得)[#a1c43efd]
 ++  管理者IDで「サイト設定」 -> 「プラグイン」 -> 「ウェブサービス」 -> 「外部サービス」
 +++ 「Jupyter Lab/Notebook Data」の項目を確認
 +++ 「Jupyter Lab/Notebook Data」の 「許可ユーザ」をクリック
 ++++ 適当なユーザ(教師ロールのユーザ)を選択し,許可ユーザとする
 ++ ウェブサービスのメニューまで戻って,「トークンを管理する」を選択.
 +++ 「追加」をクリック.
 ++++ ユーザ名に先程選択したユーザ名を入れる.
 ++++ サービスは「Jupyter Lab/Notebook Data」を選択
 ++++ 「変更を保存する」をクリック
 +++ 「トークンを管理する」まで戻ると,ユーザ用のトークンができているので,それをコピーする.
 +++ トークンは feplg_nbws の設定ファイルの Moodle_Token に設定する.
 +
 +#br
 +
 +*** ipynb_conv [#b15438d1]
 +- ipynb ファイルの(コード)タグに解析用の通し番号を入れるツール
 +- MDLDockerSpawner に同梱(C言語)
 +- phpバージョンもあり (現時点で使用予定なし.サンプルコード.)
 +#br
 +
 +*** Jupyter Lab/Notebook コンテナイメージ [#qc8d3ed8]
 +- 機能を全て利用するには,専用の(''start.sh'' を入れ替えた)コンテナイメージが必要.
 +- MDLDockerSpawner に Dokerfile 同梱
 +- [[JupyterHub/devel]]
 +#br
 +- start.sh 入れ替え後でも,通常の DockerSpanwer で問題なく起動できるようにしたい(下位互換性)
 +#br


Front page   New List of Pages Search Recent changes   Help   RSS of recent changes (RSS 1.0) RSS of recent changes (RSS 2.0) RSS of recent changes (RSS Atom)

Site Search

Login

Username:

Password:


Lost Password?
Register now!!

Sub Menu

mini Calendar

Last MonthMay 2024Next Month
Su Mo Tu We Th Fr Sa
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Today

Who's Online

62 user(s) are online (14 user(s) are browsing xpwiki)

Members: 0
Guests: 62

more...

Access Counter

Today : 1371713717137171371713717
Yesterday : 1766217662176621766217662
Total : 2356904923569049235690492356904923569049235690492356904923569049
Powered by XOOPS Cube 2.1© 2001-2006 XOOPS Cube Project
Design by XoopsDesign.com