はじめに

自分がつまづいたための忘備録です。圧倒的初心者なので変なところがあればコメントお願いします…。

要約

やろうとしたこと

WSL上でvenv環境を作成、pipによりjupyterをインストールし、jupyter notebookを使おうとした。

起こったこと

カーネル起動時(ipyenbファイルを開くとき)、以下のエラーが出た。

RuntimeError: Permissions assignment failed for secure file: '/mnt/c/Users/<usename>/ubuntu_home/.local/share/jupyter/runtime/kernel-<ユニークid>.json'. Got '0o677' instead of '0o0600'.

原因

以前にWSLのホームディレクトリの場所を変更していた[参考]ため、ファイルの権限周りで異常が起こった。

解決策

デフォルトのホームディレクトリ上にランタイムディレクトリを設定する(ここではtmpファイルに移動)。

export JUPYTER_RUNTIME_DIR=/tmp

詳細

環境

Ubuntu : 18.04.4
pip : 9.0.1
Python : 3.6.9
jupyter core : 4.6.3
jupyter-notebook : 6.0.3
qtconsole : 4.7.5
ipython : 7.16.1
ipykernel : 5.3.0
jupyter client : 6.1.5
jupyter lab : not installed
nbconvert : 5.6.1
ipywidgets : 7.5.1
nbformat : 5.0.7
traitlets : 4.3.3

解決策のソース

https://github.com/jupyter/notebook/issues/5058
ぐぐって一番最初に出てくる公式のissueから
それっぽいところだけ翻訳すると、

    • エラーの起きているファイルは、カーネル起動時につくられ、カーネル終了時に消去される一時的なファイルである

 

    • このファイルの権限が600ではなく777(本当は677ではなく777)になっている

 

    • このファイルの置き場所が本来のOSのディレクトリではなく、他のファイルシステムに関連付けられているディレクトリに置かれているか、他のシステムによって本来のOSディレクトリがマウントされているのが問題

 

    • 以下の手順に沿って解消できる

Notebookサーバを終了する

export JUPYTER_RUNTIME_DIR=/tmpを実行する
(他の方法でランタイムディレクトリの場所を指定していない場合)普通にNotebookサーバを立ち上げてみる

このissueの場合は、複合コンピュータからユーザホームディレクトリにアクセスしていたみたいですが、
私の場合は、WSLのUbuntuからWindows上のディレクトリにアクセスしている形になっている、ということだと思います。

ということで、処理手順に従って直せば解決しました!
現状tmpに突っ込んでるので、実際はちゃんとローカルに他の置き場所決めたほうが良いとのこと。

【おまけ】ファイルの権限あたりの話

自分がわかってなかったので初歩的な話を書いていきます。

ファイルにはそれぞれ「読み(r)」「書き(w)」「実行(x)」の三種類がある。
また、権限を与えられる人は、「所有者」「グループ」「その他の権限」の3人(グループ)。
ls -lして最初に書いてあるやつがこれらを指した内容になっています。

で、このrwxを8進数で表すことがあり、上記3人(グループ)それぞれにどのような権限を付与するかで8進数3桁の文字で表せるようです。

777 → rwxrwxrwx
600 → rwx——

こちらの記事がわかりやすく書いてあったので参考にさせていただきました。
https://qiita.com/ntkgcj/items/6450e25c5564ccaa1b95

おわりに

今回、英語を読みたくないが一心に、エラー文から推測していろいろな記事をあたって、膨大な時間を要してしまったのですが、
結局は公式のドキュメントやアナウンスが最強で、英語だからと避けないで、きちんとそれを読むのが解決の最短経路であるということを学びました…。
これからはきちんと公式のドキュメントは大事にします。