今お仕事させていただいている国立情報学研究所では 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の使い方を解説していきたいところなんですが、それはまた別の機会に。