VirtualBox + CentOS でローカル開発環境を作る

Windows 7 に移行してからというもの、VMware Server の NAT がまともに動かず yum update もできずに困り気味。代替を探していると、VirtualBox なるものを発見。早速テストしてみたところ使えそうなので、VMware Server から移行してみることにしました。

ネットワーク設定でえらくハマりました。NAT が VMware と比べてショボい気がします。結論から言うと、NAT は DHCP でそのまま使い、Host Only は固定 IP にするといい感じです。

まずは VirtualBox をインストールします。以下の 『VirtualBox 3.2.0 for Windows hosts』 からダウンロード。

2010年 5月 24日時点での最新版は 3.2.0 です。ダウンロードがすんだらインストール。途中、デバイスドライバのインストール時に警告が表示されますが、気にせず続行。インストール作業は特にどうということもなく終了。

VirtualBox のインストールが完了すると、『VirtualBox Host-Only Network』 というネットワークアダプタが Windows に追加されます。このアダプタは、ゲスト OS ⇔ ホスト OS 間の通信を行うためのものです。基本的に VirtualBox では、

  • ゲスト OS が外向き(ホスト OS の外)の通信するをするために NAT を使用
  • ゲスト OS と ホスト OS 間の通信は Host-Only Network アダプタを使用

となります。

早速、起動してみます。管理用の UI は非常にシンプル。

VMware と違うところは、仮想ディスク領域の扱いぐらいかと思います。VMware を使ったことがあれば特に迷うようなことはありません。今回は新規で CentOS をインストールするので、【仮想マシン】 → 【新規】 で仮想マシンを作成する中で仮想ディスクも作成します。

仮想マシンの作成は VMware を使い慣れていれば特にどうということも無いと思います。作成が完了したら、設定を行ないます。とりあえず

  • 不要なデバイス(サウンドなど)を無効にする
  • 【システム】 → 【ハードウェアクロックをUTCにする】 にチェックを入れる
  • 【ネットワーク】 の 【アダプタ 2】 を有効にして、【割り当て】 は 【ホストオンリー アダプタ】 を選択する

という感じ。

次に、CentOS のインストール用 DVD イメージをダウンロードします。以下の URL から、『State (Area)』 が 『Japan』 で且つ 『Direct DVD Downloads』 が 『Yes』 になっているところからダウンロードすると、DVD イメージが直接ダウンロードできます。

ダウンロードが完了したら、先ほどの VirtualBox 仮想マシン設定の 【ストレージ】 から、ダウンロードした DVD イメージを光学ドライブとしてマウントしてから、仮想マシンを起動します。

ここからは CentOS のインストール作業。とりあえずいつも通り。パッケージの選択で Server を選択した上でカスタマイズして不要なものは除外。

  • アプリケーションは vim と emacs のみ
  • サーバは、DNS、ニュースサーバー、メールサーバー、レガシーなネットワークサーバを除外、MySQL をチェック。
  • Web サーバは、php-mysql と php-pear をチェック。
  • ベースは、ダイヤルアップネットワークサポートを除外。

とりあえずこんな感じ。足りないものはインストール後に追加。インストールが終わったら再起動。

初回起動時に authconfig-tui が起動するので以下を設定。

  • Authentication configuration はそのまま。
  • Firewall configuration は
    • SELinux を Disabled
    • Custom ボタンで詳細設定。
      • Trusted Devices は eth0 eth1 両方とも選択。
      • MASQUERADE Devices は NAT の eth0 を選択。
      • Allow incoming は SSH, WWW (HTTP), Secure WWW (HTTPS), FTP, Samba を選択。Other に 3690 (SVN) を追加。
    • Network configuration で eth1 を 192.168.56.11 に設定。
  • System services は ip6tables とか sendmail などの不要なものを除外して、httpd, smb, mysql などの必要なものを選択。

以上が終わったら、Windows 側の WWW ブラウザから http://192.168.56.11 にアクセスして Apache のウェルカムページが表示されることを確認します。続いて、CentOS にログインして、yum update してみて正常に動作することを確認します。

