読者です 読者をやめる 読者になる 読者になる

てきとう

ワーワーゆうとります

EC2にmroonga入れるよー

前提

  • サーバーはAmazon EC2(micro)だよ
  • MySQLで日本語全文検索したいよ
  • Alminium入れてるからMySQLとか勝手によろしくされてるのでMySQL触りたくないよ
  • MySQLのリコンパイルとかはなるべく勘弁だよ

確認


さよならsenna
昔にFULLTEXTやった時はmecab+senna(tritonn)だったけど、今はsennaの後続としてgroongaを使って
MySQL+groonga(+mecab)のmroongaっていうのをやるといいぞ、と。
sennaだとmysqlのリコンパイルとかあるけど mroongaはプラグインでできるみたいだし採用。


yumでgroonga、mecabmecab辞書、groonga-devel入れる
mecabはgroongaについて勝手にインストールされます。pkgconfigなかったらそれもyumでインストール。

# yumのrepoにアレする
$ sudo rpm -ivh http://packages.groonga.org/centos/groonga-release-1.1.0-1.noarch.rpm
# groonga.repoのbaseurlのreleasedserver部分を6に変更
$ sudo vim /etc/yum.repos.d/groonga.repo
# repo読み込み
$ yum makecache
# あとはインストールしていく
$ sudo yum -y install groonga
$ sudo yum -y install mecab-ipadic
$ sudo yum -y install groonga-devel

mroongaを入れる

  • mroongaのソースをゲットだよ

yumで入れられなくもないみたいだけど挫折したからソースからいく。とりあえず1.11を入れるよ。

$ cd tmp
$ wget https://github.com/downloads/mroonga/mroonga/mroonga-1.11.tar.gz
$ tar zxvf mroonga-1.11.tar.gz 
  • configure時になぜかmysqlのソースを要求されるので使用中のmysqlのソースをゲットしておくよ
$ wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.29.tar.gz/from/http://ftp.iij.ad.jp/pub/db/mysql/
$ tar zxvf mysql-5.5.29.tar.gz 
  • おまじないとしてsphinxをぶっこむ

途中でgithubからsphinxをpullしてきてる部分があるんですけど、もうそのgithubがお亡くなりになっているみたいでエラーでるのでmroonga/doc以下にソースをぶち込んでおこうね

