今お仕事させていただいている国立情報学研究所では Literate Computing for Reproducible Infrastructureと銘打って、仮想環境の整備をするNotebookとかHadoopクラスタを構築するNotebookとかを公開しているわけですが、最初のとっかかりとしてJupyterとAnsibleがインストールされた環境を用意するところがちょっと考えどころになります。

Macを使っておられる方はいずれもpipでさっくり入るわけですが、Windowsだと色々悩みどころが出てきます。
まあ、インフラ系ツールを積極的に使うんならLinuxとかMacとか使えよという話はあるわけですが、今回はその悩みどころを我らがニューカマーBash on Ubuntu on Windows(以下BoW)で何とかしてみることにします。

BoWに取り組む前に・・・

個人的感想ではありますが、BoWはまだまだ発展途上感は否めないので、それなりに苦労する覚悟が必要そうという感じです。他にも、WindowsでJupyterを触るやり方はいくつかあるかなと・・・

Anacondaを使う?

Jupyterからデータサイエンス分野のツールを使うのであれば、Anacondaが最も楽なんじゃないかと思います。

AnacondaはWindows向けのインストーラも用意されていて、Anacondaをインストールした後 conda install jupyter とかすればさっくりjupyter.exeがインストールされます。あとはjupyter notebookとか実行するとちゃんと動きます。便利。

ただ、悩みどころがAnsibleで、Windows Support での記述の通り、ansibleのクライアントとしてはLinuxマシンのみが想定されていて(操作ターゲットとしてはWindowsもいけるわけですが)、Windows上でansibleをクライアントとして使うには結局BoWとかCygwinとかが必要になります。

参考: Using Ansible through Windows 10’s Subsystem for Linux

Dockerを使う?

WindowsでのDockerもHyper-V統合されたりして結構こなれてきたと個人的には思っています。

やり方の概観は、ローカル環境でJupyter Notebookを動かすときの俺的ベストプラクティスを参照してください。最新はもっと楽になっていると思います。(編集しなきゃ・・・)

BoWでJupyter+Ansibleを動かす

で、本題。BoWでJupyterとAnsibleを動かしてみることにします。

BoWでJupyterを動かそうとした場合、2016/11/13現在、Insider Previewのリリース プレビュー版では(たぶんリリース版も)、WSL(Windows Subsystem for Linux)のシステムコール実装の問題でZeroMQが正常に動作しません。

この問題を回避するため、Issue Cannot connect to jupyter/ipython instance で紹介されているパッチをあてたバージョンのZeroMQを利用する必要があります。手順としては以下のイメージ。

Bash on Ubuntu on Windowsをインストールする

参考: Bash on Ubuntu on Windowsをインストールしてみよう!

BoW上でJupyterをインストールする
以下のコマンドを実行すればOK。

$ sudo apt-get update
$ sudo add-apt-repository ppa:aseering/wsl
$ sudo apt-get update
$ sudo apt-get install python-pip python-zmq libzmq3
$ sudo pip install jupyter

BoW上でAnsibleをインストールする

$ sudo pip install ansible

Jupyter Notebookを実行する

$ jupyter notebook –no-browser

とかすればOK。
Notebookのディレクトリやポート番号などの設定はjupyter notebook –generate-config して、生成されたconfigファイルを変更すればよい。

という感じ。これで、ブラウザから http://localhost:8888 でNotebookを開いて、NotebookからAnsibleを実行できるようになります。

ポイントは、add-apt-repository ppa:aseering/wsl した後に sudo apt-get install python-zmq libzmq3 すること。この手順によりBoW対応のパッチがあたったバージョンのlibzmq3と、それを使う形でコンパイルされたPython用のZMQモジュールをインストールすることができます。

aptからでなくpipなどでpyzmqを個別にインストールしていたりすると、バンドル版の(パッチがあたっていない)ZMQが動いたりするので要注意。どうにも動かない場合はlxrun /uninstall /fullした後にlxrun /installしてBoWをいったん再インストールして再現性をみるのがよいかもしれません。

これで、BoWを介しているとは言え比較的素直にWindows上でもjupyterとansibleが使えるようになります。具体的に各Notebookの使い方を解説していきたいところなんですが、それはまた別の機会に。