ページ内コンテンツ
JupyterHub
- マルチユーザのための Jupyter サーバー(ユーザ認証機能つき)
- https://jupyterhub.readthedocs.io/en/0.7.2/getting-started.html
- https://horomary.hatenablog.com/entry/2019/11/09/181614
- see also: Jupyter
- see also: Docker, Podman
- see also: Kubernetes, PodmanSpawner
- see also: configurable-http-proxy
for CentOS 8.5 with pip
# yum install python3 # pip3 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
Install
(base) # conda install -c conda-forge conda==4.11.0 -y (base) # conda activate jupyterhub (jupyterhub) # conda update -c conda-forge jupyterhub -y
(jupyterhub) # jupyterhub --upgrade-db (jupyterhub) # jupyterhub -f .....
podmanspawner.PodmanSpawner
- おおっ class のサンプルに Podman がある!
- と思ったら niklas netter 氏の podmanspawner じゃん
- と思ったら niklas netter 氏の podmanspawner じゃん
websocket モジュールが無いとのことで起動しなくなった.
ModuleNotFoundError: No module named 'websocket'
- conda 環境で websocket をインストール
# conda install -c conda-forge websocket-client
- pip なら pip install websockets
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==1.4.2 -y (jupyterhub) # conda install -c conda-forge voila -y (jupyterhub) # conda install jupyter_client -y (jupyterhub) # git clone https://github.com/jupyterhub/nativeauthenticator.git (jupyterhub) # pip install -e nativeauthenticator (認証モジュール:オプション) (jupyterhub) # pip install dockerspawner
- ディレクトリのパーミッションの設定を忘れずに!
pip を使用する.
- nodejs: CentOS7 の場合は nodejs はバージョンが古くて,configurable-http-proxy でエラーが出るので,nodejs をバージョンアップする.
curl -sL https://rpm.nodesource.com/setup_14.x | bash - yum remove nodejs npm -y yum install nodejs -y node -v
- nodejs のバージョンがアップしない場合は,/var/tmp/yum-root-* を消す
- https://rpm.nodesource.com/setup_##.x は非推奨となった.(2023/12/4)
npm install -g configurable-http-proxy python3 -m pip install jupyterhub python3 -m pip install dockerspawner python3 -m pip install --upgrade notebook python3 -m pip install --upgrade jupyterlab
Notebook の Docker イメージ
# docker pull jupyter/datascience-notebook # docker pull jupyter/tensorflow-notebook
LTI Authenticator
- Moodle と連携する為の 認証モジュール(Moodleの外部サービスを使用)
- 先に authlib を入れておく.
- conda install oauthlib or pip install oauthlib
- v1.2.0 release (2021 9/2)
- https://pypi.org/project/jupyterhub-ltiauthenticator/1.2.0/
- Moodle に対して Patch 不要
(jupyterhub)# pip install --upgrade jupyterhub-ltiauthenticator
設定
- https://zero-to-jupyterhub.readthedocs.io/en/latest/customizing/index.html
- https://zero-to-jupyterhub.readthedocs.io/en/latest/administrator/index.html
- jupyterhub --generate-config を実行すると カレントディレクトリに設定ファイル jupyterhub_config.py が生成される.
- 個人的には jupyterhub が /usr/local 以下にある場合は /usr/local/etc/jupyterhub 以下に置く.
- 設定ファイルは拡張子が .py でないと,読み込まれない場合がある?
jupyterhub.auth.PAMAuthenticator (default)
- 認証にPAMを使用する.恐らくサービスは login
- v1.1.0 にバグあり. Trouble Shooting 参照.
LDAP: ldapauthenticator.LDAPAuthenticator
- LDap 認証用.
- モジュールのInstall
(jupyterhub) # conda install -c conda-forge jupyterhub-ldapauthenticator -y
- jupyterhub_config.py
102 # for LDAP 103 c.JupyterHub.authenticator_class = 'ldapauthenticator.LDAPAuthenticator' 104 #c.LDAPAuthenticator.server_address = '202.26.150.*' 105 c.LDAPAuthenticator.server_address = '202.26.144.*' 106 c.LDAPAuthenticator.use_ssl = True 107 108 ## AD: template 付き(ユーザバインド) 109 c.LDAPAuthenticator.lookup_dn = False 110 c.LDAPAuthenticator.bind_dn_template = [ 111 'cn={username},ou=教員,ou=ユーザー,dc=edutuis,dc=local', 112 'cn={username},ou=学生,ou=ユーザー,dc=edutuis,dc=local' 113 ] 114 c.LDAPAuthenticator.user_search_base = 'dc=edutuis,dc=local' 115 c.LDAPAuthenticator.user_attribute = 'sAMAccountName' 116 117 ## AD: template なし 118 #c.LDAPAuthenticator.lookup_dn = True 119 #c.LDAPAuthenticator.user_search_base = 'dc=edutuis,dc=local' 120 #c.LDAPAuthenticator.user_attribute = 'sAMAccountName' 121 #c.LDAPAuthenticator.lookup_dn_search_user = 'cn=ldapauth,cn=users,dc=edutuis,dc=local' 122 #c.LDAPAuthenticator.lookup_dn_search_password = '*****' 123 #c.LDAPAuthenticator.lookup_dn_user_dn_attribute = 'cn' 124 125 ## NSL: username から dn が探せる場合(ユーザバインド) 126 #c.LDAPAuthenticator.lookup_dn = False 127 #c.LDAPAuthenticator.bind_dn_template = 'cn={username},ou=user,dc=nsl,dc=tuis,dc=ac,dc=jp' 128 129 ## NSL: ツリーを検索する場合 130 #c.LDAPAuthenticator.lookup_dn = True 131 #c.LDAPAuthenticator.user_search_base = 'ou=user,dc=nsl,dc=tuis,dc=ac,dc=jp' 132 #c.LDAPAuthenticator.user_attribute = 'uid' 133 #c.LDAPAuthenticator.lookup_dn_search_user = 'cn=Manager' 134 #c.LDAPAuthenticator.lookup_dn_search_password = '*******' 135 #c.LDAPAuthenticator.lookup_dn_user_dn_attribute = 'cn' 136
LTI モジュール
jupyterhub.spawner.LocalProcessSpawner (default)
- LocalProcessSpawner
- サーバに,各ユーザの環境でアクセスできる.
- Jupiter Notebook はサーバにインストールされている物を使用する.
- 通常作業ディレクトリは /home/{username}/notebook (v1.0.0 はディレクトリ指定にバグが有る模様)
- 使用ポートは 8000/tcp, 8081/tcp
dockerspawner.DockerSpawner
- DockerSpawner
- https://github.com/jupyterhub/dockerspawner
- サーバでユーザ毎に Docker でNotebook コンテナを起動して接続.
- 作業ホームは /home/jovjan/work 固定(多分 Docker Image固定)
- 使用ポートは 8000/tcp, 8081/tcp, 8001/tcp
- Install
(jupyterhub) # pip --no-cache-dir install git+https://github.com/jupyterhub/dockerspawner.git or (jupyterhub) # pip install dockerspawner
dockerspawner.SystemUserSpawner
- SystemUserSpawner
- https://github.com/jupyterhub/dockerspawner/blob/master/dockerspawner/systemuserspawner.py
- dockerspawner.DockerSpawner からの派生クラス
- DockerSpawner と同じパッケージ? 特にインストールしていないが,既に入っていた.
- jovyan ではなく,ログインユーザで使用可.ログインユーザのホームディレクトリをマウントする.
- ただしログインユーザの情報がローカルに取れない場合(LDAPのユーザバインドでログインした場合),ホームディレクトリ等の情報が無いので途中でエラーを起こす.
- 作りこめば大丈夫かもしれん.
- 作りこめば大丈夫かもしれん.
dockerspawner.SwarmSpawner
- SwarmSpawner
- dockerspawner.DockerSpawner からの派生クラス
- DockerSpawner と同じパッケージ
- クラスタリング用.
- コンテナを Docker Compose で管理し,複数のサーバー上で実行できる.
- 使用ポートは 8000/tcp, 8081/tcp, 8001/tcp, 2377/tcp, 7946/tcp, 7946/udp, 4789/udp
niicloudoperation/jupyterhub-singleuser
- NII開発.自由度低し(個人的感想).CoursewareHub 用 Server Class
- https://github.com/NII-cloud-operation/CoursewareHub-LC_platform
- Document: https://github.com/nii-gakunin-cloud/ocs-templates
- dockerspawner.SwarmSpawner からの派生クラス
- 検証中
- INSTALL
(jupyterhub) # git clone https://github.com/NII-cloud-operation/CoursewareHub-LC_platform.git (jupyterhub) # cd CoursewareHub-LC_platform/jupyterhub/spawner (jupyterhub) # pip --no-cache-dir install .
jovyan って誰?
- DockerSpawner を使用すると,作業ディレクトリが /home/jovyan/work 固定なのだが?
- c.DockerSpawner.notebook_dir 辺りをいじっても変化しない?
- https://github.com/jupyter/docker-stacks/issues/358
前準備
# cd /etc/pki/tls # openssl req -new -newkey rsa:2048 -days 3650 -nodes -keyout private/key.pem -out server.csr # openssl x509 -in server.csr -days 3650 -req -signkey private/key.pem -out certs/server.pem # vi /usr/local/etc/jupyterhub/jupyterhub_config.py # mkdir /var/lib/jupyterhub
実行
(base) # conda activate jupyterhub (jupyterhub) # jupyterhub -f /usr/local/etc/jupyterhub/jupyterhub_config.py
- --no-ssl は0.7で廃止された
MySQL
- SQLAlchemy で PyMySQL ドライバを使用する
- pool_recycle の設定を忘れずに!
- charset は urf8mb4
nouveau ドライバ(デフォルトのグラフィックドライバ)を止める
- lsmod | grep nouveau でドライバ確認
- /etc/default/grab のオプションに rd.driver.blacklist=nouveau を追加
- カーネル設定ファイルの作り直し
- grub2-mkconfig -o /boot/grub2/grub.cfg (RedHat系)
- grub-mkconfig -o /boot/grub/grub.cfg (Debian系)
Tool Kit
- CUDA Toolkit : https://developer.nvidia.com/cuda-toolkit-archive
- Tool Kit をインストールするとドライバもインストールされる? (未確認)
Docker
- docker run --gpus all nvidia/cuda:12.2.0-devel-ubuntu20.04 nvidia-smi
- Failed to initialize NVML: Unknown Error
- ホストの /etc/nvidia-container-runtime/config.toml を編集して,no-cgroups = false にする.
Jupyterhub 4.0.0
- 403 : Forbidden '_xsrf' argument missing from POST のエラー
- JupyterHub で XSRFのチェックを強化したらしい
- /usr/local/lib/python3.9/site-packages/jupyterhub/handlers/base.py
- def check_xsrf_cookie(self)
- super().check_xsrf_cookie() で例外発生
- 親は tornado のRequestHandlerか?
- def check_xsrf_cookie(self)
- 2023 5/29 時点でこのバグは修正されている.
JupyterHub をバージョンアップしたら Jupyter Labが起動しなくなった.
- 起動する JupyterHub(ex. 2.0.1)とイメージ内のJupyterHub(ex. 1.4.1)が違うとデフォルトで Jupyter Labが起動しなくなるようだ.
JupyterHub: PAM使用時に 再login するとPAMの認証エラーになる.
- 認証モジュールに jupyterhub.auth.PAMAuthenticator を使用した場合,再Loginで失敗
- c.JupyterHub.authenticator_class = 'jupyterhub.auth.PAMAuthenticator'
- バグだろ.
- Resolve: jupyterhub_config.py に c.PAMAuthenticator.open_sessions = False を追加する
- see: https://github.com/jupyterhub/jupyterhub/issues/486
swarm モードだと v1.1.0 でPAM認証のエラーを起こす.
- 上記バグもこれか?
- 1.0.0 に戻す.
(jupyterhub) # conda uninstall jupyterhub (jupyterhub) # conda -c conda-forge install jupyterhub==1.0.0
docker
- https://docker-py.readthedocs.io/en/stable/api.html
- APIClient 呼び出しメソッド順
- inspect_image
- inspect_container
- inspect_image
- start
- port
Counter: 2612,
today: 5,
yesterday: 1
最終更新: 2023-12-04 (月) 11:30:44 (JST) (368d) by iseki