flagflag  If you want to see English page, please click "English" Button at Left.
1: 2021-09-14 (火) 19:13:53 iseki ソース
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


トップ   新規 ページ一覧 単語検索 最終更新   ヘルプ   最終更新のRSS 1.0 最終更新のRSS 2.0 最終更新のRSS Atom

サイト内 検索

ログイン

ユーザー名:

パスワード:


パスワード紛失
新規登録

サブ メニュー

ミニカレンダー

前月2024年 4月翌月
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
<今日>

オンライン状況

81 人のユーザが現在オンラインです。 (29 人のユーザが xpwiki を参照しています。)

登録ユーザ: 0
ゲスト: 81

もっと...

アクセスカウンタ

今日 : 4317431743174317
昨日 : 2042920429204292042920429
総計 : 2338372323383723233837232338372323383723233837232338372323383723
Powered by XOOPS Cube 2.1© 2001-2006 XOOPS Cube Project
Design by XoopsDesign.com