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で引っぱってこれば個人的な要件は満たせる。
