IT井戸端会議

IT井戸端会議

インフラ、ネットワーク、アプリケーション開発、IT界隈の話等々を東京都千代田区界隈から発信します。

AWS の EC2 上で KVM をインストールしてみる

KVM のインストール開始前に、気になる CPU の情報を確認

$ cat /proc/cpuinfo | grep vmx
$
$ cat /proc/cpuinfo
processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 62
model name  : Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz
stepping    : 4
cpu MHz     : 2500.104
cache size  : 25600 KB
fpu     : yes
fpu_exception   : yes
cpuid level : 13
wp      : yes
flags       : fpu de tsc msr pae cx8 sep cmov pat clflush mmx fxsr sse sse2 ss ht syscall nx lm rep_good aperfmperf unfair_spinlock pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes rdrand hypervisor lahf_lm ida arat epb pln pts dts fsgsbase erms
bogomips    : 5000.20
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

processor   : 1
vendor_id   : GenuineIntel
cpu family  : 6
model       : 62
model name  : Intel(R) Xeon(R) CPU E5-2670 v2 @ 2.50GHz
stepping    : 4
cpu MHz     : 2500.104
cache size  : 25600 KB
fpu     : yes
fpu_exception   : yes
cpuid level : 13
wp      : yes
flags       : fpu de tsc msr pae cx8 sep cmov pat clflush mmx fxsr sse sse2 ss ht syscall nx lm rep_good aperfmperf unfair_spinlock pni pclmulqdq ssse3 cx16 sse4_1 sse4_2 x2apic popcnt tsc_deadline_timer aes rdrand hypervisor lahf_lm ida arat epb pln pts dts fsgsbase erms
bogomips    : 5000.20
clflush size    : 64
cache_alignment : 64
address sizes   : 46 bits physical, 48 bits virtual
power management:

仮想化機構に対応してないっぽいけどやってみる -.-;

KVM 関連のパッケージを一通りインストール

$ sudo yum install libguestfs libvirt libvirt-client python-virtinst qemu-kvm virt-manager virt-top virt-viewer virt-who

libvirtd サービスが自動起動するように設定する。

$ sudo chkconfig libvirtd on

試験的に使用するため、ファイヤウォールと SELinux を無効にします。

$ sudo vi /etc/sysconfig/selinux
$ cat /etc/sysconfig/selinux
...
SELINUX=disabled
...

$ chkconfig iptables off

一旦、OSを再起動

$ sudo shutdown -r now

ブリッジを作成します〜

$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=on

$ cp -p /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-br0

$ sudo vi /etc/sysconfig/network-scripts/ifcfg-eth0
$ cat /etc/sysconfig/network-scripts/ifcfg-eth0 
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=on
BRIDGE=br0

$ sudo vi /etc/sysconfig/network-scripts/ifcfg-br0
$ cat /etc/sysconfig/network-scripts/ifcfg-br0 
DEVICE=br0
TYPE=Bridge
BOOTPROTO=dhcp
ONBOOT=on

作成後のブリッジの状態を確認

$ /etc/init.d/network restart

$ sudo brctl show
bridge name bridge id       STP enabled interfaces
br0     8000.0a2617772423   no      eth0
                        vnet0

virbr0 を削除する

$ virsh net-destroy default

起動時に virtbr0 が作成されないよう設定する。

$ sudo virsh net-list --all
Name                 State      Autostart     Persistent
--------------------------------------------------
default              inactive   yes           yes

$ sudo virsh net-autostart default --disable

$ sudo virsh net-list --all
Name                 State      Autostart     Persistent
--------------------------------------------------
default              inactive   no            yes

virt-manager で日本語が使用できるよう、以下のパッケージをインストールします。

$ sudo yum install "vlgothic-p-fonts" "Fonts" libXfont

つづけて、mDNS クライアント作成のエラー回避のため、以下のパッケージをインストールします。

$ yum -y install avahi

$ /etc/init.d/messagebus start
$ /etc/init.d/avahi-daemon start

$ sudo chkconfig avahi-daemon on
$ sudo chkconfig messagebus on

libvirtd サービスの起動、および自動起動設定をします。

