q4m を debian にインストール
会社の debian にインストールしようとしたところ、
異なるエラーが出たため、一応記録しておく。
# ./configure --with-mysql=/home/kameid/mysql-5.1.30/ --prefix=/usr/local/mysql checking for mysql source code... "/home/kameid/mysql-5.1.30/" checking for int*... yes checking size of int*... configure: error: cannot compute sizeof (int*), 77 See `config.log' for more details.
もーほんまナニコレって感じなんだけど、
http://www.infosia.co.jp/posts/249
ここ見つつ、一個ずつ解決していってるところ。
まず、上記、configure を以下に修正。
then #LDFLAGS="-Wl,--hash-style=both" LDFLAGS="" fi
hash-style=both は、
DT_GNU_HASH を使うと、共有ライブラリのシンボル解決が 50% 程度速くなるそうです。
これを有効にするには、binutils 2.17cvs20070426-1 以降と glibc 2.5-5 以降の環境で、LDFLAGS に --hash-style=both を追加 (gcc-4.1 4.1.2-5 以降では標準で追加される) して、システム全体をリビルドする必要があります。
http://debian.fam.cx/index.php?Tips#content_1_18
というものらしい。んでもって、
Linux の共有ライブラリをリンクするためのハッシュテーブルは、従来、.hash というセクションに収められていたのが、CentOS 5.0 や Fedora Core 6 以降? といった新しい環境では、.gnu.hash という新しいセクションに収められるようになった。
で、後者の環境で何も考えずに共有ライブラリをビルドすると、.gnu.hash セクションのみをもつものができあがるんだけど、それを Debian Etch とかに持っていくと、dlopen した際に SIGFPE で落ちてしまう。
問題を回避するためには、リンカに --hash-style=both というオプションを渡してやれば、両方のセクションが作成されるので、この問題を回避できる。
Linux で共有ライブラリをビルド&配布する際に気をつけること - kazuhoのメモ置き場
という経緯で、このオプションが指定されるようになったようだ。
ちなみに、gcc のバージョンは、
# gcc --version gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) Copyright (C) 2006 Free Software Foundation, Inc.
んで、make したところ出たエラーの解消のために、
$ vi src/ha_queue.h #define LLONG_MAX 9223372036854775807LL #define LLONG_MIN (-LLONG_MAX - 1LL)
を追加。(参考URLと全く同じように対処)
これで、make は通り、make install まで完了。
# /usr/local/mysql/bin/mysql -u root -p mysql < support-files/install.sql Enter password: ERROR 1126 (HY000) at line 1: Can't open shared library '/usr/lib/mysql/plugin/libqueue_engine.so' (errno: 2 cannot open shared object file: No such file or directory)
おっと、想定外のエラー。共有ライブラリの参照先が違うな。mysql の configure 間違えたのかな。basedir を以下のように追加。
# vi /etc/my.cnf [mysqld] .. basedir = /usr/local/mysql
mysqld を再起動。
# mysqladmin -u root shutdown # mysqld_safe --user=mysql &
これで、install.sql をやり直したところ、無事登録が出来た。
# /usr/local/mysql/bin/mysql -u root -p mysql < support-files/install.sql Enter password: # /usr/local/mysql/bin/mysql -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.1.30-log Source distribution Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> show plugins; +------------+--------+----------------+--------------------+---------+ | Name | Status | Type | Library | License | +------------+--------+----------------+--------------------+---------+ | binlog | ACTIVE | STORAGE ENGINE | NULL | GPL | | ARCHIVE | ACTIVE | STORAGE ENGINE | NULL | GPL | | BLACKHOLE | ACTIVE | STORAGE ENGINE | NULL | GPL | | CSV | ACTIVE | STORAGE ENGINE | NULL | GPL | | MEMORY | ACTIVE | STORAGE ENGINE | NULL | GPL | | InnoDB | ACTIVE | STORAGE ENGINE | NULL | GPL | | MyISAM | ACTIVE | STORAGE ENGINE | NULL | GPL | | MRG_MYISAM | ACTIVE | STORAGE ENGINE | NULL | GPL | | QUEUE | ACTIVE | STORAGE ENGINE | libqueue_engine.so | GPL | +------------+--------+----------------+--------------------+---------+ 9 rows in set (0.00 sec)
おけおけ。「QUEUE」ってのが追加されている。
テストも通しておく。
# apt-get install libdbd-mysql-perl libdata-compare-perl # apt-get install liblist-moreutils-perl # # DBI='dbi:mysql:database=test;host=localhost;mysql_socket=/tmp/mysql.sock' \ DBI_USER='root' DBI_PASSWORD='mysql' ./run_tests.pl t/01-base-rnd_pos.........................ok t/01-base.................................ok t/02-queue-cond...........................ok t/02-queue-owned-delete...................ok t/02-queue................................ok t/03-queue-error-wait.....................ok t/03-queue-error..........................ok t/04-blob-cond............................ok t/04-blob.................................ok t/05-multireader..........................ok 1/4 Multireader benchmark result: Number of messages: 6400 Number of readers: 32 Elapsed: 3.991 seconds Throughput: 1603.607 mess./sec. t/05-multireader..........................ok t/05-multirw..............................ok 1/4 Multi-reader-writer benchmark result: Number of messages: 6400 Number of readers: 32 Elapsed: 10.419 seconds Throughput: 614.243 mess./sec. t/05-multirw..............................ok t/05-multiwait............................ok 1/4 Multi-reader-writer benchmark result under semi-starvation: Number of messages: 6400 Number of readers: 32 Elapsed: 19.429 seconds Throughput: 329.396 mess./sec. t/05-multiwait............................ok t/06-multi................................ok t/07-trans................................ok t/08-forward..............................ok t/09-pqueue-single-table-wake-listener....ok t/09-pqueue-single-table..................ok All tests successful. Files=17, Tests=68921, 1006 wallclock secs (186.70 cusr + 13.12 csys = 199.82 CPU)
ってことで、無事インストールできた。
・・・が、どうにもパフォーマンスが出てない様子なので、もうちょっと configure をちゃんとしないとだめそう。その辺はまた後日。
どうも q4m は debian とは相性宜しくないようで。つーか、本番機は RedHat なのに、何でこの検証用マシン、debian なんだよ。絶対誰かの趣味だな・・・。