色々と不手際があって試行錯誤を繰り返した結果、ゼロから稼働出来る所までの設定手順がある程度固まったのでまとめておきます。一応、専門家ではない人間が検索を頼りに情報を集積した結果ですということをお断りさせていただきつつ、それでも一応稼働が確認できていますよ、ということで何かの足しになればと。
なお、参考にさせていただいたサイトはそれぞれの項目毎に記載しています。
仮想環境について
VirtualBoxのインストールおよび、ゲストOSのインストールは完了し、ネットワークが接続できる状態になっているものとする。- ホストOS
- Windows XP Professional SP3
- ゲストOS
- CentOS 5.3
目的とする環境
- 主に使用する言語であるPHPが滞りなく動作すること
- MySQLに必要なデータをインポートし稼働できること
- memcachedを使用したテストが十分に行えること
設定手順
- yumインストール
- カーネルのアップデート
- Guest Additions追加
- 共有フォルダの設定
- Apacheの設定と起動
- MySQLの設定と起動
- PHPの設定
- memcachedのインストール
- APCをインストール
- Xdebugのインストール
- Apacheの設定
- Perlの設定
yumインストール
何はともあれyumをインストールしてUpdateしておくのは最重要。これがないと始まらない。(いや別に始められるけど大層面倒くさい)
# yum -y install yum-fastestmirror
# yum -y update
カーネルのアップデート
次のGuest Additionsのインストールに必要なのでアップデートしておく。仮想環境でなければ必要はない(気軽にアップデートするようなものでもないし)。コンパイル環境と一緒にインストール。# yum install gcc
# yum install make
# yum install kernel
# yum install kernel-devel
ついでにg++、zlib-devel、httpd-devel、php-develも入れておく。
# yum install gcc-c++
# yum install zlib-devel
# yum install httpd-devel
# yum install php-devel
インストールが終わったら再起動。
cf. Ellinikonblue.com Weblog – CentOS 5.3 on VirtualBox
cf. CentOSへのg++の追加方法 – PlasticsCafe
Guest Additions追加
仮想マシンウインドウのメニューの「デバイス > Guest Additions のインストール」 をクリック。ドライブがマウントされたら、CD-ROM内の「VBoxLinuxAdditions.run」を実行。# cd /media/VBOXADDITIONS_3.0.8_53138/
# sudo sh VBoxLinuxAdditions-x86.run
先ほどカーネルを更新していても、インストール時にもっと新しいカーネル使えよと注意される。が、インストール自体は完了する(Linuxのカーネルとバージョンが異なってはいるけれどCentOS的に必要なものは揃っている…んじゃないかと思う)。
再起動するとゲストOSのビデオドライバが改善され画面の描画速度が向上する。また、ホストOSとのマウス統合、クリップボードの共有、フォルダの共有、リモートデスクトップの利用が可能に。仮想環境でやるなら入れておく方がよい。
cf. Ellinikonblue.com Weblog – CentOS 5.3 on VirtualBox
共有フォルダの設定
共有フォルダの利用にはGuest Addtionsのインストールが必要。インストールが完了したら、VurtualBox側で共有フォルダの設定をしておく。コンソールの「デバイス > 共有フォルダ」から設定できる。CentOS側の設定は、マウントするフォルダを作成した上で上で設定した共有名でマウントする。
# mkdir /mnt/share
# mount -t vboxsf share /mnt/share
起動時に自動的にマウントさせるためには、/etc/rc.localに以下を追記しておく。
# vi /etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
#共有フォルダのマウントをするための追記。
mount -t vboxsf share /mnt/share
cf. CentOS5で共有フォルダの設定をする
Apacheの設定と起動
ここまでで確認のため一度Apacheを動かしておく。起動。
# /etc/init.d/httpd start
インストールされていなければyumでインストール。
# yum install httpd
OS起動時に自動起動するように設定。
# /sbin/chkconfig httpd on
cf. CentOSの開発環境を整える[to-R]
MySQLの設定と起動
以下のコマンドでインストール(データのエクスポートについては後述)。# yum install -y mysql-server
起動。
# /sbin/service mysqld start
OS起動時に自動起動するように設定。
# /sbin/chkconfig mysqld on
cf. CentOSの開発環境を整える[to-R]
PHPの設定
必要なモジュールのインストール。# yum install php-mysql
# yum install php-mbstring
# yum install php-gd
PHPのバージョンを最新にしておく。レポジトリの追加が必要になるのでそのように。
まずRPM-GPG-KEYを取得。
# rpm --import http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka
utterramblings.repoを作成してリポジトリを追加指定します。
# vi /etc/yum.repos.d/utterramblings.repo
[utterramblings]
name=Jason's Utter Ramblings Repo
baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka
最後にphpのアップデート。# yum update php
cf. CentOSの開発環境を整える[to-R]
memcachedのインストール
まずmemcachedをインストールする。yumからinstallするのが一番楽だが、そのためにはレポジトリを追加しておく必要がある。# cd /usr/local/src
# wget http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
# rpm -Uhv rpmforge-release-0.3.6-1.el5.rf.i386.rpm
追加が無事終わったらインストール。
# yum install memcached
インストールが完了したら起動テストと自動起動の設定をしておく。
# /etc/init.d/memcached start
# /sbin/chkconfig memcached on
cf. 仙人の心得 » CentOS:memcachedをインストール
次に、libmemcached(C)をインストールする。yumではインストールできないのでソースを持ってきて展開→インストール
# cd /usr/local/src
# wget http://download.tangent.org/libmemcached-0.33.tar.gz
# tar zxvf libmemcached-0.33.tar.gz
# cd libmemcached-0.33
# ./configure
# make
# make install
# /sbin/ldconfig
続いてPHP周りの環境整備。まずPEARをインストール。
# yum install php-pear
次に、Pecl::memcacheとPecl::memcachedをインストール。
# pecl install memcache
# pecl install memcached
完了したら、php.iniに追加しておく。
# sh -c "echo extension=memcache.so > /etc/php.d/memcache.ini"
# sh -c "echo extension=memcached.so > /etc/php.d/memcached.ini"
APCをインストール
yumでインストールできるのでyumで。# yum install php-apc
php.iniへの設定も忘れずに。
# sh -c "echo extension=apc.so > /etc/php.d/apc.ini"
Xdebugのインストール
PEARでインストールできる。# pear install -a xdebug
php.iniへ設定。
# sh -c "echo zend_extension=/usr/lib/php/modules/xdebug.so > /etc/php.d/xdebug.ini"
cf. [INWorks] CentOS 5 にxdebugをインストール
Perlの設定
今回はメインでは使わないので、設定については割愛。とりあえずCPANをインストールしておけば何とかなるような気がする。# perl -MCPAN -e shell
MySQL用の設定
cpan > install DBD::mysql
その他必要に応じてインストールのこと。
cf. CentOSの開発環境を整える[to-R]
Apacheの設定
最後にApache周りの設定を行う。細かいApacheの設定については割愛するけれども、少なくともDocumentRootは変更しておく。今回の場合プログラムのファイルなどは全てホストOS上にあり、ゲストOS上にマウントされているので任意の場所(/usr/wwwなど)にシンボリックリンクをはっておく。# vi /etc/httpd/conf/httpd.conf
変更したら再起動。
# /etc/init.d/httpd restart
追加設定
追加設定はサイト運営上のオプション。PEAR::Net_UserAgent_Mobileのインストール
携帯端末のユーザエージェント解析用。既に正式版(1.0.0)がリリースされているので普通にインストールできる。# pear install -o net_userAgent_mobile
MySQLのデータをインポートする
既存のMySQLからダンプされたデータ(exported_db.dmp)を丸ごとインポートする。# mysql -u root < /mnt/share/exported_db.dmp
MySQLのオプションとして、SQL_BIG_TABLESを1にセットしておく。
mysql > SET SQL_BIG_TABLES=1;
これをセットしておかないと、次のエラーが出てしまう。
The table ### is full
SQL_BIG_TABLESが1だと一時ファイルの書き出しをディスクに対して行うのでリストアに時間が掛かる。tmp_table_sizeを十分に大きくしておけばエラーは出ない…と思いきや、tmp_table_sizeはメモリなので4GB以上を設定することは出来ないし、そもそもゲスト OSには512MBしか割り当てていないのでテーブルが巨大な場合はこの回避策は取れない。というわけで、SQL_BIG_TABLESを使う。
MySQLのデータをインポートする(構造とデータを分割してインポート)
エクスポートはmysqldump、インポートはmysqlで簡単にできる…はずなのだけど、データに問題があるのかどうしても途中でこけてしまう。ので、まずテーブル構造を、次にデータをエクスポートし、それぞれ分割してインポートを行ったところ上手く行った。ちなみに、コマンドで打ち込むよりも、シェルで行った方が成功率は高い。オプションの設定加減の問題だとは思うけれども。
#!/bin/sh
PATH=/usr/local/sbin:/usr/bin:/bin
BACKDIR=/usr/local/backup/mysql
PASS=password
USER=user
/usr/bin/mysqldump -u $USER --password=$PASS --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset database > $BACKDIR/exported_db.dmp
Apacheの設定調整
CSSファイルなど静的ファイルが表示されないときがある。そのときは「EnableSendfile」を「Off」に設定する(あらかじめOffでコメントアウトされている)EnableSendfile Off
—
以上で大体終わり。
この後Smartyがどうとか、MySQLのユーザ権限とか設定は残ってるけどその辺は適当にやってればOK。
ちなみに一番時間掛かって嫌なのは、MySQLのデータのインポート。調べても調べてもみんな結構あっさり書いてあるんだけど、それはやっぱり所詮開発環境なんだからデータも殆ど無しで構築しちゃうのよってことなんだろうか。個人的には、ある程度の量をインポートしたいと思ってしまう方なのだけど…時間か軽量かどちらか1つに諦めるしかないか。