Jupyter+AnsibleをBash on Ubuntu on Windowsにインストール

  • 8
    いいね
  • 0
    コメント

今お仕事させていただいている国立情報学研究所では 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を利用する必要があります。手順としては以下のイメージ。

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

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

  2. 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
    
  3. BoW上でAnsibleをインストールする

    $ sudo pip install ansible
    
  4. 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の使い方を解説していきたいところなんですが、それはまた別の機会に。