オープンソースこねこね

Webプログラミングなどについてあれこれ。

VirtualBoxを使った仮想Linuxサーバのローカル開発環境構築

自宅のPCで開発に使用している仮想環境をVMwareからVirtualBoxに変えてみました。こやつなかなかイイ感じ、なので、インストールから設定までざっくりと記録しておきます。なお構成は以下のようになります。

  • ホストOSはWindows。
  • ゲストOSはCentOS5。
  • ゲストOSは普通のサーバと同じようにホストOSからSSHのターミナルで接続できるようにする。
  • ゲストOSからインターネットに出れるようにする(yumとか使うので)。
  • 開発中ゲストOSのファイルをホストOSから直接編集できるようにsambaを使う。

VirtualBoxのインストール

https://www.virtualbox.org/

の左メニューにあるDownloadsのリンクからダウンロードページへ。VirtualBox platform packages.のVirtualBox 4.1.8 for Windows hosts x86/amd64をダウンロード。ダウンロードしたらインストーラーを立ち上げて指示にしたがい普通にインストールするだけ。インストール中に  [インストールを続行した場合、システムの動作が損なわれたり、システムが不安低になるなど。。。ふがふが]  というような警告がでるが、ガン無視して続行。Oracleさんを信じて続行。

Biosの設定

64bitOS(Centos5.5 x86_64とか)をゲストOSにする場合はCPUがVT-xに対応している必要があるっぽい。デフォルトだと無効になっている場合があるので、これを有効にするためBiosの設定を行う。PC起動中にF2かDelete押してBiosの設定画面を出す。VT-xの設定がどっかにあるのでEnableとかに設定してPCを再起動します。VT-xに未対応なCPUの場合はあきらめて32bitOSを使うしかないでしょう。たぶん。CPUについては筆者が全然くわしくないのでこれくらいしかわかりません。

仮想マシンを作成する

VirtualBoxを起動します。[新規]のアイコンをクリックするとウィザード形式で仮想マシンが作成できる。ここでは以下のように設定します。

最後に[create]をクリックして作成完了。

仮想マシンにネットワーク設定をする

仮想マシンにOSインストールする前にネットワークの設定をしておきます。作成した仮想マシンのアイコンを右クリックして[設定]を選ぶ。[ネットワーク]→[アダプタ1]のタブを選択して[ネットワークアダプタ]を有効化にチェック。[割り当て]がNAT。になっていることを確認する。

次に[アダプタ2]のタブをクリックして[ネットワークアダプタ]を有効化にチェック。[割り当て]にホストオンリーアダプタを設定。これで

  • ゲストOS→Internet接続にはNATでホストのNICを利用。
  • ホストOS→ゲストOS接続にはホストオンリーアダプタを利用。

するようになり、ゲストOSへのSSHやゲストOSからのインターネット接続ができるようになります。なおVirtualBoxのネットワーク環境は以下の記事がわかりやすいです。

http://nwing.knowd.co.jp/yamazaki/index.php?q=node/169

CentOSのイメージファイルをダウンロードする

https://www.centos.org/

のDownloadsメニューからミラーサイトを選んで.isoファイルをダウンロードする。(CentOS-5.5-i386-bin-DVD.isoとかCentOS-5.6-x86_64-bin-DVD.isoなどをダウンロードする)。最小構成が好きならminimal.isoがいいかも。

仮想マシンCentOSをインストールする

作成した仮想マシンのアイコンを右クリックして[起動]を選ぶ。初回起動ウィザードが起動するので、[次へ]を押す。[インストールメディアを選択]にてフォルダのアイコンをクリックして先ほどダウンロードしたCentOSの.isoイメージファイル選択する。最後に[起動]をクリックすると、CentOSのインストール画面になります。

