WHAT'S NEW?
Loading...

XAMPPでWeb開発などをしている人は直ぐにVMPlayerに変えたほうが良い【8/8】

今回はインスコしたパッケージの設定を行い、さらにWindows上で開発する際に便利なsambaも入れてみようと思う。

■各種パッケージライブラリのインスコ

まず設定に先立ち、必要なパッケージライブラリを豪勢にインスコしよう。
そのためにはrootになる。
# su -
パスワード
今回入れるライブラリは以下になる。
php-bcmath 任意精度演算に関する精度の拡大。つまり符号なし32ビット演算がオーバーフローを起こし、2038年問題を引き起こすのを未然に防ぐためにこれを入れておく
php-devel phpの開発者向けライブラリ。
php-gd GDライブラリのphp版
php-imap phpでIMAPをいじる場合に使用
php-ldap phpでldapをいじる場合に使用
php-mbstring 日本語圏なら必須。全角を正しく扱えるようになる(ただし完璧ではない)
php-mcrypt 暗号化のライブラリ。いろいろなOSSで使用されるので入れておく
php-mysql MySQLを使うなら必須
php-pdo phpでDBをいじる際、一番処理が速いので入れておく
php-pear phpで作られた各種ライブラリへのアクセス用に入れておく
php-pspell phpで辞書を扱う際に使われる便利なライブラリ。使用頻度は低いがオモロいので入れておく
php-snmp phpでsnmpを使う場合に使用
php-soap phpでsoapで通信する場合に使用
php-tidy htmlスクレイピングライブラリ
php-xml xmlを簡単に扱えるようになるので入れておく
php-xmlrpc xmlを使ったサーバ間通信などで使うので入れておく
mod_ssl なんちゃってSSLで使うので入れておく
mod_perl PerlをCGIじゃなくApacheモジュールっぽく動かして高速化するので入れておく
mod_dav_svn Subversionをhttp経由でアクセスさせるのに必須



中にはそれほど必要ないパッケージもあるだろうが、VMPlayerじゃない実際の本番サーバに入っているかもしれないようなものは念のために入れておくことにする。というわけで、以下のようにしてインスコする。
# yum --enablerepo=wing install php-bcmath php-devel php-gd php-imap php-ldap  php-mbstring php-mcrypt php-mysql php-pdo php-pear php-pspell php-snmp php-soap php-tidy php-xml php-xmlrpc
# yum --enablerepo=wing install mod_ssl mod_perl mod_dav_svn
これで必要なライブラリはインスコできた。

もしエラーが出るようなら、rpmforgeのenabledを1にして再度実行してみよう。

■各種パッケージの設定

ところで前回インスコしたパッケージの設定は、ほぼデフォルト状態だ。何気にショボい。
まずはhttpdの設定をまともにしよう。
※念のためファイル名に日付をつけてコピーしている
# cd /etc/httpd/conf/
# cp httpd.conf httpd.conf.20100301
# vi httpd.conf
このhttpd.confというのは知ってのとおり、httpdの設定ファイルだ。最低限以下の設定だけは済ませておく。

変更前 変更後
ServerTokens Os ServerTokens Prod
#ServerName www.example.com:80 ServerName centos.torhamzedd.com:80
Options Indexes FollowSymLinks Options Includes ExecCGI FollowSymLinks
AllowOverride None AllowOverride All
ServerSignature On ServerSignature Off
AddDefaultCharset UTF-8 #AddDefaultCharset UTF-8
#AddHandler cgi-script .cgi AddHandler cgi-script .cgi .pl
#NameVirtualHost *:80 NameVirtualHost *:80
LanguagePriority en ca・・・・LanguagePriority ja en・・・・

※Options設定とAllowOverride設定は、/var/www/htmlと/の2箇所で行うこと
※LanguagePriorityは、ja(日本語表示)を最優先するのでjaを先頭へ持ってくるという意味

バーチャルホストを有効にしたので、以下の場所に新規でバーチャルホスト用設定ファイルを作っておく。
# cd /etc/httpd/conf.d/
# vi virtualhost.conf
中身は以下でOK。
<virtualhost *:80>
  ServerAdmin    root@localhost
  ServerName     centos.torhamzedd.com
  DocumentRoot   /var/www/html
