mroongaインストール時のMySQLとのバージョン不一致に対処する方法

> もっとgroongaを知ってもらおう!ということで週刊groongaをはじめました。毎週木曜にgroongaやmroongaのトピックを投稿予定です。

# はじめに

MySQLで高速に全文検索するためのオープンソースのストレージエンジンとして
[mroonga](http://mroonga.github.com/ja/)を公開しています。最新のバージョンは2012年12月29日にリリースしたmroonga
[2.10](http://mroonga.github.com/ja/docs/news.html#release-2-10-2012-12-29) です。

mroongaでは[インストールガイド](http://mroonga.github.com/ja/docs/install.html)にて各種ディストリビューションごとのインストール手順を説明しています。

しかし、この通りにやったんだけどmroongaをインストールできない!というトラブルが発生することがあります。

そこで今回は問題の起こる背景と、対処方法について説明します。

# 問題の起こる背景

mroongaはMySQLのプラグインとして動作するようになっています。
そのため、mroongaのリリース担当者がビルドしたときのMySQLのバージョンとmroongaユーザーがインストールしようとしている先の環境のMySQLのバージョンが一致していないといけないという制約があります。

毎月29日に定期的にmroongaのリリースをしているので、リリース直後はMySQLのバージョンがmroongaの必要としているものと一致しないという問題はありません。(インストール手順通りでインストールできない、ということにはなりません。)

しかし、その後MySQLのアップデートが公開されるとバージョンの不一致によりパッケージのインストール時にエラーになるという問題が発生します。

例えば、以下はCentOS 6で実際にyum updateにてパッケージを更新しようとした時のエラーです。(バージョン不一致が発生する例です。)

>$ sudo yum update
>Loaded plugins: fastestmirror, refresh-packagekit, security
>Loading mirror speeds from cached hostfile
>* base: mirrors.sin3.sg.voxel.net
>* extras: mirrors.sin3.sg.voxel.net
>* updates: ftp.riken.jp
>Setting up Update Process
>Resolving Dependencies
>--> Running transaction check
>---> Package mysql.x86_64 0:5.1.66-2.el6_3 will be updated
>--> Processing Dependency: mysql = 5.1.66-2.el6_3 for package: mysql-mroonga-2.10-1.el6.x86_64
>---> Package mysql.x86_64 0:5.1.67-1.el6_3 will be an update
>---> Package mysql-libs.x86_64 0:5.1.66-2.el6_3 will be updated
>---> Package mysql-libs.x86_64 0:5.1.67-1.el6_3 will be an update
>---> Package mysql-server.x86_64 0:5.1.66-2.el6_3 will be updated
>--> Processing Dependency: mysql-server = 5.1.66-2.el6_3 for package: mysql-mroonga-2.10-1.el6.x86_64
>---> Package mysql-server.x86_64 0:5.1.67-1.el6_3 will be an update
>--> Finished Dependency Resolution
>Error: Package: mysql-mroonga-2.10-1.el6.x86_64 (@groonga)
>Requires: mysql-server = 5.1.66-2.el6_3
>Removing: mysql-server-5.1.66-2.el6_3.x86_64 (@updates)
>mysql-server = 5.1.66-2.el6_3
>Updated By: mysql-server-5.1.67-1.el6_3.x86_64 (updates)
>mysql-server = 5.1.67-1.el6_3
>Available: mysql-server-5.1.61-4.el6.x86_64 (base)
>mysql-server = 5.1.61-4.el6
>Available: mysql-server-5.1.66-1.el6_3.x86_64 (updates)
>mysql-server = 5.1.66-1.el6_3
>Error: Package: mysql-mroonga-2.10-1.el6.x86_64 (@groonga)
>Requires: mysql = 5.1.66-2.el6_3
>Removing: mysql-5.1.66-2.el6_3.x86_64 (@updates)
>mysql = 5.1.66-2.el6_3
>Updated By: mysql-5.1.67-1.el6_3.x86_64 (updates)
>mysql = 5.1.67-1.el6_3
>Available: mysql-5.1.61-4.el6.x86_64 (base)
>mysql = 5.1.61-4.el6
>Available: mysql-5.1.66-1.el6_3.x86_64 (updates)
>mysql = 5.1.66-1.el6_3
>You could try using --skip-broken to work around the problem
>You could try running: rpm -Va --nofiles --nodigest

mysql 5.1.67が公開されたので、mysql パッケージを5.1.66から5.1.67へ更新しようとしているけど、mroongaは5.1.66でないといけないので更新時にエラーになっているわけです。

mroonga 2.08以前ではパッケージそのものにMySQLのどのバージョンでないといけないかという依存関係を指定していなかったため、mroongaリリース後にMySQLがアップデートされると(不用意にMySQLを更新してしまうと)動作しなくなるというトラブルが発生していました。

このため、mroonga 2.09以降は動作に必要なMySQLのバージョンを明示するようにしました。
この変更の影響をまとめると、以下のようになります。

* mroonga 2.08以前

  * バージョンの一致しないMySQLへとアップデートできてしまう
  * 不用意にバージョンの一致しないMySQLへアップデートするとmroongaが動作しなくなる

* mroonga 2.09以降
 
  * mroongaのインストールさえできれば動作を担保できる
  * MySQLのアップデートが公開されると、mroongaを含めたパッケージのアップデート時にエラーになる

mroongaをインストールできても、実際に使えなくてはユーザーにとって嬉しくありません。
そこで上記のようにしたわけですが、ディストリビューションごとのMySQLの提供状況によっては(バージョンの不一致が発生するので)インストール時にうまくいかない、ということになるわけです。

# 問題に対処する方法

バージョンが一致しないならば、バージョンが一致するものをインストールすればいいわけです。

例えば、CentOS 6の例だとMySQLのバージョンを明示してインストールするという回避方法があります。(MySQLのバージョンについては2013年2月7日時点の情報です。今後のMySQLのアップデート状況によってバージョンは適宜読み替えてください。)

CentOS 6の[インストールガイド](http://mroonga.github.com/ja/docs/install.html#centos-6)では以下のようにインストール手順が記載してあります。

>% sudo rpm -ivh http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm
>% sudo yum makecache
>% sudo yum install -y mysql-server
>% sudo service mysqld start
>% sudo yum install -y mysql-mroonga
>(% /usr/bin/mysqladmin -u root password 'new-password')

これを以下のようにバージョンを明示してインストールするようにします。

>% sudo rpm -ivh http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm
>% sudo yum makecache
>% sudo yum install -y mysql-server-5.1.66 mysql-5.1.66
>% sudo service mysqld start
>% sudo yum install -y mysql-mroonga
>(% /usr/bin/mysqladmin -u root password 'new-password')

**この方法はあくまでインストールするための回避方法であって、MySQLのセキュリティーアップデート等に追従しないことを推奨するものではありません。**

mroongaパッケージ側で対処したパッケージを提供するのが筋です。
ただし、MySQLの更新に対応したmroongaのパッケージを即座に提供できるとは限りません。

# まとめ

mroongaインストール時にMySQLとのバージョン不一致が発生したときの対処方法を紹介しました。

もし、バージョンの不一致でインストールできない等のトラブルが発生したら、リリース担当の中の人が気づいていない可能性があるので[groonga-dev@lists.sourceforge.jp](http://lists.sourceforge.jp/mailman/listinfo/groonga-dev)宛に報告をお願いします。
あるいは、Twitterで@groonga宛につぶやいてもらうといいかもしれません。

mroongaに興味を持ったなら、まずは[インストール](http://mroonga.github.com/ja/docs/install.html)して試してみてください。

[ユーザーガイド](http://mroonga.github.com/ja/docs/userguide.html)も用意しています。