iPython Notebookが0.13.2にバージョンアップして、セットアップが自動化できそうな雰囲気がしたので勉強中のChefのcookbookにした。
デーモン化が面倒だったので nohup で起動するようにした。レシピは次の通り。
OK。あとはbitbucketのプライベートリポジトリで管理しているノートをgitで引っぱってこれば個人的な要件は満たせる。
iPython Notebookのパッケージインストール
apt-get install ipython-notebook で入るようになったので、これまでとは比較にならないぐらい簡単になった。レシピは次の通り。ipython-notebook本体と必要なパッケージをインストールする。# Install packages %w{ python-pandas python-numpy python-scipy python-matplotlib python-nose ipython-notebook }.each do |pkg| package pkg do action :upgrade end end # iPython needs sympy 0.7.2 # So use [pip install] instead of package install (0.7.1). python_pip "sympy"sympyだけはaptで降ってくるバージョンが古くて動作しなかったので、pipで入れている。
iPython Notebookの起動
サーバー起動時にiPython Notebookも起動して欲しいので起動もレシピにした。内容は- 起動ユーザー(ipynb)の作成
- プロファイル配置ディレクトリの作成
- 起動スクリプトの配置
- 起動
デーモン化が面倒だったので nohup で起動するようにした。レシピは次の通り。
# Create launch user group 'ipynb' do group_name 'ipynb' action :create end user 'ipynb' do comment 'User for ipython notebook' gid 'ipynb' home '/home/ipynb' shell '/bin/bash' supports :manage_home => true action :create end # Add to staff group group 'staff' do action :modify members ['ipynb'] append true end # Create serve directory directory '/web/' do owner 'ipynb' group 'staff' mode '0775' action :create end directory '/web/ipython-notebook/' do owner 'ipynb' group 'staff' mode '0775' action :create end # 起動スクリプトの配置 template '/web/ipython-notebook/launch.sh' do source "launch.sh.erb" owner 'ipynb' group 'staff' mode 00776 end bash 'Launch ipython notebook' do user 'ipynb' group 'staff' cwd '/web/ipython-notebook/' code >>-EOC nohup ./launch.sh restart EOC end起動スクリプトテンプレート、起動オプションのいくつかはAttributeから渡す。
#!/bin/bash pid=`dirname $0`/ipynb.pid port=<%= node['ipython-notebook']['port'] %> ip=<%= node['ipython-notebook']['ip'] %> ipythondir=`dirname $0`/.ipython start() { if [ -f $pid ]; then echo "running already. pid: `cat $pid`"; return 1; else cd `dirname $0` ipython notebook --pylab=inline --port=$port --ip=$ip --ipython-dir=$ipythondir & echo $! > $pid fi } stop() { if [ -f $pid ]; then kill `cat $pid` rm -f $pid else echo "Not running"; fi } restart() { stop start } case "$1" in start) start ;; stop) stop ;; restart) restart ;; *) echo $"Usage: $0 {start|stop|restart}" exit 1 esac exit $?
動作確認
インスタンス起動後にチェック$ ps aux | grep python実際に使ってみる。
ipynb 23612 0.0 4.0 188952 20172 ? S 13:24 0:02 python /usr/bin/ipython notebook --pylab=inline --port=8888 --ip=* --ipython-dir=./.ipython
OK。あとはbitbucketのプライベートリポジトリで管理しているノートをgitで引っぱってこれば個人的な要件は満たせる。