読者です 読者をやめる 読者になる 読者になる

開発用の純真無垢で高速なVMの作り方

Linux

CentOS 5.5をベースに、サクサク動く快適VMの作り方。
インストールは済んでいるものとする。

1. beep音を消す

デフォルトインストール時ではやけにBeep音が鳴ってうるさいので消す。

コンソールのBeep音を消す
/etc/inputrc に「set bell-style none」を記述する。

$ vi /etc/inputrc

set bell-style none <- none にする

同様に、ターミナルのプロファイルからもbeep音が鳴らないようにする。
ターミナルを開き、[Edit] -> [Profiles] -> [Edit] -> General タブの [Terminal bell] チェックボックスをオフにする。

次にシステム全体でスピーカー関連を使用しないよう、pcspkr モジュールを読み込まないようにする。

$ vi /etc/modprobe.d/blacklist

....
blacklist pcspkr <- 追加

2. 不要なサービスの停止

bluetooth 等不要なサービスが多数あるので、必要なもの以外全て停止する。
参考 : http://kajuhome.com/service_list.shtml

色々停止していった結果、ランレベル3で起動するサービスは以下のとおり。

$ chkconfig --list | grep 3:on
anacron         0:off   1:off   2:on    3:on    4:on    5:on    6:off
autofs          0:off   1:off   2:off   3:on    4:on    5:on    6:off
crond           0:off   1:off   2:on    3:on    4:on    5:on    6:off
gpm             0:off   1:off   2:on    3:on    4:on    5:on    6:off
haldaemon       0:off   1:off   2:on    3:on    4:on    5:on    6:off
irqbalance      0:off   1:off   2:on    3:on    4:on    5:on    6:off
lvm2-monitor    0:off   1:on    2:on    3:on    4:on    5:on    6:off
messagebus      0:off   1:off   2:on    3:on    4:on    5:on    6:off
network         0:off   1:off   2:on    3:on    4:on    5:on    6:off
rawdevices      0:off   1:off   2:off   3:on    4:on    5:on    6:off
readahead_early 0:off   1:off   2:on    3:on    4:on    5:on    6:off
rpcgssd         0:off   1:off   2:off   3:on    4:on    5:on    6:off
rpcidmapd       0:off   1:off   2:off   3:on    4:on    5:on    6:off
sshd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
syslog          0:off   1:off   2:on    3:on    4:on    5:on    6:off
vmware-tools    0:off   1:off   2:on    3:on    4:off   5:on    6:off
xfs             0:off   1:off   2:on    3:on    4:on    5:on    6:off

3. IPv6 の無効化

IPv6は無用の長物なので消す。
有効にしていると名前解決などで時間を消費する場合があるので無用どころか害悪。

まず /etc/sysconfig/network に NETWORKING_IPV6=no を追加する。

$ vi /etc/sysconfig/network

NETWORKING=yes
NETWORKING_IPV6=no <- 追加
HOSTNAME=localhost.localdomain

次に、IPv6に関するモジュールを一切読み込まないよう、modprob.conf に追記する。

$ vi /etc/modprob.conf

alias net-pf-10 off <- 追加
alias ipv6 off      <- 追加

以上で IPv6 が消え去る。

4. SELinux を切る

インストール時に切っていなければ切る。

セキュリティ?開発用の仮想マシンでは設定しない。
別レイヤーに任せ、できるだけ仮想マシン内でのトラブルを防ぐ。

$ vi /etc/selinux/config

...
SELINUX=disabled <- disabled にする
...

5. 不要な仮想コンソールを消す

使わなければ消す。

$ vi /etc/inittab

....
# Run gettys in standard runlevels
1:2345:respawn:/sbin/mingetty tty1
#2:2345:respawn:/sbin/mingetty tty2 <- コメントアウト
#3:2345:respawn:/sbin/mingetty tty3 <- コメントアウト
#4:2345:respawn:/sbin/mingetty tty4 <- コメントアウト
#5:2345:respawn:/sbin/mingetty tty5 <- コメントアウト
#6:2345:respawn:/sbin/mingetty tty6 <- コメントアウト
...

6. 不要なデバイスの削除

VMWarePlayer は勝手にCDドライブやフロッピードライブを付けるので、[仮想マシンの設定] の ハードウェアタブで消す。
必要なものは以下のとおり。設定はお好みで。

メモリ 1024MB
プロセッサ 2
ハードディスク(SCSI) 20 GB
ネットワークアダプタ ブリッジ
ディスプレイ 自動検出

7. /tmp の読み書きに実メモリを使うようにする

頻繁にIOが発生して、かつ揮発しても意味のないデータが残る /tmp を tmpfs でマウントする。
/etc/fstab にマウントする記述を書けば良い。

$ vi /etc/fstab

...
tmpfs                   /tmp                    tmpfs   defaults        0 0 <- 追加
...

/tmp への read/write は一切IOが発生しなくなる。
ビルドなど重い処理を行う際に効果絶大。

8. sbin にパスを通す

デフォルトでは sbin にパスが通ってないので通す。
一般ユーザー、rootユーザー両者に。

$ vi ~/.bash_profile

...
PATH=$PATH:$HOME/bin:/sbin <- 追加
...

9. VMが実メモリを使うようにする

VMのバージョンによっては仮想マシン実メモリを使用せず、HDDを用いてしまう。
結果IOが大量に発生してひどいパフォーマンスになってしまうので、実メモリを使うよう vmx ファイルを書き換える。
仮想マシンワーキングディリクトリの CentOS.vmx をテキストエディタで開き、以下の二行を追加する。

host.TSC.noForceSync = "TRUE"
mainMem.useNamedFile = "FALSE"

これでホストの実メモリを使用するようになる。

10. OS起動時に出る「udevd[2135]: add_to_rules : unknown Key 'ATTRS{hogehoge}'」を消す

やけに目に付くので消去する。
/etc/udev/rules.d/99-vmware-scsi-udev.rules 内の以下の2行をコメントアウトする。

$ vi /etc/udev/rules.d/99-vmware-scsi-udev.rules

# Debian systems
# ACTION=="add", SUBSYSTEMS=="scsi", ATTRS{vendor}=="VMware  " , ATTRS{model}=="Virtual disk    ",   RUN+="/bin/sh -c 'echo 180 >/sys$DEVPATH/device/timeout'"
↑コメントアウト

# SuSE / Ubuntu systems
# ACTION=="add", SUBSYSTEMS=="scsi", ATTRS{vendor}=="VMware, " , ATTRS{model}=="VMware Virtual S",   RUN+="/bin/sh -c 'echo 180 >/sys$DEVPATH/device/timeout'"
↑コメントアウト

これで不要なメッセージが消える。

最後に

オレオレエイリアスを ~/.bashrc に記述して終了。
作成したVMをマスターとして、開発時に利用する際はこいつをコピーして利用する。

ちなみにオレオレエイリアスで頻繁に使うやつ。

alias g='grep'
alias df='df -h'
alias s='pwd && ls -F --color=tty'
alias q='cd ../ && s'
alias qq='cd ../../ && s'
alias qqq='cd ../../../ && s'

それでは良いVMライフを!