めもめも のーと

ハマったこととか、覚えたこととか

Ubuntu12.04.1をアップグレードしたらmroongaが動かなくなった件

環境

Ubuntu12.04.1 => 12.04.2


Unbuntu12.04を何も考えずにアップグレードしたら、mroongaが動かなくなったので、その時の対応メモです。

mysql> show engines;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.00 sec)

今までは↓でinstall pluginしてあげたら復活したのですが、今回はダメでした。。 UbuntuのアップグレードでMySQLのバージョンも5.5.31に上がりましたが、 どうやらmroongaはMySQLのバージョンへの依存が厳しいようです。

mysql> install plugin mroonga soname 'ha_mroonga.so';
ERROR 1126 (HY000): Can't open shared library '/usr/lib/mysql/plugin/ha_mroonga.so' (errno: 2 /usr/lib/mysql/plugin/ha_mroonga.so: cannot open shared object file: No such file or directory)

pluginの情報を確認したら残っていたので、削除。

mysql> select * from mysql.plugin;
+---------+---------------+
| name    | dl            |
+---------+---------------+
| mroonga | ha_mroonga.so |
+---------+---------------+
1 row in set (0.00 sec)

mysql> delete from mysql.plugin where name = 'mroonga';
Query OK, 1 row affected (0.02 sec)

mysql> select * from mysql.plugin;
Empty set (0.00 sec)

再びinstall pluginするもダメでした。。

mysql> install plugin mroonga soname 'ha_mroonga.so';
ERROR 1126 (HY000): Can't open shared library '/usr/lib/mysql/plugin/ha_mroonga.so' (errno: 2 /usr/lib/mysql/plugin/ha_mroonga.so: cannot open shared object file: No such file or directory)

もう一度mroonga自体をインストールから始めようとしましたが、次のようなエラーで失敗。

$ sudo apt-get -y install mysql-server-mroonga
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています               
状態情報を読み取っています... 完了
インストールすることができないパッケージがありました。おそらく、あり得
ない状況を要求したか、(不安定版ディストリビューションを使用しているの
であれば) 必要なパッケージがまだ作成されていなかったり Incoming から移
動されていないことが考えられます。
以下の情報がこの問題を解決するために役立つかもしれません:

以下のパッケージには満たせない依存関係があります:
mysql-server-mroonga : 依存: mysql-server (= 5.5.31-0ubuntu0.12.04.1) しかし、5.5.31-0ubuntu0.12.04.2 はインストールされようとしています
E: 問題を解決することができません。壊れた変更禁止パッケージがあります。

そこでこちらのサイトを参考に、mroongaのソースを取得して修正し、パッケージを作ることに。


解決編

前提

etc/apt/sources.list.d/groonga.list は次が追記されていること。

deb http://packages.groonga.org/ubuntu/ precise universe
deb-src http://packages.groonga.org/ubuntu/ precise universe
コンパイルに必要なパッケージのインストール
$ sudo apt-get build-dep mroonga
[sudo] password for xxxxx:
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています               
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
  libgroonga-dev
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 0 個。
30.7 kB のアーカイブを取得する必要があります。
この操作後に追加で 185 kB のディスク容量が消費されます。
続行しますか [Y/n]? y
取得:1 http://packages.groonga.org/ubuntu/ precise/universe libgroonga-dev i386 3.0.4-1 [30.7 kB]
30.7 kB を 0秒 で取得しました (90.0 kB/s)
以前に未選択のパッケージ libgroonga-dev を選択しています。
(データベースを読み込んでいます ... 現在 380606 個のファイルとディレクトリがインストールされています。)
(.../libgroonga-dev_3.0.4-1_i386.deb から) libgroonga-dev を展開しています...
libgroonga-dev (3.0.4-1) を設定しています ...
mroongaのソース取得
$ mkdir ~/mroonga
$ cd mroonga/
$ sudo apt-get source mroonga
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています               
状態情報を読み取っています... 完了
1,929 kB のソースアーカイブを取得する必要があります。
取得:1 http://packages.groonga.org/ubuntu/ precise/universe mroonga 3.04-1 (dsc) [1,192 B]
取得:2 http://packages.groonga.org/ubuntu/ precise/universe mroonga 3.04-1 (tar) [1,925 kB]
取得:3 http://packages.groonga.org/ubuntu/ precise/universe mroonga 3.04-1 (diff) [3,513 B]
1,929 kB を 0秒 で取得しました (3,838 kB/s)
gpgv: Tue 28 May 2013 06:06:46 PM JSTにDSA鍵ID 45499429で施された署名
gpgv: 署名を検査できません: 公開鍵が見つかりません
dpkg-source: warning: failed to verify signature on ./mroonga_3.04-1.dsc
dpkg-source: info: extracting mroonga in mroonga-3.04
dpkg-source: info: unpacking mroonga_3.04.orig.tar.gz
dpkg-source: info: applying mroonga_3.04-1.diff.gz

