ライン

ポイント:手軽そうだけれど、VNCを使うのが手間

ライン

 準備

 仮想環境KVMは実は経験したことがありませんでした。

 どうも使うことになりそうなので、事前に試しておくことにしました。
HP Proliant ML110 G5で4GBのメモリー。80GBのHDDという機器を使うことにしました。

 CentOS 6.4を先に導入しておきます。
ISOのCDイメージ(64Bit版)をダウンロードしてきて、CDに焼き込みました。
iLOの無いマシンなので、途中の画像はなしです。

 途中は思いっきり割愛ですが、CDインストールだとこんなに設問ないんだ?普通に英語版で導入できてデスクトップがあがってきたけど。
SSHで接続してみましたが、いきなり接続拒否。

拒否というよりも、sshdが上がっていない。

[root@localhost ~]# /etc/init.d/sshd start
[root@localhost ~]# chkconfig |grep sshd
sshd            0:off   1:off   2:off   3:off   4:off   5:off   6:off
[root@localhost ~]# chkconfig sshd on
[root@localhost ~]# chkconfig |grep sshd
sshd            0:off   1:off   2:on    3:on    4:on    5:on    6:off

これで接続できるようになりました。ここからTeratermで操作できます。
短時間でも、tcshがいいなとlocalユーザのシェルを変更。

$ chsh
Changing shell for fkimura.
Password:
New shell [/bin/bash]: /bin/tcsh
Shell changed.

これで接続できるようになりました。

$ grep --color=auto -E 'vmx' /proc/cpuinfo

仮想化対応になっているCPUかを確認するコマンドだそうです。

このマシンは、Intel(R) Celeron(R) CPU E3300 @ 2.50GHzでした。問題なしです。早速試すことにします。

# modprobe kvm_intel
# lsmod|grep kvm
kvm_intel              53484  0
kvm                   316506  1 kvm_intel
# yum -y install qemu-kvm libvirt virt-install bridge-utils

つーるまで追加しました。
 さて、次回も同じ操作したくないので、

# vi /etc/rc.d/rc.local
..
/sbin/modprobe kvm-intel

を追加しました。

 先に進んでいきます。

# chkconfig|grep virt
libvirt-guests  0:off   1:off   2:on    3:on    4:on    5:on    6:off
libvirtd        0:off   1:off   2:off   3:on    4:on    5:on    6:off
# /etc/init.d/libvirtd start
Starting libvirtd daemon:                                  [  OK  ]
# ifconfig virbr0
virbr0    Link encap:Ethernet  HWaddr 52:54:00:7D:03:57
          inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

 DHCPのままでしたので、ここでNW設定をすることに。

$ cd /etc/sysconfig/network-scripts/
$ su - -c visudo
$ sudo vi ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
HWADDR=78:E7:D1:xx:yy:zz
IPADDR=192.168.1.6
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes

 上記のようにしてみた。
Linuxだと、ページ上もなんとなくsudoで書きたくなるのも不思議。(すぐに面倒になると思うけど)

$ sudo cp ifcfg-eth0 ifcfg-br0
$ sudo vi ifcfg-br0
DEVICE=br0
TYPE=Bridge
BOOTPROTO=none
NM_CONTROLLED=no
IPADDR=192.168.1.7
NETMASK=255.255.255.0
NETWORK=192.168.1.0
BROADCAST=192.168.1.255
GATEWAY=192.168.1.1
DNS1=192.168.1.1
ONBOOT=yes
$ sudo vi ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
HWADDR=78:E7:D1:xx:yy:zz
NM_CONTROLLED=no
BOOTPROTO=none
ONBOOT=yes
BRIDGE=br0
$ sudo service network restart

これでとりあえずは完了。

virbr0    Link encap:Ethernet  HWaddr 52:54:00:7D:03:57
          inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

 仮想ブリッジのIPアドレスってどこで変更できるんだろう。
KVMを使っていれば、ここに仮想ゲストがあるよってことになってしまうだろうし。
「/etc/libvirt/qemu/networks/default.xml」 これだな、と。

<network>
  <name>default</name>
  <uuid>68127bcd-dbb8-45a1-8844-b611c16ff3fd</uuid>
  <bridge name="virbr0" />
  <mac address='52:54:00:7D:3:57'/>
  <forward/>
  <ip address="192.168.122.1" netmask="255.255.255.0">
    <dhcp>
      <range start="192.168.122.2" end="192.168.122.254" />
    </dhcp>
  </ip>
</network>

 これをいじくれば、そのレンジで使えるんじゃないかな…と思ったけど、変わらないな。
ここは課題に残して先に進もう。

 まずは、FreeBSDのISOを取得してみることにします。

