HowToCreateDbclsGalaxyAmiImage

提供:TogoWiki

移動: 案内, 検索

目次

DBCLS Galaxy用AMIイメージの作り方

既存のUbuntuのAMIイメージからDBCLS Galaxyのイメージを作成する方法を以下に示すsimesu。

セキュリティグループ

EC2イメージウィザード内ではカスタムポートを含んだセキュリティグループが作成できないため、事前にセキュリティグループを作成しておく。

- 名前「DBCLS Galaxy Security Group」 - SSH, tcp, 22, 22, 0.0.0.0/0 - - , tcp, 37180, 37180, 0.0.0.0/0

EC2のイメージ作成

- Community AMIsで「ami-c81f4f8d」を検索して選択 - Instance TypeはSmall - 鍵は新規に作っても既存のものでもどちらでもOK - セキュリティグループでは「default」と「DBCLS Galaxy Security Gropu」を選択

作成した鍵(.pem)を~/.ssh/へ置いておく

- 権限を「自分のみ読み込み可能」にしておく -- chmod 400 ~/.ssh/t-hatakeyama_uswest.pem

SSHで接続

- 起動したインスタンスのPublic DNSの値を調べる -- ec2-175-41-197-212.ap-northeast-1.compute.amazonaws.com - ssh -i ~/.ssh/t-hatakeyama_uswest.pem ubuntu@ec2-175-41-197-212.ap-northeast-1.compute.amazonaws.com

mkdir

$ sudo chmod 777 /opt/
$ mkdir -p /opt/services/galaxy/development
$ mkdir -p /opt/services/galaxy/middleware
$ sudo chmod 755 /opt/

インストールに必要なツール

$ sudo aptitude update
$ sudo aptitude install gcc
$ sudo aptitude install g++
$ sudo aptitude install subversion
$ sudo aptitude install mercurial
$ sudo aptitude install rake
$ sudo aptitude install postgresql

Galaxyツールに必要なミドルウェア

$ sudo aptitude install emboss
$ sudo aptitude install r-base-core
$ sudo aptitude install ruby1.8-dev(json)
$ sudo aptitude install libxml2-dev(nokogiri)
$ sudo aptitude install libxslt-dev(nokogiri)

(おまけ)全部まとめた

$ sudo aptitude install gcc g++ subversion mercurial rake emboss r-base-core ruby1.8-dev libxml2-dev libxslt-dev postgresql

RubyGems

$ wget http://rubyforge.org/frs/download.php/70696/rubygems-1.3.7.tgz
$ tar xf rubygems-1.3.7.tgz
$ cd rubygems-1.3.7/
$ sudo ruby setup.rb
$ hash -r
$ gem1.8 env
$ sudo gem1.8 install json
$ sudo gem1.8 install nokogiri
$ sudo gem1.8 install soap4r
$ sudo gem1.8 install rubyrdf
$ sudo gem1.8 install mechanize
$ sudo gem1.8 install rdf_context
$ sudo gem1.8 install fastercsv
$ sudo gem1.8 install twitter4r
$ sudo gem1.8 install sqlite3-ruby
$ sudo gem1.8 install oauth

(全部まとめた)

$ sudo gem1.8 install json nokogiri soap4r rubyrdf mechanize rdf_context fastercsv twitter4r sqlite3-ruby oauth --no-ri --no-rdoc

postgresql

(まだ未インストールなら)
$ sudo aptitude install postgresql

# ユーザpostgresのパスワードを変更
$ sudo passwd postgres
(適当な新しいパスワードを入力する)

# postgresユーザになる
$ su postgres
# ユーザubuntuをDBへアクセスできるようにする
$ createuser ubuntu
(スーパーユーザにしておく)
# postgresユーザから抜ける
$ exit
# データベース作成
$ createdb galaxy
# アクセス用のユーザの作成
$ createuser -P kusako
(パスワードは kusako)


httpd

$ wget http://archive.apache.org/dist/httpd/httpd-2.2.11.tar.bz2
$ tar xf httpd-2.2.11.tar.bz2
$ cd httpd-2.2.11/
$ ./configure --prefix=/opt/services/galaxy/middleware/httpd-2.2.11 --enable-mods-shared=most --enable-proxy
$ make
$ make install

libopkele

$ sudo aptitude install libopkele-dev

mod_auth_openid

