Home
News
Forum
Wiki
Blog
Contents
Gallery
Movies
Downloads
About NSL
If you want to see English page, please click "English" Button at Left.
[
タイトル一覧
|
ページ一覧
|
新規
|
単語検索
|
最終更新
|
ヘルプ
]
Moodle+JupyterHub
をテンプレートにして作成
[
トップ
]
[ ]
開始行:
* This page is out of date.
* Please see https://polaris.star-dust.jp/pukiwiki/?Moodl...
* Moodle & JupyterHub 連携
- %%''現行システムは JupyterHub-2.3.1, 3.1.1 では動作する...
-- 動くようになりました.
- LTI カスタムパラメータを使用した Moodle + JupyterHub 連...
- [[Moodle]]
- [[JupyterHub]]
- [[Docker]]
- [[Podman]]
- [[LTI]]
- [[LTI Hack>Moodle/Moodle-LTI]]
- [[LTIDockerSpawner>JupyterHub/LTIDockerSpawner]]
- [[LTIPodmanSpawner>JupyterHub/LTIPodmanSpawner]]
- [[mod_lticontainer]]
- %%[[feserver]]%%
- [[Ltictr_Proxy]]
#br
*** 最新メモ
**** 2023/05/07
- JupyterHub v3 で Podman も Docker 同様に扱えるようにな...
-- JupyterHub v3 では jupyterhub_podman_config.py と最新...
-- JupyterHub v3 で最新の Dockerイメージ(ltids)を使用し...
- JupyterHub v4 では XSRFクッキー関連で,[[ltiauthenticat...
-- site-packages/jupyterhub/handlers/base.py の関数 check...
--- base.py- 2023-05-07 01:44:18.173130119 -0400
+++ base.py 2023-05-07 01:44:31.750265669 -0400
@@ -235,7 +235,8 @@
def check_xsrf_cookie(self):
try:
- return super().check_xsrf_cookie()
+ return True
+ #return super().check_xsrf_cookie()
except Exception as e:
# ensure _juptyerhub_user is defined on rej...
if not hasattr(self, "_jupyterhub_user"):
#br
** GitHub
*** LTIContainerSpawner
- https://github.com/jupyter-fumihax/lticontainerspawner
#br
*** mod_lticontainer
- https://github.com/moodle-fumihax/mod_lticontainer
#br
** Gitlab
*** Gitlab Wiki
- English: https://gitlab.nsl.tuis.ac.jp/iseki/lticontain...
- English: https://gitlab.nsl.tuis.ac.jp/iseki/mod_lticon...
- Japanese: https://gitlab.nsl.tuis.ac.jp/iseki/lticontai...
- Japanese: https://gitlab.nsl.tuis.ac.jp/iseki/mod_ltico...
#br
*** Source Code
- LTIContainerSpawner
-- https://gitlab.nsl.tuis.ac.jp/iseki/lticontainerspawner/
- mod_lticontainer
-- https://gitlab.nsl.tuis.ac.jp/iseki/mod_lticontainer/
#br
** 既存システム
*** [[Moodle]]
- Moodle 3.5以上(それ未満でも動くかもしれない.要 LTIサ...
- JupyterHub が動くホストとは別のホストでもOK
- 外部サービス,Webサービスを使用する.
- LTIDockerSpawner を使用する場合はMoodle ホスト側に,少...
- LTIPodmanSpawner を使用する場合はMoodle ホスト側に,少...
#br
#br
**** 外部サービス
- LTI 認証モジュールと連携して SSOを実現する.
- 管理者IDで,「サイト管理」=> 「プラグイン」=> 「外部ツ...
-- デフォルト起動コンテナは「新しいウィンドウ」にする.
#br
**** Webサービス
- Option
- Feserver からの XML-RPC を受け入れて,データをDBに格納...
-- データ収集を行わない(Feserverを使用しない)なら,不必要
#br
*** Container
- Docker または Podman が使用可能
#br
**** [[Docker]]
- CentOS8
(base) # dnf config-manager --add-repo https://download....
(base) # dnf -y install docker-ce docker-ce-cli containe...
(base) # systemctrl enable docker
(base) # systemctrl start docker
(base) # docker pull jupyterhub/singleuser
(base) # docker pull jupyter/datascience-notebook
#br
**** [[Podman]]
- CentOS8
(base) # dnf -y install podman
(base) # dnf -y install podman-remote
(base) # dnf -y install podman-docker
#br
*** [[JupyterHub]]
**** with pip
# yum install python39
# alternatives --config python3
# /usr/bin/pip3.9 install --upgrade pip
# yum install npm
# npm install -g configurable-http-proxy
# pip install setuptools_rust
# pip install jupyterhub
# pip install dockerspawner
# pip install --upgrade notebook
# pip install --upgrade jupyterlab
# jupyterhub --version
# jupyter --version
# jupyter notebook --version
# jupyter lab --version
**** with conda
(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==...
(jupyterhub) # conda install -c conda-forge voila -y
(jupyterhub) # conda install jupyter_client -y
(jupyterhub) # pip --no-cache-dir install git+https://gi...
**** 設定&起動
- 作業ディレクトリ
-- 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 (condaの場合)
-- jupyterhub -f jupyterhub_config.py
#br
**** %%[[SystemUserSpawner>JupyterHub/SystemUserSpawner]...
- ''最新版では未使用''
- ''Container として Docker を使用する場合に必要.Podman ...
-- JupyterHub の DockerSpawner を継承.
--- システムのユーザを使用可能.
--- システムのユーザのホーム領域をマウント可能.
-- 2021 7/12(またはそれ以降) 版推奨
-- https://github.com/jupyterhub/dockerspawner/blob/maste...
-- JupyterHub のインストールで,一緒にインストールされる...
#br
*** NSS
- ユーザ情報として /etc/passwd(/etc/group) の情報が必要
- システム(Containerを動かすホスト上)のユーザでなくても...
-- LDAP か下記の altfiles を使用する
#br
**** [[altfiles>NSS]]
- ユーザの passwd, grouop 情報が必要
- SystemUserSpawner 用の [[NSS]] を使用した システムのユ...
- getent passwd と getent group で情報が取れるようになれ...
- ファイルの設置場所はコンパイル時に指定
# git clone https://github.com/aperezdc/nss-altfiles.git
# cd nss-altfiles/
# ./configure --prefix=/usr --datadir=/usr/local/etc --w...
# make
# make install
# ln -s /usr/lib/libnss_altfiles.so.2 /usr/lib64/libnss_...
# ldconfig
# cd /usr/local/etc
# wget https://XXXX/.../passwd
# wget https://XXXX/.../group (group は 必要な...
- /etc/nsswitch.conf
passwd: files altfiles
group: files altfiles
- ユーザアカウントの整合性を取る.
-- システム(Containerを動かすホスト上)のユーザとユーザ...
#br
*** [[LTI Authenticator>LTI]]
- Moodle と連携する為の 認証モジュール(Moodleの外部サー...
- 先に authlib を入れておく.
-- conda install oauthlib or pip install oauthlib
- v1.5.0 release
-- https://pypi.org/project/jupyterhub-ltiauthenticator/1...
- v1.2.0 release (2021 9/2)
-- https://pypi.org/project/jupyterhub-ltiauthenticator/1...
-- Moodle に対して Patch 不要
(jupyterhub)# pip install --upgrade jupyterhub-ltiauthen...
- Jupyterhub_conifg.py
# for LTI v1.2.0
c.JupyterHub.authenticator_class = 'ltiauthenticator.LTI...
c.LTI11Authenticator.consumers = {
"b18e82ec683724743236fade71350720029a29144a585c66f674...
}
c.LTI11Authenticator.username_key = 'ext_user_username'
***** old
- ltiauthenticator-1.0.0.path は MDLDockerSpanwer に同梱
pip install jupyterhub-ltiauthenticator
cd ......./ltiauthenticator
patch -p1 < ~/mdldockerspawner/etc/ltiauthenticator-1.0....
#br
*** Culler(option)
- オプション機能.無くても良い.
- 接続の切れた docker コンテナを削除する
- 使用しない場合は,LTIDockerSpawner/LTIPodmanSpawner の...
-- [[cull_idle_servers>JupyterHub/DockerSpawner#zc9428f7]]
#br
**** cull_idle_servers.py
- https://github.com/jupyterhub/jupyterhub/tree/a6b7e303d...
-- 色々と試した中ではこれが一番良かった.
- wget で DLして /usr/local/bin にコピー
pip3 install wheel
pip3 install pycurl (pthon3-devel が必要)
wget https://raw.githubusercontent.com/jupyterhub/jupyte...
cp cull_idle_servers.py /usr/local/bin
chmod a+rx /usr/local/bin/cull_idle_servers.py
#br
** 連携拡張 by [[NSL]]
- MS Windows のことは何も考慮していませんので,MS Windows...
#br
*** Moodle
- LTIDockerSpawner を使用する場合はMoodle ホスト側に,少...
- LTIPodmanSpawner を使用する場合はMoodle ホスト側に,少...
#br
*** [[LTIContainerSpawner>JupyterHub/LTIContainerSpawner]]
- https://gitlab.nsl.tuis.ac.jp/iseki/lticontainerspawner
-- git clone https://gitlab.nsl.tuis.ac.jp/iseki/lticonta...
- [[Moodle]](その他の LTIコンシューマ) と [[JupyterHub]...
- LTIContainerSpawner は LTIDockerSpawner と LTIPodmanSpa...
-- ''LTIContainerSpawner = LTIDockerSpawner + LTIPodman...
git clone https://gitlab.nsl.tuis.ac.jp/iseki/lticontain...
cd lticontainerspawner/
make
#br
**** [[LTIDockerSpawner>JupyterHub/LTIDockerSpawner]]
- JupyterHub/[[SystemUserSpawner>JupyterHub/SystemUserSpa...
- 現時点(2021/10)では ''etc/jupyterhub_docker_config.py...
#br
**** [[LTIPodmanSpawner>JupyterHub/LTIPodmanSpawner]]
- [[Podman]] が使用可能
- JupyterHub/Spawner クラスを継承
- niklas netter 氏の [[podmanspawner>PodmanSpawner]] を利...
-- https://github.com/gatoniel/podmanspawner
- 現時点(2021/10) では pod の起動に Popen() を使用してい...
- 設定ファイルは'' etc/jupyter_podman_config.py''
#br
**** 機能
- ユーザグループ機能の完全サポート
- Moodle(その他の LTIコンシューマ)からの LTI カスタムパ...
- 環境変数を使用した start.sh による Jupyter Lab/Notebook...
#br
- 以下の機能をコースの外部サービス毎に設定可能
-- 教師ユーザと学生ユーザの分離.
-- ユーザ毎の Volume のマウント,及びアクセス権(教師と学...
--- 教材の配布と収集に便利
-- ユーザの作業用 Volumeの設定
-- Volume への任意名でのアクセス.
-- 起動イメージのリモート選択.表示名のフィルタリング.Ju...
-- 起動 URL(Lab/Notebook)の選択.
-- %%iframe サポート%% 一部のみサポート:動くための条件...
-- CPU/Momery の制限
#br
**** Volume 名に関する制約
- ボリューム名には小文字のアルファベット・数字以外は使用...
- 大文字のボリューム名は小文字に変換される.
- ボリュームに対して同じボリューム名・アクセス名を指定し...
- 一個の JupyterHub に対して複数の Moodle からのアクセス...
- アクセス名の先頭に - を付けた場合は,教師ユーザのみシン...
- 注)アクセス名:ボリュームへ張られるシンボリックリンク...
#br
**** 注意事項
- iframe
-- %%Moodle で埋め込み(iframe)表示を行う場合は,Moodle ...
-- %%iframe 対応.ただし tornado が cookie の samesite を...
-- tornado のバージョンやブラウザの種類によって条件が変わ...
#br
**** 起動
- jupyterhub -f lticontainerspawner/etc/jupyterhub_docker...
- jupyterhub -f lticontainerspawner/etc/jupyterhub_podman...
#br
*** [[mod_lticontainer]]
- https://gitlab.nsl.tuis.ac.jp/iseki/mod_lticontainer
- MDLDockerSpawner/LTIPodmanSpawner サポート用 Moodleモジ...
- docker のリモート制御について
-- docker クライアント(docker-cd-cli : /usr/bin/docker) ...
-- dockerd が動いているホストに ssh できる,ホスト上のユ...
- podman のリモート制御について
-- podman コマンド(podman-remote) が必要
-- podman が動いているホストに ssh できる,ホスト上のユー...
#br
**** 機能
- LTI のカスタムパラメータ管理
- Docker/Podman のリモート制御
-- イメージの一覧の取得
-- Volume 管理(作成,表示,削除)
- WebService
-- feserver (feplg_nbws.so)からのデータを XML-RPC で受...
-- データ利用については ''&font(Red){未実装};''.
- https://docs.moodle.org/dev/Charts_API
#br
**** [[Docker]] を使う場合
- JupyterHub/Docker が起動するホスト上にアクセス用ユーザ...
-- %%アクセス用ユーザのホームディレクトリについて,アクセ...
--- %%CentOS8 で嵌った.ユーザを dockerにしたんだが,dock...
-- アクセス用ーザが docker のグループに属していること(UN...
-- アクセス用ユーザのログインシェルは不要-- アクセス用ー...
-- アクセス用ユーザのログインシェルは不要
- Webサーバの実効ユーザが自分のホームディレクトリについて...
#br
**** [[Podman]] を使う場合
- JupyterHub/Podman が起動するホスト上にアクセス用ユーザ...
-- アクセス用ユーザのログインシェルは不要
-- Moodleホストからのアクセスには podman-remote か podman...
- Webサーバの実効ユーザが自分のホームディレクトリについて...
- Podman が起動するホスト上の socket は /var/run/podman/p...
-- /var/run/podman/ のパーミッションを drwxrws--- とし,...
-- socket を読み書きできるアクセス用ユーザを作成する(グ...
--- 例えば podman グループ(アクセス用ユーザはこのグルー...
- /usr/lib/systemd/system/podman.socket
[Unit]
Description=Podman API Socket
Documentation=man:podman-system-service(1)
[Socket]
ExecStartPre=/usr/bin/chgrp podman /var/run/podman
ExecStartPre=/usr/bin/chmod g+rwxs /var/run/podman
ListenStream=%t/podman/podman.sock
SocketMode=0660
[Install]
WantedBy=sockets.target
# adduser podman
# passwd podman
# vi /usr/lib/systemd/system/podman.socket
# mkdir /var/run/podman
# systemctl enable podman
# systemctl start podman
- Trouble
-- podman.socket が勝手に再起動を繰り返す.
-- 再起動する度に /var/run/podman が作り直されるので,パ...
-- 制御用のユーザプロセスが ソケットにアクセスできなくな...
--- これは CentOS7 での現象(バージョンが古いせいかも)....
#br
*** [[Ltictr_Proxy]]
- feserver + feplg_nbws.so の代わりとなる ''[[Ltictr_Prox...
#br
*** 参考:[[feserver]]
- http://www.nsl.tuis.ac.jp/svn/linux/feserver/trunk
- feserver フロントエンドサーバ(TCP中継サーバ)
- MITM 的動作を行う私的試験用ツール.(一応公開もしている...
- 各種モジュールを読み込むことにより,色々な通信データの...
- コンパイルに [[JunkBox_Lib]] が必要
# svn co http://www.nsl.tuis.ac.jp/svn/linux/JunkBox_Lib...
# cd JunkBox_Lib
# ./config.sh
# ./configure --enable-ssl
# make
# cd ..
# svn co http://www.nsl.tuis.ac.jp/svn/linux/feserver/tr...
# cd feserver
# make
# vi nbsw.conf
# ./fesvr ...... -m feplg_nbws.so --conf nbsw.conf
#br
**** 起動例
- ./fesvr -h 172.22.1.75:8000 -p 9000 -m feplg_nbws.so -...
- Usage... ./fesvr -h host_name[:port] -p port -m module_...
-- -h : サーバFQDN + ポート番号.サーバのポート番号を省略...
-- -p : ローカルポート番号.必須
-- -m : 処理モジュール.必須
-- -u : 実効ユーザ名
-- -i : デーモンモードを無効化.スーパデーモン経由で使用...
-- -d : デバッグモード.喧しモード.
-- -s : サーバに対してSSL/TLS接続になる(fesrv はSSL/TLS...
-- -c : クライアントに対してSSL/TLS接続になる(fesrv はSS...
-- --conf : 設定ファイル指定
-- --cert : -c を指定した場合のサーバ証明書:PEM形式.設...
-- --key : -c を指定した場合のサーバの秘密鍵:PEM形式....
#br
**** feplg_nbws.so モジュール
- Moodle と JupyterHub の中間に位置し,通信情報(主に Web...
- ユーザから見ると,リバースプロキシのように見える.
- 機能
-- 通信の中継
-- WebSocket 通信の解析.
-- HTTP(S)通信の解析.
-- Cookie の挿入.
-- Moodle への XML-RPC 通信.(MoodleのWebサービスを使用)
#br
***** feplg_nbws.so の 設定ファイル(nbws.conf)
- Moodle_Host = XML-RPC を行うホスト名(FQDNまたはIPアド...
- Moodle_Port = XML-RPC を行うホストのポート番号.デフォ...
- Moodle_TLS = XML-RPC を行う際に HTTPS を使用するかどう...
-- 注:HTTPS通信を行う場合,相手(Moodleホスト)のサーバ証...
- Moodle_URL = XML-RPC を行うURLのディレクトリ情報.デフ...
- Moodle_Token = Moodle から発行されたトークン.下記参照...
- Moodle_DBAns = XML-RPC を行った場合の返答を表示するかど...
- Moodle_Servide = XML-RPC のサービス名.デフォルトから変...
- Moodle_HTTP = XML-RPC を行う際の HTTPのプロトコルバージ...
#br
- 以下,各モジュール共通の設定.コマンドラインで指定した...
-- Fesvr_Server_Cert = Feserver 本体用の設定.HTTPS通信を...
--- デフォルトは /etc/pki/tls/certs/server.pem
-- Fesvr_Private_Key = Feserver 本体用の設定.HTTPS通信を...
---デフォルトは /etc/pki/tls/private/key.pem
#br
***** Moodle 側の設定 (Webサービスを利用するためのトーク...
+ 管理者IDで「サイト設定」 -> 「プラグイン」 -> 「ウェブ...
++ 「Jupyter Lab/Notebook Data」の項目を確認
++ 「Jupyter Lab/Notebook Data」の 「許可ユーザ」をクリック
+++ 適当なユーザ(教師ロールのユーザ)を選択し,許可ユー...
+ ウェブサービスのメニューまで戻って,「トークンを管理す...
++ 「追加」をクリック.
+++ ユーザ名に先程選択したユーザ名を入れる.
+++ サービスは「Jupyter Lab/Notebook Data」を選択
+++ 「変更を保存する」をクリック
++ 「トークンを管理する」まで戻ると,ユーザ用のトークンが...
++ トークンは feplg_nbws の設定ファイルの Moodle_Token に...
#br
*** ipynb_conv
- ipynb ファイルの(コード)タグに解析用の通し番号を入れ...
- LTIContainerSpawner に同梱(C言語)
- %%phpバージョンもあり (現時点で使用予定なし.サンプル...
-- PHPバージョンは,C言語バージョンにバグがあった場合の...
#br
*** Jupyter Lab/Notebook コンテナイメージ
- 機能を全て利用するには,専用の(''start.sh'' を入れ替え...
- MDLDockerSpawner に Dokerfile 同梱
- [[JupyterHub/devel]]
#br
- start.sh 入れ替え後でも,通常の DockerSpanwer で問題な...
#br
** Trouble Shooting
*** mod_lticontainer
**** 500 Server Error
- mod_lticontainer でユーザを削除する.
#br
**** local user で JupyterHubにアクセスできない.アクセス...
- ホームディレクトリ内のドット付きディレクトリのユーザを...
- 本来のオーナでない場合は,修正する.
#br
** Setup
*** Example
- Rocky Linux
- [[Debian>./Debian]]
#br
終了行:
* This page is out of date.
* Please see https://polaris.star-dust.jp/pukiwiki/?Moodl...
* Moodle & JupyterHub 連携
- %%''現行システムは JupyterHub-2.3.1, 3.1.1 では動作する...
-- 動くようになりました.
- LTI カスタムパラメータを使用した Moodle + JupyterHub 連...
- [[Moodle]]
- [[JupyterHub]]
- [[Docker]]
- [[Podman]]
- [[LTI]]
- [[LTI Hack>Moodle/Moodle-LTI]]
- [[LTIDockerSpawner>JupyterHub/LTIDockerSpawner]]
- [[LTIPodmanSpawner>JupyterHub/LTIPodmanSpawner]]
- [[mod_lticontainer]]
- %%[[feserver]]%%
- [[Ltictr_Proxy]]
#br
*** 最新メモ
**** 2023/05/07
- JupyterHub v3 で Podman も Docker 同様に扱えるようにな...
-- JupyterHub v3 では jupyterhub_podman_config.py と最新...
-- JupyterHub v3 で最新の Dockerイメージ(ltids)を使用し...
- JupyterHub v4 では XSRFクッキー関連で,[[ltiauthenticat...
-- site-packages/jupyterhub/handlers/base.py の関数 check...
--- base.py- 2023-05-07 01:44:18.173130119 -0400
+++ base.py 2023-05-07 01:44:31.750265669 -0400
@@ -235,7 +235,8 @@
def check_xsrf_cookie(self):
try:
- return super().check_xsrf_cookie()
+ return True
+ #return super().check_xsrf_cookie()
except Exception as e:
# ensure _juptyerhub_user is defined on rej...
if not hasattr(self, "_jupyterhub_user"):
#br
** GitHub
*** LTIContainerSpawner
- https://github.com/jupyter-fumihax/lticontainerspawner
#br
*** mod_lticontainer
- https://github.com/moodle-fumihax/mod_lticontainer
#br
** Gitlab
*** Gitlab Wiki
- English: https://gitlab.nsl.tuis.ac.jp/iseki/lticontain...
- English: https://gitlab.nsl.tuis.ac.jp/iseki/mod_lticon...
- Japanese: https://gitlab.nsl.tuis.ac.jp/iseki/lticontai...
- Japanese: https://gitlab.nsl.tuis.ac.jp/iseki/mod_ltico...
#br
*** Source Code
- LTIContainerSpawner
-- https://gitlab.nsl.tuis.ac.jp/iseki/lticontainerspawner/
- mod_lticontainer
-- https://gitlab.nsl.tuis.ac.jp/iseki/mod_lticontainer/
#br
** 既存システム
*** [[Moodle]]
- Moodle 3.5以上(それ未満でも動くかもしれない.要 LTIサ...
- JupyterHub が動くホストとは別のホストでもOK
- 外部サービス,Webサービスを使用する.
- LTIDockerSpawner を使用する場合はMoodle ホスト側に,少...
- LTIPodmanSpawner を使用する場合はMoodle ホスト側に,少...
#br
#br
**** 外部サービス
- LTI 認証モジュールと連携して SSOを実現する.
- 管理者IDで,「サイト管理」=> 「プラグイン」=> 「外部ツ...
-- デフォルト起動コンテナは「新しいウィンドウ」にする.
#br
**** Webサービス
- Option
- Feserver からの XML-RPC を受け入れて,データをDBに格納...
-- データ収集を行わない(Feserverを使用しない)なら,不必要
#br
*** Container
- Docker または Podman が使用可能
#br
**** [[Docker]]
- CentOS8
(base) # dnf config-manager --add-repo https://download....
(base) # dnf -y install docker-ce docker-ce-cli containe...
(base) # systemctrl enable docker
(base) # systemctrl start docker
(base) # docker pull jupyterhub/singleuser
(base) # docker pull jupyter/datascience-notebook
#br
**** [[Podman]]
- CentOS8
(base) # dnf -y install podman
(base) # dnf -y install podman-remote
(base) # dnf -y install podman-docker
#br
*** [[JupyterHub]]
**** with pip
# yum install python39
# alternatives --config python3
# /usr/bin/pip3.9 install --upgrade pip
# yum install npm
# npm install -g configurable-http-proxy
# pip install setuptools_rust
# pip install jupyterhub
# pip install dockerspawner
# pip install --upgrade notebook
# pip install --upgrade jupyterlab
# jupyterhub --version
# jupyter --version
# jupyter notebook --version
# jupyter lab --version
**** with conda
(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==...
(jupyterhub) # conda install -c conda-forge voila -y
(jupyterhub) # conda install jupyter_client -y
(jupyterhub) # pip --no-cache-dir install git+https://gi...
**** 設定&起動
- 作業ディレクトリ
-- 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 (condaの場合)
-- jupyterhub -f jupyterhub_config.py
#br
**** %%[[SystemUserSpawner>JupyterHub/SystemUserSpawner]...
- ''最新版では未使用''
- ''Container として Docker を使用する場合に必要.Podman ...
-- JupyterHub の DockerSpawner を継承.
--- システムのユーザを使用可能.
--- システムのユーザのホーム領域をマウント可能.
-- 2021 7/12(またはそれ以降) 版推奨
-- https://github.com/jupyterhub/dockerspawner/blob/maste...
-- JupyterHub のインストールで,一緒にインストールされる...
#br
*** NSS
- ユーザ情報として /etc/passwd(/etc/group) の情報が必要
- システム(Containerを動かすホスト上)のユーザでなくても...
-- LDAP か下記の altfiles を使用する
#br
**** [[altfiles>NSS]]
- ユーザの passwd, grouop 情報が必要
- SystemUserSpawner 用の [[NSS]] を使用した システムのユ...
- getent passwd と getent group で情報が取れるようになれ...
- ファイルの設置場所はコンパイル時に指定
# git clone https://github.com/aperezdc/nss-altfiles.git
# cd nss-altfiles/
# ./configure --prefix=/usr --datadir=/usr/local/etc --w...
# make
# make install
# ln -s /usr/lib/libnss_altfiles.so.2 /usr/lib64/libnss_...
# ldconfig
# cd /usr/local/etc
# wget https://XXXX/.../passwd
# wget https://XXXX/.../group (group は 必要な...
- /etc/nsswitch.conf
passwd: files altfiles
group: files altfiles
- ユーザアカウントの整合性を取る.
-- システム(Containerを動かすホスト上)のユーザとユーザ...
#br
*** [[LTI Authenticator>LTI]]
- Moodle と連携する為の 認証モジュール(Moodleの外部サー...
- 先に authlib を入れておく.
-- conda install oauthlib or pip install oauthlib
- v1.5.0 release
-- https://pypi.org/project/jupyterhub-ltiauthenticator/1...
- v1.2.0 release (2021 9/2)
-- https://pypi.org/project/jupyterhub-ltiauthenticator/1...
-- Moodle に対して Patch 不要
(jupyterhub)# pip install --upgrade jupyterhub-ltiauthen...
- Jupyterhub_conifg.py
# for LTI v1.2.0
c.JupyterHub.authenticator_class = 'ltiauthenticator.LTI...
c.LTI11Authenticator.consumers = {
"b18e82ec683724743236fade71350720029a29144a585c66f674...
}
c.LTI11Authenticator.username_key = 'ext_user_username'
***** old
- ltiauthenticator-1.0.0.path は MDLDockerSpanwer に同梱
pip install jupyterhub-ltiauthenticator
cd ......./ltiauthenticator
patch -p1 < ~/mdldockerspawner/etc/ltiauthenticator-1.0....
#br
*** Culler(option)
- オプション機能.無くても良い.
- 接続の切れた docker コンテナを削除する
- 使用しない場合は,LTIDockerSpawner/LTIPodmanSpawner の...
-- [[cull_idle_servers>JupyterHub/DockerSpawner#zc9428f7]]
#br
**** cull_idle_servers.py
- https://github.com/jupyterhub/jupyterhub/tree/a6b7e303d...
-- 色々と試した中ではこれが一番良かった.
- wget で DLして /usr/local/bin にコピー
pip3 install wheel
pip3 install pycurl (pthon3-devel が必要)
wget https://raw.githubusercontent.com/jupyterhub/jupyte...
cp cull_idle_servers.py /usr/local/bin
chmod a+rx /usr/local/bin/cull_idle_servers.py
#br
** 連携拡張 by [[NSL]]
- MS Windows のことは何も考慮していませんので,MS Windows...
#br
*** Moodle
- LTIDockerSpawner を使用する場合はMoodle ホスト側に,少...
- LTIPodmanSpawner を使用する場合はMoodle ホスト側に,少...
#br
*** [[LTIContainerSpawner>JupyterHub/LTIContainerSpawner]]
- https://gitlab.nsl.tuis.ac.jp/iseki/lticontainerspawner
-- git clone https://gitlab.nsl.tuis.ac.jp/iseki/lticonta...
- [[Moodle]](その他の LTIコンシューマ) と [[JupyterHub]...
- LTIContainerSpawner は LTIDockerSpawner と LTIPodmanSpa...
-- ''LTIContainerSpawner = LTIDockerSpawner + LTIPodman...
git clone https://gitlab.nsl.tuis.ac.jp/iseki/lticontain...
cd lticontainerspawner/
make
#br
**** [[LTIDockerSpawner>JupyterHub/LTIDockerSpawner]]
- JupyterHub/[[SystemUserSpawner>JupyterHub/SystemUserSpa...
- 現時点(2021/10)では ''etc/jupyterhub_docker_config.py...
#br
**** [[LTIPodmanSpawner>JupyterHub/LTIPodmanSpawner]]
- [[Podman]] が使用可能
- JupyterHub/Spawner クラスを継承
- niklas netter 氏の [[podmanspawner>PodmanSpawner]] を利...
-- https://github.com/gatoniel/podmanspawner
- 現時点(2021/10) では pod の起動に Popen() を使用してい...
- 設定ファイルは'' etc/jupyter_podman_config.py''
#br
**** 機能
- ユーザグループ機能の完全サポート
- Moodle(その他の LTIコンシューマ)からの LTI カスタムパ...
- 環境変数を使用した start.sh による Jupyter Lab/Notebook...
#br
- 以下の機能をコースの外部サービス毎に設定可能
-- 教師ユーザと学生ユーザの分離.
-- ユーザ毎の Volume のマウント,及びアクセス権(教師と学...
--- 教材の配布と収集に便利
-- ユーザの作業用 Volumeの設定
-- Volume への任意名でのアクセス.
-- 起動イメージのリモート選択.表示名のフィルタリング.Ju...
-- 起動 URL(Lab/Notebook)の選択.
-- %%iframe サポート%% 一部のみサポート:動くための条件...
-- CPU/Momery の制限
#br
**** Volume 名に関する制約
- ボリューム名には小文字のアルファベット・数字以外は使用...
- 大文字のボリューム名は小文字に変換される.
- ボリュームに対して同じボリューム名・アクセス名を指定し...
- 一個の JupyterHub に対して複数の Moodle からのアクセス...
- アクセス名の先頭に - を付けた場合は,教師ユーザのみシン...
- 注)アクセス名:ボリュームへ張られるシンボリックリンク...
#br
**** 注意事項
- iframe
-- %%Moodle で埋め込み(iframe)表示を行う場合は,Moodle ...
-- %%iframe 対応.ただし tornado が cookie の samesite を...
-- tornado のバージョンやブラウザの種類によって条件が変わ...
#br
**** 起動
- jupyterhub -f lticontainerspawner/etc/jupyterhub_docker...
- jupyterhub -f lticontainerspawner/etc/jupyterhub_podman...
#br
*** [[mod_lticontainer]]
- https://gitlab.nsl.tuis.ac.jp/iseki/mod_lticontainer
- MDLDockerSpawner/LTIPodmanSpawner サポート用 Moodleモジ...
- docker のリモート制御について
-- docker クライアント(docker-cd-cli : /usr/bin/docker) ...
-- dockerd が動いているホストに ssh できる,ホスト上のユ...
- podman のリモート制御について
-- podman コマンド(podman-remote) が必要
-- podman が動いているホストに ssh できる,ホスト上のユー...
#br
**** 機能
- LTI のカスタムパラメータ管理
- Docker/Podman のリモート制御
-- イメージの一覧の取得
-- Volume 管理(作成,表示,削除)
- WebService
-- feserver (feplg_nbws.so)からのデータを XML-RPC で受...
-- データ利用については ''&font(Red){未実装};''.
- https://docs.moodle.org/dev/Charts_API
#br
**** [[Docker]] を使う場合
- JupyterHub/Docker が起動するホスト上にアクセス用ユーザ...
-- %%アクセス用ユーザのホームディレクトリについて,アクセ...
--- %%CentOS8 で嵌った.ユーザを dockerにしたんだが,dock...
-- アクセス用ーザが docker のグループに属していること(UN...
-- アクセス用ユーザのログインシェルは不要-- アクセス用ー...
-- アクセス用ユーザのログインシェルは不要
- Webサーバの実効ユーザが自分のホームディレクトリについて...
#br
**** [[Podman]] を使う場合
- JupyterHub/Podman が起動するホスト上にアクセス用ユーザ...
-- アクセス用ユーザのログインシェルは不要
-- Moodleホストからのアクセスには podman-remote か podman...
- Webサーバの実効ユーザが自分のホームディレクトリについて...
- Podman が起動するホスト上の socket は /var/run/podman/p...
-- /var/run/podman/ のパーミッションを drwxrws--- とし,...
-- socket を読み書きできるアクセス用ユーザを作成する(グ...
--- 例えば podman グループ(アクセス用ユーザはこのグルー...
- /usr/lib/systemd/system/podman.socket
[Unit]
Description=Podman API Socket
Documentation=man:podman-system-service(1)
[Socket]
ExecStartPre=/usr/bin/chgrp podman /var/run/podman
ExecStartPre=/usr/bin/chmod g+rwxs /var/run/podman
ListenStream=%t/podman/podman.sock
SocketMode=0660
[Install]
WantedBy=sockets.target
# adduser podman
# passwd podman
# vi /usr/lib/systemd/system/podman.socket
# mkdir /var/run/podman
# systemctl enable podman
# systemctl start podman
- Trouble
-- podman.socket が勝手に再起動を繰り返す.
-- 再起動する度に /var/run/podman が作り直されるので,パ...
-- 制御用のユーザプロセスが ソケットにアクセスできなくな...
--- これは CentOS7 での現象(バージョンが古いせいかも)....
#br
*** [[Ltictr_Proxy]]
- feserver + feplg_nbws.so の代わりとなる ''[[Ltictr_Prox...
#br
*** 参考:[[feserver]]
- http://www.nsl.tuis.ac.jp/svn/linux/feserver/trunk
- feserver フロントエンドサーバ(TCP中継サーバ)
- MITM 的動作を行う私的試験用ツール.(一応公開もしている...
- 各種モジュールを読み込むことにより,色々な通信データの...
- コンパイルに [[JunkBox_Lib]] が必要
# svn co http://www.nsl.tuis.ac.jp/svn/linux/JunkBox_Lib...
# cd JunkBox_Lib
# ./config.sh
# ./configure --enable-ssl
# make
# cd ..
# svn co http://www.nsl.tuis.ac.jp/svn/linux/feserver/tr...
# cd feserver
# make
# vi nbsw.conf
# ./fesvr ...... -m feplg_nbws.so --conf nbsw.conf
#br
**** 起動例
- ./fesvr -h 172.22.1.75:8000 -p 9000 -m feplg_nbws.so -...
- Usage... ./fesvr -h host_name[:port] -p port -m module_...
-- -h : サーバFQDN + ポート番号.サーバのポート番号を省略...
-- -p : ローカルポート番号.必須
-- -m : 処理モジュール.必須
-- -u : 実効ユーザ名
-- -i : デーモンモードを無効化.スーパデーモン経由で使用...
-- -d : デバッグモード.喧しモード.
-- -s : サーバに対してSSL/TLS接続になる(fesrv はSSL/TLS...
-- -c : クライアントに対してSSL/TLS接続になる(fesrv はSS...
-- --conf : 設定ファイル指定
-- --cert : -c を指定した場合のサーバ証明書:PEM形式.設...
-- --key : -c を指定した場合のサーバの秘密鍵:PEM形式....
#br
**** feplg_nbws.so モジュール
- Moodle と JupyterHub の中間に位置し,通信情報(主に Web...
- ユーザから見ると,リバースプロキシのように見える.
- 機能
-- 通信の中継
-- WebSocket 通信の解析.
-- HTTP(S)通信の解析.
-- Cookie の挿入.
-- Moodle への XML-RPC 通信.(MoodleのWebサービスを使用)
#br
***** feplg_nbws.so の 設定ファイル(nbws.conf)
- Moodle_Host = XML-RPC を行うホスト名(FQDNまたはIPアド...
- Moodle_Port = XML-RPC を行うホストのポート番号.デフォ...
- Moodle_TLS = XML-RPC を行う際に HTTPS を使用するかどう...
-- 注:HTTPS通信を行う場合,相手(Moodleホスト)のサーバ証...
- Moodle_URL = XML-RPC を行うURLのディレクトリ情報.デフ...
- Moodle_Token = Moodle から発行されたトークン.下記参照...
- Moodle_DBAns = XML-RPC を行った場合の返答を表示するかど...
- Moodle_Servide = XML-RPC のサービス名.デフォルトから変...
- Moodle_HTTP = XML-RPC を行う際の HTTPのプロトコルバージ...
#br
- 以下,各モジュール共通の設定.コマンドラインで指定した...
-- Fesvr_Server_Cert = Feserver 本体用の設定.HTTPS通信を...
--- デフォルトは /etc/pki/tls/certs/server.pem
-- Fesvr_Private_Key = Feserver 本体用の設定.HTTPS通信を...
---デフォルトは /etc/pki/tls/private/key.pem
#br
***** Moodle 側の設定 (Webサービスを利用するためのトーク...
+ 管理者IDで「サイト設定」 -> 「プラグイン」 -> 「ウェブ...
++ 「Jupyter Lab/Notebook Data」の項目を確認
++ 「Jupyter Lab/Notebook Data」の 「許可ユーザ」をクリック
+++ 適当なユーザ(教師ロールのユーザ)を選択し,許可ユー...
+ ウェブサービスのメニューまで戻って,「トークンを管理す...
++ 「追加」をクリック.
+++ ユーザ名に先程選択したユーザ名を入れる.
+++ サービスは「Jupyter Lab/Notebook Data」を選択
+++ 「変更を保存する」をクリック
++ 「トークンを管理する」まで戻ると,ユーザ用のトークンが...
++ トークンは feplg_nbws の設定ファイルの Moodle_Token に...
#br
*** ipynb_conv
- ipynb ファイルの(コード)タグに解析用の通し番号を入れ...
- LTIContainerSpawner に同梱(C言語)
- %%phpバージョンもあり (現時点で使用予定なし.サンプル...
-- PHPバージョンは,C言語バージョンにバグがあった場合の...
#br
*** Jupyter Lab/Notebook コンテナイメージ
- 機能を全て利用するには,専用の(''start.sh'' を入れ替え...
- MDLDockerSpawner に Dokerfile 同梱
- [[JupyterHub/devel]]
#br
- start.sh 入れ替え後でも,通常の DockerSpanwer で問題な...
#br
** Trouble Shooting
*** mod_lticontainer
**** 500 Server Error
- mod_lticontainer でユーザを削除する.
#br
**** local user で JupyterHubにアクセスできない.アクセス...
- ホームディレクトリ内のドット付きディレクトリのユーザを...
- 本来のオーナでない場合は,修正する.
#br
** Setup
*** Example
- Rocky Linux
- [[Debian>./Debian]]
#br
ページ名:
サイト内 検索
高度な検索
ログイン
ユーザー名:
パスワード:
パスワード紛失
新規登録
サブ メニュー
新着情報
Books
リンク
サイトマップ
e-Learning
TUIS 認証局証明書
ミニカレンダー
2024年 10月
日
月
火
水
木
金
土
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
<今日>
オンライン状況
14 人のユーザが現在オンラインです。 (4 人のユーザが xpwiki を参照しています。)
登録ユーザ: 0
ゲスト: 14
もっと...
アクセスカウンタ
今日 :
昨日 :
総計 :
Powered by XOOPS Cube 2.1© 2001-2006
XOOPS Cube Project
Design by
XoopsDesign.com