Posted at

Ubuntu LinuxでのQ4Mインストール → 失敗

More than 5 years have passed since last update.

実際にはLinux Mintで確認。

最後のテストで通らないので使い物にならない…MySQLをソースから入れなおしたほうがよいか?

$ cat /etc/lsb-release 

DISTRIB_ID=LinuxMint
DISTRIB_RELEASE=15
DISTRIB_CODENAME=olivia
DISTRIB_DESCRIPTION="Linux Mint 15 Olivia"


1. MySQLのインストール

Q4Mビルド時にヘッダが足りないといわれるのでlibmysqlclient-devも入れておくとよいみたい。

$ sudo apt-get install mysql-server libmysqlclient-dev


2. MySQLのソースをダウンロード

Q4MのバイナリはMySQL5.1系のものしか配布されていないので自分でビルドする必要がある。

ビルドにはインストールされているMySQLと同じソースが必要である。

事前にGUI設定のソフトウェアソースでソースコードリポジトリを有効化しておくこと。

# パッチあてなどでいくつかファイルができるのでフォルダを切ってそこにダウンロードする

$ mkdir mysql
$ cd mysql
# mysql-5.5の代わりにmysql-serverを指定しても可
$ apt-get source mysql-5.5
$ ls
mysql-5.5-5.5.31/
mysql-5.5_5.5.31-0ubuntu0.13.04.1.debian.tar.gz
mysql-5.5_5.5.31-0ubuntu0.13.04.1.dsc
mysql-5.5_5.5.31.orig.tar.gz


3. MySQLのビルド

ビルドして得られるバイナリはQ4Mのビルドに不要だが、

ソースを取得しただけではバージョン情報やエラーファイルが足りないためビルドを行う。

ビルドはcmakeを使って行う。

ncursesなどのライブラリが足りないとエラーが出た時は適宜Googleで調べて入れること。

Q4Mのビルド時に"include/mysqld_error.h"が必要となるが、これはcomp_errコマンドを使って生成する必要があるらしい。

$ sudo apt-get install cmake # CMakeをインストール

$ cd mysql-5.5-5.5.31
$ cmake .
$ make
$ cd extra
$ ./comp_err -H ../include/mysqld_error.h


4. Q4Mのビルド

ソースコードをダウンロードしてビルドする。

githubのものが最新版のようだが、masterの最新版はビルドにCMakeを使うようになっており、手順がドキュメントされていない。

そのためバージョン番号を切ってリリースされている最新のものを使うのがよい。

configure時の"--with-mysql"オプションは必須、フルパスでMySQLのソースを置いた位置を指定すること。

$ wget http://q4m.kazuhooku.com/dist/q4m-0.9.10.tar.gz

$ tar xvfz q4m-0.9.10.tar.gz
$ cd q4m-0.9.10
$ ./configure --with-mysql=/home/tune/src/mysql/mysql-5.5-5.5.31/

queue_config.hで定義されているQ4M_VERSION_HEXがビルドに必要だがなぜか読み込まれないのでsrc/ha_queue.ccの67行目と69行目をコメントアウトする


src/ha_queue.cc

//#if MYSQL_VERSION_ID < 50500

#include "queue_config.h"
//#endif

その後ビルドしてインストール

$ make

$ sudo make install


5. AppArmorをオフにしてQ4Mを有効化する

MySQLのAppArmorに関する設定は" /etc/apparmor.d/usr.sbin.mysqld"にあり、

プラグインは自動的に読み込まれる設定になっているようだが、なぜか読み込まれなかった。

解決できなかったのでAppArmorを無効化して対処する。

$ sudo vi /etc/default/grub

# GRUB_CMDLINE_LINUXにapparmor=0を追加

GRUB_CMDLINE_LINUX="apparmor=0"

# /boot/grub/grub.cfgを更新して再起動する
$ sudo update-grub
$ sudo reboot

再起動後、Q4Mを有効化する。

$ mysql -u root -p -f mysql < support-files/install.sql

# MySQLにログインしてプラグインが表示されればインストールできている。
$ mysql -uroot -p
mysql> show plugins;
+--------------------------+----------+--------------------+--------------------+---------+
| Name | Status | Type | Library | License |
+--------------------------+----------+--------------------+--------------------+---------+
| binlog | ACTIVE | STORAGE ENGINE | NULL | GPL |
....
| partition | ACTIVE | STORAGE ENGINE | NULL | GPL |
| QUEUE | ACTIVE | STORAGE ENGINE | libqueue_engine.so | GPL |
+--------------------------+----------+--------------------+--------------------+---------+
24 rows in set (0.00 sec)


6. テスト

$ DBI_USER='root' DBI_PASSWORD='root password' DBI='dbi:mysql:database=test' ./run_tests.pl

でテストが通るはずなんだけどエラーが出まくる… orz