$ sudo /etc/init.d/libvirtd start
$ ps -ef | grep libvirt
root      1468     1  0 13:03 ?        00:00:00 libvirtd --daemon
qemu      1654     1  0 13:03 ?        00:00:26 /usr/libexec/qemu-kvm -name kvm -S -M rhel6.6.0 -cpu qemu32 -no-kvm -m 512 -realtime mlock=off -smp 1,sockets=1,cores=1,threads=1 -uuid c873d70d-3a86-2d89-7bf7-d39bbd46fb2a -nodefconfig -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/kvm.monitor,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc -no-shutdown -device ich9-usb-ehci1,id=usb,bus=pci.0,addr=0x5.0x7 -device ich9-usb-uhci1,masterbus=usb.0,firstport=0,bus=pci.0,multifunction=on,addr=0x5 -device ich9-usb-uhci2,masterbus=usb.0,firstport=2,bus=pci.0,addr=0x5.0x1 -device ich9-usb-uhci3,masterbus=usb.0,firstport=4,bus=pci.0,addr=0x5.0x2 -drive file=/var/lib/libvirt/images/kvm.img,if=none,id=drive-ide0-0-0,format=raw,cache=none -device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 -drive if=none,media=cdrom,id=drive-ide0-1-0,readonly=on,format=raw -device ide-drive,bus=ide.1,unit=0,drive=drive-ide0-1-0,id=ide0-1-0 -netdev tap,fd=22,id=hostnet0 -device rtl8139,netdev=hostnet0,id=net0,mac=52:54:00:4e:71:b2,bus=pci.0,addr=0x3 -chardev pty,id=charserial0 -device isa-serial,chardev=charserial0,id=serial0 -vnc 127.0.0.1:0 -vga cirrus -device intel-hda,id=sound0,bus=pci.0,addr=0x4 -device hda-duplex,id=sound0-codec0,bus=sound0.0,cad=0 -incoming fd:20 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x6 -msg timestamp=on
jundo414  2291  1979  0 13:51 pts/0    00:00:00 grep libvirt

$ sudo chkconfig libvirtd on

virt-manager を使いたいので、以下の記事を参考に VNC Server をセットアップします。 asobo.hatenablog.jp

インスタンス作成のため、OS の ISO イメージをダウンロードします。 今回は、ubuntu server を使用しました。

$ sudo yum install wget
$ cd /tmp/
$ wget http://ftp.jaist.ac.jp/pub/Linux/ubuntu-releases/14.04/ubuntu-14.04.2-server-i386.iso

VNC 接続し、virt-manager を起動します。

$ virt-manager

インスタンス作成を開始します。 f:id:candapc:20160118014807p:plain

インスタンス名を入力後、ISO を選択し、「Forward」ボタンをクリックします。 f:id:candapc:20160118014827p:plain

先ほどダウンロードした ISO ファイルを選択し、OS Type、Versionを入力後、「Forward」ボタンをクリックします。 f:id:candapc:20160118014829p:plain

メモリと CPU の値を設定し、「Forward」ボタンをクリックします。 f:id:candapc:20160118014831p:plain

ストレージサイズを指定し、「Forward」ボタンをクリックします。 f:id:candapc:20160118014833p:plain

そのまま「Finish」ボタンをクリックし、インスタンス作成を開始します。 f:id:candapc:20160118014836p:plain

通常の OS インストール手順にそってインストールしていきます。 f:id:candapc:20160118014837p:plain

ubuntuのインストールが3時間経過しても終わらない..

top コマンドで確認してみるとこんな感じでした。 qemu-kvmCPU使用率が異常なくらい高いです..

$ top
top - 14:35:53 up  1:33,  2 users,  load average: 0.81, 0.31, 0.10
Tasks: 159 total,   2 running, 157 sleeping,   0 stopped,   0 zombie
Cpu(s):  1.5%us,  0.3%sy,  0.0%ni, 98.1%id,  0.1%wa,  0.0%hi,  0.0%si,  0.1%st
Mem:   7645800k total,  1085412k used,  6560388k free,    21872k buffers
Swap:        0k total,        0k used,        0k free,   170628k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND                                                                                                
 3988 qemu      20   0 1817m 459m 6396 R 86.2  6.2   1:42.01 qemu-kvm                                                                                                
 1468 root      20   0  998m  15m 5408 S  3.4  0.2   0:08.20 libvirtd                                                                                                
 1383 root      20   0  140m 3224 2644 S  1.7  0.0   0:00.24 gvfsd-trash                                                                                             
 3274 root      20   0  779m  51m  16m S  1.7  0.7   0:05.87 python        
...

案の定、libvirt のログに CPU が認識できない旨のエラーメッセージが出力され続けています w

$ sudo view /var/log/libvirt/libvirtd.log 
2015-05-27 13:03:05.734+0000: 1479: info : libvirt version: 0.10.2, package: 46.el6_6.6 (CentOS BuildSystem <http://bugs.centos.org>, 2015-04-29-10:28:01, c6b8.bsys.dev.centos.org)
2015-05-27 13:03:05.734+0000: 1479: error : udevGetDMIData:1531 : Failed to get udev device for syspath '/sys/devices/virtual/dmi/id' or '/sys/class/dmi/id'
2015-05-27 13:03:06.137+0000: 1479: error : x86Decode:1437 : internal error Cannot find suitable CPU model for given data
2015-05-27 13:03:06.137+0000: 1479: warning : qemuCapsInit:880 : Failed to get host CPU
2015-05-27 13:03:11.551+0000: 1471: warning : qemuSetupCgroupForVcpu:580 : Unable to get vcpus' pids.
2015-05-27 13:03:11.763+0000: 1471: warning : qemuDomainObjStart:6144 : Unable to restore from managed state /var/lib/libvirt/qemu/save/kvm.save. Maybe the file is corrupted?

EC2 上での KVM は無理があるのか.. 継続調査していきます。

かなり時間はかかりましたが、インスタンスの作成ができました。 f:id:candapc:20160118015148p:plain