cotrolファイルの場所へ移動。

$ cd mroonga-3.04/debian

controlファイルを開き、以下の箇所を

mysql-server (= 5.5.31-0ubuntu0.12.04.1),

↓のようにします。

$ sudo vim control
=======================================================
Depends:
        ${misc:Depends},
        ${shlibs:Depends},
        libgroonga0 (>= 3.0.4),
        mysql-server (= 5.5.31-0ubuntu0.12.04.2),
        groonga-normalizer-mysql
=======================================================
MySQLのソース取得
$ cd ~/mroonga
$ sudo apt-get source mysql-server
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています               
状態情報を読み取っています... 完了
'mysql-server' の代わりに 'mysql-5.5' をソースパッケージとして選出しています
注意: 'mysql-5.5' パッケージは以下の場所の 'Svn' バージョン制御システムで保守されています:
svn://svn.debian.org/svn/pkg-mysql/mysql-5.5/
21.9 MB のソースアーカイブを取得する必要があります。
取得:1 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main mysql-5.5 5.5.31-0ubuntu0.12.04.2 (dsc) [3,171 B]
取得:2 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main mysql-5.5 5.5.31-0ubuntu0.12.04.2 (tar) [21.6 MB]
取得:3 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main mysql-5.5 5.5.31-0ubuntu0.12.04.2 (diff) [301 kB]                                                                                                   
21.9 MB を 1分 16秒 で取得しました (288 kB/s)                                                                                                                                                                        
gpgv: Wed 22 May 2013 06:54:35 PM JSTにRSA鍵ID A0E7D8C3で施された署名
gpgv: 署名を検査できません: 公開鍵が見つかりません
dpkg-source: warning: failed to verify signature on ./mysql-5.5_5.5.31-0ubuntu0.12.04.2.dsc
dpkg-source: info: extracting mysql-5.5 in mysql-5.5-5.5.31
dpkg-source: info: unpacking mysql-5.5_5.5.31.orig.tar.gz
dpkg-source: info: unpacking mysql-5.5_5.5.31-0ubuntu0.12.04.2.debian.tar.gz
dpkg-source: info: applying 38_scripts__mysqld_safe.sh__signals.patch
dpkg-source: info: applying 62_disable_tests.patch
dpkg-source: info: applying 70_mysql_va_list.patch
dpkg-source: info: applying 71_disable_rpl_tests.patch
dpkg-source: info: applying 72_fix_standalone_tests.patch

「公開鍵が見つかりません」と出ましたが、とりあえずそのまま進みます。

コンパイル。
$ debuild -us -uc
プログラム 'debuild' はまだインストールされていません。  次のように入力することでインストールできます:
sudo apt-get install devscripts

失敗。。debuildをインストール。

$ sudo apt-get install devscripts

完了したら、再度コンパイル。

$ sudo debuild -us -uc
groonga-normalizer-mysqlのインストール

コンパイルに成功すると、1つ上の階層に deb ができているのでインストールします。 しかし、groonga-normalizer-mysqlをインストールしていない状態でコンパイルしたら、次のようなエラーが起きました。

$ cd ..
$ sudo dpkg -i mysql-server-mroonga_3.04-1_i386.deb
以前に未選択のパッケージ mysql-server-mroonga を選択しています。
(データベースを読み込んでいます ... 現在 382202 個のファイルとディレクトリがインストールされています。)
(mysql-server-mroonga_3.04-1_i386.deb から) mysql-server-mroonga を展開しています...
dpkg: 依存関係の問題により mysql-server-mroonga の設定ができません:
mysql-server-mroonga は以下に依存 (depends) します: groonga-normalizer-mysql ...しかし:
  パッケージ groonga-normalizer-mysql はまだインストールされていません。
dpkg: mysql-server-mroonga の処理中にエラーが発生しました (--install):
依存関係の問題 - 設定を見送ります
以下のパッケージの処理中にエラーが発生しました:
mysql-server-mroonga

そこでこちらのサイトを参考に、 groonga-normalizer-mysqlをインストール。

