wikipedia ダンプ取り込み [CENTOS de LAMP]
VMのディスク容量を増やしてよっしゃということで、取り込みに挑戦してみます。
・環境
windowsのVMware 20GB
os CentOS 5.4
1.expat-2.0.1
wget http://downloads.sourceforge.net/expat/expat-2.0.1.tar.gz
./configure
make
make install
2.xml2sql
wget http://meta.wikimedia.org/wiki/Xml2sql
tar xvfz xml2sql-0.5.tar.gz
cd xml2sql-0.5
./configure --with-expat=/usr/local/lib
make
cp xml2sql /usr/local/bin/.
3.mysql で格納先DBを作っておく
※既存DBを使うならば不要
4.MediaWiki
wget http://download.wikimedia.org/mediawiki/1.15/mediawiki-1.15.2.tar.gz
tar xvfz mediawiki-1.15.2.tar.gz
cd mediawiki-1.15.2
mysql DB名 < maintenance/tables.sql
5.データファイルのダウンロード
wget http://download.wikimedia.org/jawiki/latest/jawiki-latest-pages-meta-current.xml.bz2
bunzip jawiki-latest-pages-meta-current.xml.bz2
cat jawiki-latest-pages-meta-current.xml | sed -e 's/<redirect \/>//' | xml2sql
page.txt
revision.txt
text.txt の3点が出来ました。
6.mysqlimport で投下
mysqlimport --fields-terminated-by='\t' --default-character-set=utf8 -u ユーザ名 -p -d -L DB名 text.txt
mysqlimport --fields-terminated-by='\t' --default-character-set=utf8 -u user_hoge -p -d -L hoge_db text.txt
mysqlimport --fields-terminated-by='\t' --default-character-set=utf8 -u user_hoge -p -d -L hoge_db revision.txt
mysqlimport --fields-terminated-by='\t' --default-character-set=utf8 -u user_hoge -p -d -L hoge_db page.txt
こんな感じとなりました。
すげー時間かかるなぁ。
※※
maintenance/tables.sql を書き換えると相当早くなるようでした。
更新しないならばUNIQUE INDEXを削除と、テーブルをMyISAM指定にします。
1:tables.sqlを開く
2:UNIQUE INDEX で検索し、その行を全て削除
3:"/*$wgDBTableOptions*/" を "ENGINE = MyISAM" に一括置換
(おまけ:page, revision, text 以外どうせ使わんのなら、それ以外のCREATE TABLE文を削る)
これでトータル30分ぐらいになりました。
・環境
windowsのVMware 20GB
os CentOS 5.4
1.expat-2.0.1
wget http://downloads.sourceforge.net/expat/expat-2.0.1.tar.gz
./configure
make
make install
2.xml2sql
wget http://meta.wikimedia.org/wiki/Xml2sql
tar xvfz xml2sql-0.5.tar.gz
cd xml2sql-0.5
./configure --with-expat=/usr/local/lib
make
cp xml2sql /usr/local/bin/.
3.mysql で格納先DBを作っておく
※既存DBを使うならば不要
4.MediaWiki
wget http://download.wikimedia.org/mediawiki/1.15/mediawiki-1.15.2.tar.gz
tar xvfz mediawiki-1.15.2.tar.gz
cd mediawiki-1.15.2
mysql DB名 < maintenance/tables.sql
5.データファイルのダウンロード
wget http://download.wikimedia.org/jawiki/latest/jawiki-latest-pages-meta-current.xml.bz2
bunzip jawiki-latest-pages-meta-current.xml.bz2
cat jawiki-latest-pages-meta-current.xml | sed -e 's/<redirect \/>//' | xml2sql
page.txt
revision.txt
text.txt の3点が出来ました。
6.mysqlimport で投下
mysqlimport --fields-terminated-by='\t' --default-character-set=utf8 -u ユーザ名 -p -d -L DB名 text.txt
mysqlimport --fields-terminated-by='\t' --default-character-set=utf8 -u user_hoge -p -d -L hoge_db text.txt
mysqlimport --fields-terminated-by='\t' --default-character-set=utf8 -u user_hoge -p -d -L hoge_db revision.txt
mysqlimport --fields-terminated-by='\t' --default-character-set=utf8 -u user_hoge -p -d -L hoge_db page.txt
こんな感じとなりました。
すげー時間かかるなぁ。
※※
maintenance/tables.sql を書き換えると相当早くなるようでした。
更新しないならばUNIQUE INDEXを削除と、テーブルをMyISAM指定にします。
1:tables.sqlを開く
2:UNIQUE INDEX で検索し、その行を全て削除
3:"/*$wgDBTableOptions*/" を "ENGINE = MyISAM" に一括置換
(おまけ:page, revision, text 以外どうせ使わんのなら、それ以外のCREATE TABLE文を削る)
これでトータル30分ぐらいになりました。
VMのディスク拡張 [CENTOS de LAMP]
開発環境のVMwareのディスクの容量を増やしました。
※ローカル win XP
※VMware centos 5.4
元々8GBでやっていたんですが、wikipedia ダンプを取り込んだDBを
作成して検証する作業があったので、容量を増やさねばならなくなりました。
けっこう手こずったのでメモします。
0:VMが起動してたら落とす
1:vmware-vdiskmanager.exe とやらを使う。
自分の場合はココ。C:\Program Files\VMware\VMware Server\
コマンドプロンプトより、
C:\Program Files\VMware\VMware Server\vmware-vdiskmanager.exe -x 20Gb VMバーチャルディスク名.vmdk
ちょっとかかるけど、ファイルが20GBまでこれで増える。
でもこれだけじゃダメみたいで、パーティションの設定をします。
2:VM起動
3:fdiskでパーティションの設定
/sbin/fdisk /dev/hda
Command (m for help): ⇒ n
Command action ⇒ p
Partition number (1-4): ⇒ 3
First cylinder (1045-1305, default 1045): ⇒ 1045
Last cylinder or +size or +sizeM or +sizeK (メモし忘れた・・): ⇒ デフォルトの数値
Command (m for help): ⇒ t
Partition number (1-4): ⇒ 3
Hex code (type L to list codes): ⇒ 8e
Command (m for help): ⇒ w
で終わり
4:reboot
5:確認
/sbin/fdisk -l なんとなく増えてたからOK
6:以下全然わからんが必要コマンド
/usr/sbin/pvcreate /dev/hda3
/usr/sbin/vgextend VolGroup00 /dev/hda3
/usr/sbin/lvextend -L +2G /dev/VolGroup00/LogVol00
/sbin/resize2fs /dev/VolGroup00/LogVol00
df -k で増えてれば多分OK
※ローカル win XP
※VMware centos 5.4
元々8GBでやっていたんですが、wikipedia ダンプを取り込んだDBを
作成して検証する作業があったので、容量を増やさねばならなくなりました。
けっこう手こずったのでメモします。
0:VMが起動してたら落とす
1:vmware-vdiskmanager.exe とやらを使う。
自分の場合はココ。C:\Program Files\VMware\VMware Server\
コマンドプロンプトより、
C:\Program Files\VMware\VMware Server\vmware-vdiskmanager.exe -x 20Gb VMバーチャルディスク名.vmdk
ちょっとかかるけど、ファイルが20GBまでこれで増える。
でもこれだけじゃダメみたいで、パーティションの設定をします。
2:VM起動
3:fdiskでパーティションの設定
/sbin/fdisk /dev/hda
Command (m for help): ⇒ n
Command action ⇒ p
Partition number (1-4): ⇒ 3
First cylinder (1045-1305, default 1045): ⇒ 1045
Last cylinder or +size or +sizeM or +sizeK (メモし忘れた・・): ⇒ デフォルトの数値
Command (m for help): ⇒ t
Partition number (1-4): ⇒ 3
Hex code (type L to list codes): ⇒ 8e
Command (m for help): ⇒ w
で終わり
4:reboot
5:確認
/sbin/fdisk -l なんとなく増えてたからOK
6:以下全然わからんが必要コマンド
/usr/sbin/pvcreate /dev/hda3
/usr/sbin/vgextend VolGroup00 /dev/hda3
/usr/sbin/lvextend -L +2G /dev/VolGroup00/LogVol00
/sbin/resize2fs /dev/VolGroup00/LogVol00
df -k で増えてれば多分OK
Zend_db Mssqlの不具合? [CENTOS de LAMP]
CentOS5 - php5.2 - windows server の SQL server2005・・・で
Webアプリ開発しています。Zend_Frameworkってーのも使っています。
SQL Server の場合のZend_Paginatorってバグってね?ってなって調べたんですが
全然出てきませんでした。英語読めないし。
なんか、複数のページにまたいで出てきてしまうものがいる。
SQL 見てみた。 全23件、5件ずつ、2ページ目の場合、
SELECT * FROM (
SELECT TOP 5 * FROM (
SELECT TOP 10 xxx FROM XXXX
WHERE xxx = yyyy
ORDER BY 1 desc
) AS inner_tbl ORDER BY 1 ASC
) AS outer_tbl ORDER BY 1 desc
まぁこれはいいんですが、5ページ目の場合、
SELECT * FROM (
SELECT TOP 5 * FROM (
SELECT TOP 25 xxx FROM XXXX
WHERE xxx = yyyy
ORDER BY 1 desc
) AS inner_tbl ORDER BY 1 ASC
) AS outer_tbl ORDER BY 1 desc
うーーん、こりゃぁ確かに最後おかしくなるわな。
5ページ目って3件じゃなくて5件取れてしまう。
TOP25もおかしいし、outer_tblのTOP5もおかしいわ!
実際にこのSQLにしているのは、
Zend/Db/Adapter/Pdo/Mssql.php の limit functionであって、
元のSQLは↓の分で、
SELECT xxx FROM XXXX
WHERE xxx = yyyy
ORDER BY 1 desc
こんな感じです。
必死にinner_tblとouter_tblを結合させて頑張ってる。
がダメじゃねーか。 TOPの件数ちゃんと変更しろや。
ライブラリ探すのもパッチあるかもしれないけど探すのめんどいから
直接男前に書き換えてやりました。
幸いにも SQL Server2005なので、ROW_NUMBER() と betweenを使って
同様のページング処理をする事ができます。
Zend/Db/Adapter/Pdo/Mssql.php limit functionを以下に変更
public function limit($sql, $count, $offset = 0)
{
$count = intval($count);
$offset = intval($offset);
$orderby = stristr($sql, 'ORDER BY');
$sql = str_replace($orderby, '', $sql);
$sql = preg_replace(
'/^SELECT\s+(DISTINCT\s)?/i',
'SELECT row_number() over('. $orderby .') as row, ',
$sql
);
$sql = 'SELECT * FROM ('.$sql.') innertable ';
$sql = $sql.'where row between '. ($offset+1). ' and ' . ($offset+$count);
return $sql;
}
これだけ!だいぶ短くなりました。
これでちゃんと取れるようになった。
ホントはちゃんと派生させてオーバーライドする方がいいけど、めんどくせ。
この動作環境もレアだろうけども、同じ問題に直面してる人あまりいねーのかな?
Webアプリ開発しています。Zend_Frameworkってーのも使っています。
SQL Server の場合のZend_Paginatorってバグってね?ってなって調べたんですが
全然出てきませんでした。英語読めないし。
なんか、複数のページにまたいで出てきてしまうものがいる。
SQL 見てみた。 全23件、5件ずつ、2ページ目の場合、
SELECT * FROM (
SELECT TOP 5 * FROM (
SELECT TOP 10 xxx FROM XXXX
WHERE xxx = yyyy
ORDER BY 1 desc
) AS inner_tbl ORDER BY 1 ASC
) AS outer_tbl ORDER BY 1 desc
まぁこれはいいんですが、5ページ目の場合、
SELECT * FROM (
SELECT TOP 5 * FROM (
SELECT TOP 25 xxx FROM XXXX
WHERE xxx = yyyy
ORDER BY 1 desc
) AS inner_tbl ORDER BY 1 ASC
) AS outer_tbl ORDER BY 1 desc
うーーん、こりゃぁ確かに最後おかしくなるわな。
5ページ目って3件じゃなくて5件取れてしまう。
TOP25もおかしいし、outer_tblのTOP5もおかしいわ!
実際にこのSQLにしているのは、
Zend/Db/Adapter/Pdo/Mssql.php の limit functionであって、
元のSQLは↓の分で、
SELECT xxx FROM XXXX
WHERE xxx = yyyy
ORDER BY 1 desc
こんな感じです。
必死にinner_tblとouter_tblを結合させて頑張ってる。
がダメじゃねーか。 TOPの件数ちゃんと変更しろや。
ライブラリ探すのもパッチあるかもしれないけど探すのめんどいから
直接男前に書き換えてやりました。
幸いにも SQL Server2005なので、ROW_NUMBER() と betweenを使って
同様のページング処理をする事ができます。
Zend/Db/Adapter/Pdo/Mssql.php limit functionを以下に変更
public function limit($sql, $count, $offset = 0)
{
$count = intval($count);
$offset = intval($offset);
$orderby = stristr($sql, 'ORDER BY');
$sql = str_replace($orderby, '', $sql);
$sql = preg_replace(
'/^SELECT\s+(DISTINCT\s)?/i',
'SELECT row_number() over('. $orderby .') as row, ',
$sql
);
$sql = 'SELECT * FROM ('.$sql.') innertable ';
$sql = $sql.'where row between '. ($offset+1). ' and ' . ($offset+$count);
return $sql;
}
これだけ!だいぶ短くなりました。
これでちゃんと取れるようになった。
ホントはちゃんと派生させてオーバーライドする方がいいけど、めんどくせ。
この動作環境もレアだろうけども、同じ問題に直面してる人あまりいねーのかな?
LINUX勉強 ~その11~ centosとLAMP環境 [CENTOS de LAMP]
○senna のインストール2
まぁ当然似たような境遇の方が多いわけで、sennaってやつにたどりつきました。
インストールしてみます。
1:MeCabのインストール
http://sourceforge.net/projects/mecab/files/ 0.98本体 2.7.0辞書
2:sennaのインストール
http://sourceforge.jp/projects/senna/releases/ 1.1.4
3:Tritonnのインストール
の順で行います。
1:MeCabのインストール
なにかはよくわからん。必須との事なのでいれる。
参考は こちら
1.1:ダウンロードと解凍
相変わらずダウンロードしておいて /tmp/に置きます。
mecab-0.98.tar.gz
mecab-ipadic-2.7.0-20070801.tar.gz
両方とも tar xvzf で解凍しておきます。
1.2:configure と make と make install
cd mecab-0.98
./configure --prefix=/usr/local/ --with-charset=utf8
make
make install
cd ../mecab-ipadic-2.7.0-20070801
./configure --prefix=/usr/local/ --with-charset=utf8
make
make install
1.3:おまじない?
いらないかも
/usr/local/libexec/mecab/mecab-dict-index -c utf8
1.4:辞書確認
適当なパスで mecab
空のプロンプトになるから、日本語をうつ。
# mecab
空のプロンプトになるから、日本語をうつ。
空 名詞,一般,*,*,*,*,空,ソラ,ソラ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
プロンプト 名詞,一般,*,*,*,*,*
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
なる 動詞,自立,*,*,五段・ラ行,基本形,なる,ナル,ナル
から 助詞,接続助詞,*,*,*,*,から,カラ,カラ
、 記号,読点,*,*,*,*,、,、,、
日本語 名詞,一般,*,*,*,*,日本語,ニホンゴ,ニホンゴ
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
うつ 動詞,自立,*,*,五段・タ行,基本形,うつ,ウツ,ウツ
。 記号,句点,*,*,*,*,。,。,。
EOS
正常完了。Ctrl+Cで終了
2:sennaのインストール
1.1:ダウンロードと解凍
相変わらずダウンロードしておいて /tmp/に置きます。
senna-1.1.4.tar.gz
tar xvzf で解凍しておきます。
1.2:configure と make と make install
cd senna-1.1.4
./configure --prefix=/usr/local/
make
make install
3:Tritonnのインストール
3.1:ダウンロードと解凍
cd /tmp/
たまにはwgetで落してみる
wget http://osdn.dl.sourceforge.jp/tritonn/36449/tritonn-1.0.12-mysql-5.0.67.tar.gz
tar xvzf tritonn-1.0.12-mysql-5.0.67.tar.gz
3.2:configure と make と make install
cd tritonn-1.0.12-mysql-5.0.67
./configure
--prefix=/usr/local/mysqltri
--libexecdir=/usr/local/mysqtri/bin
--localstatedir=/home/mysqltri/data
--enable-thread-safe-client
--enable-assembler
--enable-local-infile
--with-charset=utf8
--with-collation=utf8_general_ci
--with-extra-charsets=all
--with-pic --with-pthread
--with-mysqld-user=mysql
--with-innodb
--with-mecab=/usr/local
--with-senna=/usr/local
※ mecab と senna は、/usr/localではなく /usr/にいれるべきだったらしい。。。。
make
make install
※参照 http://xavier-logs.blog.so-net.ne.jp/2009-11-09-2
3.3:設定
cd /usr/local/
chown -R mysql:mysql mysqltri
cd mysqltri
mkdir var
chown -R mysql:mysql var
3.4:my.cnf修正
vi /etc/my.cnf
innodb_data_home_dir = /usr/local/mysqltri/var/
innodb_log_group_home_dir = /usr/local/mysqltri/var/
3.5:mysql起動ファイル
vi /etc/init.d/mysql
mysql をmysqltriに修正
3.6:初期化
/usr/local/mysqltri/bin/mysql_install_db --user=mysql
※注意点
mysql.server ファイルと、my.cnfファイルは元々インストール済の
設定ファイルを使うと痛い目にあう。
てゆうか起動しない。
ちゃんと tritonn版のをコピーしないとNGでした。
3.7:起動
/etc/init.d/mysql start
はいOK!
4:phpのインストールし直し
configure時に、mysqlのパスだけ mysqltriに修正
一度、make clean, make distclean を忘れずに。
5:やってみる
CREATE TABLE t1 (c1 TEXT, FULLTEXT INDEX ft USING NGRAM (c1)) ENGINE = MyISAM DEFAULT CHARSET utf8;
SHOW SENNA STATUS\G
適当にデータをつっこみ、
SELECT * FROM t1 WHERE MATCH(c1) AGAINST("キーワード1 キーワード2" in boolean mode);
※boolean modeは日本語検索で必ずつける
※キーワードはスペース区切り
※デフォルトだと or検索なので、and検索したい時はキーワードの頭に「+」(プラス)をつける。
まぁ当然似たような境遇の方が多いわけで、sennaってやつにたどりつきました。
インストールしてみます。
1:MeCabのインストール
http://sourceforge.net/projects/mecab/files/ 0.98本体 2.7.0辞書
2:sennaのインストール
http://sourceforge.jp/projects/senna/releases/ 1.1.4
3:Tritonnのインストール
の順で行います。
1:MeCabのインストール
なにかはよくわからん。必須との事なのでいれる。
参考は こちら
1.1:ダウンロードと解凍
相変わらずダウンロードしておいて /tmp/に置きます。
mecab-0.98.tar.gz
mecab-ipadic-2.7.0-20070801.tar.gz
両方とも tar xvzf で解凍しておきます。
1.2:configure と make と make install
cd mecab-0.98
./configure --prefix=/usr/local/ --with-charset=utf8
make
make install
cd ../mecab-ipadic-2.7.0-20070801
./configure --prefix=/usr/local/ --with-charset=utf8
make
make install
1.3:おまじない?
いらないかも
/usr/local/libexec/mecab/mecab-dict-index -c utf8
1.4:辞書確認
適当なパスで mecab
空のプロンプトになるから、日本語をうつ。
# mecab
空のプロンプトになるから、日本語をうつ。
空 名詞,一般,*,*,*,*,空,ソラ,ソラ
の 助詞,連体化,*,*,*,*,の,ノ,ノ
プロンプト 名詞,一般,*,*,*,*,*
に 助詞,格助詞,一般,*,*,*,に,ニ,ニ
なる 動詞,自立,*,*,五段・ラ行,基本形,なる,ナル,ナル
から 助詞,接続助詞,*,*,*,*,から,カラ,カラ
、 記号,読点,*,*,*,*,、,、,、
日本語 名詞,一般,*,*,*,*,日本語,ニホンゴ,ニホンゴ
を 助詞,格助詞,一般,*,*,*,を,ヲ,ヲ
うつ 動詞,自立,*,*,五段・タ行,基本形,うつ,ウツ,ウツ
。 記号,句点,*,*,*,*,。,。,。
EOS
正常完了。Ctrl+Cで終了
2:sennaのインストール
1.1:ダウンロードと解凍
相変わらずダウンロードしておいて /tmp/に置きます。
senna-1.1.4.tar.gz
tar xvzf で解凍しておきます。
1.2:configure と make と make install
cd senna-1.1.4
./configure --prefix=/usr/local/
make
make install
3:Tritonnのインストール
3.1:ダウンロードと解凍
cd /tmp/
たまにはwgetで落してみる
wget http://osdn.dl.sourceforge.jp/tritonn/36449/tritonn-1.0.12-mysql-5.0.67.tar.gz
tar xvzf tritonn-1.0.12-mysql-5.0.67.tar.gz
3.2:configure と make と make install
cd tritonn-1.0.12-mysql-5.0.67
./configure
--prefix=/usr/local/mysqltri
--libexecdir=/usr/local/mysqtri/bin
--localstatedir=/home/mysqltri/data
--enable-thread-safe-client
--enable-assembler
--enable-local-infile
--with-charset=utf8
--with-collation=utf8_general_ci
--with-extra-charsets=all
--with-pic --with-pthread
--with-mysqld-user=mysql
--with-innodb
--with-mecab=/usr/local
--with-senna=/usr/local
※ mecab と senna は、/usr/localではなく /usr/にいれるべきだったらしい。。。。
make
make install
※参照 http://xavier-logs.blog.so-net.ne.jp/2009-11-09-2
3.3:設定
cd /usr/local/
chown -R mysql:mysql mysqltri
cd mysqltri
mkdir var
chown -R mysql:mysql var
3.4:my.cnf修正
vi /etc/my.cnf
innodb_data_home_dir = /usr/local/mysqltri/var/
innodb_log_group_home_dir = /usr/local/mysqltri/var/
3.5:mysql起動ファイル
vi /etc/init.d/mysql
mysql をmysqltriに修正
3.6:初期化
/usr/local/mysqltri/bin/mysql_install_db --user=mysql
※注意点
mysql.server ファイルと、my.cnfファイルは元々インストール済の
設定ファイルを使うと痛い目にあう。
てゆうか起動しない。
ちゃんと tritonn版のをコピーしないとNGでした。
3.7:起動
/etc/init.d/mysql start
はいOK!
4:phpのインストールし直し
configure時に、mysqlのパスだけ mysqltriに修正
一度、make clean, make distclean を忘れずに。
5:やってみる
CREATE TABLE t1 (c1 TEXT, FULLTEXT INDEX ft USING NGRAM (c1)) ENGINE = MyISAM DEFAULT CHARSET utf8;
SHOW SENNA STATUS\G
適当にデータをつっこみ、
SELECT * FROM t1 WHERE MATCH(c1) AGAINST("キーワード1 キーワード2" in boolean mode);
※boolean modeは日本語検索で必ずつける
※キーワードはスペース区切り
※デフォルトだと or検索なので、and検索したい時はキーワードの頭に「+」(プラス)をつける。
LINUX勉強 ~その10~ centosとLAMP環境 [CENTOS de LAMP]
○senna のインストール1
mysqlにもどうやらFULLTEXTカタログ的なものがあるらしい。
これをSQL Serverで知った時はすごかった。
「検索はえぇぇぇぇ!!」とSQL Serverを初めて見直したもんだ。
だが、どうも日本語全文検索など、若干弱いようだ。
テーブルエンジンも MyISAMでないとNGとか、InnoDBをデフォで考えていたので
これは応える。トランザクションがテーブルロックしかできんとか。
しかもいちいちロック構文が必要?。めんどくせー。
だが、utf8だったらひらがな、カタカナ、全角半角等のゆらぎは同じと認識してくれるらしい。
(ならば何故日本語の識別がうまくできんのだ・・・。)
しかし、一応あるのだからと使ってみる事にしました。
既存の詳細テーブルを MyISAMに変えるわけにはいかんので、
検索用のテーブルを作成しました。
CREATE TABLE テーブル名 (
`id` INT NOT NULL COMMENT '識別子ID' ,
`search_text` TEXT NOT NULL COMMENT '検索用テキスト' ,
PRIMARY KEY (`id`) )
ENGINE = MyISAM;
CREATE FULLTEXT INDEX `tbl_FT1` ON テーブル名 (`search_text` ASC);
こんな感じですね。
で、詳細テーブルの更新があったら、都度検索用テーブルを更新しようと
企みました。
で、テーブルにはこんな感じでデータをつっこみました。
1 hogehogehogehoge
2 あああ 本日は晴天なり
3 hogeあいうえおかきくけこ
4 hoge てててて
SELECT * FROM テーブル
WHERE MATCH(search_text) AGAINST('hoge');
これだと、4しかひっかかりませんでした。
まぁ当然です。英単語と違ってスペースないからね。
やりたい事は、SELECT * FROM テーブル WHERE search_text like '%hoge%';
なので、1,3,4が帰ってきてほしい。
さてどうしたものか、、、と考えてて、sennaがヒットしました。
めんどくせーなー。
※
/etc/my.cnf を修正しておく。
[mysqld]
ft_min_word_len=1
mysqlにもどうやらFULLTEXTカタログ的なものがあるらしい。
これをSQL Serverで知った時はすごかった。
「検索はえぇぇぇぇ!!」とSQL Serverを初めて見直したもんだ。
だが、どうも日本語全文検索など、若干弱いようだ。
テーブルエンジンも MyISAMでないとNGとか、InnoDBをデフォで考えていたので
これは応える。トランザクションがテーブルロックしかできんとか。
しかもいちいちロック構文が必要?。めんどくせー。
だが、utf8だったらひらがな、カタカナ、全角半角等のゆらぎは同じと認識してくれるらしい。
(ならば何故日本語の識別がうまくできんのだ・・・。)
しかし、一応あるのだからと使ってみる事にしました。
既存の詳細テーブルを MyISAMに変えるわけにはいかんので、
検索用のテーブルを作成しました。
CREATE TABLE テーブル名 (
`id` INT NOT NULL COMMENT '識別子ID' ,
`search_text` TEXT NOT NULL COMMENT '検索用テキスト' ,
PRIMARY KEY (`id`) )
ENGINE = MyISAM;
CREATE FULLTEXT INDEX `tbl_FT1` ON テーブル名 (`search_text` ASC);
こんな感じですね。
で、詳細テーブルの更新があったら、都度検索用テーブルを更新しようと
企みました。
で、テーブルにはこんな感じでデータをつっこみました。
1 hogehogehogehoge
2 あああ 本日は晴天なり
3 hogeあいうえおかきくけこ
4 hoge てててて
SELECT * FROM テーブル
WHERE MATCH(search_text) AGAINST('hoge');
これだと、4しかひっかかりませんでした。
まぁ当然です。英単語と違ってスペースないからね。
やりたい事は、SELECT * FROM テーブル WHERE search_text like '%hoge%';
なので、1,3,4が帰ってきてほしい。
さてどうしたものか、、、と考えてて、sennaがヒットしました。
めんどくせーなー。
※
/etc/my.cnf を修正しておく。
[mysqld]
ft_min_word_len=1
LINUX勉強 ~その9~ centosとLAMP環境 [CENTOS de LAMP]
とりあえず、一通り動くようになりました。
ちょっとズレますが、memcache というのをいれると、ある程度のDB情報等を
メモリキャッシュに保存してくれる(?)ようで、ある程度サクサクになるそうです。
で、インストールしたのでメモります。
1:memcachedをyumでインストールするために、yumリポジトリに追加する
cd /etc/yum.repos.d
wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
rpm -Uvh rpmforge-release-0.3.6-1.el5.rf.i386.rpm
vi rpmforge.repo
enabled = 1 になっているので、0にして保存
yum --enablerepo=rpmforge list *mem* で、 「memcached.i386」が出てくればOK
2:yumでインストール
yum -y --enablerepo=rpmforge install memcached.i386
/etc/rc.d/init.d/memcached があればOK。設定ファイルは変更不要
3:memcachedをphpで使えるようにする
※これは php5.2.10以上で必要となる。きっとおまじない。
具体的な内容は不明。
cd /usr/local/lib/php/
rm -rf .channels
pecl channel-update pecl.php.net
pear channel-update pear.php.net
ll -a で channelsが復活してるのを確認
4:必要パッケージインストール
yum -y install libevent (多分既にある)
yum -y install libevent-devel
5:インストール
pecl install memcache (memcache「d」じゃないから注意)
Build process completed successfully
Installing '/usr/local/lib/php/extensions/no-debug-non-zts-20060613/memcache.so'
install ok: channel://pecl.php.net/memcache-2.2.5
configuration option "php_ini" is not set to php.ini location
You should add "extension=memcache.so" to php.ini
というメッセージが出るので、php.iniを開いて付加する。
また、/usr/local/lib/php/ext フォルダが出来ているはず
6:php.iniの修正
1:extension=memcache.so 追加
2:extension_dir = "/usr/local/lib/php/ext" に変更
7:ファイルコピー
cd /usr/local/lib/php
mkdir ext
chown -R root:root ext
cd ext
cp ../extensions/no-debug-non-zts-20060613/memcache.so .
8:apache再起動
/etc/rc.d/init.d/httpd reload
9:確認
php -i | grep memcache で warningが出なければOK
memcache
memcache support => enabled
memcache.allow_failover => 1 => 1
memcache.chunk_size => 8192 => 8192
memcache.default_port => 11211 => 11211
memcache.default_timeout_ms => 1000 => 1000
memcache.hash_function => crc32 => crc32
memcache.hash_strategy => standard => standard
memcache.max_failover_attempts => 20 => 20
Registered save handlers => files user sqlite memcache
10:動くようにしとく
chkconfig memcached on
多分これでOK。
memcache確認phpとか、ぐぐるとけっこう出てくるので適当に使ってみてはいOK!
ちょっとズレますが、memcache というのをいれると、ある程度のDB情報等を
メモリキャッシュに保存してくれる(?)ようで、ある程度サクサクになるそうです。
で、インストールしたのでメモります。
1:memcachedをyumでインストールするために、yumリポジトリに追加する
cd /etc/yum.repos.d
wget http://dag.wieers.com/rpm/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
rpm -Uvh rpmforge-release-0.3.6-1.el5.rf.i386.rpm
vi rpmforge.repo
enabled = 1 になっているので、0にして保存
yum --enablerepo=rpmforge list *mem* で、 「memcached.i386」が出てくればOK
2:yumでインストール
yum -y --enablerepo=rpmforge install memcached.i386
/etc/rc.d/init.d/memcached があればOK。設定ファイルは変更不要
3:memcachedをphpで使えるようにする
※これは php5.2.10以上で必要となる。きっとおまじない。
具体的な内容は不明。
cd /usr/local/lib/php/
rm -rf .channels
pecl channel-update pecl.php.net
pear channel-update pear.php.net
ll -a で channelsが復活してるのを確認
4:必要パッケージインストール
yum -y install libevent (多分既にある)
yum -y install libevent-devel
5:インストール
pecl install memcache (memcache「d」じゃないから注意)
Build process completed successfully
Installing '/usr/local/lib/php/extensions/no-debug-non-zts-20060613/memcache.so'
install ok: channel://pecl.php.net/memcache-2.2.5
configuration option "php_ini" is not set to php.ini location
You should add "extension=memcache.so" to php.ini
というメッセージが出るので、php.iniを開いて付加する。
また、/usr/local/lib/php/ext フォルダが出来ているはず
6:php.iniの修正
1:extension=memcache.so 追加
2:extension_dir = "/usr/local/lib/php/ext" に変更
7:ファイルコピー
cd /usr/local/lib/php
mkdir ext
chown -R root:root ext
cd ext
cp ../extensions/no-debug-non-zts-20060613/memcache.so .
8:apache再起動
/etc/rc.d/init.d/httpd reload
9:確認
php -i | grep memcache で warningが出なければOK
memcache
memcache support => enabled
memcache.allow_failover => 1 => 1
memcache.chunk_size => 8192 => 8192
memcache.default_port => 11211 => 11211
memcache.default_timeout_ms => 1000 => 1000
memcache.hash_function => crc32 => crc32
memcache.hash_strategy => standard => standard
memcache.max_failover_attempts => 20 => 20
Registered save handlers => files user sqlite memcache
10:動くようにしとく
chkconfig memcached on
多分これでOK。
memcache確認phpとか、ぐぐるとけっこう出てくるので適当に使ってみてはいOK!
LINUX勉強 ~その8~ centosとLAMP環境 [CENTOS de LAMP]
CentOS 5.4 インストール時のキャプチャを撮りました。
1:そのまま次へを押下すればよし
2:日本人なら日本語を選んでおく
3:日本人なら日本語を選んでおく 英語KBの方なら英語でも。
4:フォーマットパターン。 どうせ全部初期化するからドライブ全部初期化を選んだ。
5:DHCPなんて使わないんで、サーバ名?ホスト名?を入力しておいた
6:日本在住なら「アジア/東京」選んどけ
7:root パスワード入力
8:ここが重要!
・Desktop - GNOME とかデフォルトチェックを外す。GUI なんて男前に使わない選択。
「今すぐカスタマイズする」を選択して、「次へ」を選択
9:左側の「アプリケーション」から「テキストベースのインターネット」
こんなのいらないからチェック外す。
10:ちょー重要!
左側の「開発」から「開発ツール」 のチェックをつける。
これないとソースからインストールしたい時いろいろエラーになってしまう。
11:左側の「ベースシステム」から「システムツール」 のチェックをつける。
右下の「オプションパッケージ」を選択する。
12:「sysstat~~~ごにょごにょ」のチェックをつける。
いれておいた方がいいらしい。
13:果報は寝て待て
あとは勝手にここまでくるはず。
1:そのまま次へを押下すればよし
2:日本人なら日本語を選んでおく
3:日本人なら日本語を選んでおく 英語KBの方なら英語でも。
4:フォーマットパターン。 どうせ全部初期化するからドライブ全部初期化を選んだ。
5:DHCPなんて使わないんで、サーバ名?ホスト名?を入力しておいた
6:日本在住なら「アジア/東京」選んどけ
7:root パスワード入力
8:ここが重要!
・Desktop - GNOME とかデフォルトチェックを外す。GUI なんて男前に使わない選択。
「今すぐカスタマイズする」を選択して、「次へ」を選択
9:左側の「アプリケーション」から「テキストベースのインターネット」
こんなのいらないからチェック外す。
10:ちょー重要!
左側の「開発」から「開発ツール」 のチェックをつける。
これないとソースからインストールしたい時いろいろエラーになってしまう。
11:左側の「ベースシステム」から「システムツール」 のチェックをつける。
右下の「オプションパッケージ」を選択する。
12:「sysstat~~~ごにょごにょ」のチェックをつける。
いれておいた方がいいらしい。
13:果報は寝て待て
あとは勝手にここまでくるはず。
LINUX勉強 ~その7~ centosとLAMP環境 [CENTOS de LAMP]
configureのパラメータ系をおさらい。
1:apache 2.2.14
./configure \
--enable-so \
--enable-rewrite \
--enable-rewrite=shared \
--enable-ssl \
--with-ssl=/usr/include/openssl/ \
--enable-ssl=shared \
--enable-auth_digest=shared
2:mysql 5.1.40
./configure
--with-charset=utf8
--with-extra-charsets=all
--with-mysqld-user=mysql
--with-innodb
--prefix=/usr/local/mysql
3:php 5.2.11
./configure \
--with-apxs2=/usr/local/apache2/bin/apxs \
--with-mysql=/usr/local/mysql \
--with-pdo-mysql=/usr/local/mysql \
--with-jpeg-dir=/usr/local/lib \
--with-png-dir=/usr/lib \
--with-zlib-dir=/usr/lib \
--with-zlib \
--enable-mbstring \
--enable-mbregex \
--enable-zend-multibyte \
--with-gd \
--with-mcrypt \
--with-openssl=shared
1:apache 2.2.14
./configure \
--enable-so \
--enable-rewrite \
--enable-rewrite=shared \
--enable-ssl \
--with-ssl=/usr/include/openssl/ \
--enable-ssl=shared \
--enable-auth_digest=shared
2:mysql 5.1.40
./configure
--with-charset=utf8
--with-extra-charsets=all
--with-mysqld-user=mysql
--with-innodb
--prefix=/usr/local/mysql
3:php 5.2.11
./configure \
--with-apxs2=/usr/local/apache2/bin/apxs \
--with-mysql=/usr/local/mysql \
--with-pdo-mysql=/usr/local/mysql \
--with-jpeg-dir=/usr/local/lib \
--with-png-dir=/usr/lib \
--with-zlib-dir=/usr/lib \
--with-zlib \
--enable-mbstring \
--enable-mbregex \
--enable-zend-multibyte \
--with-gd \
--with-mcrypt \
--with-openssl=shared
LINUX勉強 ~その6~ centosとLAMP環境 [CENTOS de LAMP]
全部入れなおしておさらいします。
1:OS
開発ツールキット、sysstatってやつをいれる。GUIいらない
2:システム設定
3:yum インストール
openssl-devel
libpng-devel
libjpeg-devel
libmcrypt-devel
ncurses-devel
libxml2-devel
4:apache2.2.14
apache 最新 2.2.14 (2009.11.05)
http://ftp.riken.jp/net/apache/httpd/httpd-2.2.14.tar.gz
wget - configure - make - makeinstall
cp /tmp/httpd-2.2.14/build/rpm/httpd.init /etc/rc.d/init.d/httpd
・httpd編集
apachectl=/usr/local/apache2/bin/apachectl
httpd=/usr/local/apache2/bin/httpd
pidfile=${PIDFILE-/usr/local/apache2/logs/httpd.pid}
CONFFILE=/usr/local/apache2/conf/httpd.conf
・/usr/local/apache2/conf/httpd.conf編集
ServerName サーバ名:80 とか。
<IfModule mime_module> 末尾に
AddType application/x-httpd-php .php を付加して、phpが動くようにしておく
・自動起動設定
chkconfig --add httpd
chkconfig --list httpd
httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
2~5がonになっていないので、自動起動しないから自動起動するようにする。
chkconfig httpd on
chkconfig --list httpd
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
・再起動
/etc/rc.d/init.d/httpd restart
5:mysql5.1.40
mysql 最新 5.1.40 (2009.11.05)
win系PCでダウンロードしておいて、WinSCPで /tmp/に事前にアップしておいた。
configure - make - makeinstall
cp /tmp/mysql-5.1.40/support-files/my-medium.cnf /etc/my.cnf
・my.cnf編集
innodb_buffer_pool_size = 512M とかを変えて、小さい範囲だけで動くのを変える
cp /tmp/mysql-5.1.40/support-files/mysql.server /etc/init.d/mysql
・起動ファイルの配置。変更不要
chmod 755 /etc/init.d/mysql
・自動起動設定
chkconfig --add mysql
chkconfig --list mysql
mysql 0:off 1:off 2:off 3:off 4:off 5:off 6:off
2~5がonになっていなかったら、自動起動しないから自動起動するようにする。
chkconfig mysql on
chkconfig --list mysql
mysql 0:off 1:off 2:on 3:on 4:on 5:on 6:off
・再起動
/etc/rc.d/init.d/mysql restart
6:php5
php 最新 5.2.11(2009.11.05)
http://jp2.php.net/get/php-5.2.11.tar.gz/from/jp.php.net/mirror
wget - configure - make -makeinstall
warningたくさんどうしても出てしまう。仕方なしに無視。
libtool --finish /tmp/php-5.2.11/libs
cp /tmp/php-5.2.11/php.ini-dist /usr/local/lib/php.ini
・php.ini編集
たくさんあるから別途
/usr/local/apache2/conf/httpd.conf を開く
・LoadModule php5_module modules/libphp5.so があるか確認
権限変更
cd /usr/local/apache2/modules/
chcon -c -v -R -u system_u -r object_r -t textrel_shlib_t libphp5.so
php -v でエラー系がなければOK
/etc/rc.d/init.d/httpd restart (apache再起動)
1:OS
開発ツールキット、sysstatってやつをいれる。GUIいらない
2:システム設定
3:yum インストール
openssl-devel
libpng-devel
libjpeg-devel
libmcrypt-devel
ncurses-devel
libxml2-devel
4:apache2.2.14
apache 最新 2.2.14 (2009.11.05)
http://ftp.riken.jp/net/apache/httpd/httpd-2.2.14.tar.gz
wget - configure - make - makeinstall
cp /tmp/httpd-2.2.14/build/rpm/httpd.init /etc/rc.d/init.d/httpd
・httpd編集
apachectl=/usr/local/apache2/bin/apachectl
httpd=/usr/local/apache2/bin/httpd
pidfile=${PIDFILE-/usr/local/apache2/logs/httpd.pid}
CONFFILE=/usr/local/apache2/conf/httpd.conf
・/usr/local/apache2/conf/httpd.conf編集
ServerName サーバ名:80 とか。
<IfModule mime_module> 末尾に
AddType application/x-httpd-php .php を付加して、phpが動くようにしておく
・自動起動設定
chkconfig --add httpd
chkconfig --list httpd
httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off
2~5がonになっていないので、自動起動しないから自動起動するようにする。
chkconfig httpd on
chkconfig --list httpd
httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
・再起動
/etc/rc.d/init.d/httpd restart
5:mysql5.1.40
mysql 最新 5.1.40 (2009.11.05)
win系PCでダウンロードしておいて、WinSCPで /tmp/に事前にアップしておいた。
configure - make - makeinstall
cp /tmp/mysql-5.1.40/support-files/my-medium.cnf /etc/my.cnf
・my.cnf編集
innodb_buffer_pool_size = 512M とかを変えて、小さい範囲だけで動くのを変える
cp /tmp/mysql-5.1.40/support-files/mysql.server /etc/init.d/mysql
・起動ファイルの配置。変更不要
chmod 755 /etc/init.d/mysql
・自動起動設定
chkconfig --add mysql
chkconfig --list mysql
mysql 0:off 1:off 2:off 3:off 4:off 5:off 6:off
2~5がonになっていなかったら、自動起動しないから自動起動するようにする。
chkconfig mysql on
chkconfig --list mysql
mysql 0:off 1:off 2:on 3:on 4:on 5:on 6:off
・再起動
/etc/rc.d/init.d/mysql restart
6:php5
php 最新 5.2.11(2009.11.05)
http://jp2.php.net/get/php-5.2.11.tar.gz/from/jp.php.net/mirror
wget - configure - make -makeinstall
warningたくさんどうしても出てしまう。仕方なしに無視。
libtool --finish /tmp/php-5.2.11/libs
cp /tmp/php-5.2.11/php.ini-dist /usr/local/lib/php.ini
・php.ini編集
たくさんあるから別途
/usr/local/apache2/conf/httpd.conf を開く
・LoadModule php5_module modules/libphp5.so があるか確認
権限変更
cd /usr/local/apache2/modules/
chcon -c -v -R -u system_u -r object_r -t textrel_shlib_t libphp5.so
php -v でエラー系がなければOK
/etc/rc.d/init.d/httpd restart (apache再起動)
LINUX勉強 ~その5~ centosとLAMP環境 [CENTOS de LAMP]
mysqlをいれたので、phpを入れなおします。
0:configure叩き直し
cd /tmp/php-5.2.11
ここで ./configure実行。パラメータは以下にした。
./configure \
--with-apxs2=/usr/local/apache2/bin/apxs \
--with-mysql=/usr/local/mysql \
--with-pdo-mysql=/usr/local/mysql \
--with-jpeg-dir=/usr/local/lib \
--with-png-dir=/usr/lib \
--with-zlib-dir=/usr/lib \
--with-zlib \
--enable-mbstring \
--enable-mbregex \
--enable-zend-multibyte \
--with-gd \
--with-mcrypt \
--with-openssl
で、エラー。
configure: error: Cannot find OpenSSL's evp.h
なんだこれ。
OpenSSLで、なんだかエラー。
ググって --with-openssl-dir=/usr/lib/openssl ってのをつけてみた。
しかしこれでもエラーだった。
1:有識者に相談
yum list opensslを叩いた。
[root@localhost php-5.2.11]# yum list openssl
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* addons: rsync.atworks.co.jp
* base: rsync.atworks.co.jp
* extras: rsync.atworks.co.jp
* updates: rsync.atworks.co.jp
Installed Packages
openssl.i686 0.9.8e-12.el5 installed
Available Packages
openssl.i386 0.9.8e-12.el5 base
まぁ出たからどうという事はない。見ても意味わからん。
続いてこちら
yum info openssl-devel
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* addons: rsync.atworks.co.jp
* base: rsync.atworks.co.jp
* extras: rsync.atworks.co.jp
* updates: rsync.atworks.co.jp
Available Packages
Name : openssl-devel
Arch : i386
Version : 0.9.8e
Release : 12.el5
Size : 1.9 M
Repo : base
Summary : Files for development of applications which will use OpenSSL
URL : http://www.openssl.org/
License : BSDish
Description: OpenSSL は暗号をサポートするためのツールキットです。openssl-devel
: パッケージには各種の暗号化アルゴリズムとプロトコルをサポートした
: アプリケーションを開発するために必要な静的ライブラリとヘッダーファイルが
: 含まれています。
まぁ出たからどうという事はない。見ても意味わからん。
多分 Installedなんちゃらがないから入ってないんだろう。
続いてこちら。
yum -y install openssl-devel
で、インストール。
2:再度configure叩き直し
cd /tmp/php-5.2.11
./configure \
--with-apxs2=/usr/local/apache2/bin/apxs \
--with-mysql=/usr/local/mysql \
--with-pdo-mysql=/usr/local/mysql \
--with-jpeg-dir=/usr/local/lib \
--with-png-dir=/usr/lib \
--with-zlib-dir=/usr/lib \
--with-zlib \
--enable-mbstring \
--enable-mbregex \
--enable-zend-multibyte \
--with-gd \
--with-mcrypt \
--with-openssl
--with-openssl-dir=/usr/lib/openssl ← こいつが新たに追加された
またエラー。。。
configure: error: libjpeg.(a|so) not found
よくわからんけど必須らしいです。画像処理で使うんか。
yum -y install libpng-devel
yum -y install libjpeg-devel
この2つインストールして 再 configure
エラー。。。心折れそうだ。
configure: error: mcrypt.h not found. Please reinstall libmcrypt.
よくわからんけど必須らしいです。暗号化で使うんか。
yum -y install libmcrypt-devel
インストールして 再 configure
やっと成功。
3:やっとコンパイル
make
大成功?
4:インストール
make install
すでに入っているが無視して実行
5:php.iniファイル修正
/usr/local/lib/php.iniを一応確認。
以前修正したのと同じままだった。
6:php -v といれてみる
なんかワーニングが出ますね。
root@localhost ~]# php -v
PHP Warning: PHP Startup: Unable to load dynamic library
'/usr/local/lib/php/ext/php_openssl.dll'
- /usr/local/lib/php/ext/php_openssl.dll:
cannot open shared object file: No such file or directory in Unknown on line 0
PHP 5.2.11 (cli) (built: Nov 6 2009 11:24:27)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
またopensslか。。。
extension=openssl.dll
これを extension=openssl.so に変更した。
/usr/local/lib/php 配下を調べると、extフォルダなんてもんはない。
どうやら makeあたりから地味に失敗している。
ふむー。困りました。
最初にOSインストール時に開発ツールキットを入れたりしてないのが
まずいみたいです。
だいぶぐちゃぐちゃになってしまいました。
全部初期化してOSから入れる事にします。
※入れなおした後に発覚して、
php.ini の extension=openssl.so を追加したのがまずかったらしい。
opensslをソースで入れた場合は必要ですが、パッケージで入れた場合は必要ないと思われる。
0:configure叩き直し
cd /tmp/php-5.2.11
ここで ./configure実行。パラメータは以下にした。
./configure \
--with-apxs2=/usr/local/apache2/bin/apxs \
--with-mysql=/usr/local/mysql \
--with-pdo-mysql=/usr/local/mysql \
--with-jpeg-dir=/usr/local/lib \
--with-png-dir=/usr/lib \
--with-zlib-dir=/usr/lib \
--with-zlib \
--enable-mbstring \
--enable-mbregex \
--enable-zend-multibyte \
--with-gd \
--with-mcrypt \
--with-openssl
で、エラー。
configure: error: Cannot find OpenSSL's evp.h
なんだこれ。
OpenSSLで、なんだかエラー。
ググって --with-openssl-dir=/usr/lib/openssl ってのをつけてみた。
しかしこれでもエラーだった。
1:有識者に相談
yum list opensslを叩いた。
[root@localhost php-5.2.11]# yum list openssl
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* addons: rsync.atworks.co.jp
* base: rsync.atworks.co.jp
* extras: rsync.atworks.co.jp
* updates: rsync.atworks.co.jp
Installed Packages
openssl.i686 0.9.8e-12.el5 installed
Available Packages
openssl.i386 0.9.8e-12.el5 base
まぁ出たからどうという事はない。見ても意味わからん。
続いてこちら
yum info openssl-devel
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* addons: rsync.atworks.co.jp
* base: rsync.atworks.co.jp
* extras: rsync.atworks.co.jp
* updates: rsync.atworks.co.jp
Available Packages
Name : openssl-devel
Arch : i386
Version : 0.9.8e
Release : 12.el5
Size : 1.9 M
Repo : base
Summary : Files for development of applications which will use OpenSSL
URL : http://www.openssl.org/
License : BSDish
Description: OpenSSL は暗号をサポートするためのツールキットです。openssl-devel
: パッケージには各種の暗号化アルゴリズムとプロトコルをサポートした
: アプリケーションを開発するために必要な静的ライブラリとヘッダーファイルが
: 含まれています。
まぁ出たからどうという事はない。見ても意味わからん。
多分 Installedなんちゃらがないから入ってないんだろう。
続いてこちら。
yum -y install openssl-devel
で、インストール。
2:再度configure叩き直し
cd /tmp/php-5.2.11
./configure \
--with-apxs2=/usr/local/apache2/bin/apxs \
--with-mysql=/usr/local/mysql \
--with-pdo-mysql=/usr/local/mysql \
--with-jpeg-dir=/usr/local/lib \
--with-png-dir=/usr/lib \
--with-zlib-dir=/usr/lib \
--with-zlib \
--enable-mbstring \
--enable-mbregex \
--enable-zend-multibyte \
--with-gd \
--with-mcrypt \
--with-openssl
--with-openssl-dir=/usr/lib/openssl ← こいつが新たに追加された
またエラー。。。
configure: error: libjpeg.(a|so) not found
よくわからんけど必須らしいです。画像処理で使うんか。
yum -y install libpng-devel
yum -y install libjpeg-devel
この2つインストールして 再 configure
エラー。。。心折れそうだ。
configure: error: mcrypt.h not found. Please reinstall libmcrypt.
よくわからんけど必須らしいです。暗号化で使うんか。
yum -y install libmcrypt-devel
インストールして 再 configure
やっと成功。
3:やっとコンパイル
make
大成功?
4:インストール
make install
すでに入っているが無視して実行
5:php.iniファイル修正
/usr/local/lib/php.iniを一応確認。
以前修正したのと同じままだった。
6:php -v といれてみる
なんかワーニングが出ますね。
root@localhost ~]# php -v
PHP Warning: PHP Startup: Unable to load dynamic library
'/usr/local/lib/php/ext/php_openssl.dll'
- /usr/local/lib/php/ext/php_openssl.dll:
cannot open shared object file: No such file or directory in Unknown on line 0
PHP 5.2.11 (cli) (built: Nov 6 2009 11:24:27)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.2.0, Copyright (c) 1998-2009 Zend Technologies
またopensslか。。。
extension=openssl.dll
これを extension=openssl.so に変更した。
/usr/local/lib/php 配下を調べると、extフォルダなんてもんはない。
どうやら makeあたりから地味に失敗している。
ふむー。困りました。
最初にOSインストール時に開発ツールキットを入れたりしてないのが
まずいみたいです。
だいぶぐちゃぐちゃになってしまいました。
全部初期化してOSから入れる事にします。
※入れなおした後に発覚して、
php.ini の extension=openssl.so を追加したのがまずかったらしい。
opensslをソースで入れた場合は必要ですが、パッケージで入れた場合は必要ないと思われる。