tropicbirdのブログ

備忘録です。

Jupyterを3つの環境(ホストOS、WSL、Vagrant)で同時に起動する。

はじめに

ホストOS(Windows)、WSL、VagrantにそれぞれJupyterをインストールしていて、それらを同時に起動して作業したい時に、上手く起動できない問題の解決策を紹介。結論としては、デフォルトのままだと、全てがローカルポート8888を使おうとしてエラーが生じるので、ローカルポートをうまく割り当てると解決する。

まずWSLで起動
C:\Users\*WinUSERNAME>bash
(base) *LinuxUSERNAME@DESKTOP-XXXXXXX:/mnt/c/Users/*WinUSERNAME$
(base) *LinuxUSERNAME@DESKTOP-XXXXXXX:/mnt/c/Users/*WinUSERNAME$ cd ~
(base) *LinuxUSERNAME@DESKTOP-XXXXXXX:~$ jupyter lab

jupyter lab入力後に表示されるURLをブラウザに張り付けると、WSL上のJupyterが起動する。
※この時のローカルポートは8888である。

次にVagrantで起動
C:\Users\*WinUSERNAME\*vagrantのフォルダ>vagrant up
C:\Users\*WinUSERNAME\*vagrantのフォルダ>vagrant ssh -- -L 8887:localhost:8888
(base) vagrant@ubuntu-bionic:~$ jupyter lab

ポイントは「vagrant ssh -- -L 8887:localhost:8888」とすること。
jupyter lab入力後に表示されるURLは「http://127.0.0.1:8888/?token=*xxxxxxxxxxxxxxxxxxxxxxxx」となってるので、この8888を8887にして(つまりhttp://127.0.0.1:8887/?token=*xxxxxxxxxxxxxxxxxxxxxxxx として)ブラウザに張り付けるとvagrant上のJupyterが起動する。
※この時のローカルポートは8887である。

最後にホストOS(Windows)で起動

Anaconda等からJupyter Labを起動すれば、自動的にローカルポートは8889(つまり8887と8888以外)に設定される。

同時に開いているときのURLはこんな感じになる。

f:id:tropicbird:20191102204121j:plain
左:Vagrant、中央:WSL、右:ホストOS(Windows

Bash on Windows (Ubuntu OS)(WSL)でrootfsディレクトリに入れない原因と解決策

1.WSLでJupyter Labを開こうとするエラーが発生したので、確認のため、WSL上でUbuntuOSにインストールしたAnacondaのある場所まで進もうとすると、rootfsフォルダの中に入れない現象が発生し、非常に悩んだ。
(base) root@DESKTOP-XXXXXXX:/mnt/c/Users/*WINDOWS_USERNAME/AppData/Local/Packages/CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc/LocalState$ cd rootfs

bash: cd: rootfs: Permission denied

rootfsのパーミッションの状況を確認するとオーナーなのに入れない謎の状況であることが判明。

(base) root@DESKTOP-XXXXXXX:/mnt/c/Users/*WINDOWS_USERNAME/AppData/Local/Packages/CanonicalGroupLimited.UbuntuonWindows_79rhkp1fndgsc/LocalState$ ls -l

total 0
-rwxrwxrwx 1 tropicbird tropicbird    0 Oct 28 18:47 fsserver
d--------- 1 tropicbird tropicbird 4096 Jun 30 08:35 rootfs
drwxrwxrwx 1 tropicbird tropicbird 4096 Oct 28 18:47 temp

解決策を調べた結果、rootfsディレクトリ経由だとフォルダ検索に無限ループが発生することが原因であることが分かった。解決策はrootfsフォルダを経由せずにUbuntuOSのユーザーディレクトリに移動すればよいらしい。
※参考サイト↓
cannot access 'rootfs' on Ubuntu on Windows - Super User

3.WSL上でrootfs以降に進めない原因の解決策

コマンドプロンプトbashを開いた時に最初のディレクトリの場所は以下の場所になっている。

(base) tropicbird@DESKTOP-XXXXXXX:/mnt/c/Users/*WINDOWS_USERNAME$

このままだと、無限ループになる可能性があるので、LINUXコマンドのcd .. を使ってディレクトリの一番上まで移動する。

(base) tropicbird@DESKTOP-XXXXXXX:/$

ここで、cd home/*LINUX_USERNAMEを入力すると、ターミナルの表示が少し変化する。
(追記2019/11/2:cd ..でフォルダの一番上まで移動してcd home/*LINUX_USERNAMEを入力しなくても、どこからでもcd~を入力すれば、一発で仮想環境のhomeに一発で移動できる。)

(base) tropicbird@DESKTOP-XXXXXXX:~$

これで、rootfsディレクトリによるループ現象を発生させずに、UbuntuOS上でインストールしたソフトやフォルダにエラーなく、アクセスすることができる。

ちなみに、lsを使って当方のhome/*LINUX_USERNAME内を確認してみると、以下のような感じ。

(base) tropicbird@DESKTOP-XXXXXXX:~$ls
anaconda3  seaborn-data
4.cd home/*LINUX_USERNAMEからだとJupyter Labも問題なく開ける。

jupyter labと入力して、出てきたURLをブラウザで開くとエラーなく起動する。

(base) tropicbird@DESKTOP-XXXXXXX:~$ jupyter lab

Bash on Windows でxmingを使用してウインドウを表示

Bash on Windowsxmingを使用してウインドウを表示

bash on ubuntu on windowsにおいてmaptlotlibやpyqtなどを使用したいときはGUIが必要となる。
GUIとなるのがXmingXmingはウィキによると、「Xming は、Microsoft Windows 上で動作する、X Window System の実装の一つ。」とあるが、理解はできていない。
・以下のサイトに詳しく記載されている。
qiita.com
stackoverflow.com

bash on ubuntu on windowsXmingを使う手順は以下の通り。

1.xmingをインストール。起動。
2.bash on ubuntu on windows上で、

username@user: export DISPLAY=localhost:0.0

この時、localhostの数字は右下のステータスバーにあるXmingのアイコンで確認する。

3.bash on ubuntu on windowsに対応したウインドウズを表示する。

username@user: xeyes

WSLからAnacondaが開けない。

Bash on Windowを起動して、Anacoda Navigatorを起動してみるが、、

(base) tropicbird@DESKTOP-SL2TGNL:/mnt/c/Users/USERNAME$ anaconda-navigator

以下のようなエラーが発生する。

This application failed to start because it could not find or load the Qt platform plugin "xcb"
in "".

Available platform plugins are: eglfs, minimal, minimalegl, offscreen, vnc, xcb.

Reinstalling the application may fix this problem.
Aborted (core dumped)

解決策募集中です。

Bash on Windows のインストール方法

WindowsBashをインストールする方法

以下のリンク参照。
qiita.com

メモ:UbuntuとはデスクトップLinuxディストリビューション

シェルの概要

・シェル、ターミナル、コマンドラインは同じ。シェルとは、テキストでコンピュータと対話する方法。
コマンドプロンプトbashと入力すると、bashが起動する。


IPythonからのシェルコマンド実行

・!を前置きすることで、IPython上でUNIX系のシェルコマンドが実行可能になる。

!ls
WindowsBash(UbuntuOS)をインストールすることのメリット

Windows上で普通にIPythonを開いて、「!UNIX系シェルコマンド」を実行してもうまくいかなかった。理由は通常のIPythonはWindowsOS上で動いているから。
・そのため、windowsの場合、IPython上でUNIX系のシェルコマンドを利用するには、次のステップが必要。つまり、UbuntuOS上にIPythonをインストールするということ。
1.Bash on Ubuntu on Windowsをインストール(上記のリンクの作業のこと)
2.Bash on Ubuntu on Windows上で、リナックス版のAnacondaをインストール。
3.Bash on Ubuntu on Windows上でIPythonと入力すると、IPythonが起動され、IPython上で!前置きによるUNIXコマンドが使えるようになる。
ちなみに、これらの手順のヒント(?)は以下のリンクに記載があり。
Install Anaconda on Windows Subsystem for Linux (WSL) · GitHub

WindowsのUbuntu(Bash on Windows)にWgetをインストールする。

UbuntuWgetをインストールする。

Windows を使っているので、Bash on Windowsで、Ubuntuを起動する。

C:\Users\USERNAME>bash
(base) tropicbird@DESKTOP-XXXXXXX:/mnt/c/Users/USERNAME$

Wgetをインストールする。

$ sudo apt install -y wget

以上。

WindowsUbuntuをのせる方法(Bash on Windows)は以下の記事にて。
tropicbird.hatenablog.com