Google Sitemaps用XML自動生成ツール

CentOS5.5にTokyo Tyrantをインストールする

Posted by ごうじん, on Sunday, October 17, 2010 12:43 AM JST
no image

何かと話題のKVS(Key-Value Store)ですが、CentOS5.5Tokyo Tyrantをインストールしてみました。

インストール環境はxenのDomain-Uです。

xen環境

$ xm list
Name           ID Mem(MiB) VCPUs State   Time(s)
Domain-0        0      551     4 r-----    552.3
charlottenburg  1      255     1 -b----    135.9
falkenstein     2      255     1 -b----    106.0
frankenstein    7      255     1 -b----    513.4
nymphenburg     3      383     1 -b----    132.4
wartburg        4      255     1 -b----    103.1

コンパイル環境インストール

今回はコンパイルしてインストールする方法をとりますので、yumで必要なパッケージをインストールしてます。
インストールしたパッケージは、以下のとおりです。

  • bzip2-devel
  • zlib-devel
  • xz-devel
  • gcc
yumでパッケージをインストール。
$ uname -a
Linux frankenstein 2.6.18-194.el5xen #1 SMP Fri Apr 2 15:34:40 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux
$ yum install bzip2-devel zlib-devel xz-devel gcc
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * addons: rsync.atworks.co.jp
 * base: rsync.atworks.co.jp
 * extras: rsync.atworks.co.jp
 * updates: rsync.atworks.co.jp
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package bzip2-devel.i386 0:1.0.3-6.el5_5 set to be updated
--> Processing Dependency: libbz2.so.1 for package: bzip2-devel
---> Package bzip2-devel.x86_64 0:1.0.3-6.el5_5 set to be updated
---> Package gcc.x86_64 0:4.1.2-48.el5 set to be updated
--> Processing Dependency: cpp = 4.1.2-48.el5 for package: gcc
--> Processing Dependency: libgomp >= 4.1.2-48.el5 for package: gcc
--> Processing Dependency: glibc-devel >= 2.2.90-12 for package: gcc
---> Package xz-devel.i386 0:4.999.9-0.3.beta.20091007git.el5 set to be updated
--> Processing Dependency: xz-libs = 4.999.9-0.3.beta.20091007git.el5 for package: xz-devel
--> Processing Dependency: liblzma.so.0 for package: xz-devel
--> Processing Dependency: pkgconfig for package: xz-devel
---> Package xz-devel.x86_64 0:4.999.9-0.3.beta.20091007git.el5 set to be updated
---> Package zlib-devel.i386 0:1.2.3-3 set to be updated
---> Package zlib-devel.x86_64 0:1.2.3-3 set to be updated
--> Running transaction check
---> Package bzip2-libs.i386 0:1.0.3-6.el5_5 set to be updated
---> Package cpp.x86_64 0:4.1.2-48.el5 set to be updated
---> Package glibc-devel.x86_64 0:2.5-49.el5_5.5 set to be updated
--> Processing Dependency: glibc-headers = 2.5-49.el5_5.5 for package: glibc-devel
--> Processing Dependency: glibc-headers for package: glibc-devel
---> Package libgomp.x86_64 0:4.4.0-6.el5 set to be updated
---> Package pkgconfig.x86_64 1:0.21-2.el5 set to be updated
---> Package xz-libs.i386 0:4.999.9-0.3.beta.20091007git.el5 set to be updated
---> Package xz-libs.x86_64 0:4.999.9-0.3.beta.20091007git.el5 set to be updated
--> Running transaction check
---> Package glibc-headers.x86_64 0:2.5-49.el5_5.5 set to be updated
--> Processing Dependency: kernel-headers >= 2.2.1 for package: glibc-headers
--> Processing Dependency: kernel-headers for package: glibc-headers
--> Running transaction check
---> Package kernel-headers.x86_64 0:2.6.18-194.17.1.el5 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

================================================================================
 Package          Arch     Version                              Repository
                                                                           Size
================================================================================
Installing:
 bzip2-devel      i386     1.0.3-6.el5_5                        updates    39 k
 bzip2-devel      x86_64   1.0.3-6.el5_5                        updates    38 k
 gcc              x86_64   4.1.2-48.el5                         base      5.3 M
 xz-devel         i386     4.999.9-0.3.beta.20091007git.el5     base       40 k
 xz-devel         x86_64   4.999.9-0.3.beta.20091007git.el5     base       40 k
 zlib-devel       i386     1.2.3-3                              base      101 k
 zlib-devel       x86_64   1.2.3-3                              base      102 k
