色々と不手際があって試行錯誤を繰り返した結果、ゼロから稼働出来る所までの設定手順がある程度固まったのでまとめておきます。一応、専門家ではない人間が検索を頼りに情報を集積した結果ですということをお断りさせていただきつつ、それでも一応稼働が確認できていますよ、ということで何かの足しになればと。

なお、参考にさせていただいたサイトはそれぞれの項目毎に記載しています。



仮想環境について

VirtualBoxのインストールおよび、ゲストOSのインストールは完了し、ネットワークが接続できる状態になっているものとする。
ホストOS
Windows XP Professional SP3
ゲストOS
CentOS 5.3


目的とする環境

  • 主に使用する言語であるPHPが滞りなく動作すること
  • MySQLに必要なデータをインポートし稼働できること
  • memcachedを使用したテストが十分に行えること

設定手順




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つに諦めるしかないか。