unoh.github.com

VMwareとCentOSでウェブ開発の環境をさっさと整える手順書(前編)

2006-11-21 10:42:00 +0900

最近オイルヒーター,ガスファンヒーター,石油ファンヒーターのどれを買おうか悩みつつPHPのフレームワークはSymfonyにかなり転がりそうなjokagiです. 私が遅いので気を遣ってkomagataさんが先に書いてくださいました. ナイスフォローありがとうございます.

さて今回は,先日参加した開発合宿をはじめ最近何度かLinux環境を用意する必要性が連続したので,その辺りの作業を手短にする手順を紹介します. 慣れれば最低限の環境は10分程度,全部で30分あれば十分ウェブ開発に必要な環境を用意できるようになります.

とりあえずLinuxはCentOSでバージョン4.4用にServerCDというのがあるので,それとVMware Serverを使います.

まずVMware ServerのインストールとCentOSのisoイメージを下記リンクあたりからダウンロードしてください. VMware Serverはライセンスを入力しなければいけないので仕様ライセンスの取得も忘れずに. また,VMware Serverを用いた運用についてはライセンスの内容を十分確認してください.

VMware ServerのインストールはWindowsの場合だと一般的なWindwosアプリケーションと同様です. Linuxの場合,Red Hat系ならRPMがあるので「rpm -ihv <ファイル名>」ですぐインストールができます(ただしvmware-config.plを実行し,最低限の動作設定をする必要がありますが). 一応Administator権限が必要だと思いますので,権限のあるアカウントでインストール作業を行ってください(多分再起動が必要なので注意してください)

次にGuestOSの作成を行います. とりあえずこんな感じで作成しました.

基本的にデフォルト.種類はLinuxでRed Hat Enterprise Linux 4を選ぶ
CentOSはRed Hat Enterprise Linuxをベースに作成されているので,ここではRed Hat Enterprise Linux 4を選択するといいでしょう.
仮想ディスクサイズは20GB,容量確保は動的でで2GBスプリットは行わない
20GBにはあまり根拠はありません.大体5~10GB前後あればいいかもしれません. 容量を最初から確保しないのは,私は沢山GuestOSを作成するので(以前は20~30は常時持っていて大体10は同時に使用していた)HDDもう1個用意をケチっています. 2GB分割をしないのはファイルが増えるのがいやなだけだったりします.
ネットワークはNATインターフェースを選ぶ
Bridgeを選ばないのには理由があり,Bridgeは有効なネットワークインターフェースが存在しなければ何もネットワークが起動しなくなるからです. NATインターフェースなら少なくともHostOS上からは常にアクセスができるようになります. また,外部からアクセスさせた場合はrouteコマンドなどでパケットがこちらに飛ぶようにして貰えばいいだけなのでそんなに面倒な話ではありません.
CDは仮想CDで先ほどダウンロードしたisoを指定する
CDやDVDはいちいち焼く必要はありません. 限りある時間や資源の無駄遣いです. エコで行こう.

後はこれで一般的な手順でanaconda(インストーラー)を進めていきます.

個人的にはこの辺で若干標準ではない操作と設定をします.

  • 画面左下の「Hide Help」で左のヘルプを隠す(まず読まないヘルプエリアが消えるので編集画面が広くなる)
  • キーボードはUS Internationalにします.開発者は英語キーボードがいいですよ.超お勧めです.
  • ファイアウォールとSELinuxは無効にする.やる気があるなら後で調整しましょう.
  • インストールするロケールはEnglish(USA)もチェックします.半分気分的なものですが.
  • 「インストールするソフトウェアパッケージをカスタマイズ」を選び,次の画面で「最小」を選ぶ

キモは最小を選ぶことです. 実際に使用する時期が後になればなるほどパッケージをインストールした環境を構築していてもアップデートが出てきて再度アップデートする必要が出てきがちです. じゃー最初から入れなきゃいいじゃん!!ってことで必要なものは後でyumでインストールする方が手っ取り早いです. さてこれでインストールするとおおよそ手元のノート(おおよそスペックはDELL製 XPS M1210,Core 2 Duo,nVidia,メモリ1GB,7200rpm HDD)5分未満でインストールできました. インストールができたらとっとと再起動します. このときこのGuestOSのディスク容量はおおよそ850MB前後でした. コンパクトでいいですね. うまく圧縮できればぎりぎり800MBのメディアならCDにも入るかもしれません.

