PHP5.2.4+MySQL5.6.67+senna(MeCab+tritonn)+Apacheの環境を作成した
PHP5.2.4+MySQL5.6.67+senna(MeCab+tritonn)+Apacheの、とても検索しやすそうな環境を作成する
準備
モジュール導入
sudo yum install wget perl perl-DBI gcc gcc-c++ ncurses-devel
ソース類保存場所に移動
cd /usr/local/src
Mysql
MySQL 5.0.67のdevel,shared,server,client
sudo wget http://downloads.mysql.com/archives/get/file/MySQL-devel-5.0.67-0.glibc23.x86_64.rpm
sudo wget http://downloads.mysql.com/archives/get/file/MySQL-shared-5.0.67-0.glibc23.x86_64.rpm
sudo wget http://downloads.mysql.com/archives/get/file/MySQL-server-5.0.67-0.glibc23.x86_64.rpm
sudo wget http://downloads.mysql.com/archives/get/file/MySQL-client-5.0.67-0.glibc23.x86_64.rpm
依存性等の事を考慮し、rpmではなくyumを使ってlocalinstallしてみる
sudo yum localinstall MySQL-devel-5.0.67-0.glibc23.x86_64.rpm --nogpgcheck
sudo yum localinstall MySQL-shared-5.0.67-0.glibc23.x86_64.rpm --nogpgcheck
sudo yum localinstall MySQL-server-5.0.67-0.glibc23.x86_64.rpm --nogpgcheck
sudo yum localinstall MySQL-client-5.0.67-0.glibc23.x86_64.rpm --nogpgcheck
めかぶ
MeCab 0.991
cd /usr/local/src
sudo wget http://mecab.googlecode.com/files/mecab-0.991.tar.gz
sudo tar xvzf mecab-0.991.tar.gz
cd mecab-0.991
sudo ./configure --prefix=/usr/local/mecab --with-charset=utf8 | sudo tee configure.log.2014-06-27
sudo make 2>&1 | sudo tee make.log.2014-06-27
sudo make install 2>&1 | sudo tee make-install.log.2014-06-27
MeCab ipadic 2.7.0
cd /usr/local/src
sudo wget http://mecab.googlecode.com/files/mecab-ipadic-2.7.0-20070801.tar.gz
sudo tar xvf mecab-ipadic-2.7.0-20070801.tar.gz
cd mecab-ipadic-2.7.0-20070801
sudo ./configure --prefix=/usr/local/mecab/ipadic --with-mecab-config=/usr/local/mecab/bin/mecab-config --with-charset=utf8 | sudo tee configure.log.2014-06-27
sudo make 2>&1 | sudo tee make.log.2014-06-27
sudo make install 2>&1 | sudo tee make-install.log.2014-06-27
Senna
Senna 1.1.5
cd /usr/local/src
sudo wget http://globalbase.dl.sourceforge.jp/senna/46945/senna-1.1.5.tar.gz
sudo tar xvf senna-1.1.5.tar.gz
cd senna-1.1.5
sudo ./configure --prefix=/usr/local/senna --with-mecab --with-mecab-config=/usr/local/mecab/bin/mecab-config --with-charset=utf8 | sudo tee configure.log.2014-06-27
sudo make 2>&1 | sudo tee make.log.2014-06-27
sudo make install 2>&1 | sudo tee make-install.log.2014-06-27
もしmake中にnfkc.cで止まったら
cd lib
sudo ../libtool --tag=CC --mode=compile \
gcc -I. -I.. -Wall -O0 -fno-strict-aliasing -g -MT nfkc.lo \
-MD -MP -MF .deps/nfkc.Plo -c -o nfkc.lo nfkc.c
# libディレクトリから戻る
cd ../
tritonn
cd /usr/local/src
sudo wget http://globalbase.dl.sourceforge.jp/tritonn/36449/tritonn-1.0.12-mysql-5.0.67.tar.gz
sudo tar xvf tritonn-1.0.12-mysql-5.0.67.tar.gz
cd tritonn-1.0.12-mysql-5.0.67
sudo ./configure --prefix=/usr/local/mysql_senna --enable-thread-safe-client --with-charset=utf8 --with-extra-charsets=all --with-readline --with-mecab=/usr/local/mecab --with-senna=/usr/local/senna | sudo tee configure.log.2014-06-27
sudo make 2>&1 | sudo tee make.log.2014-06-27
sudo make install 2>&1 | sudo tee make-install.log.2014-06-27
my.cnf作成
client、mysqldのsocketを変更する
sudo cp support-files/my-medium.cnf /etc/my.cnf
sudo vi /etc/my.cnf
my.cnf
[client]
#password = your_password
port = 3306
socket = /var/lib/mysql/mysql.sock
# Here follows entries for some specific programs
# The MySQL server
[mysqld]
port = 3306
socket = /var/lib/mysql/mysql.sock
install dbを実行する
sudo /usr/local/mysql_senna/bin/mysql_install_db --user=mysql --skip-name-resolve
自動起動設定
cd /usr/local/src/tritonn-1.0.12-mysql-5.0.67/support-files/
sudo cp -p mysql.server mysql
sudo chmod +x mysql
sudo mv mysql /etc/init.d/
cd /etc/rc2.d/
sudo ln -s ../init.d/mysql S90mysql
#一応onになっているか確認
chkconfig | grep mysql
sudo service mysql start
この際もし
Starting MySQL.. ERROR! Manager of pid-file quit without updating file.
という旨のエラーが出ていたら、以下のコマンドでmysqlが稼働していないか確認し、稼働中であればMySQLプロセスをkillする
ps ax | grep mysql
#あればkill
sudo kill [プロセス番号]
Apache
sudo yum install httpd httpd-devel libxml2 libxml2-devel
sudo chkconfig httpd on
#一応onになっているか確認
chkconfig | grep httpd
PHP
sudo wget http://museum.php.net/php5/php-5.2.4.tar.gz
sudo tar xvf php-5.2.4.tar.gz
cd php-5.2.4
sudo ./configure --with-apxs2=/usr/sbin/apxs --with-iconv --enable-mbstring --with-mysql=/usr/local/mysql_senna/bin/mysql_config --with-mysqli=/usr/local/mysql_senna/bin/mysql_config --with-libxml-dir=/usr/include/libxml2 --with-libdir=lib64
このままmakeを行うとエラーが出るので、libxml2のバージョンに準拠した表記に変更する
ext/dom/node.c
(略)
if (buf == NULL || ret < 0) {
RETVAL_FALSE;
} else {
if (mode == 0) {
ret = xmlOutputBufferGetSize(buf);
if (ret > 0) {
####ここ
RETVAL_STRINGL((char *) xmlOutputBufferGetContent(buf), ret, 1);
} else {
RETVAL_EMPTY_STRING();
}
}
}
(略)
ext/dom/documenttype.c
(略)
if (dtdptr->doc != NULL && ((intsubset = dtdptr->doc->intSubset) != NULL)) {
buff = xmlAllocOutputBuffer(NULL);
if (buff != NULL) {
xmlNodeDumpOutput (buff, NULL, (xmlNodePtr) intsubset, 0, 0, NULL);
xmlOutputBufferFlush(buff);
####ここ
strintsubset = xmlStrndup(xmlOutputBufferGetContent(buff), xmlOutputBufferGetSize(buff));
(void)xmlOutputBufferClose(buff);
ZVAL_STRING(*retval, (char *) strintsubset, 1);
return SUCCESS;
}
}
(略)
ext/simplexml/simplexml.c
(略)
if (node) {
if (node->parent && (XML_DOCUMENT_NODE == node->parent->type)) {
xmlDocDumpMemory((xmlDocPtr) sxe->document->ptr, &strval, &strval_len);
RETVAL_STRINGL((char *)strval, strval_len, 1);
xmlFree(strval);
} else {
/* Should we be passing encoding information instead of NULL? */
outbuf = xmlAllocOutputBuffer(NULL);
if (outbuf == NULL) {
RETURN_FALSE;
}
xmlNodeDumpOutput(outbuf, (xmlDocPtr) sxe->document->ptr, node, 0, 0, ((xmlDocPtr) sxe->document->ptr)->encoding);
xmlOutputBufferFlush(outbuf);
####ここ
RETVAL_STRINGL((char *)xmlOutputBufferGetContent(outbuf),xmlOutputBufferGetSize(outbuf), 1);
xmlOutputBufferClose(outbuf);
}
} else {
RETVAL_FALSE;
}
(略)
変更したらmake & make install
sudo make 2>&1 | sudo tee make.log.2014-06-27
sudo make install 2>&1 | sudo tee make-install.log.2014-06-27
php.iniファイルを作成
sudo cp php.ini-recommended /usr/local/lib/php.ini
Apacheの設定
sudo vi /etc/httpd/conf/httpd.conf
“libphp5.so”あたりで検索を行い、モジュールを読み込んでいる部分が追加されているか確認
そしてHandlerを追加し、.php拡張子のファイルに対してsethandler
(設定はおこのみで)
/etc/httpd/conf/httpd.conf
(略)
LoadModule php5_module /usr/lib64/httpd/modules/libphp5.so
(略)
#以下追記
<FilesMatch \.php$>
SetHandler application/x-httpd-php
</FilesMatch>
(略)
httpdを起動する(既に一度起動していればrestartでよい)
sudo service httpd start
MySQLのテスト
create database senna_test default character set=utf8;
use senna_test;
create table table01 (id int unsigned auto_increment not null, primary key(id), title varchar(255), body text, fulltext(body)) type=MyISAM;
insert into table01 values(null,"テストです","オレンジはorange、リンゴはappleです");
SELECT * FROM table01 WHERE MATCH(body) AGAINST('リンゴ');
これでinsertしたデータが出て来るはず!
MySQL+PHPとの連携を確認
MySQLのテストで作ったDBにphpから接続できるかを確認
test.php
<?php
$mysql = mysql_connect('127.0.0.1','root','');
if (!$mysql) {
die('failed! '.mysql_error());
}
$test = mysql_select_db('senna_test', $mysql);
if(!$test) {
die('failed!'.mysql_error());
}
$result = mysql_query("SELECT * FROM table01 WHERE MATCH(body) AGAINST('apple')");
if(!$result) {
die('failed!'.mysql_error());
} else {
var_dump(mysql_fetch_assoc($result));
}
mysql_close($mysql);
文字コードとか気をつければ表示される。はず!