CentOS 5.4用のkumofsのrpmをビルドする(改訂版)

以前にkumofsをCentOS 5.4用にビルドする記事を書いたが、いくつか気になる点があったのでやりなおしてみた。
kumofsって何?って人はkumofsの開発者frsyuki様のページへ。

変更点は以下の通り。

  • rubyをビルドする際にfedora10のsrpmを使用していたが、最新版のdevelopmentから入手したsrpmを使用するようにした
  • Message Pack、kumofsのビルドにcheckinstallを使用していたが、specファイルを自前で用意してビルドするようにした
  • MessagePack for Rubyをgemコマンドでインストールしていたが、rpmをビルドするようにした
  • 以前の記事で紹介したkumofsの自動起動設定をrpmをインストールしたときに自動で設定するようにした
  • Message Pack for C++のパッケージを2分割し、develパッケージを作成するようにした
  • kumofsのパッケージを4分割し、運用するサーバに必要なパッケージのみ選択できるようにした
  • Tokyo Cabinet、MessagePack for C++のバージョンが上がっていたので対応した

ということで、より理想的な形に近づいたのではないかと思う。
今回の成果物はここで配布している。
あとはyumレポジトリとか自分で用意しちゃったりすればいいんだろうか…

ということで作業ログは以下の通り。
全て一般ユーザで行い、root権限が必要な場合はsudoを使う。

下準備

rpmをビルドするにあたって一般ユーザのホームにディレクトリを作り、環境変数を設定しておく。

mkdir -p ~/rpm/{BUILD,SOURCES,SPECS,RPMS,SRPMS}
vi ~/.rpmmacros

%_topdir        /home/username/rpm

Tokyo Cabinetのrpmをビルド

まずTokyo Cabinetのビルドに必要なパッケージをインストールする。
次にTokyo Cabinetのソースをダウンロードし、SOURCESに配置する。
そしてTokyo Cabinetのrpmをビルドするためにspecファイルを記述する。

sudo yum install zlib-devel lua-devel bzip2-devel
wget http://1978th.net/tokyocabinet/tokyocabinet-1.4.43.tar.gz
mv tokyocabinet-1.4.43.tar.gz ~/rpm/SOURCES/
vi ~/rpm/SPECS/tokyocabinet.spec

tokyocabinet.specの中身。
myfinder’s blog様の記事を参考にした。

Summary:        A modern implementation of a DBM
Summary(ja):    DBMのモダン実装
Name:           tokyocabinet
Version:        1.4.43
Release:        1%{?dist}
License:        LGPLv2+
Group:          Development/Libraries
URL:            http://1978th.net/%{name}/
Source:         http://1978th.net/%{name}/%{name}-%{version}.tar.gz
BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildRequires:  pkgconfig zlib-devel autoconf
BuildRequires:  lua-devel

%description
Tokyo Cabinet is a library of routines for managing a database. It is the successor of QDBM. Tokyo Cabinet runs very fast. For example, the time required to store 1 million records is 1.5 seconds for a hash database and 2.2 seconds for a B+ tree database. Moreover, the database size is very small and can be up to 8EB. Furthermore, the scalability of Tokyo Cabinet is great.

%description -l ja
Tokyo Cabinetはデータベースを扱うルーチン群のライブラリです。データベースといっても単純なもので、キーと値のペアからなるレコード群を格納したデータファイルです。キーと値は任意の長さを持つ一連のバイト列であり、文字列でもバイナリでも扱うことができます。テーブルやデータ型の概念はありません。レコードはハッシュ表かB+木か固定長配列で編成されます。

%package devel
Summary:        Headers for developing programs that will use %{name}
Group:          Development/Libraries
Requires:       %{name} = %{version}-%{release}
Requires:       pkgconfig

%description devel
This package contains the libraries and header files needed for developing with %{name}.

%prep
%setup -q

%build
autoconf
%configure CFLAGS="$CFLAGS" --enable-lua
make %{?_smp_mflags}

%install
rm -rf %{buildroot}
make DESTDIR=%{buildroot} install