Installing for dependencies:
 bzip2-libs       i386     1.0.3-6.el5_5                        updates    37 k
 cpp              x86_64   4.1.2-48.el5                         base      2.9 M
 glibc-devel      x86_64   2.5-49.el5_5.5                       updates   2.4 M
 glibc-headers    x86_64   2.5-49.el5_5.5                       updates   592 k
 kernel-headers   x86_64   2.6.18-194.17.1.el5                  updates   1.1 M
 libgomp          x86_64   4.4.0-6.el5                          base       68 k
 pkgconfig        x86_64   1:0.21-2.el5                         base       61 k
 xz-libs          i386     4.999.9-0.3.beta.20091007git.el5     base      100 k
 xz-libs          x86_64   4.999.9-0.3.beta.20091007git.el5     base       95 k

Transaction Summary
================================================================================
Install      16 Package(s)
Upgrade       0 Package(s)

Total download size: 13 M
Is this ok [y/N]: y
Downloading Packages:
(1/16):
(2/16):
(3/16):
(4/16):
(5/16):
(6/16):
(7/16):
(8/16):
(9/16):
(10/16):
(11/16):
(12/16):
(13/16):
(14/16): | 2.0 MB
(15/16): | 2.8 MB
(16/16): | 4.5 MB
--------
Total
Running rpm_check_debug
Running Transaction Test
Finished Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : pkgconfig                                               1/16
  Installing     : xz-libs                                                 2/16
  Installing     : libgomp                                                 3/16
  Installing     : cpp                                                     4/16
  Installing     : kernel-headers                                          5/16
  Installing     : glibc-headers                                           6/16
  Installing     : glibc-devel                                             7/16
  Installing     : zlib-devel                                              8/16
  Installing     : zlib-devel                                              9/16
  Installing     : xz-libs                                                10/16
  Installing     : bzip2-libs                                             11/16
  Installing     : bzip2-devel                                            12/16
  Installing     : bzip2-devel                                            13/16
  Installing     : xz-devel                                               14/16
  Installing     : gcc                                                    15/16
  Installing     : xz-devel                                               16/16

Installed:
  bzip2-devel.i386 0:1.0.3-6.el5_5
  bzip2-devel.x86_64 0:1.0.3-6.el5_5
  gcc.x86_64 0:4.1.2-48.el5
  xz-devel.i386 0:4.999.9-0.3.beta.20091007git.el5
  xz-devel.x86_64 0:4.999.9-0.3.beta.20091007git.el5
  zlib-devel.i386 0:1.2.3-3
  zlib-devel.x86_64 0:1.2.3-3

Dependency Installed:
  bzip2-libs.i386 0:1.0.3-6.el5_5
  cpp.x86_64 0:4.1.2-48.el5
  glibc-devel.x86_64 0:2.5-49.el5_5.5
  glibc-headers.x86_64 0:2.5-49.el5_5.5
  kernel-headers.x86_64 0:2.6.18-194.17.1.el5
  libgomp.x86_64 0:4.4.0-6.el5
  pkgconfig.x86_64 1:0.21-2.el5
  xz-libs.i386 0:4.999.9-0.3.beta.20091007git.el5
  xz-libs.x86_64 0:4.999.9-0.3.beta.20091007git.el5

Complete!

Tokyo Cabinetをインストール

必要なパッケージがインストールできたところで、まずは、Tokyo Cabinetをインストールします。

$ cd /usr/local/src
$ wget http://fallabs.com/tokyocabinet/tokyocabinet-1.4.46.tar.gz
$ tar xvfz tokyocabinet-1.4.46.tar.gz
$ cd tokyocabinet-1.4.46
$ ./configure > configure.log 2>&1
$ ./make > make.log 2>&1
$ ./make install > install.log 2>&1

configureオプションは指定していませんので、「/usr/local/」にインストールされます。
説明はいらないくらい簡単です。

Tokyo Tyrantをインストール

Tokyo Cabinetがインストールできましたので、いよいよTokyo Tyrantをインストールします。
といっても、構える必要はありません。Tokyo Cabinetと同様に、簡単にインストールできます。

$ cd ../
$ wget http://fallabs.com/tokyotyrant/tokyotyrant-1.1.41.tar.gz
$ tar xvfz tokyotyrant-1.1.41.tar.gz
$ cd tokyotyrant-1.1.41
$ ./configure > configure.log 2>&1
$ ./make > make.log 2>&1
$ ./make install > install.log 2>&1

やっぱり簡単です。
これでインストールは完了しました。実行コマンドは、「/usr/local/bin/」ディレクトリにインストールされています。