$ wget http://pypi.python.org/packages/source/S/Sphinx/Sphinx-1.1.3.tar.gz#md5=8f55a6d4f87fc6d528120c5d1f983e98
http://pypi.python.org/pypi/Sphinx#downloads
$ cd mroonga-1.11
$ sudo mkdir doc/sphinx
$ tar zxvf /tmp/Sphinx-1.1.3.tar.gz
$ sudo mv /tmp/Sphinx-1.1.3/* /tmp/mroonga-1.11/doc/sphinx
  • いよいよconfigureかけようね

with-mysql-sourceにDLしてきたmysqlのソースを、with-mysql-configにmysql_configの場所を指定

$ ./configure --with-mysql-source=/tmp/mysql-5.5.29 --with-mysql-config=/usr/bin/mysql_config --with-default-parser=TokenMecab

終わったらmakeしようね。

makeでエラーです

/tmp/mysql-5.5.29/include/probes_mysql.h:24:33: fatal error: probes_mysql_dtrace.h: そのようなファイルやディレクトリはありません
compilation terminated.

ワッザヘール

  • つまづいているIF文を修正
$ sudo vim /tmp/mysql-5.5.29/include/probes_mysql.h

-#if defined(HAVE_DTRACE) && !defined(DISABLE_DTRACE)
-#include "probes_mysql_dtrace.h"
-#else
 #include "probes_mysql_nodtrace.h" 
-#endif
  • 気を取り直してmake
$ make 
$ sudo make install


mysqlでプラグインを読み込む
makeとかつつがなく終わったらmysqlにログインして

install plugin groonga soname 'ha_groonga.so';


プラグイン読み込みでエラーです

ERROR 1126 (HY000): Can't open shared library '/usr/lib64/mysql/plugin/ha_groonga.so' (errno: 2 /usr/lib64/mysql/plugin/ha_groonga.so: undefined symbol: my_pthread_fastmutex_init)

  • ha_groonga.soがmysql5.5.29との互換性がない

えっ、mroongaのバージョン低すぎ?と思ってmroonga3.0を入れてみたけど、そーゆー問題じゃないらしい。
disable-fast-mutexesつけてリコンパイルする。

$ ./configure --with-mysql-source=/tmp/mysql-5.5.29 --with-mysql-config=/usr/bin/mysql_config --with-default-parser=TokenMecab --disable-fast-mutexes
$ make
$ sudo make install

プラグイン読み込みでまたエラーです

ERROR 1126 (HY000): Can't open shared library '/usr/lib64/mysql/plugin/ha_groonga.so' (errno: 2 /usr/lib64/mysql/plugin/ha_groonga.so: undefined symbol: get_charset)
)

  • なんかMySQLにパッチ当てなきゃならないそうなので
$ wget http://rpms.famillecollet.com/SRPMS/mysql-5.5.28-3.remi.src.rpm
$ rpm2cpio mysql-5.5.29-1.remi.src.rpm | cpio -id
$ ls mysql-dubious-exports.patch 
$ cd /usr/bin/
$ patch -p1 < /tmp/mysql-dubious-exports.patch
  • 当てたのでまたconfigure
$ cd /tmp/mroonga-1.11
$ ./configure --with-mysql-source=/tmp/mysql-5.5.29 --with-mysql-config=/usr/bin/mysql_config --with-default-parser=TokenMecab --disable-fast-mutexes
$ make
$ make install
$ sudo make install
  • 今度こそプラグイン読め
install plugin groonga soname 'ha_groonga.so';
show engines;
Engine Support Comment Transactions XA Savepoints
InnoDB DEFAULT Supports transactions, row-level locking, and foreign keys YES YES YES
CSV YES CSV storage engine NO NO NO
MyISAM YES MyISAM storage engine NO NO NO
BLACKHOLE YES /dev/null storage engine (anything you write to it disappears) NO NO NO
MRG_MYISAM YES Collection of identical MyISAM tables NO NO NO
MEMORY YES Hash based, stored in memory, useful for temporary tables NO NO NO
groonga YES CJK-ready fulltext search, column store NO NO NO
FEDERATED NO Federated MySQL storage engine NULL NULL NULL
PERFORMANCE_SCHEMA YES Performance Schema NO NO NO
ARCHIVE YES Archive storage engine NO NO NO

勝った

それは私のおいなりさんだ

変態仮面が実写映画化ということで、めでたいですね。
個人的に主演は小栗旬さんか堂本光一さんにやってもらいたかったですが、
予告を見る限りでは、主演の鈴木さんは長身に筋肉質な体というまさに狂介君な凄くいい肉体で、期待できるのではないかと思います。楽しみです。
子供の頃大好きなマンガでしたが、まさかこんな形で大人になってから変態仮面と再会できるなんて思っていませんでした。


うちのコミックス版は引越しの時になくしてコンビニ版しか持っていないのですが、今は文庫版が出ていますね。

HENTAI KAMEN 全5巻セット (集英社-コミック版)

HENTAI KAMEN 全5巻セット (集英社-コミック版)

これですね。
4月公開を待つ間に、久しぶりに一気に読みたくなったのでこのセットを買ってみたのですが

f:id:ym1173:20130214113652p:plain


えっ?


f:id:ym1173:20130214113549p:plain


「発送ラベルを直接商品の外装パッケージに」


f:id:ym1173:20130214113554p:plain


これに?そのまま?ラベルを?



万が一在宅中に届いても、受け取りは全力で居留守使いたいと思います。

snapshotからの復元をManagement Consoleでやる

みんなEC2やってんの?どうなの?巻いてる?パスタ巻いてる?
あーもうやだこのインスタンス。あの頃に戻りたい。そんな時の手段です。
snapshotを取っておけば簡単に戻れます。

  • snapshotをとっておく

やれmysql入れただのredmine入れただの面倒な作業が完了したら記念にsnapshotをとっておきましょう。
あとで「my.cnfいじってたらmysql.sockが消えたんですけどwwwおっwwwwおっwwww」みたいになっても(実話)snapshotから復元できます。失敗は失敗として、またそこから始めてしまえばいいんです。
「今から始めてみればいいじゃない」って嵐も言ってました。
ところで、ひみつの嵐ちゃん3月終了って本当ですか?寂しいですね。

  • snapshotからvolumeを作る

f:id:ym1173:20130213153649p:plain
作る時、availavility zoneとか気をつけてください。
f:id:ym1173:20130213153713p:plain

f:id:ym1173:20130213153700p:plain

f:id:ym1173:20130213153718p:plain
deviceはデフォルトだと/dev/sdfになっていますので各自あわせてください。
特になにも考えずにこのままattachしてしまって
「for instanceId. Instance does not have a volume attached at root (/dev/sda1)」
って怒られました。つけ間違えたらdetachして正しいdeviceに書き直してattachすればよしです。


そんでこの前友人宅でアラフェスのDVD見たんですけど、J(松本くん)のソロの後ろであんまり踊れていない櫻井くんが凄くよかったです。
しかもその曲が終わったあと「踊れたー!」って満足そうに言ってて本当にかわいかったです。

ARASHI アラフェス(通常仕様) [DVD]

ARASHI アラフェス(通常仕様) [DVD]


↑嵐の商品紹介貼ってもジャケット写真じゃないからあんまおもしろくないわね。
あと他のDVDもちょっと見たんだけど「間奏中にセットの噴水をジャンプしようとして越えられずにズボンの股を濡らす櫻井くんとそれを見て歌えなくなるほど爆笑する二宮くん」もすばらしかったです。
あー嵐入りたい。

mySQLのLEFT JOIN時にONに条件を持たせるよー

たとえば

  • tbl_a
id tel address
1 03-1111-1111 東京都品川区
2 03-22222-222 東京都目黒区
  • tbl_b
id tel name
1 0322222222 安田
2 0311111111 高橋

みたいなよくわからないテーブルがあります。ここから名前と電話と住所を取り出したいのでJOINします。
これ電話番号でJOINしたいけどAにはハイフン入ってるなー。

SELECT a.address, a.tel, b.name FROM tbl_a AS a LEFT JOIN tbl_b AS b ON FIND_IN_SET(b.tel, REPLACE(a.tel,'-',''))

みんな大好きfind_in_setで解決したね。よかったね。

PHPのconfigure時にwith-pdo-mysqlしたらエラーで困った

前提

  • Mac OSX(Macportsで5.3、手動で5.1が入っているのを用途に合わせて設定ファイルで切り替えている)
  • そこの切り替え要因に手動でPHP5.2.13を入れたい
  • MySQLを使いたいのでオプションに--with-pdo-mysqlを指定する


configureする(本当はもっと色々オプションつけてるけどとりあえず主要なのだけ)

sudo ./configure --prefix=/usr/local/lib/php-5.2.13 --with-apxs2=/opt/local/apache2/bin/apxs  --enable-pdo --with-pdo-mysql=/opt/local

エラー出る

configure: error: Cannot find MySQL header files under /opt/local/.
Note that the MySQL client library is not bundled anymore!

ヘッダーファイルが見つからないよ、と。


そもそも--with-pdo-mysqlが欲しがっているPATHとは

よく「mySQLがインストールされているディレクトリのパスだよ」と説明されていますが、結局そこのパスから何が欲しいのかっていうと
mySQLがインストールされているディレクトリ以下からヘッダーファイル(includes以下)とライブラリファイル(lib以下)を探したいらしい。
今使っているmysqlは/opt/local/mysql5にインストールされているので、/opt/local/を指定すればいいはず。でもエラー。もしかして名前かなーと思い

sudo ln -s mysql5 mysql

と、シンボリックリンクを貼ってから再度configureを行ったら成功しました。
なんか前も別環境でこれでハマってた気がするんだけど気のせいかな。

※ちなみにこのあとmakeしたら別エラー出て困っているのは別のお話です

Macportsで入れたPHP5.3と直接入れたPHP5.1の共存とapacheでの使いっぷりだよー

最初にmacportsでphp5(5.3.17)を導入。macのローカルでPHP5.3+cakePHP2のプログラムを開発してました。
その後で5.1使いたくなってPHP5.1.6を直接コンパイルでぶっこみました。(でも結局使いませんでした)
そんな事すっかり忘れてしばらくローカルでの環境のいらない暮らしを続け、再び5.3+cake2の開発に戻ろうとローカルにアクセスしたらcakephpが動かない。
エラーを吐くわけでもなくじっとしてる。あれー?と思ってwebrootにphpinfoのファイルを置いてアクセスしてみたらPHPが5.1.6との表示。そりゃー動かないわー。

5.3さんはご健在なので

$ php -v
php 5.3.17

多分5.1導入時にlibphp5.soをうっかり5.1に上書きしてしまったんですねぇ。おっかないですねぇ。
という訳でとりあえず現在の5.1用phplib5.soをコピーしておいて

$ cp /opt/local/apache2/modules/libphp5.so /opt/local/apache2/modules/libphp5.1.so

macportsでもう一回php5入れたらいいんじゃないかな…という事でやってみました。

$ sudo port install php5 +postgresql +apache2 +pear

Warningが出て「port definitions are more than two weeks old, consider using selfupdate」とかなんとか。
なのでmacportsのupdateをかけてやったよ。

$ sudo port -d selfupdate
$ sudo port upgrade outdated
$ sudo port upgrade installed

するとPHP Versionは5.3.19に。アップデートされたみたいなんでapxsをアレします
別にphp入れなおさなくてもこの作業だけでいいよね多分。

$ cd /opt/local/apache2/modules
$ sudo /opt/local/apache2/bin/apxs -a -e -n "php5" libphp5.so

無事に5.3用のlibphp5.soが生成されたので httpd.confでlibphp5.soを読み込んでいるか確認。

LoadModule php5_module        modules/libphp5.so

5.1で動かしたい時はさっきのコピーした方を読み込めばいいね。

LoadModule php5_module        modules/libphp5.1.so

そんなわけで無事にapacheが5.3で動いてくれました。cakeちゃんも動きます。よかった。

本当はphpenv+php-buildで切り替えしたかったんだけどphp-buildでphpインストール失敗するから諦めた。
それはまた元気な時に試したい。

ブログに移行

はてなダイアリーからはてなブログに移行してみました。
ブクマもスターも引き継げるし、全部リダイレクトかけてくれるんですね。べんりー。
インスタの写真も呼んで来られるんですね。べんりー。

暗殺教室おもしろいですね。
http://distilleryimage10.s3.amazonaws.com/59e2ca5e26fe11e2a31922000a1fbcdc_7.jpg