$ wget http://butterfat.net/releases/mod_auth_openid/mod_auth_openid-0.5.tar.gz
$ tar xf mod_auth_openid-0.5.tar.gz
$ cd mod_auth_openid-0.5
$ ./configure --prefix=/opt/services/galaxy/middleware/httpd-2.2.11 --with-apr-config=/opt/services/galaxy/middleware/httpd-2.2.11/bin/apr-1-config --with-apxs=/opt/services/galaxy/middleware/httpd-2.2.11/bin/apxs --with-pic 
$ make
$ make install


DBCLS Galaxyをインストールする

$ cd /opt/services/galaxy/development
$ svn co http://kiban.dbcls.jp/svn/eiwa19pj/dbcls_galaxy_patch/trunk dbcls_galaxy_patch --username t-hatakeyama --password t-hatakeyama
$ cd dbcls_galaxy_patch
$ rake update
$ cat > /opt/services/galaxy/middleware/httpd-2.2.11/conf/stage.conf
<Location "/">
    AuthOpenIDEnabled On
#    AuthOpenIDServerName http://galaxy.dbcls.jp
#    AuthOpenIDTrusted ^https://openid.dbcls.jp/server$
    AuthOpenIDLoginPage /login
</Location>
$ rake setup_development

これでApacheが起動してるはずなので、Galaxyも起動してあげる。


Galaxyの設定

が、その前にGalaxyの設定をちょっと修正する

vi /opt/services/galaxy/development/current/universe_wsgi.ini
----
database_connection = postgres://kusako:kusako@localhost:37654/galaxy
↓
database_connection = postgres://kusako:kusako@localhost:5432/galaxy
----

Galaxyを起動

$ rake run_galaxy


仮想マシン起動時にGalaxyも起動するようにする

Galaxyのpidの置き場所を作成

mkdir -p /opt/services/galaxy/development/current/tmp/pids


起動スクリプトを作成

起動スクリプトを /etc/init.d/ へ作成する。

$ sudo vi /etc/init.d/galaxy
$ ls -la /etc/init.d/galaxy
-rw-r--r-- 1 root root 1338 2010-11-15 08:27 /etc/init.d/galaxy
$ sudo chmod 755 /etc/init.d/galaxy


ソースはこんな感じ。

#!/bin/sh

user=ubuntu
galaxy_home=/opt/services/galaxy
galaxy_app_home=$galaxy_home/development/current
python_prog=/usr/bin/python
httpd_prog=$galaxy_home/middleware/httpd-2.2.11/bin/apachectl

start() {
  su - $user -c "$httpd_prog start"
  if [ ! -d "$galaxy_app_home/tmp/pids" ]
  then
    mkdir -p "$galaxy_app_home/tmp/pids"
    chown -R $user "$galaxy_app_home/tmp/pids"
  fi
  su - $user -c "cd $galaxy_app_home; $python_prog -ES $galaxy_app_home/scripts/paster.py serve --daemon --pid-file=$galaxy_app_home/tmp/pids/paster.pid $galaxy_app_home/universe_wsgi.ini $@"
  return 0
}

stop() {
  su - $user -c "cd $galaxy_app_home; $python_prog -ES $galaxy_app_home/scripts/paster.py serve --stop-daemon --pid-file=$galaxy_app_home/tmp/pids/paster.pid $galaxy_app_home/universe_wsgi.ini $@"
  su - $user -c "$httpd_prog -k graceful-stop"
  return 0
}

restart() {
  stop
  sleep 1
  start
  return 0
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    restart
    ;;
  *)
    echo $"Usage: $0 {start|stop|restart}"
    exit 1
esac

作成した起動スクリプトを現在のランレベルへ登録する

まずはランレベルを確認する。

$ runlevel
N 2

ランレベルは2なので、/etc/rc2.d/ へ起動スクリプトを登録する

$ cd /etc/rc2.d/
$ sudo ln -s ../init.d/galaxy S99galaxy

また、シャットダウン時にGalaxyを終了させるため、ランレベル6(/etc/rc6.d/)へ終了スクリプトを登録する

$ cd /etc/rc6.d/
$ sudo ln -s ../init.d/galaxy K11galaxy


AMIイメージの作成

- EC2のインスタンスを停止して、「Instance Actions - Instance Management - Create Image(EBS AMI)」を選択 - ImageNameに「dbcls-galaxy-2011-03-07」、descriptionに「dbcls galaxy」と入力して「Create This Image」を押す - しばらく待つとAMIsに出てくる(10分くらい?)