</VirtualHost>
ServerName は適宜、httpd.confと同じものを指定しておく。
これでhttpdの設定は完了だ。
そのほか自分が使いたい環境に合わせておく。
まだ再起動はしない。

次にphpの設定を行う。まずはUTF-8でスクリプトを動かすのを前提とし、その設定を行う。
# cd /etc/
# vi php.ini

変更前 変更後
;mbstring.language = Japanese mbstring.language = Japanese
;mbstring.internal_encoding = EUC-JP mbstring.internal_encoding = UTF-8
;mbstring.http_input = auto mbstring.http_input = UTF-8
;mbstring.http_output = SJIS mbstring.http_output = UTF-8
;mbstring.detect_order = auto mbstring.detect_order = auto
expose_php = On expose_php = Off

変更前が上記と違っても、すべて変更後と同じにしておけば問題ない。
※expose_phpはブラウザでレスポンスデータを見た場合、「X-Powered-By: PHP/5.3.0」のようにphpのバージョンがヘッダに含まれてしまうのを避けるため

次にMySQLの設定を行う。
# cd /etc/
# vi my.cnf
この中には[mysqld]という項目があるのだが、ここに文字エンコーディングの設定を追記する。old_passwords=1の下にdefault-character-set = utf8を追記。さらにその下にskip-character-set-client-handshakeを追記する。
今度は[mysql]という項目を追記し、中身に同じくdefault-character-set = utf8
を追記する。
最終的に以下のようになったはずだ。
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Default to using old password format for compatibility with mysql 3.x
# clients (those using the mysqlclient10 compatibility package).
old_passwords=1
default-character-set = utf8 
skip-character-set-client-handshake

# To allow mysqld to connect to a MySQL Cluster management daemon, uncomment
# these lines and adjust the connectstring as needed.
#ndbcluster
#ndb-connectstring="nodeid=4;host=localhost:1186"

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[ndbd]
# If you are running a MySQL Cluster storage daemon (ndbd) on this machine,
# adjust its connection to the management daemon here.
# Note: ndbd init script requires this to include nodeid!
connect-string="nodeid=2;host=localhost:1186"

[ndb_mgm]
# connection string for MySQL Cluster management tool
connect-string="host=localhost:1186"

[mysql]
default-character-set = utf8

これで基本的な設定は全部終り。後はサーバを再起動する。
# service httpd restart
# service mysqld restart

■sambaでファイル共有する

次に、Windows側、つまりホストOS側からCentOS側、つまりゲストOSへ、フォルダを開くだけでファイルにアクセスできるようにする。sambaを使う。

sambaとは、CentOSなどのLinuxがWindows NTのふりをしてくれる便利なデーモンで、Windowsからフォルダを開くだけでLinuxサーバのファイルにアクセスすることが可能になる。

したがって、CentOSなどのLinuxでhttpdが見える場所、つまりApacheのDocumentRootにsamba経由でプロジェクトファイルを置いておけば、Windows側で編集後、即座にブラウザでCentOS側の内容を閲覧することが可能になる。今回の目的はこれだ。

というわけでsambaをインスコする。
# yum --enablerepo=wing install samba
次に、sambaのユーザをつくなら無いといけない。
 Windows XPなどのクライアントOSが、Windows Server 2008などのサーバOSにアクセスするとき、どっちのユーザも同じIDで同じパスワードなら、ログインという作業自体がいらなくなり、シームレスにアクセスすることが可能になる。それと同じことをやってみるわけだ。

つまり、上記に当てはめると、使っているWindows XPなどをクライアントと考えた場合、CentOS側にインスコしたsambaがWindowsサーバになる。なので、sambaのユーザとWindowsのユーザが一致していれば良い。

本来、もしあなたがお使いのWindowsに
  • ID yakutatazu
  • PS gokutsubushi
でログオンしているのであれば、CentOS上にyakutatazuユーザがいて、パスワードがgokutsubushiであることが望ましいわけだ。

しかし実際にはそうもいかない。ユーザ名が同じでも、パスワードが違っていたりする。それに、WindowsマシンとCentOSなどのLinuxのユーザ名、パスワードが同じというのもセキュリティ的によろしくないから、たいてい違うパスワードが設定されているということもしばしばあるのではないだろうか。

今回は、CentOSのユーザとsambaユーザをバインドしてしまうので、パスワードが別でも問題ない。ユーザ名だけはWindowsとCentOSで同じにしておく。
※Windows側にあわせる必要が出てくると思うので、CentOS上に同じユーザがいなければ作っておくこと