rm -rf %{buildroot}%{_datadir}/%{name}
rm -rf %{buildroot}%{_libdir}/lib%{name}.a

#%check
#make check

%clean
rm -rf %{buildroot}

%post -p /sbin/ldconfig

%postun -p /sbin/ldconfig

%files
%defattr(-, root, root, -)
%doc ChangeLog COPYING README
%{_bindir}/tc*
%{_libdir}/libtokyocabinet.so.*
%{_mandir}/man1/tc*.gz
%{_libexecdir}/tcawmgr.cgi

%files devel
%defattr(-, root, root, -)
%{_includedir}/tc*.h
%{_libdir}/*.so
%{_libdir}/pkgconfig/%{name}.pc
%{_mandir}/man3/t*.gz
%doc doc/*

%changelog
* Thu Feb 22 2010 Eugene Kato <multipurpose@eugene-k.net>
- New Build

その後rpmbuildコマンドでTokyo Cabinetのrpmを作成する。

rpmbuild -ba --define 'dist .el5' ~/rpm/SPECS/tokyocabinet.spec

rubyのrpmをビルド

現状のfedora developmentに上がっているrubyのsrpmはmd5チェックサムエラーがでるのでmd5チェックを行わない形で一旦インストールする。
その後、ビルドに必要とされるパッケージをインストールしてrubyをビルドする。

rpm -ivh --nomd5 http://ftp.riken.jp/Linux/fedora/development/source/SRPMS/ruby-1.8.6.388-7.fc13.src.rpm
sudo yum install readline-devel ncurses-devel gdbm-devel tcl-devel tk-devel libX11-devel openssl-devel db4-devel emacs
rpmbuild --ba --define 'dist .el5' ~/rpm/SPECS/ruby.spec

MessagePack for C++のrpmをビルド

sorceforgeよりソースパッケージをダウンロードし、specファイルを作成する。

wget "http://sourceforge.jp/frs/redir.php?m=jaist&f=%2Fmsgpack%2F46155%2Fmsgpack-0.4.2.tar.gz"
mv ./msgpack-0.4.2.tar.gz ~/rpm/SOURCES/
vi ~/rpm/SPECS/msgpack.spec

以下、msgpack.specファイルの中身

Name:           msgpack
Version:        0.4.2
Release:        1%{?dist}
Summary:        MessagePack, a binary-based efficient data interchange format

Group:          Development/Libraries
License:        Apache License V2.0
URL:            http://sourceforge.jp/projects/msgpack/
Source0:        %{name}-%{version}.tar.gz

BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)

BuildRequires:  gcc-c++ >= 4.1
#BuildRequires:  zlib-devel

%description
MessagePack, a binary-based efficient data interchange format.
The speed of serializing deserializing is very high-speed,
and the data size after serializing becomes small, too.
It is very high-speed and compact though looks like JSON. 

%description -l ja
MessagePackは性能を重視したバイナリベースのシリアライズ形式です。
シリアライズ・デシリアライズの速度が非常に高速で、
シリアライズ後のデータサイズも小さくなります。
JSONに似ていますが、ずっと高速でコンパクトです。

%package devel
Summary:        Headers for developing programs that will use %{name}
Group:          Development/Libraries
Requires:       %{name} = %{version}-%{release}

%description devel
This package contains the libraries and header files needed for developing with %{name}.

%description devel -l ja
%{name}-devel パッケージには %{name}シリアライズ/デシリアライズライブラリを使用したプログラムを
開発するためのヘッダーファイルとライブラリが含まれています。

%prep
%setup -q

%build
%configure --prefix=/usr

make

%install
rm -rf %{buildroot}
make install DESTDIR=%{buildroot}

%clean
rm -rf %{buildroot}

%post
/sbin/ldconfig

%preun

%postun
/sbin/ldconfig
exit 0

%files
%defattr(-,root,root,-)
%doc AUTHORS ChangeLog COPYING NEWS README
%{_libdir}/libmsgpack*

%files devel
%defattr(-, root, root, -)
%{_includedir}/msgpack.h
%{_includedir}/msgpack.hpp
%{_includedir}/msgpack/*.h
%{_includedir}/msgpack/*.hpp
%{_includedir}/msgpack/*/*.hpp
%{_includedir}/msgpack/*/*/*.hpp
%{_libdir}/*.so

%changelog
* Thu Mar 11 2010 Eugene Kato <multipurpose@eugene-k.net> 0.4.2-1
- Initial rpm build

その後、gcc-c++がインストールされていない場合はビルドに必要なのでインストールし、msgpackをビルドする。

#gcc-c++がインストールされていない場合
sudo yum install gcc-c++
rpmbuild -ba --define 'dist .el5' ~/rpm/SPECS/msgpack.spec

rubygemsのRPMのビルド

まずrubygemsのビルドに必要なパッケージを先ほどrubyのビルドで作成したパッケージを使いインストールしておく。
その後、rubyの時と同様にmd5チェックをしない形でrubygemsのsrpmをインストールし、rubygemsをビルドする。

sudo rpm -ivh ~/rpm/RPMS/x86_64/ruby-libs-1.8.6.388-7.el5.x86_64.rpm
sudo rpm -ivh ~/rpm/RPMS/x86_64/ruby-1.8.6.388-7.el5.x86_64.rpm
sudo rpm -ivh ~/rpm/RPMS/x86_64/ruby-irb-1.8.6.388-7.el5.x86_64.rpm
sudo rpm -ivh ~/rpm/RPMS/x86_64/ruby-rdoc-1.8.6.388-7.el5.x86_64.rpm
rpm -ivh --nomd5 http://ftp.riken.jp/Linux/fedora/development/source/SRPMS/rubygems-1.3.5-1.fc12.src.rpm
rpmbuild -ba --define 'dist .el5' ~/rpm/SPECS/rubygems.spec

rubygem-gem2rpmのRPMのビルド

rubyのgemファイルから自動的にsrpmファイルを生成してくれるgem2rpmをインストールする。
まず先ほど作ったrubygemsのrpmをインストールし、md5チェックをしない形でsrpmをインストールしてビルドする。

sudo rpm -ivh ~/rpm/RPMS/noarch/rubygems-1.3.5-1.el5.noarch.rpm
rpm -ivh --nomd5 http://ftp.riken.jp/Linux/fedora/development/source/SRPMS/rubygem-gem2rpm-0.6.0-4.fc13.src.rpm
rpmbuild -ba --define 'dist .el5' ~/rpm/SPECS/rubygem-gem2rpm.spec

MessagePack for RubyのRPMのビルド

まずgem2rpmのrpmをインストールしてからMessagePack for Rubyのgemファイルを取得する。
その後gem2rpmを使ってMessagePack for Rubyのsrpmを作成してインストールする。
gemファイルのビルドに必要なruby-develをrubyを作成したときのパッケージからインストールしてMessagePack for Rubyのrpmをビルドする。

sudo rpm -ivh ~/rpm/RPMS/noarch/rubygem-gem2rpm-0.6.0-4.el5.noarch.rpm
gem fetch msgpack
gem2rpm -s msgpack-0.3.3.gem
rpm -ivh rubygem-msgpack-0.3.3-1.src.rpm
sudo rpm -ivh ~/rpm/RPMS/x86_64/ruby-devel-1.8.6.388-7.el5.x86_64.rpm
rpmbuild -ba --define 'dist .el5' ~/rpm/SPECS/rubygem-msgpack.spec

kumofsのRPMのビルド

いよいよkumofsのビルドをする。
まずkumofsのビルドに必要なパッケージをインストールし、kumofsのソースをダウンロードしてSOURCESに配置する。

sudo rpm -ivh ~/rpm/RPMS/x86_64/tokyocabinet-1.4.42-1.el5.x86_64.rpm
sudo rpm -ivh ~/rpm/RPMS/x86_64/tokyocabinet-devel-1.4.42-1.el5.x86_64.rpm
sudo rpm -ivh ~/rpm/RPMS/x86_64/msgpack-0.4.2-1.el5.x86_64.rpm
sudo rpm -ivh ~/rpm/RPMS/x86_64/msgpack-devel-0.4.2-1.el5.x86_64.rpm
wget http://github.com/downloads/etolabo/kumofs/kumofs-0.3.1.tar.gz
mv ~/kumofs-0.3.1.tar.gz ~/rpm/SOURCES/
vi ~/rpm/SPECS/kumofs.spec

以下、kumofs.specファイルの中身。

Name:           kumofs
Version:        0.3.1
Release:        1%{?dist}
Summary:        %{name} is a scalable and highly available distributed key-value store

Group:          System Environment/Daemons
License:        Apache License V2.0
URL:            http://github.com/etolabo/kumofs
Source0:        http://github.com/downloads/etolabo/kumofs/%{name}-%{version}.tar.gz

# init scripts
Source1:        kumo-manager.init
Source2:        kumo-server.init
Source3:        kumo-gateway.init

# config files
Source4:        kumo-manager.sysconfig
Source5:        kumo-server.sysconfig
Source6:        kumo-gateway.sysconfig

BuildRoot:      %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)

BuildRequires:  gcc-c++ >= 4.1
BuildRequires:  zlib-devel
BuildRequires:  tokyocabinet-devel
BuildRequires:  msgpack-devel

%description
%{name} is a distributed data store where the practicality was valued.
Even if it has the replication function, and the trouble occurs in a part of server, it keeps operating normally.
It has the feature to which a performance that reading and written both improves by adding the server with a high performance,
and a low-cost, extremely high-speed storage system can be constructed and be operated also with the unit.
Neither the addition nor the restoration of the server can do with the system moved, and influence the application at all. 

%description -l ja
%{name}は、実用性を重視した分散データストアです。
レプリケーション機能を備え、一部のサーバーに障害が発生しても正常に動作し続けます。
単体でも高い性能を持ちながら、サーバーを追加することで読み・書き両方の性能が向上する特徴を持ち、
低コストで極めて高速なストレージシステムを構築・運用できます。
サーバーの追加や復旧はシステムを動かしたまま行うことができ、アプリケーションには一切影響を与えません。

%package utils
Summary:        Utilities of kumofs
Group:          System Environment/Daemons
Requires:       rubygem-msgpack >= 0.3.3
Obsoletes:      utils <= %{version}-%{release}

%description utils
kumofs-utils is utilities of kumofs. 

%description utils -l ja
kumofs-utilsはkumofsのユーティリティ群です。

%package manager
Summary:        Management kumo-server nodes
Group:          System Environment/Daemons
Requires:       msgpack >= 0.3.1
Requires:       tokyocabinet >= 1.4.10
Requires(post): /sbin/chkconfig
Requires(preun): /sbin/chkconfig, /sbin/service
Requires(postun): /sbin/service
Obsoletes:      manager <= %{version}-%{release}

%description manager
kumo-manager is a node that manages the kumo-server nodes.
It is moved with 1 or 2. 

%description manager -l ja
kumo-server群を管理するノード。
1台または2台で動かします。

%package server
Summary:        Distributed data storage nodes
Group:          System Environment/Daemons
Requires:       msgpack >= 0.3.1
Requires:       tokyocabinet >= 1.4.10
Requires(post): /sbin/chkconfig
Requires(preun): /sbin/chkconfig, /sbin/service
Requires(postun): /sbin/service
Obsoletes:      %{name}-server <= %{version}-%{release}

%description server
kumo-server is a node that actually saves data. 

%description server -l ja
実際にデータを保存するノード。

%package gateway
Summary:        Proxy relaid to kumo-server nodes
Group:          System Environment/Daemons
Requires:       msgpack >= 0.3.1
Requires:       tokyocabinet >= 1.4.10
Requires(post): /sbin/chkconfig
Requires(preun): /sbin/chkconfig, /sbin/service
Requires(postun): /sbin/service
Obsoletes:      %{name}-gateway <= %{version}-%{release}

%description gateway
Proxy that relays request from application to kumo-server.
It starts on the host who moves the application one by one. 

%description gateway -l ja
アプリケーションからのリクエストをkumo-serverに中継するプロキシ。
アプリケーションを動かすホスト上で、1つずつ起動しておきます。

%prep
%setup -q

%build
%configure

make

%install
rm -rf $RPM_BUILD_ROOT
make install DESTDIR=$RPM_BUILD_ROOT

install -d -m 755 $RPM_BUILD_ROOT%{_initrddir}
install -d -m 755 $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig

install -p -m 755 %{SOURCE1} $RPM_BUILD_ROOT%{_initrddir}/kumo-manager
install -p -m 755 %{SOURCE2} $RPM_BUILD_ROOT%{_initrddir}/kumo-server
install -p -m 755 %{SOURCE3} $RPM_BUILD_ROOT%{_initrddir}/kumo-gateway
install -p -m 644 %{SOURCE4} $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/kumo-manager
install -p -m 644 %{SOURCE5} $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/kumo-server
install -p -m 644 %{SOURCE6} $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/kumo-gateway

%clean
rm -rf $RPM_BUILD_ROOT

%post manager
/sbin/chkconfig --add kumo-manager

%post server
/sbin/chkconfig --add kumo-server

%post gateway
/sbin/chkconfig --add kumo-gateway

%preun manager
if [ $1 = 0 ] ; then
    /sbin/service kumo-manager stop > /dev/null 2>&1
    /sbin/chkconfig --del kumo-manager
fi
exit 0

%preun server
if [ $1 = 0 ] ; then
    /sbin/service kumo-server stop > /dev/null 2>&1
    /sbin/chkconfig --del kumo-server
fi
exit 0

%preun gateway
if [ $1 = 0 ] ; then
    /sbin/service kumo-gateway stop > /dev/null 2>&1
    /sbin/chkconfig --del kumo-gateway
fi
exit 0

%postun manager
if [ $1 -ge 1 ]; then
    /sbin/service kumo-manager condrestart > /dev/null 2>&1
fi
/sbin/ldconfig
exit 0

%postun server
if [ $1 -ge 1 ]; then
    /sbin/service kumo-server condrestart > /dev/null 2>&1
fi
/sbin/ldconfig
exit 0

%postun gateway
if [ $1 -ge 1 ]; then
    /sbin/service kumo-gateway condrestart > /dev/null 2>&1
fi
/sbin/ldconfig
exit 0

%files utils
%defattr(-,root,root,-)
%doc AUTHORS ChangeLog COPYING NEWS README README.md
%doc doc/*.md
%doc doc/kumoctl*
%doc doc/kumohash*
%doc doc/kumolog*
%doc doc/kumomergedb*
%doc doc/kumostat*
%doc doc/kumotop*
%{_bindir}/kumoctl
%{_bindir}/kumohash
%{_bindir}/kumolog
%{_bindir}/kumomergedb
%{_bindir}/kumostat
%{_bindir}/kumotop
%{_mandir}/man1/kumoctl*
%{_mandir}/man1/kumohash*
%{_mandir}/man1/kumolog*
%{_mandir}/man1/kumomergedb*
%{_mandir}/man1/kumostat*
%{_mandir}/man1/kumotop*

%files manager
%defattr(-,root,root,-)
%doc AUTHORS ChangeLog COPYING NEWS README README.md
%doc doc/kumo-manager*
%{_mandir}/man1/kumo-manager*
%config(noreplace) %{_sysconfdir}/sysconfig/kumo-manager
%{_initrddir}/kumo-manager
%{_bindir}/kumo-manager

%files server
%defattr(-,root,root,-)
%doc AUTHORS ChangeLog COPYING NEWS README README.md doc/*
%doc doc/kumo-server*
%{_mandir}/man1/kumo-server*
%config(noreplace) %{_sysconfdir}/sysconfig/kumo-server
%{_initrddir}/kumo-server
%{_bindir}/kumo-server

%files gateway
%defattr(-,root,root,-)
%doc AUTHORS ChangeLog COPYING NEWS README README.md doc/*
%doc doc/kumo-gateway*
%{_mandir}/man1/kumo-gateway*
%config(noreplace) %{_sysconfdir}/sysconfig/kumo-gateway
%{_initrddir}/kumo-gateway
%{_bindir}/kumo-gateway

%changelog
* Wed Mar 10 2010 Eugene Kato <multipurpose@eugene-k.net> 0.3.1-1
- Initial rpm build

kumo-managerの自動起動スクリプトの作成。

vi ~/rpm/SOURCES/kumo-manager.init

kumo-manager.initの中身

#!/bin/bash
#
# kumo-manager Startup script for the kumo-manager server
#
# chkconfig: - 70 30
# description: kumo-manager is a node that manages kumo-server group
# processname: kumo-manager
# pidfile: /var/run/kumo-manager.pid

# Source function library.
. /etc/rc.d/init.d/functions

MANAGER1=localhost
kumo_manager=${KUMOMANAGER-/usr/bin/kumo-manager}
prog=kumo-manager
pidfile=${PIDFILE-/var/run/kumo-manager.pid}
lockfile=${LOCKFILE-/var/lock/subsys/kumo-manager}
logfile=${LOGFILE-/var/log/kumofs.log}
RETVAL=0

OPTIONS="-o $logfile -d $pidfile -l $MANAGER1"
if [ -f /etc/sysconfig/kumo-manager ]; then
        . /etc/sysconfig/kumo-manager
fi

start() {
        echo -n $"Starting $prog: "
        daemon --pidfile=${pidfile} $kumo_manager $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch ${lockfile}
        return $RETVAL
}

stop() {
        echo -n $"Stopping $prog: "
        killproc -p ${pidfile}
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}

# See how we were called.
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        status -p ${pidfile} $kumo_manager
        RETVAL=$?
        ;;
  restart)
        stop
        start
        ;;
  condrestart)
        if [ -f ${pidfile} ] ; then
                stop
                start
        fi
        ;;
  fullstatus)
        kumoctl localhost status
        RETVAL=$?
        ;;
  help)
        $kumo_manager
        RETVAL=$?
        ;;
  *)
        echo $"Usage: $prog {start|stop|restart|condrestart|status|fullstatus|help}"
        exit 1
esac

exit $RETVAL

kumo-serverの自動起動スクリプトの作成。

vi ~/rpm/SOURCES/kumo-server.init

kumo-server.initの中身。

#!/bin/bash
#
# kumo-server Startup script for the kumo-server server
#
# chkconfig: - 60 40
# description: kumo-server is a node that actually saves data
# processname: kumo-server
# pidfile: /var/run/kumo-server.pid

# Source function library.
. /etc/rc.d/init.d/functions

HOST=localhost
MANAGER1=localhost
TCHFILE=/var/kumodb.tch
kumo_server=${KUMOSERVER-/usr/bin/kumo-server}
prog=kumo-server
pidfile=${PIDFILE-/var/run/kumo-server.pid}
lockfile=${LOCKFILE-/var/lock/subsys/kumo-server}
logfile=${LOGFILE-/var/log/kumofs.log}
RETVAL=0

OPTIONS="-o $logfile -d $pidfile -l $HOST -m $MANAGER1 -s $TCHFILE"
if [ -f /etc/sysconfig/kumo-server ]; then
        . /etc/sysconfig/kumo-server
fi

start() {
        echo -n $"Starting $prog: "
        daemon --pidfile=${pidfile} $kumo_server $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch ${lockfile}
        return $RETVAL
}

stop() {
        echo -n $"Stopping $prog: "
        killproc -p ${pidfile}
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}

# See how we were called.
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        status -p ${pidfile} $kumo_server
        RETVAL=$?
        ;;
  restart)
        stop
        start
        ;;
  condrestart)
        if [ -f ${pidfile} ] ; then
                stop
                start
        fi
        ;;
  fullstatus)
        echo -n "version:    "
        kumostat $HOST version
        echo -n "pid:        "
        kumostat $HOST pid
        echo -n "uptime:     "
        kumostat $HOST uptime
        echo -n "time:       "
        kumostat $HOST time
        echo -n "cmd_get:    "
        kumostat $HOST cmd_get
        echo -n "cmd_set:    "
        kumostat $HOST cmd_set
        echo -n "cmd_delete: "
        kumostat $HOST cmd_delete
        echo -n "hscheck:    "
        kumostat $HOST hscheck
        RETVAL=$?
        ;;
  help)
        $kumo_server
        RETVAL=$?
        ;;
  *)
        echo $"Usage: $prog {start|stop|restart|condrestart|status|fullstatus|help}"
        exit 1
esac

exit $RETVAL

kumo-gatewayの自動起動スクリプトの作成。

vi ~/rpm/SOURCES/kumo-gateway.init

kumo-gateway.initの中身

#!/bin/bash
#
# kumo-gateway Startup script for the kumo-gateway server
#
# chkconfig: - 60 40
# description: kumo-gateway is proxy that relays request from application to kumo-server
# processname: kumo-gateway
# pidfile: /var/run/kumo-gateway.pid

# Source function library.
. /etc/rc.d/init.d/functions

HOST=localhost
MANAGER1=localhost
kumo_gateway=${KUMOGATEWAY-/usr/bin/kumo-gateway}
prog=kumo-gateway
pidfile=${PIDFILE-/var/run/kumo-gateway.pid}
lockfile=${LOCKFILE-/var/lock/subsys/kumo-gateway}
logfile=${LOGFILE-/var/log/kumofs.log}
RETVAL=0

OPTIONS="-o $logfile -d $pidfile -m $MANAGER1"
if [ -f /etc/sysconfig/kumo-gateway ]; then
        . /etc/sysconfig/kumo-gateway
fi

start() {
        echo -n $"Starting $prog: "
        daemon --pidfile=${pidfile} $kumo_gateway $OPTIONS
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch ${lockfile}
        return $RETVAL
}

stop() {
        echo -n $"Stopping $prog: "
        killproc -p ${pidfile}
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
}

# See how we were called.
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        status -p ${pidfile} $kumo_gateway
        RETVAL=$?
        ;;
  restart)
        stop
        start
        ;;
  condrestart)
        if [ -f ${pidfile} ] ; then
                stop
                start
        fi
        ;;
  help)
        $kumo_gateway
        RETVAL=$?
        ;;
  *)
        echo $"Usage: $prog {start|stop|restart|condrestart|status|help}"
        exit 1
esac

exit $RETVAL

kumo-managerの設定ファイルの作成。

vi ~/rpm/SOURCES/kumo-manager.sysconfig

kumo-manager.sysconfigの中身。

# Configuration file for the kumo-manager service.
MANAGER1="localhost"
#MANAGER2="anotherhost"
OPTIONS="-o $logfile -d $pidfile -l $MANAGER1 -a"
#OPTIONS="-o $logfile -d $pidfile -l $MANAGER1 -p $MANAGER2 -a"

kumo-serverの設定ファイルの作成。

vi ~/rpm/SOURCES/kumo-server.sysconfig

kumo-server.sysconfigの中身。

# Configuration file for the kumo-server service.
HOST=`hostname`
MANAGER1="manager1.example.com"
#MANAGER2="manager2.example.com"
TCHFILE="/var/kumodb.tch#xmsiz=600m#rcnum=4k"
OPTIONS="-o $logfile -d $pidfile -l $HOST -m $MANAGER1 -s $TCHFILE"
#OPTIONS="-o $logfile -d $pidfile -l $HOST -m $MANAGER1 -p $MANAGER2 -s $TCHFILE"

kumo-gatewayの設定ファイルの作成。

vi ~/rpm/SOURCES/kumo-gateway.sysconfig

kumo-gateway.sysconfigの中身。

# Configuration file for the kumo-gateway service.
MANAGER1="manager1.example.com"
#MANAGER2="manager2.example.com"
OPTIONS="-o $logfile -d $pidfile -t 11411 -m $MANAGER1"
#OPTIONS="-o $logfile -d $pidfile -t 11411 -m $MANAGER1 -p $MANAGER2"

準備が整ったのでkumofsをビルドする。

rpmbuild -ba --define 'dist .el5' ~/rpm/SPECS/kumofs.spec

以上で全てのrpmパッケージが作成される。

Leave a Reply