★失敗編★Q4MをCentOS5.3 x86_64でRPM化してセットアップを楽に!しようと思ったらはまった

成功したのは↓
Q4MをCentOS5.5 x86_64でRPM化してセットアップを楽にする - /var/log/dekaduki

もうバイナリ版をcp -pするのは嫌だ、ということでRPM化してセットアップを楽にしたい。
手順は完全にzigorou先生の↓準拠
q4m を rpm 化する with checkinstall - Yet Another Hackadelic

MySQLのsrc.rpmを取得

Q4Mコンパイルに必要なので。

# cd /usr/src/redhat/SRPMS
# wget http://dev.mysql.com/get/Downloads/MySQL-5.1/MySQL-community-5.1.42-0.rhel5.src.rpm/from/http://ftp.iij.ad.jp/pub/db/mysql/

rpmbuild --recompile

ここもzigorouさんの通り…

# rpmbuild --recompile --define 'community 1' /usr/src/redhat/SRPMS/MySQL-community-5.1.42-0.rhel5.src.rpm;date

と思ったらエラー

error: Failed build dependencies:
        gperf is needed by MySQL-community-5.1.42-0.rhel5.x86_64
        readline-devel is needed by MySQL-community-5.1.42-0.rhel5.x86_64
        ncurses-devel is needed by MySQL-community-5.1.42-0.rhel5.x86_64

上に対応するため下でinstall。
OSインストール時にDevelopment Toolsを入れとけば大丈夫なのかもしれない。

# yum install gperf readline-devel ncurses-devel

libtermcap-develも必要だよ、ということでinstall完了
そして改めてrpmrebuild
下記のようなエラーが流れるけど大丈夫だろうか。

hoge.cc : warning: dereferencing type-punned pointer will break strict-aliasing rules

1時間半ぐらいで完了。最新のCPU2個積んだサーバでこんだけかかるのか。

checkinstallのmake install

したいので、まずはcheckinstallを導入。

# cd /usr/local/src
# wget http://asic-linux.com.mx/~izto/checkinstall/files/source/checkinstall-1.6.2.tar.gz
# tar xvzf checkinstall-1.6.2.tar.gz
# cd checkinstall-1.6.2
# make 
# make install

Q4Mrpm

そして本命Q4M。バージョンは最新版を使用。MySQL5.1.42を使っているのはバイナリ版が5.1.42向けに作られているので、それにあわせているため。

# cd /usr/local/src
# wget http://q4m.31tools.com/dist/pre/q4m-0.9.2.tar.gz
# tar xfz q4m-0.9.2.tar.gz
# cd q4m-0.9.2
# ./configure --prefix=/usr --with-mysql=/usr/src/redhat/BUILD/mysql-5.1.42
略
checking for mysql source code... "/usr/src/redhat/BUILD/mysql-5.1.42"
failed to lacate mysql 5.1 installation
Please specify mysql 5.1 directory with --prefix option. 

おっと。。。mysqlが見つからんぞということでエラー。recompileはしたけど確かにインストールはしていない。

MySQLrpm化(rpmbulid --rpmrebuild)

標準で使ってるMySQLrpmを入れても認識はするのだろうけど、この環境でrpm作っときましょう。

# rpmbuild --rebuild --define 'community 1' /usr/src/redhat/SRPMS/MySQL-community-5.1.42-0.rhel5.src.rpm

これでmysqlrpm
こちらも時間かかる。CPU使用率見ると見えている16個のうち1個がuser100%で完全に張り付いてる。

MySQLrpm完成 install

rpm -ivh *でインストールされる順

  1. MySQL-client-community-5.1.42-0.rhel5.x86_64.rpm
  2. MySQL-shared-community-5.1.42-0.rhel5.x86_64.rpm
  3. MySQL-server-community-5.1.42-0.rhel5.x86_64.rpm
  4. MySQL-community-debuginfo-5.1.42-0.rhel5.x86_64.rpm
  5. MySQL-devel-community-5.1.42-0.rhel5.x86_64.rpm
  6. MySQL-embedded-community-5.1.42-0.rhel5.x86_64.rpm
  7. MySQL-test-community-5.1.42-0.rhel5.x86_64.rpm
# cd /usr/src/redhat/RPMS/x86_64
# rpm -ivh MySQL-*

改めまして Q4Mrpm

configureでlibdirを指定した。そうしないと/usr/lib/以下にできてcpせんといかん。

# cd /usr/local/src
# cd q4m-0.9.2
# ./configure --prefix=/usr/ --with-mysql=/usr/src/redhat/BUILD/mysql-5.1.42 --libdir=/usr/lib64/mysql/plugin
略
configure: creating ./config.status
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating t/Makefile
config.status: creating src/queue_config.h
config.status: executing depfiles commands
成功!

続いてcheckinstall MYSQL_LIBDIRのパスをzigorouさんとは変更する。maintainerはよしなに。

checkinstall -R --pkgname q4m --pkgversion 0.9.2 \
  --pkgrelease 0.glibc23 --pkggroup Applications/Databases \
  --maintainer hoge@gmail.com \
  make MYSQL_LIBDIR=/usr/lib64 install

エラーでてうまくいかない。。。

make[2]: *** [libqueue_engine_la-ha_queue.lo] Error 1
make[2]: Leaving directory `/usr/local/src/q4m-0.9.2/src'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/usr/local/src/q4m-0.9.2/src'
make: *** [all-recursive] Error 1

そしていろいろ疑うと、そもそも/usr/src/redhat/BUILD/mysql-5.1.42なんてなかった。
どこよmysql!こういう作業もしたことないので勘所がわからん。
/usr/src/debug/mysql-5.1.42にありました。

あれ、ぜんぜんうまくいかない。。。一度うまくいったのを手順として清書の意味もこめてやっているのになんだろう。時間かけすぎてもあれなので保留。

成功した後で見返すと

mysqlが見つからなかったときにrpmbuild --rebuildをやったのが原因だな。
よくわからずとりあえず打つからこういうことになる。
しかし、いい勉強になった。勉強するきっかけにもなったし、今回のはまりは良かったとしよう。