- Windowsユーザ sambaユーザ Linuxユーザ
ユーザ名 ogaaaan ogaaaan ogaaaan
パスワード kamisama kamisama shiranugahotoke

上記のように、たとえWindows側でログオンする際のパスワードとCentOS側でログインする際のパスワードが違っても、sambaでバインドしてしまえば問題ないわけだ。
※sambaユーザのパスワードがWindowsユーザのパスワードと違う場合、Windowsからsamba経由でCentOS内のフォルダにアクセスする際、パスワード入力が求められてしまう。

今回はogaaaanというユーザでWindowsからCentOS内を見れるようにする。
Windowsログオン時のパスワードはkamisamaとする。
# pdbedit -a ogaaaan
このコマンドを入力すると、ogaaaanという「Windowsサーバのユーザ」つまり「sambaユーザ」のパスワード入力を聞かれる。kamisamaを2回入力する。繰り返しになるが、ここで入力するのはCentOS側で作ったユーザのパスワードではなく、使っているWindowsのログオンパスワードを入力すること。

次に、Windowsからアクセスがあった場合、どこの場所を見せるのかを設定する。
# cd /etc/samba/
# cp smb.conf smb.conf.20100301
# vi smb.conf
このファイルはなんだかごちゃごちゃとうっとおしい内容がたくさん書かれているので、いったん中身は全部削除してしまってよい。
そして最終的な書式は以下のようになる。
[global]
  unix charset = UTF-8
  dos charset = CP932
  display charset = UTF-8
  workgroup = mshome
  hosts_allow = 192.168. 127.
  load printers = yes
  disable spools = no

[ogaaaan]
  comment = ogaaaan's home
  path = /home/ogaaaan
  read only = no
  create mask = 0644
  force create mode = 0600
  security mask = 0555
  force security mode = 0600
上記内容を記述したら保存して終了。

名称部分はsambaユーザ名でつけておく。この場合[ogaaaan]だ。そのほか、workgroup、hosts_allowは適宜、自分の使っているネットワーク環境に合わせること。
hosts_allowの192.168.は、たとえばWindows側が192.168.1.20とか192.168.10.4などからアクセスできるように、共通部分の前2オクテット(つまり192.168.)だけ指定しておくという記述方法。同じように自分自身からのアクセスも可能にするために、127.とも指定しておく。
comment、pathなども適宜、使用状況に合わせて適宜編集すること。

次に、sambaをブラウザで管理できるswatをインスコする。
# yum --enablerepo=wing install samba-swat

このswatはxinetdというスーパーデーモン(デーモン郡を管理するデーモン)を使っているので、xinetd向けにsambaの設定ファイルを以下のように編集する。
# cd /etc/xinetd.d/
# vi swat
port901
socket_typestream
waitno
only_from127.0.0.1 192.168.1.0/24
userroot
server/usr/sbin/swat
log_on_failureUSERID
disableno

編集が必要な箇所はonly_fromとdisableだ。only_fromのほうは、sambaの設定と同じく、自分の使っているネットワーク環境にあわせること。

次にこのswatを起動するのだが、xinetd経由で動く仕組みになっているので、最初にxinetdを起動しなけならない。
# service xinetd start
そしてxinetdもCentOS起動時に自動起動するように設定しておく。
# chkconfig xinetd on
これでCentOS上のブラウザでlocalhost:901を見てみよう。BASIC認証ダイアログが表示されるので、CentOSのrootのID、パスワードを入力すること。


無事にswatが見れたら成功だ。
「STATUS」のページからsambaを起動する。具体的には、「smbd」と「nmbd」を起動すればよい。ボタンをクリックするだけなのですぐに終わるだろう。

※もちろんコンソールで # service smb start、# service nmb startとして起動しても良い

CentOS起動時に自動的にsambaを起動させる設定も行っておく。
# chkconfig smb on
# chkconfig nmb on

■固定IP化

sambaの構築に伴い、CentOSのネットワーク設定を固定IPに変更しておく。
固定IPにしておくことで、ホストOSであるWindowsからゲストOSであるCentOSへ、毎回再設定なしでアクセスできるようになるからだ。

