巷で高速のWebサーバとして話題になっているLightTPDを試してみました。
どうやらあちこちで見る前評判通り、LightTPD+FastCGIはApacheよりも約1割高速と言う結果…。
それなら次は、ということで、MODxを元に開発したfrexCMSをLightTPDの上で動かしてみることにしました!
本当はWindowsでできるといいのですが、Windows版のLightTPDは日本語の文献が少ないのでちょっと挫折…。
Linuxは初心者ですが、CentOS5.3の環境に作ってみることに。
LightTPDの上でMODx(frexCMS)を動かすのに必要なものは以下の6点。
・MySQL
・PHP
・LightTPD
・FastCGI
・PCRE
・cronolog
よし、まずはMySQLからだ!
と、意気揚々と入ったところでいきなり詰まる罠……。
今回の最終目標は、
弊社のプロダクトである『All-in-One frexCMS for Linux』をシェルスクリプトで作ること。
+ルール+
・ディレクトリは指定(極力一つのディレクトリに入れる)
・ソースファイルからのインストールをする
それでは、MySQLから。
インストール作業を始める前にMySQLのユーザーを登録してしまいます。
groupadd mysql
useradd -g mysql mysql
ユーザーができたら
MySQLの公式サイトからソースをダウンロードしてきて、tarボールを展開します。
今回のバージョンはMySQL-5.1.34です。
tar xvfz mysql-5.1.34.tar.gz
cd mysql-5.1.34
ここでエラーが出たら切ないですね。
展開が終わったらconfigureをしてみます。
ここで正直、何をオプションで入れたらいいのかわからなくなりました。
いくつか前の記事でずらずらとconfigureオプションを書き連ねていたのはこのせい。
調べた結果、きっとこれがシンプルに違いない、と実行してみる。
./configure --prefix=$mysql_dir \
--with-charset=utf8 \
--with-extra-charsets=complex \
--with-mysqld-user=mysql
成功するかなー…とドキドキしながら待つと、随分即行で怒られました。
checking for gcc... no
checking for cc... no
configure: error: no acceptable C compiler found in $PATH
こんな感じのエラーが出てます。
……C compilerがないようです。
どうやらこのCentOS、最小構成にしすぎて開発ツールが入っていないような予感。
こちらはyumコマンドを使って入れてしまうことにして、再度configureを実行。
yum -y install gcc
./configure --prefix=$mysql_dir \
--with-charset=utf8 \
--with-extra-charsets=complex \
--with-mysqld-user=mysql
…今度もまたエラー…。
次は何かと思ったら、こんな感じ。
configure: error: No curses/termcap library found
cursesとか言うものがないらしい。
ぐーぐる先生に聞いたりしてみると…
どうやらカーソルを使ってスクリーン関係の処理をするのに必要なものらしい。
テキスト入力するにしてもピコピコ点滅してるあれ。
必要なのはNcursesらしいので、またもyumでインストールしてconfigure実行。
yum -y install ncurses
とやったら、また全く同じエラー。
ぐーぐる先生の所でエラーメッセージをぐぐると、どうもインストールするのはncursesではなくてncurses-develでないといけないらしい。
ちなみに、後で判明したけれど、ライブラリパッケージの○○-develっていうのは開発ツール(develop)の事なんだとか。
…次からライブラリ入れるときは気をつけよう…。
そして今度はconfigure成功!
いよいよインストールに入れる、と先に進めてみます。
make
…あれ、エラー?
ストップした画面にはこんなメッセージ。
g++: not found
g++がないってことらしい…けれど。
いつもの手段でyumにないか調べてみると…
yum list | grep g++
では見つからない…。
これは仕方ない。
またぐーぐる先生に教えていただこうと聞いてみると、同じような人はたくさんいるもので。
g++ではなくてgcc-c++を指定しないといけないらしい。
makeで失敗してしまったので、tarボールの展開先ディレクトリを削除して、再度configureからやり直してみることに。
yum -y install gcc-c++
cd ../
rm -rf mysql-5.1.34
tar xvfz mysql-5.1.34.tar.gz
cd mysql-5.1.34
./configure --prefix=$mysql_dir \
--with-charset=utf8 \
--with-extra-charsets=complex \
--with-mysqld-user=mysql
make
make install
今度は無事成功!
ようやくインストールができました。
もうここで満足してしまいたい気分になりましたが、この先はmy.confを置いて起動スクリプトを用意すれば起動してくれるだろうと軽い気持ちで続行。
…軽くなかったですが。
インストールが終わった後はmy.cnfを設置するところから始まります。
サンプルテンプレートのある場所はインストールしたディレクトリ/share/mysqlの中。
4種類あるのですが、どれを使うかでまた迷う。
これも
いくつか前の記事に書いてあるので省略。
とりあえず使うのはmy-medium.cnfにしてみます。
下のコマンドで/etc/my.cnfとして設置。
cp -rf "$mysql_dir/share/mysql/my-medium.cnf" /etc/my.cnf
次は起動スクリプトに入ることですし、先にPATHは通した方がいいだろうと、環境変数に追加しておきます。
export PATH=$PATH:$mysql_dir/bin
MySQLははじめてのインストールなので、初期データベースを作ります。
cd "$mysql_dir"
./bin/mysql_install_db
……やっぱりすたすた進んではくれません。
今度は何で怒られたんでしょう。
[ERROR] $mysql_dir/libexec/mysqld: unknown option '--skip-federated'
skip-federatedとかいうオプションがないよって言っているようです。
…でもconfigureではそんなオプションはつけていないはず…??
気になってまたぐーぐる先生に助けを求めてみました。
どうやらmysql5.0からFederatedというエンジンが追加されたらしいです。
InnoDBを使うときに一緒に使うもののよう。
先ほど設置した/etc/my.cnfを見ると、確かに「skip-federated」の記述が。
ここをコメントアウトにすれば解決するらしい…。
でも、configureのヘルプを見るとデフォルトでDisableですって書いてある。
それならどうしてサンプルのcnfファイルでコメントアウトしておいてくれないのか…。
シェルスクリプトに書く時は、cpコマンドじゃなく、sedコマンドで書き換えながら持ってくることにしよう。
こんなコマンドにすればいいのかも。
sed -e "s/skip-federated/#skip-federated/" my-medium.cnf > /etc/my.cnf
そして再び初期データベースを作るところに戻ります。
./bin/mysql_install_db
今度は成功!
「インストール先のディレクトリ/mysql/var」ができています。
これの所有者を初めに作ったmysqlに変更して、ようやく設定完了。
chown -R mysql:mysql "$mysql_dir/var"
…ちなみに、これを忘れて次の段階に移ったら、ソケットが作れないよーって怒られました。
ディレクトリが誰の所有者なのかって大事なんですね…。
ようやくMySQLの設定も佳境です。
後残すはサーバの起動と停止ができるようにすること。
まずは起動と停止の確認をしてみます。
流石にフルパスのスクリプトを使えば成功するだろう。
cd "$mysql_dir/bin"
mysql_safe --user=mysql
無事にサーバ起動。
エラーは出ていません。
それなら止める方も試してみましょう。
mysqladmin -u root shutdown
こちらも無事に成功。
問題なく動くのなら、次は自動起動をするようにスクリプトのコピーをします。
スクリプトのサンプルは インストール先のディレクトリ/share/mysql/mysql.server です。
cp "$mysql_dir/share/mysql/mysql.server" /etc/init.d/mysql
そして、ランレベル…2で起動するようにリンクを張る、と見ていた本にかいてあったので、以下のようにリンクを張ってみます。
ln -s /etc/init.d/mysql /etc/rc2.d/S60mysql
さあ、これで再起動してみてMySQLサーバが立ち上がっていれば成功です!
いざ、再起動。
そしてチェック!
/etc/init.d/mysql status
MySQL is not running
…。あれ。起動していない。
なんでだろう、と思って起動してから動いている状態を確認すると、ちゃんと動いているよ、と返ってきました。
自動で起動してくれていないだけ?
もしかしたらランレベル2で設定しているからいけないのかもしれない、と今のランレベルを調べてみる。
runlevel
N 5
どうやら現在はランレベル5らしい。
これをどうにかするのなら、chkconfigをしてしまう方が早そうです。
まず、chkconfigにmysqlの起動スクリプトを登録します。
chkconfig --add mysql
そして、OS起動時に一緒に起動してくれるようにスイッチオン。
chkconfig mysql on
状況を確認してみると…
chkconfig --list mysql
mysql 0:off 1:off 2:on 3:on 4:on 5:on 6:off
ランレベルの2、3、4、5で起動してくれるようになりました。
念のため再起動してみてさらに確認。
よし、ちゃんと起動してる!!
でも長くなってしまったのでここでちょっと休憩…
本命のLightTPDのインストールまでは先が長そうです。
次はこれまたエラーがわんさか出そうなPHPのインストールに向かうとします。
あぁ、今度はすんなりいってくれますように。