VirtualBox の NAT においては、DNS は 10.0.2.3 のはずなんだけど、これが全く反応しない。NAT 側を DHCP にして /etc/resolv.conf を見ると、 『nameserver 192.168.24.1』 とか書いてあるし…。要するに Windows 側の DNS がそのまま書かれていて、 DNS Proxy な感じになってない。これに気付くのに 1日掛かってハマりました。バカバカ!(自戒) この件とか、NAT ネットワーク内のホスト OS の IP が 10.0.2.15 に固定されていたりとか、まだまだ発展途上という感じがする VirtualBox ですが、動作の軽快さと、何より Windows 7 でまともに動くというのが移行の決め手でした。慣れるまで苦労しそうですが、とりあえず使い続けてみようと思います。

常用ユーザーを作成して、常用ユーザーに対して su, sudo できるように visudo を実行して以下の行を追加。

foo ALL=(ALL) ALL

php-mbstring, php-gd, php-xml を追加。

[shell]
# yum -y install php-mbstring php-gd
[/shell]

とりあえずの Apache の設定を行ないます。 /etc/httpd/conf/httpd.conf を編集。


ServerName centos:80
DocumentRoot "/var/www/html"


    Options -Indexes FollowSymLinks
    AllowOverride None



    Options -Indexes
    AllowOverride All
    Order allow,deny
    Allow from all


AddDefaultCharset UTF-8


	ServerName centos
	DocumentRoot /var/www/html


# Windows 側のフォルダ(後述)

	ServerName windows
	DocumentRoot /var/www/httpdocs


続いて php.ini を編集。phpMyAdmin で SQL をインポートする際にサイズ制限に引っ掛かったりするので、とりあえず memory_limit, post_max_size, upload_max_filesize を設定。デフォルトはそれぞれ 128M, 8M, 2M です。PHP のマニュアルによると、memory_limit >= post_max_size >= upload_max_filesize が良いとのこと。 ((参考: http://www.php.net/manual/ja/ini.core.php#ini.post-max-size ))

post_max_size = 16M
upload_max_filesize = 12M

/var/www/html をホスト(Windows)側からも読み書きできるように Samba サーバを設定します。まずは既存ユーザーを Samba サーバーアクセス用ユーザーとして追加。以下のコマンドを実行してパスワードを入力します。

[shell]
# pdbedit -a foo
[/shell]

続いて /etc/samba/smb.conf を編集。


[global]
	workgroup = WORKGROUP_NAME
	server string =
	netbios name = centos
	hosts allow = 127. 10.0.2. 192.168.56.
	load printers = no

	unix charset = UTF8
	dos charset = CP932
	display charset = UTF8

	idmap gid = 16777216-33554431

[homes]
	path = %H/samba
	writable = yes
	valid users = %S

ホスト側からアクセスするディレクトリを作成して、その中に /var/www/html/ へのシンボリックリンクを作成。

[shell]
# mkdir ~foo/samba
# chown foo.foo ~foo/samba
# ln -s /var/ww/html ~foo/samba/html
# chown foo.foo ~foo/samba/html
[/shell]

ホスト側から上記ディレクトリをネットワークドライブ(ここでは L: ドライブ)としてマウント。

net use l: \\centos\foo

ゲスト側とホスト側でユーザー名とパスワードを揃えておくと楽です。

ゲスト側のフォルダも Apache からアクセスできるようにしておきます。 ((CentOS 側の /var/www/html/ は、シンボリックリンクが必要なシステムの開発に使用し、Windows 側フォルダをマウントした /var/www/httpdocs は、シンボリックリンクが不要なシステムの開発に使用、という感じで役割分担しています。)) まずは /etc/hosts にホスト側を追加。ここでは thinkpad-x201s というホスト名にしています。

192.168.56.1	thinkpad-x201s

ホスト側の適当なフォルダ(僕の場合は D:\home\foo\httpdocs\)を共有します。アクセス許可は foo のみフルアクセスに設定。

ゲスト側の /etc/fstab に以下の行を追加。foo はユーザー名、password は foo のパスワードです。

//thinkpad-x201s/httpdocs /var/www/httpdocs cifs user=foo,password=password,uid=foo,gid=foo,file_mode=0666,dir_mode=0777,iocharset=utf8 0 0

ホスト側の hosts ファイルも編集。以下の行を追加します。

192.168.56.11		centos windows

とりあえず以上で開発環境の元は出来ました。早ければ30分掛からないと思います。