これはたとえば、ホストOSであるWindows上でeclipseや秀丸などの開発ツールを起動し、編集対象となるソースファイルはゲストOS側であるCentOSに入れておく、そしてそれらのソース置き場はゲストOSであるCentOSのドキュメントルートにしておけば、Windows側からもCentOS側からもどちらからでもブラウザで閲覧、確認ができるようになるからだ。これがVMPlayerを使う理由だ。

というわけで、さっそくCentOSのIPアドレスを固定化する。
CentOSのネットワーク設定が書かれているファイルを直接編集する。
# cd /etc/sysconfig/network-scripts
# vi ifcfg-eth0
このファイルに固定IPやゲートウェイなどを書いておく。
今回はこのCentOSを192.168.1.222としてみた。ゲートウェイ(ルータのIPアドレス)は仮に192.168.1.1としてある。
最終的にはこのような内容になる。
DEVICE=eth0
BOOTPROTO=static
HWADDR=**:**:**:**:**:**
ONBOOT=yes
TYPE=Ethernet
IPADDR=192.168.1.222
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
※HWADDRはMACアドレスなので、使っている環境によってまちまちだ。下手にいじらないで置こう。
※ここに書いてない項目は行ごと削除してよい

次に、VMPlayerをNAT接続からブリッジ接続に変更する。
VMPlayerのメニュー「VM」から「設定」を開き、「ハードウェア」タブの「ネットワーク」を「ブリッジ:物理ネットワークに直接接続」にしてOKする。


これらの設定を済ませ、ネットワークを再起動すれば、いつでもWindowsからsamba経由でアクセスできるようになる。というわけでネットワークの再起動を行う。
# service network restart
もちろん先ほど述べたとおり、ホストOSであるWindows側からブラウザでアクセスすることも可能だ。
その際はWindowsのhostsファイルに
192.168.1.222  torhamzedd.com
などと記述しておけば、http://torhamzedd.com/がそのままブラウザで使えるURLとなる。

で、このままだとゲストOS側からインターネットに接続できない。その理由は、DNSサーバの設定がされてないからだ。今まではNAT接続だったので、ホストOS側のDNS設定をそのまま使っていたが、今回はブリッジなので、別途CentOS側のresolv.confにDNSの設定を追記しておかないといけない。

ついでにだが、MTAなどを導入した際に面倒がないように、DNS以外にもドメインの指定もしておくとする。searchの後に、ホスト名を指定すればOKだ。メールアドレスなどでドメイン不明の場合、localhost.localdomainのようになってしまうが、それがsearchで指定したドメインに変更されるようになる(もちろんこんなことがないようにMTA入れるならちゃんとMTA側で設定しておけ!だ)。
# cd /etc/
# vi resulv.conf
記述する内容は、
search centos.torhamzedd.com
nameserver 111.111.111.111
nameserver 222.222.222.222
nameserverの部分は貴様のWindowsに設定されているDNSのプライマリ、セカンダリをそれぞれ記述すれ良い。もし貴様のWindowsがDHCPで動的にIP割り当てをされている残念な環境であるなら、nameserver部分にはルータのIPアドレスを1個入れておけば大抵OKだろう。
たとえばゲストOSであるCentOSにphpMyAdminを入れたとして、それをWindows側からhttp://phpmyadmin.torhamzedd.comとして閲覧可能にするには、ゲストOS側httpdのバーチャルホストの設定、ホストOS側のhostsファイルの設定が必要になる。少々わかりにくいかもしれないが、とにかくバーチャルホストを設定したら、Windowsのhosts、ゲストOS側CentOSの/etc/hostsにも同じ内容を書いておくと、混乱が少ない。具体的にはこうだ。※phpmyadmin、testというサブドメインをバーチャルホストとして設定する例

【ホストOS側(Windows)】
\c:\\windows\system32\drivers\etc\hosts

192.168.1.222 torhamzedd.com
192.168.1.222 phpmyadmin.torhamzedd.com
192.168.1.222 test.torhamzedd.com
・・・

【ゲストOS側(CentOS)】
/etc/hosts

127.0.0.1 centos.torhamzedd.com centos localhost.localdomein localhost torhamzedd.com phpmyadmin.torhamzedd.com phpmyadmin.localhost test.torhamzedd.com test.localhost
・・・

【ゲストOS側(CentOS)バーチャルホスト】
/etc/httpd/conf.d/phpmyadmin.conf <confファイルであればファイル名は任意