$ sudo apt-get -y install groonga-normalizer-mysql
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています               
状態情報を読み取っています... 完了
以下のパッケージが新たにインストールされます:
  groonga-normalizer-mysql
アップグレード: 0 個、新規インストール: 1 個、削除: 0 個、保留: 1 個。
1 個のパッケージが完全にインストールまたは削除されていません。
97.8 kB のアーカイブを取得する必要があります。
この操作後に追加で 321 kB のディスク容量が消費されます。
取得:1 http://packages.groonga.org/ubuntu/ precise/universe groonga-normalizer-mysql i386 1.0.4-1 [97.8 kB]
97.8 kB を 0秒 で取得しました (409 kB/s)     
以前に未選択のパッケージ groonga-normalizer-mysql を選択しています。
(データベースを読み込んでいます ... 現在 382208 個のファイルとディレクトリがインストールされています。)
(.../groonga-normalizer-mysql_1.0.4-1_i386.deb から) groonga-normalizer-mysql を展開しています...
groonga-normalizer-mysql (1.0.4-1) を設定しています ...
mysql-server-mroonga (3.04-1) を設定しています ...
libc-bin のトリガを処理しています ...
ldconfig deferred processing now taking place
deb をインストール。
$ sudo dpkg -i mysql-server-mroonga_3.04-1_i386.deb

確認
$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 56
Server version: 5.5.31-0ubuntu0.12.04.2-log (Ubuntu)

Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.


mysql> show plugins;
+--------------------------+----------+--------------------+---------------+---------+
| Name                     | Status   | Type               | Library       | License |
+--------------------------+----------+--------------------+---------------+---------+
| binlog                   | ACTIVE   | STORAGE ENGINE     | NULL          | GPL     |
| mysql_native_password    | ACTIVE   | AUTHENTICATION     | NULL          | GPL     |
| mysql_old_password       | ACTIVE   | AUTHENTICATION     | NULL          | GPL     |
| MRG_MYISAM               | ACTIVE   | STORAGE ENGINE     | NULL          | GPL     |
| MEMORY                   | ACTIVE   | STORAGE ENGINE     | NULL          | GPL     |
| MyISAM                   | ACTIVE   | STORAGE ENGINE     | NULL          | GPL     |
| CSV                      | ACTIVE   | STORAGE ENGINE     | NULL          | GPL     |
| FEDERATED                | DISABLED | STORAGE ENGINE     | NULL          | GPL     |
| PERFORMANCE_SCHEMA       | ACTIVE   | STORAGE ENGINE     | NULL          | GPL     |
| BLACKHOLE                | ACTIVE   | STORAGE ENGINE     | NULL          | GPL     |
| ARCHIVE                  | ACTIVE   | STORAGE ENGINE     | NULL          | GPL     |
| InnoDB                   | ACTIVE   | STORAGE ENGINE     | NULL          | GPL     |
| INNODB_TRX               | ACTIVE   | INFORMATION SCHEMA | NULL          | GPL     |
| INNODB_LOCKS             | ACTIVE   | INFORMATION SCHEMA | NULL          | GPL     |
| INNODB_LOCK_WAITS        | ACTIVE   | INFORMATION SCHEMA | NULL          | GPL     |
| INNODB_CMP               | ACTIVE   | INFORMATION SCHEMA | NULL          | GPL     |
| INNODB_CMP_RESET         | ACTIVE   | INFORMATION SCHEMA | NULL          | GPL     |
| INNODB_CMPMEM            | ACTIVE   | INFORMATION SCHEMA | NULL          | GPL     |
| INNODB_CMPMEM_RESET      | ACTIVE   | INFORMATION SCHEMA | NULL          | GPL     |
| INNODB_BUFFER_PAGE       | ACTIVE   | INFORMATION SCHEMA | NULL          | GPL     |
| INNODB_BUFFER_PAGE_LRU   | ACTIVE   | INFORMATION SCHEMA | NULL          | GPL     |
| INNODB_BUFFER_POOL_STATS | ACTIVE   | INFORMATION SCHEMA | NULL          | GPL     |
| partition                | ACTIVE   | STORAGE ENGINE     | NULL          | GPL     |
| mroonga                  | ACTIVE   | STORAGE ENGINE     | ha_mroonga.so | GPL     | <= ★いました!
+--------------------------+----------+--------------------+---------------+---------+
24 rows in set (0.01 sec)

以上です。 Ubuntuはすぐに最新の更新を取得してくるからって、むやみにアップグレードしてはいけませんね。。