CloudStack 2.2系の最新版は2.2.15ということになっているらしい。このバージョンは以下の様な重要な変更点(詳しくはリリースノートを参照のこと)があるのでぜひともバージョンアップしておきたいと思うのだが一般には公開されないもののようだ。
- XenServer 6.0.2のサポート
- CPU Capにまつわる重要なbug fix
ということでgitリポジトリからパッケージを自作してみることにした。なおOSはターゲットOS、ビルドOSともにCentOS 6.3を使用してる。
githubからソースコードを入手する
以下のコマンドでgithubからソースコードを入手する。
git clone https://github.com/CloudStack-extras/CloudStack-archive.git
カレントディレクトリにCloudStack-archiveというディレクトリが作成され、masterブランチのソースコードが展開されるはずだ。
以降CloudStack-archiveディレクトリで作業を行う。
ブランチを2.2.15に変更する
以下のコマンドで2.2.15のソースコードを展開する。
git checkout -b 2.2.15 TAG_CLOUDPLATFORM_2.2.15_GA2
TAG_CLOUDPLATFORM_2.2.15_GA2というタグが2.2.15のリリース版のハズ(正確なところはよくわからない)。
ビルドに必要なRPMパッケージをインストールする
waf viewrpmdepsというコマンドを実行すればコンパイルに必要なパッケージ一覧が得られる。これらのRPMをyumなりでインストールする。
[mas00 CloudStack-archive]$ ./waf viewrpmdeps glibc-devel gcc commons-httpclient java-1.6.0-openjdk-devel rpm-build ws-commons-util tomcat6 MySQL-python jpackage-utils /usr/bin/mkisofs 'viewrpmdeps' finished successfully (0.001s)
RPMをビルドする
CloudStackのビルドスクリプトはターゲットOSをCentOS/RHEL/Ubuntuとそれぞれ区別して処理を行うように作られているが、CentOS用の処理は(JavaのCLASSPATHなど)色々とおかしいところがあるので、ビルドするOSがCentOSである場合、RHEL6であるように振る舞うように以下の様な変更を行う。
rm /etc/redhat-release echo Red Hat Enterprise Linux Server release 6 > /etc/redhat-release mv /etc/centos-release /etc/centos-release.orig
準備が出来たら早速ビルドする。
./waf rpm --package-version=2.2.15 --release-version=0.1
うまくビルドできればartifacts/rpmbuild/RPMS/x86_64にRPMパッケージが作成されているはずだ。
[mas00 CloudStack-archive]$ ls artifacts/rpmbuild/RPMS/x86_64 cloud-agent-2.2.15-0.1.el6.x86_64.rpm cloud-agent-libs-2.2.15-0.1.el6.x86_64.rpm cloud-agent-scripts-2.2.15-0.1.el6.x86_64.rpm cloud-baremetal-agent-2.2.15-0.1.el6.x86_64.rpm cloud-cli-2.2.15-0.1.el6.x86_64.rpm cloud-client-2.2.15-0.1.el6.x86_64.rpm cloud-client-ui-2.2.15-0.1.el6.x86_64.rpm cloud-console-proxy-2.2.15-0.1.el6.x86_64.rpm cloud-core-2.2.15-0.1.el6.x86_64.rpm cloud-daemonize-2.2.15-0.1.el6.x86_64.rpm cloud-deps-2.2.15-0.1.el6.x86_64.rpm cloud-python-2.2.15-0.1.el6.x86_64.rpm cloud-server-2.2.15-0.1.el6.x86_64.rpm cloud-setup-2.2.15-0.1.el6.x86_64.rpm cloud-test-2.2.15-0.1.el6.x86_64.rpm cloud-usage-2.2.15-0.1.el6.x86_64.rpm cloud-utils-2.2.15-0.1.el6.x86_64.rpm
インストールパッケージを使ってインストールする
ビルドされたRPMパッケージをそのままrpm -ivhしても良いのだが、yumを使用して依存RPM含めて一気にインストールしたい場合はCloudStackのインストールパッケージを借用する。
- CloudStack-2.2.14-1-rhel6.1.tar.gzをダウンロードして展開する
- CloudStack-2.2.14-1-rhel6.1/ossディレクトリにあるRPMを2.2.15のものに置き換える
- CloudStack-2.2.14-1-rhel6.1ディレクトリに移動し"createrepo -d ."を実行する
- CloudStack-2.2.14-1-rhel6.1/install.shを実行してインストールする
インストール後の注意点
2.2.14までエージェントのスレッド数の上限(DirectAgentPoolSize)は500とハードコーディングされていたが、2.2.15からdirect.agent.pool.sizeというグローバルコンフィグレーションパラメータでこの値を設定するようになっている。
ところがこの値のデフォルト値が1000となっており、Linuxのulimitを設定しない場合のプロセス上限を超えてしまうので、Out of memory例外を出してCloudStackが停止してしまう。インストール後速やかにこの値を1000以下(2.2.14と同様500で良いと思う)に設定する必要がある。
おそらくこのバグのad hocな対処が原因である。