Freelance Web Engineer

TokyoTyrantをPHPから使うための環境構築

2011-04-19  paco, pecl, php, tokyotyrant, ubuntu

PHPのプロジェクトでTokyoTyrantを使う必要があったのでその環境構築方法をメモしておきます。

環境は以下の通り:

サーバー
Ubuntu 9.04
PHP
5.2.10-2ubuntu6.7

環境構築は以下の順序で行います。

  1. TokyoCabinetインストール
  2. TokyoTyrantインストール
  3. パッケージオーガナイザー 「paco」インストール
  4. phpizeが必要なのでphp5-develインストール
  5. PECLのTokyoTyrantをインストール
  6. PHPから接続確認

3.と4.は、Peclライブラリをpeclコマンドでインストールする場合は不要です。 それでは行ってみましょう!

1. TokyoCabinetインストール

# cd /usr/local/src/
# wget http://1978th.net/tokyocabinet/tokyocabinet-1.4.47.tar.gz
# tar zxvf tokyocabinet-1.4.47.tar.gz
# cd tokyocabinet-1.4.47
# ./configure
..
configure: error: bzlib.h is required

怒られたのでlibbz2-devインストール。

# aptitude install libbz2-dev

再度configure。

# ./configure

..
#================================================================
# Ready to make.
#================================================================

# make
..

#================================================================
# Ready to install.
#================================================================

# make install
..
#================================================================
# Thanks for using Tokyo Cabinet.
#================================================================

2. TokyoTyrantインストール

# pwd
/usr/local/src
# wget http://1978th.net/tokyotyrant/tokyotyrant-1.1.41.tar.gz
--2011-04-10 23:49:09--  http://1978th.net/tokyotyrant/tokyotyrant-1.1.41.tar.gz
Resolving 1978th.net... 182.48.59.139
Connecting to 1978th.net|182.48.59.139|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 196196 (192K) [application/x-gzip]
Saving to: `tokyotyrant-1.1.41.tar.gz'

100%[========================================================================================>] 196,196     --.-K/s   in 0.1s  

2011-04-10 23:49:09 (1.33 MB/s) - `tokyotyrant-1.1.41.tar.gz' saved [196196/196196]

# pwd
/usr/local/src
# tar zxvf tokyotyrant-1.1.41.tar.gz
# cd tokyotyrant-1.1.41
# ./configure
..
#================================================================
# Ready to make.
#================================================================
# make
..

#================================================================
# Ready to install.
#================================================================

# make install
..

#================================================================
# Thanks for using Tokyo Tyrant.
#================================================================

起動してみる。

# ttservctl start
Starting the server of Tokyo Tyrant
Executing: ttserver -port 1978 -dmn -pid /var/ttserver/pid
Done

起動確認。

# ps aux | grep ttserver
root      4822  0.1  0.0 142328  1004 ?        Sl   23:49   0:00 ttserver -port 1978 -dmn -pid /var/ttserver/pid /var/ttserver/casket.tch#bnum=1000000
root      4833  0.0  0.0   1776   640 pts/0    R+   23:50   0:00 grep --color=auto ttserver

3. pacoインストール

通常パッケージをソースコードからmake/make installすると、バイナリファイルや設定ファイルがいたるところに散らばってしまいます。アンインストールする際にそれらのファイルが何処にあるのか把握できなくて、ゴミファイルが残る可能性があります。

pacoは「make install」コマンドをラップし、その際に散らばったファイルを管理することができます。今回はPECLライブラリをソースからインストールしたいと思うのでこのpacoを用いたいと思います。

参考: paco - a source code pacKAGE oRGANIZER for Unix/Linux

# pwd
/usr/local/src
# wget http://sourceforge.net/projects/paco/files/paco/2.0.9/paco-2.0.9.tar.gz
--2011-04-11 00:40:57--  http://sourceforge.net/projects/paco/files/paco/2.0.9/paco-2.0.9.tar.gz
..
Saving to: `paco-2.0.9.tar.gz'

100%[==================================================================>] 430,797     2.58M/s   in 0.2s  

2011-04-11 00:41:01 (2.58 MB/s) - `paco-2.0.9.tar.gz' saved [430797/430797]

