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 endend# 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 usergroup 'ipynb' do group_name 'ipynb' action :createenduser 'ipynb' do comment 'User for ipython notebook' gid 'ipynb' home '/home/ipynb' shell '/bin/bash' supports :manage_home => true action :createend# Add to staff groupgroup 'staff' do action :modify members ['ipynb'] append trueend# Create serve directorydirectory '/web/' do owner 'ipynb' group 'staff' mode '0775' action :createenddirectory '/web/ipython-notebook/' do owner 'ipynb' group 'staff' mode '0775' action :createend# 起動スクリプトの配置template '/web/ipython-notebook/launch.sh' do source "launch.sh.erb" owner 'ipynb' group 'staff' mode 00776endbash 'Launch ipython notebook' do user 'ipynb' group 'staff' cwd '/web/ipython-notebook/' code >>-EOC nohup ./launch.sh restart EOCend |
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/bashpid=`dirname $0`/ipynb.pidport=<%= node['ipython-notebook']['port'] %>ip=<%= node['ipython-notebook']['ip'] %>ipythondir=`dirname $0`/.ipythonstart() { 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 1esacexit $? |
動作確認
インスタンス起動後にチェック$ 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で引っぱってこれば個人的な要件は満たせる。