$ cd /usr/local/bin
$ ls -la
合計 2604
drwxr-xr-x  2 root root   4096 10月 16 22:49 .
drwxr-xr-x 12 root root   4096 10月 16 21:03 ..
-rwxr-xr-x  1 root root  72189 10月 16 21:55 tcamgr
-rwxr-xr-x  1 root root  43780 10月 16 21:55 tcamttest
-rwxr-xr-x  1 root root 128226 10月 16 21:55 tcatest
-rwxr-xr-x  1 root root  85615 10月 16 21:55 tcbmgr
-rwxr-xr-x  1 root root 113822 10月 16 21:55 tcbmttest
-rwxr-xr-x  1 root root 178650 10月 16 21:55 tcbtest
-rwxr-xr-x  1 root root  63147 10月 16 21:55 tcfmgr
-rwxr-xr-x  1 root root  76413 10月 16 21:55 tcfmttest
-rwxr-xr-x  1 root root 111205 10月 16 21:55 tcftest
-rwxr-xr-x  1 root root  69840 10月 16 21:55 tchmgr
-rwxr-xr-x  1 root root 108054 10月 16 21:55 tchmttest
-rwxr-xr-x  1 root root 142554 10月 16 21:55 tchtest
-rwxr-xr-x  1 root root 106927 10月 16 21:57 tcrmgr
-rwxr-xr-x  1 root root  62057 10月 16 21:57 tcrmttest
-rwxr-xr-x  1 root root 110789 10月 16 21:57 tcrtest
-rwxr-xr-x  1 root root 100735 10月 16 21:55 tctmgr
-rwxr-xr-x  1 root root  95572 10月 16 21:55 tctmttest
-rwxr-xr-x  1 root root 150229 10月 16 21:55 tcttest
-rwxr-xr-x  1 root root  98265 10月 16 21:55 tcucodec
-rwxr-xr-x  1 root root  44426 10月 16 21:55 tcumttest
-rwxr-xr-x  1 root root 152425 10月 16 21:55 tcutest
-rwxr-xr-x  1 root root 235160 10月 16 21:57 ttserver
-rwxr-xr-x  1 root root  27367 10月 16 21:57 ttulmgr

Tokyo Tyrantを起動/停止

Tokyo Tyrant起動コマンドは「ttserver」になりますが、ご覧のとおり起動時のオプションがたくさんあります。

$ ./ttserver --help
./ttserver: the server of Tokyo Tyrant

usage:
  ./ttserver [-host name] [-port num] [-thnum num] [-tout num] [-dmn] [-pid path] [-kl] [-log path] [-ld|-le] [-ulog path] [-ulim num] [-uas] [-sid num] [-mhost name] [-mport num] [-rts path] [-rcc] [-skel name] [-mul num] [-ext path] [-extpc name period] [-mask expr] [-unmask expr] [dbname]

このコマンドを直接起動すればいいのですが、出来れば簡単に起動/停止したいですよね。
実は、Tokyo Tyrantには、起動/停止を簡易にするためのスクリプトが用意されています。
コンパイルに使ったディレクトリからスクリプトをコピーしておきます。

$ cd /usr/local/bin/
$ cp -rp /usr/local/src/tokyotyrant-1.1.41/ttservctl .

このスクリプトを使って、起動/停止をしてみます。

起動
$ /usr/local/bin/ttservctl start
Starting the server of Tokyo Tyrant
Executing: /usr/local/bin/ttserver -port 1978 -dmn -pid /var/ttserver/pid
Done
停止
$ /usr/local/bin/ttservctl stop
Stopping the server of Tokyo Tyrant
Sending the terminal signal to the process: 6975
Done

できました。

Tokyo Tyrantをサービス登録

さて、起動/停止が出来たところで、今度はchkconfigでサービス登録します。
「ttservctl」を「/etc/init.d」ディレクトリに、シンボリックリンクします。

$ cd /etc/init.d/
$ ln -s /usr/local/bin/ttservctl .
$ ls -la /etc/init.d/
合計 616
drwxr-xr-x  2 root root  4096 10月 16 22:39 .
drwxr-xr-x 10 root root  4096 10月 16 22:12 ..
              :
-rwxr-xr-x  1 root root  2174  5月 25  2008 tcsd
lrwxrwxrwx  1 root root    24 10月 16 22:11 ttservctl -> /usr/local/bin/ttservctl
-rwxr-xr-x  1 root root  1634  3月 31  2010 wpa_supplicant
-rwxr-xr-x  1 root root  3902  7月 12  2007 xfs
              :

「/usr/local/bin/ttservctl」を修正します。

