Jupyterhub/labのGit extensionを入れるときのメモ

# はじめに

Jupyterhub/labにGit extensionを入れるときにちょっと引っかかったので、その時の自分用のメモ。
また、Jupyterhub/labのインストール＆起動については[こちら](https://qiita.com/dyamaguc/items/db1da3084e36029f20cc)をご参照ください。

# 環境

```bash

$sw_vers
ProductName:    Mac OS X
ProductVersion: 10.13.6
BuildVersion:   17G14042
```

```bash

$docker --version
Docker version 20.10.0, build 7287ab3
```

# やること

Jupyterhub / labにGit extensionを導入します。

# やったこと

## Jupyterlab 3.0.7の場合

最初にdockerからJupyterhubのイメージを取得して起動します。

```bash

docker run -it -p 8000:8000 --name jupyterhub jupyterhub/jupyterhub bash
```

[こちら](https://qiita.com/dyamaguc/items/db1da3084e36029f20cc)を参考に設定していきます。

```bash
apt update
apt install python3 python3-pip npm nodejs libnode64 vim git
npm install -g configurable-http-proxy
pip3 install -U pip
pip3 install jupyterlab==2.2.9
pip3 install jupyterlab-git==0.23.3
jupyterhub --generate-config
vim jupyterhub_config.py 
```

jupyterhub_config.pyに以下を追加します。

```python:jupyterhub_config
c.Spawner.default_url = '/lab'
c.Spawner.notebook_dir = '~/notebook'
c.Authenticator.admin_users = {'testadmin'}
c.Authenticator.allowed_users = {'testuser01'}
```

ログイン用のユーザを作成しておきます。

```bash
adduser testadmin
mkdir -p -m 777 /home/testadmin/notebook
chown testadmin: /home/testadmin/notebook
adduser testuser01
mkdir -p -m 777 /home/testuser01/notebook
chown testuser01: /home/testuser01/notebook

```

起動する前に各ライブラリのバージョンを確認しておきます。

```bash

root@62ecd14f5e8a:/srv/jupyterhub# jupyterhub --version
1.3.0
root@62ecd14f5e8a:/srv/jupyterhub# jupyter-lab --version
3.0.7
root@62ecd14f5e8a:/srv/jupyterhub# python3
Python 3.8.5 (default, Jul 28 2020, 12:59:40) 
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> from  jupyterlab_git import __version__ as ver
>>> print(ver)
0.23.3
```

ここでJupyterhubを起動します。

```bash
jupyterhub jupyterhub_config.py 
```

ただし、Git extensionがうまく動作していません。

![jupyterlab-git-try01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329888/4a0ae328-4a3c-ab55-65e3-5b0142df68bd.png)

[Jupyterlab-gitのドキュメント](https://github.com/jupyterlab/jupyterlab-git/#troubleshoot)を確認すると、サーバ側とフロント側のextensionを確認するようにとのことなので、まずサーバ側のextensionを確認します。

```bash

root@62ecd14f5e8a:/srv/jupyterhub# jupyter server extension list
Config dir: /root/.jupyter

Config dir: /usr/etc/jupyter

Config dir: /usr/local/etc/jupyter
    jupyterlab enabled
    - Validating jupyterlab...
      jupyterlab 3.0.7 OK
    nbclassic enabled
    - Validating nbclassic...
      nbclassic  OK
```

Git extensionが見当たらないので、jupyterlab-gitを有効化します。

```bash

root@62ecd14f5e8a:/srv/jupyterhub# jupyter server extension enable --py jupyterlab_git
Enabling: jupyterlab_git
- Writing config: /usr/etc/jupyter
    - Validating jupyterlab_git...
      jupyterlab_git 0.23.3 OK
    - Extension successfully enabled.
root@62ecd14f5e8a:/srv/jupyterhub# jupyter server extension list
Config dir: /root/.jupyter

Config dir: /usr/etc/jupyter
    jupyterlab_git enabled
    - Validating jupyterlab_git...
      jupyterlab_git 0.23.3 OK

Config dir: /usr/local/etc/jupyter
    jupyterlab enabled
    - Validating jupyterlab...
      jupyterlab 3.0.7 OK
    nbclassic enabled
    - Validating nbclassic...
      nbclassic  OK
```

次にフロント側のextensionを確認します。

```bash

root@62ecd14f5e8a:/srv/jupyterhub# jupyter labextension list
JupyterLab v3.0.7
Other labextensions (built into JupyterLab)
   app dir: /usr/local/share/jupyter/lab
        @jupyterlab/git v0.23.3 enabled  X
        nbdime-jupyterlab v2.0.1 enabled  X

   The following extension are outdated:
        @jupyterlab/git
        nbdime-jupyterlab
        
   Consider running "jupyter labextension update --all" to check for updates.
```

Git extensionがoutdatedになっているため、アップデートします。

```bash

root@62ecd14f5e8a:/srv/jupyterhub# jupyter labextension update --all
An error occured.
ValueError: Please install nodejs >=12.0.0 before continuing. nodejs may be installed using conda or directly from the nodejs website.
See the log file for details:  /tmp/jupyterlab-debug-n1cjjsd7.log
```

ここで、エラー発生。nodejsのバージョンを上げよとのことです。[こちら](https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-ubuntu-20-04-ja#%E3%82%AA%E3%83%97%E3%82%B7%E3%83%A7%E3%83%B32-%E2%80%94-nodesource-ppa%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6apt%E3%81%A7nodejs%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B)を参考にして、nodejsを12にバージョンアップします。

```bash

curl -fsSL https://deb.nodesource.com/setup_12.x | bash -
apt-get install -y nodejs
```

その後extensionのバージョンを上げます。

```bash
root@62ecd14f5e8a:/srv/jupyterhub# jupyter labextension update --all
Updating nbdime-jupyterlab to version 2.1.0-beta.1
Updating @jupyterlab/git to version 0.30.0-beta.2
Building jupyterlab assets (production, minimized)
```

改めてフロント側のextensionを確認します。

```bash
root@62ecd14f5e8a:/srv/jupyterhub# jupyter labextension list
JupyterLab v3.0.7
Other labextensions (built into JupyterLab)
   app dir: /usr/local/share/jupyter/lab
        @jupyterlab/git v0.30.0-beta.2 enabled OK
        nbdime-jupyterlab v2.1.0-beta.1 enabled OK

```

Jupyterlab-gitが0.23.3から0.30.0-beta.2にアップデートされました。
[リリース情報](https://github.com/jupyterlab/jupyterlab-git/releases)を見ると、0.30.0b1でJupyterlab version3に対応になったようです。ただ、2021年2月18日時点でpip install でバージョンを指定しなければ0.23.3がインストールされてしまうため、Outdatedになってしまうようです。

次にサーバ側のバージョンも上げておきます。

```bash

root@62ecd14f5e8a:/srv/jupyterhub# pip3 install jupyterlab-git==0.30.0b2
root@62ecd14f5e8a:/srv/jupyterhub# jupyter server extension list
Config dir: /root/.jupyter

Config dir: /usr/etc/jupyter
    jupyterlab_git enabled
    - Validating jupyterlab_git...
      jupyterlab_git 0.30.0b2 OK

Config dir: /usr/local/etc/jupyter
    jupyterlab enabled
    - Validating jupyterlab...
      jupyterlab 3.0.7 OK
    jupyterlab_git enabled
    - Validating jupyterlab_git...
      jupyterlab_git 0.30.0b2 OK
    nbclassic enabled
    - Validating nbclassic...
      nbclassic  OK
    nbdime enabled
    - Validating nbdime...
      nbdime 3.0.0.b1 OK

```

Jupyterhubを起動します。

```bash
jupyterhub jupyterhub_config.py 

```

Gitのボタンが表示され、うまくいきました。

![jupyterlab-git-sucseed_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329888/d9d2c7a4-4f7f-17cb-34b7-116cbe5b7c6b.png)


## Jupyterlab 2.2.9 の場合

Git extensionの方はまだbeta版ということもあるので、stable releaseである0.23.3を使ってみようと思い、対応しているJupyterlab 2系のものを試してみます。Jupyterhubも1つ前のバージョンである1.2系で最新のものを試しました。
[Dockerのページ](https://hub.docker.com/layers/jupyterhub/jupyterhub/1.2.2/images/sha256-cae294e2fbdcfd34edb0245a2db254715600bf2a943bc3e0adbe6d16253bfafd?context=explore)によると`1.2.2`が最後のバージョンになっていたので、これを使ってみます。
また、Jupyterlabは同じ時期にリリースされている、`2.2.9`を使ってみます（詳細は[公式ドキュメント](https://hub.docker.com/layers/jupyterhub/jupyterhub/1.2.2/images/sha256-cae294e2fbdcfd34edb0245a2db254715600bf2a943bc3e0adbe6d16253bfafd?context=explore)参照）。

以下、同様に起動＆設定していきます。  

```bash
docker run -it -p 8000:8000 --name jupyterhub122 jupyterhub/jupyterhub:1.2.2 bash
```

```bash
apt update
apt install python3 python3-pip npm nodejs libnode64 vim git
npm install -g configurable-http-proxy
pip3 install -U pip
pip3 install jupyterlab==2.2.9
pip3 install jupyterlab-git==0.23.3
jupyterhub --generate-config
vim jupyterhub_config.py 
```

```python:jupyterhub_config
c.Spawner.default_url = '/lab'
c.Spawner.notebook_dir = '~/notebook'
c.Authenticator.admin_users = {'testadmin'}
c.Authenticator.allowed_users = {'testuser01'}
```

```bash
adduser testadmin
mkdir -p -m 777 /home/testadmin/notebook
chown testadmin: /home/testadmin/notebook
adduser testuser01
mkdir -p -m 777 /home/testuser01/notebook
chown testuser01: /home/testuser01/notebook

```

Jupyterlab 2系では起動の前にビルドします。

```bash

jupyter lab build

```

ビルドが終わったらJupyterhubを起動します。

```bash

jupyterhub jupyterhub_config.py 

```

こちらはすんなりextensionを入れられました。

![jupyterlab-git-sucseed.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/329888/f26da02a-9361-4d39-1d14-0c3239cc5a07.png)


# まとめ

- Jupyterlab 3.0.7の場合
  - フロント＆サーバともにJupyterlab-gitは0.30.02b（以上）を指定（0.30.01bは試しましたが動かなかったです）
  - nodejsを12以上にアップデートする必要あり
- Jupyterlab 2.2.9の場合
  - Jupyterlab-gitは0.23.3でOK
  - 起動前にビルドする必要あり

# 参考にした記事など
https://qiita.com/TaigoKuriyama/items/2d0280b0e732fd9cff8f