ここでは、Windows PC1台でXAMPではなく、仮想化ソフトウェアで仮想マシンを作って本番環境に限りなく近い、もしくは、任意のクライアントサーバによるPerl(/Python/Ruby/php)によるWebアプリケーション開発環境、いわゆるLAMP/LAMPP環境を構築してみましょう。
ちなみにLAMP/LAMPPは、Linux Server、Apache HTTP(Web) Server、MySQL、Perl/PHP/Python等々から成る構成、後にLinux含め、Windows、Mac OS X、Solaris、BSD等のクロス(X)プラットフォームという意味でXAMP/XAMPPと呼ばれるようになったりしたものの、時にPがPerl/PHPを指したり、2つある場合1つはPostgreSQL(かMySQL何れかを含む構成)を指したり、LAPPやBAMPなど他の呼称もできたりして今となっては、かえって混乱の元になっているとも言えます。
仮想マシンの詳細についてはリンク先を辿って頂くとして簡単に言うと手持ちのパソコン1台で同一、または、異なるOSを実行するマシンをもう一台走らせることができる仕組みです。
ローカルマシンのOS(ホストOS)は、WindowsでもUNIXライクなLinuxでもBSDでもSolarisでもMac OS X(OS X)でも良く、それぞれに応じて仮想化ソフトウェアをインストールしたら、仮想マシンを作成し、対応済みOSの中から好みのOSを物理的なPCと同じようにインストールすればOKです。
ちなみに仮想マシンにインストールしたOS(ゲストOS)は、物理的なCD/DVDやUSBメモリなどのメディアからインストールしてもよいですが、拡張子が.isoのISOディスクイメージでも使え、とりあえずやってみるなら無償でISOディスクイメージをネット上からダウンロードできるオープンソースのLinux/PC-UNIX/BSDなどが導入しやすいでしょう。
ホストOS、ゲストOSは、どちらをサーバとしても使えるので、例えば、ゲストOSのLinux/PC-UNIX/BSDをサーバ、手持ちの物理的なPCのWindowsをクライアントとして利用することもできます。
ネットで検索すると仮想化ソフトウェアを使うには、かなり高スペックなPCを必要とするという情報ばかりが目につくかもしれませんが、例えば、WindowsはXPかVista、Linuxも比較的軽量なものやLinux同士なら32ビット(x86)版、CPUは仮想化支援機能(Intel VT/AMD-V)なしのマルチコアCore2、メモリ1GBといったスペックでも余程重たいアプリケーションを作らない限り、Perl CGIを実行可能な環境としても十分使えるでしょう。
仮想化ソフトウェアも特にWindowsやIntel製CPU搭載のMac OS Xを使っているならインストール自体もグラフィカルなインストーラがあって簡単、インストール後の作業も視覚的にわかりやすい作りのものが多いので戸惑うことは、あったとしても、それほど多くないでしょう。
仮想化ソフトウェアにもいろいろありますが、他の仮想化ソフトウェアで作成した仮想マシンファイルの直接、または、間接的な読み書きや変換ができる(仮想マシンファイルの互換性と変換)ことも多く、仮想マシンは1つの大きなファイルとして1つのフォルダにまとめられているので仮想マシンの移動やコピーも簡単です。
いろいろなOSを使う場合には、それぞれのOSについてそれ相応に知っていないと時間がかかるでしょうが、幸いゲストOSを実行する仮想マシンは、ホストOS上にある比較的サイズの大きな1つのファイルであり、ゲストOS上で何をしても仮にゲストOSが壊れてもホストOSには基本的に影響ありませんし、インストール直後の状態や任意の時点のマシンの状態をスナップショットとして残しておけば、何度でも元に戻して最初からやり直しが効きますし、クローンと呼ばれるコピーを残しておけば、ゲストOSが壊れてもすぐに復旧できるので、たとえ他のOSに慣れてなくてもどんどん試せるので安心です。
Webサーバ環境含むクライアントサーバ構成となるとネットワークの設定も必要になりますが、結構業界長いけど、また、サーバ管理ではなく、CGIを書く為だけにPerlスクリプトを使ったことがあるという場合など、完全分業化してたりもするし、ネットワークって実はよく知らないという人も少なくないのではないでしょうか。
ここでは、そこを中心に見ていこうと思います。
【想定環境】
ホストOS:Windows Vista => クライアント
ゲストOS:Arch Linux => サーバ
仮想化ソフトウェア:VirtualBox
想定環境としては、ホストOSがWindows Vista、仮想化ソフトウェアは、無償で提供されているVirtualBoxを利用、VirtualBoxで作成する仮想マシンのOSとしてArch Linux(というLinuxディストリビューション)をインストールし、Arch Linuxをサーバ、Windows Vista上のブラウザをクライアントとするケースを考えるものとします。
CentOSでもVine LinuxでもFreeBSD/NetBSD/OpenBSDでもOpenSolaris/OpenIndianaでも他でも良いのですが、CentOSやOpenIndianaだと検証マシンスペック上、ゲストのCentOSは軽快ですが、ホストOSの動作が厳しく、それ以外でも数あるLinuxディストリビューションの中から、なんとなく、Arch Linuxとしてみようと思いました。
Arch Linuxは、Linux初心者向きとは言い難く、初回起動後もCUIベースで環境を整える必要がありますが、Beginners' Guide (日本語)をはじめとするドキュメントが驚くほど豊富で充実しており、知りたい・調べたいことが明確ならば、ネット検索ですらArch Linuxサイトの情報がすぐに見つかるので困ることはないでしょう。
よってここでは、VirtualBoxで作成した仮想マシンにインストールしたArch Linuxの初期設定まで済んでいるものとします。
仮にホスト・ゲスト共に違うOSを使うにしても考え方や一連の流れは、ほぼ共通ですし、ゲストOSに他のLinuxを選べば、準備段階はもっと簡単な場合が多いでしょう。
まず、Arch Linuxをインストールする(した)仮想マシンのネットワーク環境を設定しておきます。
尚、ゲストOSからインターネットを含む外のネットワークなどホストOS以外と通信する必要がなければ、[アダプター1]を『ホストオンリーアダプター』とするだけでも構いません。
つまり、ホストOSとゲストOS間だけから成る専用の通信環境を構築する際に利用するのが『ホストオンリーアダプター』であり、ホストOSとゲストOS専用の通信環境とするということは、データの送受信時にデータが届くようにするということなのでホストOSとゲストOSは同じネットワーク上に存在する必要があるということになります。
ホストOSとゲストOSを同じネットワーク上で相互に接続できるようにする為には、ある任意のネットワークの住所に当たる、その名もまさにネットワークアドレスを知る必要があり、同一のネットワークアドレス上にホストOSとゲストOSを接続すれば(参加させれば)よく、同一ネットワークアドレス上の個々の端末は、ホストと呼ばれ、ホストの住所に当たるのは、まさにホストアドレスであり、ネットワークアドレスとホストアドレスを組み合わせることで端末同士を相互に認識できるという仕組みです。
近年、インターネットもLANもネットワーク上の通信には、TCP/IPが使われるのが一般的となっており、インターネットの爆発的普及に伴うIP枯渇懸念からIPv6というバージョンも登場しましたが、ここでは、8ビット(0~255)の内、0と255を除く1~254の値の並び4組をドットでつないだ[192.168.10.3]といったようなものをIPアドレスとするIPv4を利用するものとします。
IPv4におけるIPアドレスは、ドットでつないだ8ビット4組の1組以上をネットワークアドレスとし、残りをホストアドレスとすることで接続したいホスト数に合わせた複数のクラスを選択できるようになっています。
つまり、[192.168.0.5]のような並びになるわけですが、例えば、ネットワークアドレスを最初の8ビット1組(8x1)とする場合、[***.***.***.***/8]、8ビット2組(8x2)とする場合、[***.***.***.***/16]、8ビット3組(8x3)とする場合、[***.***.***.***/24]のようにIPアドレス末尾にスラッシュとビット数を記述し、ネットワークアドレスのビット数を明示することもあります。
一方、世界で唯一となるグローバルアドレスとLAN内で唯一となるローカルアドレスがありますが、ここでは、ローカル環境なのでローカルアドレスについて言うと一般に[192.168.***.***]というアドレスが利用されます。
この内、3つめのドットの前までの8ビット3組[192.168.***]をネットワークアドレスとすると最後の1組[xxx]がホストアドレスとなり、2の8乗から便宜上0と255を除いた254台の端末を接続可能となります。
今回想定する開発環境には十分であり、このことから、ホストOSとゲストOSで同一の8ビット3組のネットワークアドレスを持つようにし、互いにかぶらない1~254をホストアドレスとすれば専用の通信環境を構築できることになります。
ホストOS(Windows Vista)でネットワーク環境を確認します。
ゲストOS(Arch Linux)でも同様にネットワーク環境を確認します。
# pacman -S net-tools
ゲストOSであるArch Linuxでは、[ipコマンド]に置き換わっており、非推奨とされてはいますが、Linuxで一般的な[ifconfigコマンド]を使いたい場合、pacmanという(実に巧妙に名付けられた)パッケージマネージャのSオプションを使ってifconfigを含んでいるnet-toolsというパッケージをインストールします。
ここでホストOSとゲストOSのネットワークアドレスが同一なら既に通信が出来る状態ですが、異なる場合には、別途設定が必要になります。
IPアドレスは、DHCPによる自動割り当てが一般的なのでホストOSもそうなっているケースが多いと思いますが、ここでは、ゲストOS上で調べたネットワーク文字列[inet]に続く[192.168.***.***]の内、最初の3組[192.168.***]まではネットワークアドレスとして同じ値を入れ、最後のxxxをホストアドレスとして1から254までで重複しない他の値に変えたものを[VirtualBox Host-Only Network]の[IPv4アドレス]に、[サブネットマスク]にネットワークアドレスのビット部を255、ホストアドレスのビット部を0として、一時的に設定することでホストOSとゲストOSを通信可能な状態とするものとします。
ホストOSがWindows Vistaの場合、下記のようにします。
これでホストOSとゲストOSが通信できる状態になっているはずです。
尚、作業が終わったらDHCPで自動割り当てするように戻しておかないとコマンドプロンプトからVBoxManageコマンドを利用する際などに「COM Serverが実行されてないよ!」といったエラーが出てコマンドを実行できなくなるのでVBoxManageコマンドを普段使わない人なら尚更、すぐに元に戻しておかないと、(遠い将来、)いざVBoxManageコマンドを使うことになった時にエラーの原因が特定できなかったり、そこに辿りつくまでに必要以上に時間がかかることになってしまう可能性が高いと思われるので注意が必要です。
次にサーバとするArch LinuxにApache、PostgreSQL、MySQL、MariaDB、Perlなど必要に応じて各ソフトウェアを準備します。
ちなみにMariaDBとは、MySQLがOracle社に買収された後、MySQLから派生したオープンソースのRDBMSであり、この登場に伴い、Arch Linux含む多くのLinuxディストリビューションが公式RDBMSとしてMySQLからMariaDBに切り替えています。
当該アプリケーションを探す時、Linuxでは、whichコマンドやwhereisコマンドでシステム内のどこにアプリケーションがあるかを調べたり、ディストリビューションごとのパッケージマネージャで当該アプリケーションを含むパッケージがインストール済みか否かを調べたりします。
# pacman -Q apache
# pacman -Q postgresql
# pacman -Q perl
Arch Linuxでは、pacmanにQオプションを付けると調べることができます。
# pacman -S apache
# pacman -S postgresql
# pacman -S perl
システム内にアプリケーションが存在しなければ、pacmanにSオプションを付けると依存関係を含め、必要なモジュールを含めてインストールすることができます。
Arch Linuxで既に稼働していたMySQLからMariaDBに切り替える方法は、MariaDB replaces MySQL in repositoriesを参照、このArch Linux上でMySQLを利用していなかった場合は、下記のようにMariaDB及び関連モジュールをインストールします。
# pacman -S mariadb libmariadbclient mariadb-clients
ここでは、PerlやRDBMSはさておき、Apacheについてのみ簡単に触れておきます。
Linuxでは常駐プログラムをデーモンと呼び、WebサーバであるApacheやRDBMSは、HTTPを処理するdeamonということで『httpd』(MySQL/MariaDBではmysqld)というデーモンプログラムを裏方で実行しておく必要があります。
# systemctl start httpd
#
Arch Linuxでは、コマンドラインからsystemctlコマンドにスペース、start、スペースに続けてサービス(ここではhttpd)を付けて[Enter]を押すとログイン中のみ有効となる常駐プログラムを実行させることができます。
# cat /etc/httpd/conf/httpd.conf | grep DocumentRoot
Apacheは、httpd.confファイルの『DocumentRoot』とある行に書かれたパスがIPアドレスでアクセスした際に見えるデフォルトのパスとなり、これを変更することもできますし、ユーザーごとにホームディレクトリ上にpublic_htmlなど任意のディレクトリを作ってそれぞれ公開できるように設定することもできます。
# vi /srv/http/index.html
#
本来は、ここを書き換えるなりしますが、ここでは、grepした結果、デフォルトとして書かれていた/srv/httpディレクトリにサンプルとなる任意のテキスト(HTML Test)を書きこんだだけのシンプルなindex.htmlを作成するものとします。
# pacman -Q lynx
# pacman -S lynx
テキストブラウザLynxを使おうと思ったら、Arch Linuxには、なかったので先の要領でインストールします。
# lynx http://192.168.***.***
#
先のゲストOSに設定されたIPアドレスをURLとしてlynxに引数として渡せば、DocumentRootパスにおいたindex.htmlの内容が表示されるはずです。
これでApacheが起動していること、ゲストOS内からDocumentRootのindex.htmlが見えることが確認できたことになります。
前段まででホストOSからもゲストOSとの通信はできるようになっているはずなので任意のブラウザのURL入力欄等に先のIPアドレスを入力すれば、同じくDocumentRootパスにおいたindex.htmlの内容が表示されるはずです。
これでホストOSとゲストOS専用(ホストオンリーアダプタ)の仮想ネットワーク越しにゲストOSであるArch Linuxサーバ上のWebサーバApacheを通じてウェブページを(ホストにのみ)公開、ここでは唯一ゲストOSと通信できるホストOSであるWindows Vista上のブラウザをクライアントとして閲覧することができたということになります。
つまり、普通にインターネットを見ている状態を1台のPCで仮想化(仮想的に実現)できたということです。
Apache上のCGIの設定やRDBMSの常駐、各種設定などここから後は、適宜やってみましょう。
このようにPC1台でも仮想マシンを使うとクライアントマシンとは別にサーバも用意でき、設定までできるので学習や練習、研究、開発の幅も広がり、本番環境に近いLAMP/XAMP環境も構築でき、とても便利です。