ちなみに再起動したときはVMwareのロゴがでてきたころにGuestOSの電源を落とし,イメージをコピーしておきます. これで何度でもやり直せます.やり直したいときは5分でも面倒くさいですから.

ちなみに実は後でいろいろパッケージを追加します.その追加されたイメージをコピーしておいてもいいですが,個人的にはコンパクトさ重視でこの状態を保存しておきました.

さてやっとLinuxをちゃんと起動します. ここでrootでログインし,まずネットワークの設定を行います. VMware ServerのNATはインストール時に存在しないネットワークアドレスを探し,見つかったらそれをNAT用のネットワークアドレスにします. 今回私の環境では192.168.112.0/24がそれに当たりました.

VMware ServerのNATネットワークは最後の8ビットのうち1をHost OSのNAT側インターフェースとして,2をゲートウェイとして,128~254をDHCP用に割り当てるようで,それ以外なら固定IPアドレスとして使用することができます. 私はよく5~10あたり(つまり例えば今回なら192.168.112.5~192.168.112.10)に固定IPアドレスで設定し,サーバーとして使用します. 設定はエディタでやってもいいですコマンドnetconfigもお手軽です.ただしコマンドnetconfigはコンソールベースだと文字化けする場合があるので,LANG=Cを付けて起動しましょう.

# /usr/sbin/netconfig

今回開発サーバー用のIPアドレスは192.168.112.10ということにしたので,netconfigを用いると大体こんな感じになります.

[root@tjokagi ~]# /bin/cat /etc/sysconfig/network-scripts/ifcfg-eth0
# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.112.10
NETMASK=255.255.255.0
GATEWAY=192.168.112.2
HWADDR=00:0C:29:2C:C6:3E
[root@tjokagi ~]# /bin/cat /etc/resolv.conf
; generated by /sbin/dhclient-script
search localdomain
nameserver 192.168.112.2

若干この設定に関する補足を下記にしておきましょう.

ifcgh-eth0のHWADDRは削除するかコメントアウトするほうがいいかもしれない
HWADDRはインターフェースのMACアドレスが入るのですが,通常ネットワークインターフェースにはMACアドレスが付加されていますが,VMware Serverは使用上設定ファイルのパスをベースにMACアドレスを生成します. つまりフォルダーを移動するとMACアドレスが変化する可能性が出てきます(一応GuestOS起動時にどうするか確認してくる). 設定ファイル上のHWADDRはインターフェースのMACアドレスが入るのですが,これと実際のMACアドレスが不一致だった場合,インターフェースが起動しません. この原因に気づかなければずっとインターフェースが起動できなくなってしまいます.
resolv.confのsearchやdefaultdomainの設定をどうするか
個人的にサーバーを指定するときにいわゆるホスト名には必ずFQDNを指定するようにしています(jokagi.example.comなど) これをホスト名だけで指定する方はresolv.confにsearchやdomainの値を適切に指定する必要があるでしょう.

次にサービスの設定をします. コマンドsetupでCUIを使って設定もできますが,個人的にはchkconfigを用いてCLIで設定するが好みです. 厳密にやると面倒なのですが,基本的に外からアクセスされることのないウェブ開発として準備していたので最低限のもののみ停止します. 下記は「cups」「isdn」「kudzu」gpm」「smartd」「pcmcia」のサービスを停止します.

# for SERVICE in cups isdn kudzu gpm smartd pcmcia; \
  do /sbin/chkconfig ${SERVICE} off; done
 (実際は1行です)

次に必要そうなパッケージをガンガンいれていきます.

# /usr/bin/yum update
# /usr/bin/yum install httpd postfix openldap-servers postgresql-server mysql-server
# /usr/bin/yum install php php-{mbstring,pgsql,mysql,ldap,imap}
# /usr/bin/yum install emacs rpm-build gcc

1回目のyumはまずシステム全体のアップデートを行います. これは少し時間がかかるかもしれません.

2回目のyumはサーバー系のインストールです. 自分が必要だと思う分だけインストールしましょう.

3回目のyumはphpで必要なRPMをインストールしました. 個人的に「PEARはRPMで管理するべからず」と考えているので,後々http://go-pear.org/から別途インストールします.