# tar zxvf paco-2.0.9.tar.gz
# cd paco-2.0.9
# ./configure --disable-gpaco
# make
..
# make install
..

自分自身を記憶しておく。

# make logme
..
paco-2.0.9:
  4k  /usr/local/bin/ocap
  1M  /usr/local/bin/paco
  8k  /usr/local/bin/pacoball
  8k  /usr/local/bin/rpm2paco
  8k  /usr/local/bin/superpaco
  4k  /usr/local/etc/pacorc
 28k  /usr/local/lib/libpaco-log.a
  4k  /usr/local/lib/libpaco-log.la
   @  /usr/local/lib/libpaco-log.so -> libpaco-log.so.0.0.0
   @  /usr/local/lib/libpaco-log.so.0 -> libpaco-log.so.0.0.0
 32k  /usr/local/lib/libpaco-log.so.0.0.0
  4k  /usr/local/lib/pkgconfig/paco.pc
  8k  /usr/local/share/man/man5/pacorc.5
 12k  /usr/local/share/man/man8/paco.8
  4k  /usr/local/share/man/man8/pacoball.8
  4k  /usr/local/share/man/man8/rpm2paco.8
  4k  /usr/local/share/man/man8/superpaco.8
  8k  /usr/local/share/paco/README
  4k  /usr/local/share/paco/faq.txt
  4k  /usr/local/share/paco/pacorc

1.2M  Total

4. phpizeが必要なのでphp5-develインストール

# aptitude search php5-dev
p   php5-dev                            - Files for PHP5 module development                                                                                       
# aptitude install php5-dev

5. PECLのTokyoTyrantをインストール

# pwd
/usr/local/src
# wget http://pecl.php.net/get/tokyo_tyrant-0.6.0.tgz
--2011-04-19 14:49:46--  http://pecl.php.net/get/tokyo_tyrant-0.6.0.tgz
Resolving pecl.php.net... 76.75.200.106
Connecting to pecl.php.net|76.75.200.106|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 27081 (26K) [application/octet-stream]
Saving to: `tokyo_tyrant-0.6.0.tgz'

100%[======================================================================>] 27,081      23.4K/s   in 1.1s   

2011-04-19 14:49:48 (23.4 KB/s) - `tokyo_tyrant-0.6.0.tgz' saved [27081/27081]


# tar zxvf tokyo_tyrant-0.6.0.tgz
# cd tokyo_tyrant-0.6.0
# phpize
Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20060613
Zend Extension Api No:   220060519

# ./configure
# make
# make test
# paco -D make install
Installing shared extensions:     /usr/lib/php5/20060613+lfs/
*** Warning: The database is older than 7 days.
*** Run 'paco -ua' to update it.
# paco -ua

pacoでインストールされたか確認。

# paco -1Fdsa
1.2M  20  11-Apr-2011  paco-2.0.9
240k   1  19-Apr-2011  tokyo_tyrant-0.6.0

TokyoTyrantの設定ファイルを作成。

# vi /etc/php5/conf.d/tokyo_tyrant.ini
--
extension=tokyo_tyrant.so
--

読み込まれるか確認。

# php -m | grep tokyo
tokyo_tyrant

6. PHPから接続確認

動作確認スクリプト作成。

# vi /tmp/tokyo_tyrant_test.php
<?php
try {
    $tt = new TokyoTyrant('localhost');

    // 複数データ登録
    $tt->put(
        array(
            'key0'=>'value0',
            'key1'=>'value1',
            'key2'=>'value2'
            )
        );

    // 単体データ取得
    var_dump($tt->get('key0'));

    // 複数データ取得
    var_dump($tt->get(array('key0', 'key1', 'key2')));

} catch (TokyoTyrantException $e) {
    echo "Error: " . $e->getMessage() . "\n";
}
?>

実行してみる。

$ php /tmp/tokyo_tyrant_test.php
string(6) "value0"
array(3) {
  ["key0"]=>
  string(6) "value0"
  ["key1"]=>
  string(6) "value1"
  ["key2"]=>
  string(6) "value2"
}

OK. 終了! Tokyo系もpacoすればよかったと後で気付きました orz.

comments powered by Disqus