<VirtualHost *:80>
ServerAdmin root@localhost
ServerName phpmyadmin.torhamzedd.com
ServerAlias phpmyadmin.localhost
DocumentRoot /home/apache/phpmyadmin <この場所は任意
</VirtualHost>
<VirtualHost *:80>
ServerAdmin root@localhost
ServerName test.torhamzedd.com
ServerAlias test.localhost
DocumentRoot /home/apache/test <この場所は任意
</VirtualHost>

上記設定の後、ちゃんとphpmyadminとtestディレクトリが作られているのが前提でhttpdを再起動すれば、後はホストOSのWIndowsからでもゲストOSのCentOSからでも、正しくブラウザで中身を見ることができる。
最後に、Windows側のcentosのvmxファイルのショートカットをつくり、それをWindowsのスタートアップに入れておけば、Windows起動時にすぐに開発環境が揃うというわけだ。作業を終える場合、特にCentOSを終了させる必要はないので、すぐに始められる。すばらしい。

これであなたはXAMPPという擬似Linuxから脱却するのに成功し、本物のLinuxで開発が出来るという、新しく明るい人生を歩み始めたことになる。ぜひXAMPPを使っているユーザにも教えてあげよう。

めでたしめでたし。
※補足
今回はGUIとしてGNOMEを入れてあるので、CentOS上でブラウザを使った検索などが可能だ。そのため、ブラウザにぜひ入れておいたほうが精神衛生上よろしいプラグインがある。あの悪名高きFlashプレイヤーだ。

たとえばFireFoxなどでFlashが存在するページを閲覧すると、プラグインのインスコ画面が表示されるが、実はこれ、Adobeの超悪質ないたずらとしか思えないクソまみれの汚物仕様なのである。

ここからはプラグインを絶対に正しくインスコすることができない。クソだ。正しいプラグインの場所をあえて教えないという、Adobeというクソ企業がそのまんまクソなのである。

というわけで、rootで以下のコマンドを入力して、己の手でインスコしようじゃないか。

# yum --enablerepo=rpmforge install flash-plugin

いじょ。
※補足
ブリッジ接続すると、ホストOSからゲストOSへsambaはつながるが、ゲストOS内で外部へ接続できなくなる!という輩が大量発生しているのか?

どうにもこうにもよくわからんが、いろいろなPCを使って、あえてその状況を作り出してみた。原因は以下のようなものになると思う。ありがたい解決法として子々孫々伝えるが良い。

【ホストOS側】セキュリティソフトのファイアウォールが遮断している
  • 一度セキュリティソフトを停止させてゲストOSで外部へ接続してみる。接続できればセキュリティソフトが原因。セキュリティソフトのファイアウォールの設定で「ブリッジ接続を許可する」などの設定があれば、許可する設定にしておこう。瞬時に繋がるようになるはずだ。
【ゲストOS側】/etc/sysconfig/network-scripts/ifcfg-eth0 の内容が間違えている
  • IPアドレスの指定に注意。BOOTPROTOはstaticにする
  • 当然IPADDRが実際に存在するIPアドレスと重複していてもダメだ
  • とくにGATEWAYが間違えていると確実に外部へつながらない
【ゲストOS側】/etc/resolv.confの設定が間違えている
  • ホストOS側のDNSサーバと同じものを指定しなければいけない。
    nameserver 111.222.333.444、など、ホストOS側のDNSと同じ者を書いておく。
【ゲストOS側】そもそもネットワークサービスが起動していない
  • rootになり、 service network start でネットワークサービスを実行。ゲストOS起動時に自動敵に実行させるには、同じくrootで chkconfig network on でOK
【ホストOS側】チェックサムのオフロードが有効になっている
  • マイコンピュータ右クリック>プロパティ>ハードウェアタブ内にある「デバイスマネージャ」を開く
  • ネットワークアダプタ内にある、実際に使っているネットワークカードを右クリックしてプロパティ
  • 詳細設定タブのプロパティ欄にある「Checksum Offload」や「チェックサム」などと書かれた項目を選択し、値を「Disable」もしくは「無効」などにする(Windowsの再起動が必要)
というわけで、上記解決策は“上から順番に”試してみると良い。

それでは良きVMplaeryライフを送られんことを切に願う。

もうおわり。