お好みの設定でCentOSをインストールしましょう。ネットワークの設定ではeth0、eth1の2つのネットワークデバイスがあるので、両方共[起動時にアクティブ]に設定します。そしてeth0はNATを使用してゲストOSからInternetに接続するNICなのでDHCPに設定。eth1はホストOSからゲストOSに接続するときに使うNICなので固定でIP(192.168.56.11/24)を割り振ります。

※eth0のDHCPやeth1に割り振った192.168.56.xxのネットワークはVirtualBoxが用意している仮想のネットワークでこの環境設定は[ファイル]→[環境設定]→[ネットワーク]→[ホストオンリーネットワーク]→[VirtualBox Host-Only Ethernet Adapter]を右クリックして[ホストオンリーネットワークの編集]で確認できます。

CentOSの環境設定

インストールしたCentOSを開発環境用に設定します。

SELinuxを無効化

# vi /etc/selinux/config
SELINUX=disabled #disabledに修正
# setenforce 0

iptablesの設定

# vi /etc/sysconfig/iptables
#-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited
# REJECTをコメントアウトしてアクセス制限させないようにする。ローカル環境なのでファイアーウォールはいらない子。
# /etc/init.d/iptables restart

SSH接続を確認

たぶんデフォルトでsshdは起動している。ホストOS(Windows)→ゲストOSの接続を確認する。SSHクライアントで192.168.56.11に対してrootで接続。ローカル環境なのでrootログインも気にしない。

sambaをインストール

# yum install samba
# cd /etc/samba
# vi smb.conf

以下のように修正する。

[global]
    workgroup = MYGROUP
    server string = Samba Server Version %v
    
    ....
    security = share       # shareに修正
    passdb backend = tdbsam
    
    ....
    
    load printers = no     # noに修正
    cups options = raw
    
    create mask = 664      # 追加(ゆるくいくなら777でも
    guest account = root   # 追加 (rootアクセスでやりたい放題
    disable spoolss = yes  # 追加
    

[public]                   # 最終行に追加
    comment = Public Stuff
    path = /
    public = yes
    writable = yes
    hide dot files = no
    oplocks = no

sambaを起動

# /etc/init.d/smb start

これでホストOS(Windows)のエクスプローラーを使って

\\192.168.56.11\public

にアクセスするとルートディレクトリからまるっとCentOSファイルシステムにアクセスできるのであとは好き放題やってやるです。こうすることでWindows上の慣れた環境でソースコードをいじりながら、各種実行環境は本番サーバー同様のLinux上のものを 使うことができるので便利です。

終わりに

大体こんな感じです。ローカルの仮想環境なので、ユーザ権限なんかはroot使いまくりのゆるゆるです。あとノートPCにこの環境を作っているのですが、sambaでホストOSからゲストOSのテキストファイルを編集したままPCをスリープモードにすると、復帰したときにファイルがロックされて以後ゲストOSから書き込みできないことがありました。PCスリープさせるときはゲストOSからアクセスしているファイルを全部とじてからやったほうが無難のようです。

んでデスクトップはこんなん

f:id:kohkimakimoto:20120119055004p:plain

ローカルの仮想環境だと最悪環境ぶっ壊してもいいやって気になってイロイロできてすごく。。。いいです。

追記

minimal.isoだとOSインスコ時にネットワークの設定ができないので、インストール後ネットワークの設定ファイルを修正する必要ありでした。以下サンプル

# /etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE="eth0"
BOOTPROTO=dhcp
HWADDR="08:00:00:00:00:00"  # ココは環境ごとに違う
NM_CONTROLLED="yes"
ONBOOT="yes"
# /etc/sysconfig/network-scripts/ifcfg-eth1

DEVICE="eth1"
BOOTPROTO=static
HWADDR="08:00:00:00:00:01"  # ココは環境ごとに違う
NM_CONTROLLED="yes"
ONBOOT="yes"
IPADDR=192.168.56.11
NETMASK=255.255.255.0
NETWORK=192.168.56.0
BROADCAST=192.168.56.255