こんにちは、株式会社リブセンスの吉田健太郎です。MySQLで本格的な日本語全文検索を行うには、MySQL 5.0ならTritonn、5.1以降ではmroongaがあります。mroongaとはTritonnの後継プロダクトで、2010年より開発が始まりました。このプロダクトの強みとしては、MySQLプラグインとしてシンプルに使えることと、リレーショナルな日本語対応の全文検索機能ができることです。mroongaはTritonnから進化を遂げており、更新・参照速度のさらなる向上や、unigramなどのトークナイズ方式の拡充などが行われました。
しかしmroongaはビルドする際のMySQLバージョンに依存するため、公式に配布されている組み合わせには限りがあります。そのため、導入の障壁になるケースがあります。手っ取り早くソースをコンパイルしてインストールすればどんな組み合わせもできますが、サーバが増えれば増えるほど手間が増えます。
そこで今回は、RPMパッケージを作る方法を以下のテーマで解説します。RPMパッケージがあれば、手間を掛けずに同じ構成のサーバを量産できます。
- CentOS6.4環境で選べるMySQLとPHPの組み合わせ方法
- RPMパッケージを使ってMySQL 5.6.12、mroonga、PHP 5.4の環境を作る方法
- mroongaのnightly版を使う方法
CentOS6.4環境で選べるMySQLとPHPの組み合わせ方法
CentOS 6向けのmroongaは、ディストリビューション付属のMySQL 5.1系とセットで利用することを前提にビルドされています。そのため、CentOS 6.x + MySQL 5.1.x (updatesリポジトリ) という組み合わせが、公式に配布しているmroongaの推奨環境です。この環境に、groongaリポジトリにあるmysql-mroongaをインストールすることで、難なくmroongaを導入できます。
もし特定のバージョンのPHPとMySQLを組み合わせる場合には、次の2点において注意が必要です。ただし、PHPに関してはPHP 5.4からデフォルトとなったmysqlndというMySQLのクライアントライブラリを使えば、MySQLをインストールせずに使えるドライバですので、MySQLのバージョン依存を解消できます。
- 利用するMySQLのバージョン(5.1/5.5/5.6)に対応した、mroongaをビルドする必要がある
- 利用するMySQLのバージョン(5.1/5.5/5.6)に対応した、PHPのMySQLクライアントライブラリを使う必要がある(mysqlndを使わない場合)
各リポジトリが提供するPHP, MySQLのバージョンは次の通りです。
base, updates |
○ |
× |
× |
○ |
× |
× |
remi |
× |
○ |
× |
× |
○ |
× |
remi-php55 |
× |
× |
○ |
× |
× |
× |
ius |
○ |
○ |
× |
× |
○ |
× |
ius-dev |
× |
× |
× |
× |
× |
○ |
例えばPHP 5.4.xとMySQL 5.6.x環境を用意する際、mysqlndが採用できれば後述の手順において、PHPのRPMパッケージ作成は省略可能です。つまり、mroongaのRPMパッケージ作成のみで導入できます。しかし事情により、mysqlndが使えず従来のlibmysqlclientが必要な環境の場合には、PHP・mroongaそれぞれのRPMパッケージを後述する手順で作成します。なお、iusの提供するmysql56u-develパッケージにはmroongaのビルドに必要なlibmysqlservices.aが不足しているため、オラクル公式のRPMパッケージを利用して紹介します。
Remiリポジトリ・IUSリポジトリのインストールについては、公式サイトが参考になります。
RPMパッケージを使ってMySQL 5.6.12、mroonga、PHP 5.4の環境を作る方法
mroongaはビルドしたときのMySQLバージョンに依存するため、MySQL 5.5や5.6の環境でビルドすれば、問題なく動きます。組み合わせが多いため公式でのRPMパッケージの配布は一部に限定されているのが現状です。
新機能や性能向上が多く施されたMySQL 5.5や5.6と一緒に、mroongaやPHPを利用したいというケースもあるでしょう。この場合はソースをコンパイルしてインストールする方法もありますが、RPMパッケージの使い勝手の良さには及びません。とても手軽にRPMパッケージを作ることができるため、その作成・インストール手順を紹介します。
- RPMパッケージのビルド環境を作る
- オラクル公式MySQLをインストールする
- rpmbuildコマンドで、mysql-mroongaのRPMパッケージを作る
- rpmbuildコマンドで、PHP 5.4のRPMパッケージを作る
なお、CentOS 5用のmroongaは、MySQL 5.6の本体と共にrpmパッケージが提供されています。そして、debian系のsqueezeやlucidではMySQL 5.1向けパッケージが、その他debian系に関してはMySQL 5.5向けのパッケージが提供されています。
RPMパッケージのビルド環境を作る
まず、RPMパッケージビルド専用の仮想マシンをVirtualBox等で作ります。もちろん既にあるCentOS環境でも構いません。
新規に作る場合は、理研等のミラーサイトよりCentOSの最小構成版のisoイメージCentOS-6.4-x86_64-minimal.isoをダウンロードし、OSのインストールを行います。
マシンへのログインができたら、まずコンパイルを行うためのパッケージ群をインストールします。
次に、ビルド専用の一般ユーザbuild
を作ります。
ビルド専用ユーザのパスワードを設定します。
buildユーザでもsudoコマンドが使えるよう、visudoコマンドで次のように設定を変更します。
RPMパッケージをビルドするためのフォルダやドットファイルを作ります。
以上でRPMパッケージをビルドする下準備ができました。
オラクル公式MySQLをインストールする
原稿執筆時点で最新版のMySQL 5.6.12-2
を用いて解説を行います。新しいバージョンが出た場合には適宜読み替えてください。
まずはオラクルまたは北陸先端科学技術大学院大学(JAIST) のミラーサイトより、MySQLのRPMパッケージをダウンロードします。
ダウンロードしたtarアーカイブを展開します。
次に、mysql-libs以外のパッケージがインストールされている場合はアンインストールを行います。もしMySQLにデータを残している場合は、アップデートすると取り出せなくなります。このアンインストール前のタイミングでmysqldumpコマンドを利用してSQLダンプを取得します。そして/var/lib/mysql
以下も削除しておきましょう。
mysql-libsからのアップグレードを行うため、MySQL-Shared-Compatを先にインストールします。これは、標準でインストールされているmysql-libs-5.1.69に依存しているpostfix, crontab, cronie, cronie-anacronを消さずにアップデートするためです。
次に、MySQLの本体をインストールします。後ほどmysql-mroongaやPHPのRPMビルドを行うため、MySQL-develもインストールします。もしビルドしか行わない場合には、ここではMySQL-develのみのインストールで十分です。
インストール完了後、MySQLのパスワードを設定します。
新しく設定したパスワードで入れることを確認します。
以上で、MySQLのインストールは完了です。
rpmbuildコマンドで、mysql-mroongaのRPMパッケージを作る
ここでは、mysql-mroongaのsrc.rpmパッケージを展開してRPMパッケージを作成します。 そのままRPMパッケージ生成を始めると、パッケージの生成に必要なライブラリが見つからない旨のエラーが起きるため、先に必要なライブラリのインストールを行います。
yumリポジトリに、groongaプロジェクトが提供しているリポジトリを追加します。
ビルドに必要なライブラリのインストールを行います。
buildユーザへ変更後、groongaプロジェクトが提供しているgroongaリポジトリより、mysql-mroongaのsrc.rpmパッケージを取得し、rpmbuildフォルダ以下に展開します。
後述のように、SPECファイルの書き換えを行います。これでRPMビルドの準備は整いました。
準備が整いましたので、MySQL 5.6向けmroongaのRPMパッケージをビルドを始めます。
数分後、メッセージと共に次のようなファイル群が生成されたら無事完了です。
以上で、MySQL 5.6と共に使うmroongaのRPMビルドは完了です。
必要に応じて、生成されたRPMファイルをインストール先サーバに転送します。その後に、次のようにインストールします。MySQLが起動した状態で行うことを忘れないでください。 もし停止状態でインストールを行った場合には、mroongaのインストール/アンインストール時に発行するするクエリと、その用途をまとめて解説を参考に、手動でインストール時に実行しているクエリ
を発行してください。
このようにビルドしたRPMパッケージを利用したインストール手順の詳細は、CentOS6.xに最新版のMySQL5.6とmroongaを最速でRPMインストールする方法をご参照ください。
rpmbuildコマンドで、PHP 5.4のRPMパッケージを作る
原稿執筆時点で最新版のremiリポジトリにあるPHP 5.4系を利用して解説を行います。新しいバージョンが出た場合には適宜読み替えてください。
まずはLes RPM de Remi - Repositoryよりsrc.rpmパッケージを取得し、rpmbuildフォルダ以下に展開します。
そのままビルドを行うと以下のように依存ライブラリ不足によるエラーとなるため、ビルドに必要なパッケージのインストールを行います。
PHPのRPMビルドに必要なライブラリのインストールを行います。
MySQL 5.6互換とするため、SPECファイルの修正を後述のように行います。
準備が整いましたので、RPMビルドを始めます。このビルドは4コア環境で1時間程度掛かるため、しばらく待ちましょう。
メッセージと共に次のようなファイルが生成されたら完了です。
この中から適宜必要なRPMファイルをインストールすれば、MySQL 5.6とmroonga.そしてPHP 5.4が使える環境が構築できます。
mroongaのnightly版を使う方法
mroongaはGitHubにてソースを公開する形で開発が進められています。導入の検証を行っている際に、mroongaのGitHubリポジトリにて修正済みではあるが、月次での公開がまだ行われていない状態を取り込みたいことがあるかもしれません。そのような場合には、毎晩GitHubの最新リビジョンを用いて作成されるnightly版からRPMパッケージを作ることで、先取りすることができます。
これより、そのnightly版のRPMパッケージ作成手順をmroonga-3.05.2013.07.18.tar.gz
を例に紹介します。
2013年7月18日版であれば、mroonga-3.05.2013.07.18.tar.gz
というファイル名となります。大まかにはソースをダウンロードし、SOURCES以下に配置、そしてSPECファイルを書き換えてrpmbuildという順番です。
それではステップ毎に解説していきます。
mysql56-mroonga.spec
に加えた差分からさらに、次の箇所を調整します。
RPMパッケージをビルドします。
数分後、メッセージと共に次のようなファイルが生成されたら完了です。
次回予告
次回はmroongaをみなさんの手元にお届けするまで、ということでリリースマネージャ観点からmroongaを紹介します。今回はCentOSでのパッケージ作成の事例でした。mroongaはCentOS以外でもパッケージを提供しています。今後のパッケージングの動向についても紹介する予定です。お楽しみに!