iPython Notebookが0.13.2にバージョンアップして、セットアップが自動化できそうな雰囲気がしたので勉強中のChefのcookbookにした。
sympyだけはaptで降ってくるバージョンが古くて動作しなかったので、pipで入れている。
デーモン化が面倒だったので nohup で起動するようにした。レシピは次の通り。
起動スクリプトテンプレート、起動オプションのいくつかはAttributeから渡す。
OK。あとはbitbucketのプライベートリポジトリで管理しているノートをgitで引っぱってこれば個人的な要件は満たせる。
iPython Notebookのパッケージインストール
apt-get install ipython-notebook で入るようになったので、これまでとは比較にならないぐらい簡単になった。レシピは次の通り。ipython-notebook本体と必要なパッケージをインストールする。1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # 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" |
iPython Notebookの起動
サーバー起動時にiPython Notebookも起動して欲しいので起動もレシピにした。内容は- 起動ユーザー(ipynb)の作成
- プロファイル配置ディレクトリの作成
- 起動スクリプトの配置
- 起動
デーモン化が面倒だったので nohup で起動するようにした。レシピは次の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 | # 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 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | #!/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で引っぱってこれば個人的な要件は満たせる。