Amazon EC2にmroongaをインストールしてみた
※試行錯誤の過程も載せていますのでやり方だけ知りたい人は適当に飛ばし読みして頂ければと。
全文検索の検証のためにMySQLとgroongaをいじろうかな思ったのだが、試行錯誤するのにすぐに捨てられる環境がいいなということでAmazon EC2の無料枠のマイクロインスタンスに入れてみた。
まず、MySQL+groongaということでmroongaのインストールガイドを参照。
「Amazon LinuxだけれどCentOS6と同じ感じじゃね?」ってことでそのあたり見てみた。
http://mroonga.github.io/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 yum makecache」の段階でエラー。
% sudo yum makecache Loaded plugins: priorities, security, update-motd, upgrade-helper amzn-main | 2.1 kB 00:00 amzn-updates | 2.3 kB 00:00 http://packages.groonga.org/centos/latest/x86_64/repodata/repomd.xml: [Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 404 Not Found" Trying other mirror. Error: Cannot retrieve repository metadata (repomd.xml) for repository: groonga. Please verify its path and try again
「そんなURL無いよ」って怒られてるね。実際にブラウザでみても出てきません。
本当は「latest」が「5」とか「6」とかになってほしい。
% cat /etc/yum.repos.d/groonga.repo [groonga] name= for CentOS $releasever - $basearch baseurl=http://packages.groonga.org/centos/$releasever/$basearch/ gpgcheck=1 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-groonga
まあ、変数「releasever」が「latest」になってるよねってことでさらに以下。
% grep 'releasever=' /etc/yum.conf releasever=latest
確かにそんなかんじー。
「/etc/yum.conf」をいじると他のAWS用のリポジトリにも影響があるのでgroonga用のだけいじることにする。
% sudo vi /etc/yum.repos.d/groonga.repo ... #baseurl=http://packages.groonga.org/centos/$releasever/$basearch/ baseurl=http://packages.groonga.org/centos/6/$basearch/ ...
明示的に「6」って書いちゃった。
再度チャレンジしてみたらイケたようなので鼻歌まじりにそのままバシバシ叩いていく。
% sudo yum makecache % sudo yum install -y mysql-server % sudo service mysqld start % sudo yum install -y mysql-mroonga
今度は「mysql-mroonga」で怒られた。
% sudo yum install -y mysql-mroonga ... Error: Package: mysql-mroonga-3.02-0.el6.x86_64 (groonga) Requires: mysql-server = 5.1.67-1.el6_3 Installed: mysql-server-5.5-1.3.amzn1.noarch (@amzn-main) mysql-server = 5.5-1.3.amzn1 Installed: mysql55-server-5.5.30-1.31.amzn1.x86_64 (@amzn-main) mysql-server = 5.5.30-1.31.amzn1 Available: mysql51-server-5.1.67-1.61.amzn1.x86_64 (amzn-main) mysql-server = 5.1.67-1.61.amzn1 Error: Package: mysql-mroonga-3.02-0.el6.x86_64 (groonga) Requires: mysql = 5.1.67-1.el6_3 Installed: mysql55-5.5.30-1.31.amzn1.x86_64 (@amzn-main) mysql = 5.5.30-1.31.amzn1 Available: mysql-5.5-1.3.amzn1.noarch (amzn-main) mysql = 5.5-1.3.amzn1 Available: mysql51-5.1.67-1.61.amzn1.x86_64 (amzn-main) mysql = 5.1.67-1.61.amzn1 ...
MySQLのバージョンが違いますよと。
以下のドキュメントによると、シレっとインストールできた後で「動かない!」ってなるのを回避するために「mroonga 2.09以降」はバージョンを厳密にチェックするようになったらしい。
mroongaインストール時のMySQLとのバージョン不一致に対処する方法
じゃあ、Amazonが自分のリポジトリで用意してるのはどれかしらと確認したところ、5.1.67はあるご様子。
% yum list | grep mysql ... mysql-server.noarch 5.5-1.3.amzn1 amzn-main ... mysql51-server.x86_64 5.1.67-1.61.amzn1 @amzn-main ... mysql55-server.x86_64 5.5.30-1.31.amzn1 amzn-main ...
じゃあ、MySQLを一回止めて消してからmysql51を入れますかね。
% sudo service mysqld stop % sudo yum remove 'mysql*' % sudo yum install -y mysql51-server % sudo service mysqld start % sudo yum install -y mysql-mroonga ... Error: Package: mysql-mroonga-3.02-0.el6.x86_64 (groonga) Requires: mysql = 5.1.67-1.el6_3 Installed: mysql51-5.1.67-1.61.amzn1.x86_64 (@amzn-main) mysql = 5.1.67-1.61.amzn1 Available: mysql-5.5-1.3.amzn1.noarch (amzn-main) mysql = 5.5-1.3.amzn1 Available: mysql55-5.5.30-1.31.amzn1.x86_64 (amzn-main) mysql = 5.5.30-1.31.amzn1 Error: Package: mysql-mroonga-3.02-0.el6.x86_64 (groonga) Requires: mysql-server = 5.1.67-1.el6_3 Installed: mysql51-server-5.1.67-1.61.amzn1.x86_64 (@amzn-main) mysql-server = 5.1.67-1.61.amzn1 Available: mysql-server-5.5-1.3.amzn1.noarch (amzn-main) mysql-server = 5.5-1.3.amzn1 Available: mysql55-server-5.5.30-1.31.amzn1.x86_64 (amzn-main) mysql-server = 5.5.30-1.31.amzn1 ...
また怒られた!
確かにRequiresは「5.1.67」とかじゃなくて「5.1.67-1.el6_3」だからきっちりあってない!
じゃあ、CentOS6のBaseのリポジトリから直接取らないとダメかなということで以下を参照したけど、あれ、「5.1.66」までしかない。
http://ftp.riken.jp/Linux/caos/centos/6/os/x86_64/
っていうことでtwitterで愚痴ってみた。
AWS EC2にmroonga入れようとしたら「Requires: mysql = 5.1.67-1.el6_3」「Installed: mysql51-5.1.67-1.61.amzn1.x86_64 ([@]amzn-main)」って怒られた。厳密すぎるー。 @groonga
https://twitter.com/t_yamo/status/322552844500729856
CentOS6のリポジトリ指すようにしてみたけど、そもそもCentOS6のリポジトリは「5.1.66-2.el6_3」(not 67)なのか。RPM取ってくるか、ビルドするかしないとダメなのかしら。 #groonga #mroonga
https://twitter.com/t_yamo/status/322554586583932928
速攻で反応が。
@t_yamo amazon linuxのMySQLはパッチが当たっていて、たとえバージョンが揃っていてもhttp://packages.groonga.org で配布しているRPMとは一緒に使えないので注意してください!参考: http://spring-mt.tumblr.com/post/41102075277/remi-mysql-mroonga
https://twitter.com/ktou/status/322559370816811008
@t_yamo updatesの方で更新されているのです! http://mirror.centos.org/centos/6/updates/x86_64/Packages/ … にはmysql-server-5.1.67-1.el6_3.x86_64.rpmがあります。
https://twitter.com/ktou/status/322558659991326720
なるへそ。すみません。ふしあなさんでした。
まず、さっきのMySQLを止めて取り除きましょう。
% sudo service mysqld stop % sudo yum remove 'mysql*'
そしてUpdates用のリポジトリの設定を追加する。
Amazonから元から入っている人(「/etc/yum.repos.d/amzn-main.repo」とか)はpriorityが10ぐらいになってるのでそれよりも高く設定(=小さい値を設定)。普段は使わず、明示的に「--enablerepo」オプションをつけたときだけ有効になるよう「enabled」は「0」に設定。「releasever」も「6」固定にした。
「gpgcheck」も有効にするために明示的に「RPM-GPG-KEY-CentOS-6」を取得しておく。
% sudo wget -O /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 http://ftp.riken.jp/Linux/caos/centos/6/os/x86_64/RPM-GPG-KEY-CentOS-6 % sudo vi /etc/yum.repos.d/orig-centos-updates.repo [orig_centos_updates] name=Original-CentOS-6 - Updates baseurl=http://ftp.riken.jp/Linux/caos/centos/6/updates/$basearch/ gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 priority=1 enabled=0
さて、試してみましょう。
% sudo yum --enablerepo=orig_centos_updates install -y mysql-server % sudo service mysqld start % sudo yum install -y mysql-mroonga
イケました。
ちゃんと入っているか見てみましょう。確認の仕方は以下に記載。
http://mroonga.github.io/ja/docs/userguide.html#how-to-check-the-installation
% mysql -uroot test mysql> SHOW ENGINES; +------------+---------+------------------------------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +------------+---------+------------------------------------------------------------+--------------+------+------------+ | mroonga | YES | CJK-ready fulltext search, column store | NO | NO | NO | | MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | | CSV | YES | CSV storage engine | NO | NO | NO | | MyISAM | DEFAULT | Default engine as of MySQL 3.23 with great performance | NO | NO | NO | | InnoDB | YES | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | | MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | +------------+---------+------------------------------------------------------------+--------------+------+------------+ 6 rows in set (0.00 sec)
「mroonga」がEngineとして表示されてる。
めでたくインストールまで行けたっぽいです。ありがとう、ありがとう。
インストール時の注意
インストール手順では「mysql-server」をインストールしてからMySQLを起動し、その後「mysql-mroonga」をインストールしている。
「mysql-mroonga」インストール時に依存関係のある「mysql-server」も入るからいっぺんにやってもいいよねって進んじゃうとインストールはされるものの「SHOW ENGINES;」の段階で「mroonga」が出てこない。
っていうか、「mysql-mroonga」インストール時に以下のメッセージが出てくる。
/usr/bin/mysql -u root -e " DELETE IGNORE FROM mysql.plugin WHERE name = 'mroonga'; INSTALL PLUGIN mroonga SONAME 'ha_mroonga.so'; CREATE FUNCTION last_insert_grn_id RETURNS INTEGER soname 'ha_mroonga.so'; CREATE FUNCTION mroonga_snippet RETURNS STRING soname 'ha_mroonga.so'; CREATE FUNCTION mroonga_command RETURNS STRING soname 'ha_mroonga.so'; " ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) run the following command to register mroonga: /usr/bin/mysql -u root -e " DELETE IGNORE FROM mysql.plugin WHERE name = 'mroonga'; INSTALL PLUGIN mroonga SONAME 'ha_mroonga.so'; CREATE FUNCTION last_insert_grn_id RETURNS INTEGER soname 'ha_mroonga.so'; CREATE FUNCTION mroonga_snippet RETURNS STRING soname 'ha_mroonga.so'; CREATE FUNCTION mroonga_command RETURNS STRING soname 'ha_mroonga.so'; "
「mysql-mroonga」インストール時にMySQLにつないでEngineとして「mroonga」を登録してくれるので、手を抜いた人は自分でやってねということらしい。素直に手順通りにインストールした方が吉。