最後のyumは単にメインのエディタにemacsを使っているから入れています. のちに自分で準備したPHPのRPMをビルドするためにとりあえず最低限の開発関連のパッケージをインストールしています(今入れてもどうせ後でもっとたくさん入れないといけないんだけど).

次にuseraddで一般ユーザーを作成し,ウェブ開発用のグループを作成します. 作成した一般ユーザーにはパスワードもちゃんと付け,vigrを用いてwebに所属させます. 作成した一般ユーザーはsshの公開鍵をちゃんと入れておき,パスワードログインはしないようにしましょう.

# /usr/sbin/useradd jokagi
# /bin/passwd
# /usr/sbin/groupadd web
# /usr/sbin/vigr

ここでなぜわざわざ新しいグループを作るかというと,共同作業などを行う場合,ディレクトリに特殊なパーミッションしていして作成すると共用ディレクトリのようなものを実現できるため,この作業はその下準備とします.

# mkdir /home/web
# chmod g+s /home/web
# chgrp web /home/web

これでグループwebに追加されているか阿吽とが/home/web配下でファイルやディレクトリを作成するとそのファイルやディレクトリのオーナーグループはwebになります. umaskを0002にしておけばグループでの読み書きが可能になるので実質共用フォルダーのようなものが実現できるようになります.

次に,またvigrを用いて今度は先ほど作成したユーザーをグループwheelに所属させ,visudoを用いてsudoの設定をします. sudoの設定でwheelはsudo経由でrootになれるようにし,sudoを併用することにより一般ユーザーをrootに直接ログインしないでいい環境にします.

# /usr/sbin/vigr    (「wheel:」で始まる行の右にカンマ区切りで先ほど作成したユーザーを追加)
# /sbin/visudo      (「# %wheel」で始まる行にある行頭の「#」を削除する)

「# %wheel」と書いている行は「NOPASSWD:」という文字列を含む行の方の行頭の「#」をはずすとsudoをするたびにパスワードが聞かれなくなります. これを使うか使わないかは運用方針と好みになりますね.

# su - jokagi
$ mkdir -p ~/.ssh
$ chmod go-rwx ~/.ssh
$ vi ~/.ssh/authorized_keys2
$ chmod go-rwx ~/.ssh/authorized_keys2

ssh関連はパーミッションなども意識して動作するので,しっかり設定してあげてください. 最後にsshd(sshサーバー)の設定をします. 今回はrootへはssh経由でログインできないようにし,パスワードでのログインも禁止します.

# /usr/bin/vi /etc/sshd_config

編集のポイントは下記のようになり,編集が終了したらsshdを再起動します.

  • PermitRootLogin no
  • PasswordAuthentication no
# /sbin/service sshd restart

これでLinuxにログインする上で最低限のことができました. だいたいここまでで慣れれば合計10~15分で設定できます. Windows上に(Linux上でも動くみたいですが)httpdなどを用意するXAMPPなどもありますが,この程度の時間で最低限のインストールができるなら(おそらくより本番環境に近い)Linuxをさっさと入れる方が最終的には近道になるという考えもあります. 特に複数の案件を同時にこなしたい!!といったときは,開発環境をきっちりわけて持っておく方がより確実な開発環境になります.こういった場合VMwareならGuestOSのイメージを必要分持てばいいだけですが,XAMPPでは中々難しいでしょう. 今となっては仮想技術のようなものは他にはcoLinuxやXenなどもありますが,それなりに沢山のバリエーションのOSやディストリビューションを使用する目的でVMwareを(バージョン1がリリースされる前から)用いていた身には他の環境に移るモチベーションを中々持つことができずにいます.

さて手短にとかいう出だしの割りに長くなったので今回はここで終わります. 次回はここからhttpdの設定などを行います.って肝心なところだろ!!とも思いますがご了承ください. httpdの設定などはなるべくメンテナンス性などを意識した開発環境の構築などを紹介したいと思います. 興味がでてきた方は首を長くして話半分で期待してください.

今回の結論としては子供がいる家庭で暖房器具は何にするのが最適かというお話でした. もしいいアドバイスがあるかたは私のブログなどにでも適当なエントリにコメントをいただければと思います. それではあでゅー