Eucalyptus Advent Calendar 2012 JP 一日目
Walrus だけ使ってみたよ
Eucalyptus Advent Calendar 2012 JP の一日目なので、内容はライトでキャワワな方向で行きます。
いきなり初日からこいつぁ Geek 臭プンプン匂うぜぇ的な内容だと読む人も参加する人もドン引きでしょうから、「Eucalyptus 3.2 の nightly ビルドを入れて Walrus だけ使ってみたぜぇ?」って感じの内容にします。
前説
Eucalyptus には AWS の S3 互換機能を提供する Walrus という名のコンポーネントがあります。この Walrus くん、辞書で索くとセイウチのことだそうです。EC2 互換機能およびソフトウェア名が Eucalyptus なのに何でここでいきなり海の生き物なんですかね?全然関連性がないですよね?
「全然関係ない」と言えば、AWS の API 操作ライブラリの boto、この boto ですが、Wikipedia によるとアマゾンカワイルカの別名らしいです。まぁ、ホント全然関係ないですけどね。(ノ´*ω*`)ノ
で、この Walrus、S3 互換なので「大規模分散オブジェクトストア」じゃないけど一応「オブジェクトストア」の末席に居まして、ってことは「S3 っぽく使っていいんじゃね?」とムクムクとスケベ心が出てくるわけですよ。やったねホーリーナイト! ってことで、「Walrus だけ使ってみるの巻」です。
パッケージのインストール
じゃーさっそく Walrus のインストール。本当は難しいこと全然ないし、Advent Calendar 向けのポストなので細かいことは省いてサクサク書くつもりだったんですが、ちょいちょいハマる可能性があるので、聖なる紳士淑女のために一応実行したコマンドも書きますね。(あ、ntp のインストールと設定は省きますね)
## まずはレポジトリ情報をぶち込みます
# rpm -Uvh http://downloads.eucalyptus.com/software/euca2ools/2.1/centos/5/x86_64/euca2ools-release-2.1.noarch.rpm
# rpm -Uvh http://downloads.eucalyptus.com/software/eucalyptus/nightly/3.2/centos/5/x86_64/eucalyptus-release-3.2.0.noarch.rpm
# rpm -Uvh http://downloads.eucalyptus.com/software/eucalyptus/nightly/3.2/centos/5/x86_64/epel-release-5.noarch.rpm
## で Walrus のパッケージをインストールします。やったねたえちゃん!
# yum install eucalyptus-walrus
Loaded plugins: fastestmirror, security
Loading mirror speeds from cached hostfile
* base: ftp.iij.ad.jp
* epel: ftp.tsukuba.wide.ad.jp
* extras: ftp.iij.ad.jp
* updates: ftp.iij.ad.jp
http://ftp.tsukuba.wide.ad.jp/Linux/fedora/epel/5/x86_64/repodata/163f5e50189c637abd889887c90b8af108cf2ad1-primary.sqlite.bz2: [Errno 14] HTTP Error 404: Not Found
Trying other mirror.
http://mirrors.ustc.edu.cn/fedora/epel/5/x86_64/repodata/163f5e50189c637abd889887c90b8af108cf2ad1-primary.sqlite.bz2: [Errno 14] HTTP Error 404: Not Found
Trying other mirror.
http://mirrors.ispros.com.bd/fedora-epel/5/x86_64/repodata/163f5e50189c637abd889887c90b8af108cf2ad1-primary.sqlite.bz2: [Errno 14] HTTP Error 404: Not Found
Trying other mirror.
Error: failure: repodata/163f5e50189c637abd889887c90b8af108cf2ad1-primary.sqlite.bz2 from epel: [Errno 256] No more mirrors to try.
はい、いきなりエラーですよ。さすがにこれは予想 GUY! まぁ、でもこれはエラーが示すとおり epel の問題です。そう、Eucalyptus は悪くない、Eucalyptus はいつだって味方だった。悪いのは大人達~♪
まぁ、ミラーが伝播されていないので直接指定するしかないよね?ってことで、/etc/yum.repos.d/epel.repo の [epel] をちょいちょいと以下のように直します。
[epel]
name=Extra Packages for Enterprise Linux 5 - $basearch
baseurl=http://ftp.osuosl.org/pub/fedora-epel/5/$basearch
#mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-5&arch=$basearch
failovermethod=priority
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL
そして再アターック!
再アタックは問題なく進んでツマらんので経過は割愛…と思ったら Eucalyptus のサイトが激重なのか途中で
(53/53): eucalyptus-common-java-libs-3.2.0-0 (64%) 5% [=- ] 4.1 kB/s | 3.1 MB 208:02 ETA
ってな素敵な遅さです。(☍﹏⁰) ふぇぇ…こんな調子じゃ 12⁄1 が終っちゃうよぉぉぉ…
で本当に Eucalyptus のサイトの所為なのか?と思って別環境で上記のファイルをダウンロードしたら10分ぐらいで落せました。どうやら Eucalyptus のサイトが重いだけじゃないみたい。ということで、別環境で落したこのファイルを /var/cache/yum/eucalyptus-release/packages/eucalyptus-common-java-libs-3.2.0-0.0.370.20121201gita8d7a120.el5.x86_64.rpm に配置して最後の一投。(今度こそ割愛)
で、yum install eucalyptus-walrus でインストールされた主な Eucalyptus パッケージは以下です。
eucalyptus-common-java-3.2.0
eucalyptus-common-java-libs-3.2.0
eucalyptus-admin-tools-3.2.0
eucalyptus-walrus-3.2.0
eucalyptus-3.2.0
python26-eucadmin-3.2.0
あぁ…そうか euca2ools は別に必須じゃないのね。まぁ、使うこともないのでわざわざ入れる必要もないか。ハナクソ( ゚┌・・ ゚) ホジホジ♪
DB の初期化
eucalyptus.conf は Walrus 的には不要な(はずな)ので設定せず、おもむろに Walrus の登録をしたいのですが、その前に DB の初期化を行ないます。
## DB の初期化
# euca_conf --initialize
Initializing a new cloud. This may take a few minutes.
………
………
………
返ってこない…orz
で、何が起きているのか見てみたく、–debug オプションを指定してみます。
# euca_conf --debug --initialize
Initializing a new cloud. This may take a few minutes.
…… –debug オプション△…orz
仕方がないので euca_conf –initialize の本丸である /usr/lib/python2.6/site-packages/eucadmin/initialize.py の 74 行目付近を以下のように変更し cmd_string の中身を出力させます。
print 'Initializing a new cloud. This may take a few minutes.'
print 'Command: %s' % cmd_string
cmd = Command(cmd_string)
そんで実行すると以下のように実行しているコマンドが出力されます。
# euca_conf --debug --initialize
Initializing a new cloud. This may take a few minutes.
Command: //usr/sbin/eucalyptus-cloud -u eucalyptus -h / --initialize --log-level=EXTREME -L console
じゃー、このコマンドを手動で実行してみます。(あぁ、なんか内容がちょっとライトじゃなくなってきた…?)
# /usr/sbin/eucalyptus-cloud -u eucalyptus -h / --initialize --log-level=EXTREME -L console
[error:0300]
ulimit: resource=7 soft=1024 hard=1024
ulimit: resource=7 soft=65535 hard=65535
ulimit: resource=6 soft=16383 hard=16383
ulimit: resource=6 soft=-1 hard=-1
2012-12-01 17:43:42 INFO 000000001 SystemBootstrapper SystemBootstrapper.java:116 | Creating Bootstrapper instance.
2012-12-01 17:43:43 INFO 000000001 root Logs.java:184 | --------------------------------------------------------------------------------
| Starting system with debugging set as: EXTREME
| --------------------------------------------------------------------------------
2012-12-01 17:43:43 INFO 000000001 Internets Internets.java:122 | Trying to determine local bind address based on cli (--bind-addr)...
2012-12-01 17:43:43 INFO 000000001 Internets Internets.java:127 | Trying to determine local bind address based on the default route...
2012-12-01 17:43:44 INFO 000000001 Internets Internets.java:134 | ==> Decided to use local bind address: /180.235.254.76
2012-12-01 17:43:46 INFO 000000001 DirectoryBootstrapper BaseRecord.java:173 | bootstrap SYSTEM_DIR_CHECK : [NativeMethodAccessorImpl.invoke0.-2] HOME:/
2012-12-01 17:43:46 INFO 000000001 DirectoryBootstrapper BaseRecord.java:173 | bootstrap SYSTEM_DIR_CHECK : [NativeMethodAccessorImpl.invoke0.-2] VAR://var/lib/eucalyptus
2012-12-01 17:43:46 INFO 000000001 DirectoryBootstrapper BaseRecord.java:173 | bootstrap SYSTEM_DIR_CHECK : [NativeMethodAccessorImpl.invoke0.-2] CONF://etc/eucalyptus/cloud.d
2012-12-01 17:43:46 INFO 000000001 DirectoryBootstrapper BaseRecord.java:173 | bootstrap SYSTEM_DIR_CHECK : [NativeMethodAccessorImpl.invoke0.-2] LIB://usr/share/eucalyptus
2012-12-01 17:43:46 INFO 000000001 DirectoryBootstrapper BaseRecord.java:173 | bootstrap SYSTEM_DIR_CHECK : [NativeMethodAccessorImpl.invoke0.-2] LOG://var/log/eucalyptus
2012-12-01 17:43:46 INFO 000000001 DirectoryBootstrapper BaseRecord.java:173 | bootstrap SYSTEM_DIR_CHECK : [NativeMethodAccessorImpl.invoke0.-2] RUN://var/run/eucalyptus
2012-12-01 17:43:46 INFO 000000001 DirectoryBootstrapper BaseRecord.java:173 | bootstrap SYSTEM_DIR_CHECK : [NativeMethodAccessorImpl.invoke0.-2] LIBEXEC://usr/lib/eucalyptus
2012-12-01 17:43:46 INFO 000000001 DirectoryBootstrapper BaseRecord.java:173 | bootstrap SYSTEM_DIR_CHECK : [NativeMethodAccessorImpl.invoke0.-2] STATE://var/lib/eucalyptus
2012-12-01 17:43:46 INFO 000000001 DirectoryBootstrapper BaseRecord.java:173 | bootstrap SYSTEM_DIR_CHECK : [NativeMethodAccessorImpl.invoke0.-2] JNI://usr/lib/eucalyptus
2012-12-01 17:43:46 INFO 000000001 DirectoryBootstrapper BaseRecord.java:173 | bootstrap SYSTEM_DIR_CHECK : [NativeMethodAccessorImpl.invoke0.-2] SYSFAULTS://usr/share/eucalyptus/faults
chown: changing ownership of `//usr/share/eucalyptus/faults/en_US/common.xml': Operation not permitted
chown: changing ownership of `//usr/share/eucalyptus/faults/en_US/1002.xml': Operation not permitted
chown: changing ownership of `//usr/share/eucalyptus/faults/en_US/1001.xml': Operation not permitted
chown: changing ownership of `//usr/share/eucalyptus/faults/en_US/1004.xml': Operation not permitted
chown: changing ownership of `//usr/share/eucalyptus/faults/en_US/2002.xml': Operation not permitted
chown: changing ownership of `//usr/share/eucalyptus/faults/en_US/1010.xml': Operation not permitted
chown: changing ownership of `//usr/share/eucalyptus/faults/en_US/1005.xml': Operation not permitted
chown: changing ownership of `//usr/share/eucalyptus/faults/en_US/1008.xml': Operation not permitted
chown: changing ownership of `//usr/share/eucalyptus/faults/en_US/1003.xml': Operation not permitted
chown: changing ownership of `//usr/share/eucalyptus/faults/en_US/1009.xml': Operation not permitted
chown: changing ownership of `//usr/share/eucalyptus/faults/en_US/2001.xml': Operation not permitted
chown: changing ownership of `//usr/share/eucalyptus/faults/en_US/2000.xml': Operation not permitted
chown: changing ownership of `//usr/share/eucalyptus/faults/en_US': Operation not permitted
chown: changing ownership of `//usr/share/eucalyptus/faults': Operation not permitted
chgrp: changing group of `//usr/share/eucalyptus/faults/en_US/common.xml': Operation not permitted
chgrp: changing group of `//usr/share/eucalyptus/faults/en_US/1002.xml': Operation not permitted
chgrp: changing group of `//usr/share/eucalyptus/faults/en_US/1001.xml': Operation not permitted
chgrp: changing group of `//usr/share/eucalyptus/faults/en_US/1004.xml': Operation not permitted
chgrp: changing group of `//usr/share/eucalyptus/faults/en_US/2002.xml': Operation not permitted
chgrp: changing group of `//usr/share/eucalyptus/faults/en_US/1010.xml': Operation not permitted
chgrp: changing group of `//usr/share/eucalyptus/faults/en_US/1005.xml': Operation not permitted
chgrp: changing group of `//usr/share/eucalyptus/faults/en_US/1008.xml': Operation not permitted
chgrp: changing group of `//usr/share/eucalyptus/faults/en_US/1003.xml': Operation not permitted
chgrp: changing group of `//usr/share/eucalyptus/faults/en_US/1009.xml': Operation not permitted
chgrp: changing group of `//usr/share/eucalyptus/faults/en_US/2001.xml': Operation not permitted
chgrp: changing group of `//usr/share/eucalyptus/faults/en_US/2000.xml': Operation not permitted
chgrp: changing group of `//usr/share/eucalyptus/faults/en_US': Operation not permitted
chgrp: changing group of `//usr/share/eucalyptus/faults': Operation not permitted
chmod: changing permissions of `//usr/share/eucalyptus/faults': Operation not permitted
chmod: changing permissions of `//usr/share/eucalyptus/faults/en_US': Operation not permitted
chmod: changing permissions of `//usr/share/eucalyptus/faults/en_US/common.xml': Operation not permitted
chmod: changing permissions of `//usr/share/eucalyptus/faults/en_US/1002.xml': Operation not permitted
chmod: changing permissions of `//usr/share/eucalyptus/faults/en_US/1001.xml': Operation not permitted
chmod: changing permissions of `//usr/share/eucalyptus/faults/en_US/1004.xml': Operation not permitted
chmod: changing permissions of `//usr/share/eucalyptus/faults/en_US/2002.xml': Operation not permitted
chmod: changing permissions of `//usr/share/eucalyptus/faults/en_US/1010.xml': Operation not permitted
chmod: changing permissions of `//usr/share/eucalyptus/faults/en_US/1005.xml': Operation not permitted
chmod: changing permissions of `//usr/share/eucalyptus/faults/en_US/1008.xml': Operation not permitted
chmod: changing permissions of `//usr/share/eucalyptus/faults/en_US/1003.xml': Operation not permitted
chmod: changing permissions of `//usr/share/eucalyptus/faults/en_US/1009.xml': Operation not permitted
chmod: changing permissions of `//usr/share/eucalyptus/faults/en_US/2001.xml': Operation not permitted
chmod: changing permissions of `//usr/share/eucalyptus/faults/en_US/2000.xml': Operation not permitted
2012-12-01 17:43:46 INFO 000000001 DirectoryBootstrapper BaseRecord.java:173 | bootstrap SYSTEM_DIR_CHECK : [NativeMethodAccessorImpl.invoke0.-2] CUSTOMFAULTS:///etc/eucalyptus/faults
2012-12-01 17:43:46 INFO 000000001 DirectoryBootstrapper BaseRecord.java:173 | bootstrap SYSTEM_DIR_CHECK : [NativeMethodAccessorImpl.invoke0.-2] DB://var/lib/eucalyptus/db
2012-12-01 17:43:46 INFO 000000001 DirectoryBootstrapper BaseRecord.java:173 | bootstrap SYSTEM_DIR_CHECK : [NativeMethodAccessorImpl.invoke0.-2] BACKUPS://var/lib/eucalyptus/backups
2012-12-01 17:43:46 INFO 000000001 DirectoryBootstrapper BaseRecord.java:173 | bootstrap SYSTEM_DIR_CHECK : [NativeMethodAccessorImpl.invoke0.-2] TX://var/run/eucalyptus//tx
2012-12-01 17:43:46 INFO 000000001 DirectoryBootstrapper BaseRecord.java:173 | bootstrap SYSTEM_DIR_CHECK : [NativeMethodAccessorImpl.invoke0.-2] CLASSCACHE://var/run/eucalyptus//classcache
うーん、chown,chgrp,chmod が失敗している部分は本筋に関係なさそうだけど、コンソールにはこの先の出力が流れない…。
# ps auxwww | grep -i [e]uca
root 5085 0.0 0.0 10168 764 pts/0 S+ 17:43 0:00 eucalyptus-cloud -u eucalyptus -h / --initialize --log-level=EXTREME -L console
101 5088 2.1 4.9 1590584 101688 pts/0 Sl 17:43 0:05 eucalyptus-cloud -u eucalyptus -h / --initialize --log-level=EXTREME -L console
101 5140 0.0 0.0 61112 884 pts/0 S 17:43 0:00 chown -R eucalyptus //var/run/eucalyptus//classcache
chown -R eucalyptus //var/run/eucalyptus//classcache がそんなに時間のかかる処理に思えないんだけど…何で返ってこないんだろう?不思議。っていうか /var/run/eucalyptus/classcache/ 配下の所有権が root:root なんだけど、/usr/lib/eucalyptus/euca_rootwrap 使わずに chown とかしても駄目じゃん…orz もうこれ Walrus がどうのこうのっていう話じゃないよなぁ…。
で考えるのが嫌んなっちゃうので、とりあえず手動で (ぉぃ
# chown -R eucalyptus //var/run/eucalyptus//classcache
# euca_conf --initialize
Initializing a new cloud. This may take a few minutes.
Command: //usr/sbin/eucalyptus-cloud -u eucalyptus -h / --initialize
Initialize command failed
はい、もう嫌… T^T
ちょっと出力が長すぎるので省略するけど、つまりは pg_ctl が無いって言ってます。
2012-12-01 18:13:48 DEBUG 000000001 Groovyness Groovyness.java:161 | javax.script.ScriptException: javax.script.ScriptException: java.io.IOException: Cannot run program "/usr/pgsql-9.1/bin/pg_ctl": java.io.IOException: error=2, No such file or directory
javax.script.ScriptException: javax.script.ScriptException: java.io.IOException: Cannot run program "/usr/pgsql-9.1/bin/pg_ctl": java.io.IOException: error=2, No such file or directory
うーん、やっぱ eucalyptus-cloud をインストールしないと色々とハマるんだなぁ…。でも、ここで日和って eucalyptus-cloud をインストールしたんじゃぁご先祖様に申し訳ねぇ…ってことで pg_ctl を入れます。(妻が「ねぇ、晩御飯いつになったら行けるの?」って言ってますけど、きっと「あなた頑張って(はぁと)」っていう意味だと思います)
で、よくよく確認したら postgresql-server が入ってなかったのでインストールします。(はぁと)
# yum install postgresql91-server
そしてもう一度 euca_conf –initialize を実行。実行……したけど終らない…。終らなすぎて、妻が先にご飯を食べて風呂を沸かして入っちゃうという事案が発生。|壁|ヽ(;*´ω`)ゞ
まぁ、しょうがないのでログを見ますよハイハイ。
# tail -F /var/log/eucalyptus/cloud-debug.log |grep -i error
Sat Dec 1 19:01:00 2012 ERROR [ComponentDiscovery:main] [com.eucalyptus.component.ComponentDiscovery.processClass(ComponentDiscovery.java):83] java.lang.reflect.UndeclaredThrowableException
Sat Dec 1 19:01:00 2012 INFO [ComponentDiscovery:main] [com.eucalyptus.component.ComponentDiscovery.processClass(ComponentDiscovery.java):84] Error occurred while trying to register ComponentId of type: null
Sat Dec 1 19:01:05 2012 ERROR [setup_db:main] [sun.reflect.NativeMethodAccessorImpl.invoke0(?):?] Insufficient operating system resources! The available number of semaphore identifiers is too low (semmni < 1536)
Sat Dec 1 19:01:17 2012 ERROR [setup_db:main] [sun.reflect.NativeMethodAccessorImpl.invoke0(?):?] java.lang.Exception: Unable to start the postgres database
Sat Dec 1 19:01:17 2012 ERROR [Databases:main] [com.eucalyptus.bootstrap.Databases$ScriptedDbBootstrapper.init(Databases.java):988] java.lang.Exception: Unable to start the postgres database
Sat Dec 1 19:01:36 2012 ERROR [Bootstrap:main] [sun.reflect.NativeMethodAccessorImpl.invoke0(?):?] javax.persistence.PersistenceException: org.hibernate.exception.JDBCConnectionException: Cannot open connection
Sat Dec 1 19:01:47 2012 ERROR [ComponentDiscovery:main] [com.eucalyptus.component.ComponentDiscovery.processClass(ComponentDiscovery.java):83] java.lang.reflect.UndeclaredThrowableException
Sat Dec 1 19:01:47 2012 INFO [ComponentDiscovery:main] [com.eucalyptus.component.ComponentDiscovery.processClass(ComponentDiscovery.java):84] Error occurred while trying to register ComponentId of type: null
Sat Dec 1 19:01:50 2012 ERROR [setup_db:main] [sun.reflect.NativeMethodAccessorImpl.invoke0(?):?] Insufficient operating system resources! The available number of semaphore identifiers is too low (semmni < 1536)
Sat Dec 1 19:01:51 2012 ERROR [setup_db:main] [sun.reflect.NativeMethodAccessorImpl.invoke0(?):?] java.lang.Exception: Unable to initialize the postgres database
Sat Dec 1 19:01:51 2012 ERROR [Databases:main] [com.eucalyptus.bootstrap.Databases$ScriptedDbBootstrapper.init(Databases.java):988] java.lang.Exception: Unable to initialize the postgres database
Sat Dec 1 19:02:08 2012 ERROR [Bootstrap:main] [sun.reflect.NativeMethodAccessorImpl.invoke0(?):?] javax.persistence.PersistenceException: org.hibernate.exception.JDBCConnectionException: Cannot open connection
え………、エラーで処理がループしてますやん…。;゜・(゚ε゚【壁
でエラー見たら The available number of semaphore identifiers is too low (semmni < 1536) ……あぁ、ごめん、確かにリソースのこと確認し忘れてた。だって 2.0.3 まではメモリ 2GB な環境でも動いてたんだもんだもん…T&T
本当はここはサラっと通りすぎて、このあとは以下のような手順でこの日記を進める予定でした
- Walrus のサービスを service eucalyptus-cloud start で起動
- Walrus を登録 (euca_conf –register-walrus) しようとするけどそもそも CLC が居ないので登録先がない…orz
- (やっぱり eucalyptus-cloud のインストールは必要) eucalyptus-cloud のインストール
- あらためて euca_conf –register-walrus を実行
- ユーザ登録とかをして完成 (`・д・´)ゝ
が、残念ながら私が環境要件の確認を怠ったせいでそれ以前でコケました…。
教訓: Eucalyptus を動かすための最低限のスペックは確認してね☆(๑ゝω・๑)vキャピ
Each machine in your network needs a minimum of 4 GB RAM. However, we recommend more RAM for improved caching.