# wget ftp://ftp.jp.freebsd.org/pub/FreeBSD/releases/amd64/amd64/ISO-IMAGES/9.2/FreeBSD-9.2-RELEASE-amd64-dvd1.iso

…のようにして、ISOイメージ取得します。
以下、試行錯誤して、RAWでつくるようにしました。遅すぎてダメだと。
その後、-f qcow2 で指定したものとの差はそんなに感じないということもあるのでなんともいえませんが。

# qemu-img create -f raw freebsd92.img 40G
Formatting 'freebsd92.img', fmt=raw size=42949672960

40GBを確保してみました。
続いてコマンドの投入です。5902番ポートを指定するために、 -vnc 2を指定。メモリー量は 1GBとしました。
インストールをしている間は、つかみっぱなしです。デーモン化して利用しないで使っています。

# /usr/libexec/qemu-kvm -hda /temp/freebsd92.img -m 1024 -boot d -cdrom \
 /temp/FreeBSD-9.2-RELEASE-amd64-dvd1.iso -k ja -vnc :2

VNCのクライアントは、Win7用にUltraVNC を導入。
つながらないなと思ったら、ファイアウォールがあいてなかったみたいだ。

# iptables -I INPUT -p tcp -m tcp --dport 5900:6100 -j ACCEPT

 これで準備はできたはずなので、VNC Clientで接続します。
上記で5902ポートを使った指定をしましたので、以下のようになります。

以下は試行錯誤していた際に、
route add 192.168.122.0 MASK 255.255.255.0 192.168.1.7
のように指定し、192.168.122.1で接続した際の画像です。
感触としては、なんとなく遅い気がする。baseなんてあっという間に進んでいきそうですが。
portsの展開にもかなりの時間を使っています。
今週で何度か作成したものは、qcow2で作った物を利用せずでつくったので、早かったのかも。
この辺りは、どの仮想OSでもいるなーという感じではありますが。

こんな流れはいつもの通りでした。
…でも実際には、外と通信ができない状態。あげくに、QEMUであがってきたFreeBSDで文字コードがどうにもならずでコロンが入力できないので、viすら使えない。どうにもこの方法はわからなかった。

FreeBSD側をDHCPに設定を変えて、ゲストの起動に-redir tcp:2200::22 を指定することではリモートから接続できるようにはなった。
※CentOS上で ssh USER@localhost 2222 で接続してはみれる。リモートからはダメだった

 どうにか打開したく思い、少しネットを歩いて考えて、TAP起動用にスクリプトを作成してみた。
個人的には気持ちが悪いのだが、/etc/qemu-ifupを作成。

#!/bin/sh
/sbin/ifconfig $1 up
/usr/sbin/brctl addif br0 $1

もちろん、実行権をつけるべく

# chmod 755 /etc/qemu-ifup

起動には、以下を実行した。
52:54:00:12:34:56というのは、適当にダブらなければ良い感じだね。指定しなくても同じ番号だけど、明示的に。
最後の -daemonizeは、バックエンドで動作するようにしたもの。
試している間は、直の方がわかりやすいけど、rcスクリプトなどで動かすなら甲じゃ無いと。

# /usr/libexec/qemu-kvm /temp/freebsd92.img -boot c -m 1024 -vnc :2 -redir tcp:2222::22 -net nic, \
 macaddr=52:54:00:12:34:56 -net tap,ifname=tap0,script=/etc/qemu-ifup -daemonize

これでいくはず。10.0.2.xになっても、ポート2222でも入れるはずだし。
しかし実際に見るとうちのネットワークのIPが出ている。
ローカルにあるDHCPからIPアドレスひろったので、そのまま直接通信できる。これはいいな。

SSHで直接繋いでも、問題なしになった。
結論、全然初心者向きではないな、KVMって。

 まとめ

 なんとなくこういうものだということはわかった。
Hyper-Vと同じで親が転けると巻き込む型のHyperバイザ型なんだな。Hyper-Vはマイクロソフトの月例パッチ更新ごとに脆弱性による必要性でリブートがいるかも知れないが、Linuxという面だけマシだという理解でいいのだろうか。

 慣れたVMwareが安定しているように感じるが、パッチを当てたりするのは同じなわけで少し慣れてみようとは思う。
ゲストOSの導入時の遅さも気になる。CPUの割り振りなどもどうコアを付けるのかなどは不明だったし。専門書籍をやっと読める程度にはなった気がします。


【改訂履歴】作成:2013/10/03  改訂: 2013/12/21
【参考リンク】

Fedora 19 - KVM - インストール : Server World

KVMを使う(インストール編) ≪ さくらインターネット研究所

にわかSEの独り言 CentOS 5.6 x64でKVMを設定

CentOS 6のインストール

Ubuntu + KVM で仮想サーバ

Copyright © 1996,1997-2006,2007- by F.Kimura,