追加箇所
  • chkconfigコメントを追加
  • descriptionコメントを追加
  • processnameコメントを追加
修正箇所
  • ttserver実行コマンドをフルパスに修正
$ vi /usr/local/bin/ttservctl
$ diff -u /usr/local/src/tokyotyrant-1.1.41/ttservctl /usr/local/bin/ttservctl
--- /usr/local/src/tokyotyrant-1.1.41/ttservctl 2009-12-08 17:19:44.000000000 +0900
+++ /usr/local/bin/ttservctl    2010-10-16 22:32:09.000000000 +0900
@@ -1,5 +1,9 @@
 #! /bin/sh

+# chkconfig: 345 99 01
+# description: Startup script for the server of Tokyo Tyrant
+# processname: tokyotyrant
+
 #----------------------------------------------------------------
 # Startup script for the server of Tokyo Tyrant
 #----------------------------------------------------------------
@@ -7,7 +11,7 @@

 # configuration variables
 prog="ttservctl"
-cmd="ttserver"
+cmd="/usr/local/bin/ttserver"
 basedir="/var/ttserver"
 port="1978"
 pidfile="$basedir/pid"
chkconfigで、サービスに登録します。
$ chkconfig --add ttservctl
$ chkconfig --list ttservctl
ttservctl       0:off   1:off   2:off   3:on    4:on    5:on    6:off

登録できました。
serviceコマンドを使って、起動/停止してみましょう。

起動
$ service ttservctl start
Starting the server of Tokyo Tyrant
Executing: /usr/local/bin/ttserver -port 1978 -dmn -pid /var/ttserver/pid
Done
停止
$ service ttservctl stop
Stopping the server of Tokyo Tyrant
Sending the terminal signal to the process: 7055
Done

起動/停止できましたね。
これで、OS起動と同時にTokyo Tyrantが起動されるはずです。

ついでに、ステータスも確認してみましょう。
$ service ttservctl status
Usage: ttservctl {start|stop|restart|hup}

あれ?ステータスが確認できませんね。
「ttserver」コマンドには、ステータスを確認するオプションがないようです。

ステータス確認オプションを追加してしまいましょう。
「/etc/init.d/functions」ライブラリを利用して、ステータスを確認できるようにしてみます。

追加箇所
  • /etc/init.d/functionsをインクルード
  • statusオプションを追加
修正箇所
  • Usageにstatusオプションを追加
$ vi /usr/local/bin/ttservctl
$  diff -u /usr/local/src/tokyotyrant-1.1.41/ttservctl /usr/local/bin/ttservctl
--- /usr/local/src/tokyotyrant-1.1.41/ttservctl 2009-12-08 17:19:44.000000000 +0900
+++ /usr/local/bin/ttservctl    2010-10-16 22:33:57.000000000 +0900
@@ -1,5 +1,12 @@
 #! /bin/sh

+# chkconfig: 345 99 01
+# description: Startup script for the server of Tokyo Tyrant
+# processname: tokyotyrant
+
+# Source function library.
+. /etc/init.d/functions
+
 #----------------------------------------------------------------
 # Startup script for the server of Tokyo Tyrant
 #----------------------------------------------------------------
@@ -7,7 +14,7 @@

 # configuration variables
 prog="ttservctl"
-cmd="ttserver"
+cmd="/usr/local/bin/ttserver"
 basedir="/var/ttserver"
 port="1978"
 pidfile="$basedir/pid"
@@ -141,6 +148,9 @@
 stop)
   stop
   ;;
+status)
+  status -p "$pidfile" $prog
+  ;;
 restart)
   stop
   start
@@ -149,7 +159,7 @@
   hup
   ;;
 *)
-  printf 'Usage: %s {start|stop|restart|hup}\n' "$prog"
+  printf 'Usage: %s {start|stop|status|restart|hup}\n' "$prog"
   exit 1
   ;;
 esac
改めて、ステータスを確認してみましょう。
$ service ttservctl start
Starting the server of Tokyo Tyrant
Executing: /usr/local/bin/ttserver -port 1978 -dmn -pid /var/ttserver/pid
Done
$ service ttservctl status
ttservctl (pid  7089) を実行中...

出ました。やりました。以上で、インストール完了です。

起動/停止時に、他のサービスのように"[ OK ]"って出てくれれば完璧なのですが...。
「/etc/init.d/functions」ライブラリを調べてみると、"[ OK ]"処理がありますねぇ。

とりあえず今回は、インストールしてサービスへ登録できたところで、今は妥協しておきます。
時間を見つけて"[ OK ]"が出るようにしたいと思います。



 amazon affiliate