暁なIT備忘録

AKATSUKI Information Technology Memorandum.

QEMU+KVM による仮想化環境構築:HostOS 側準備

Tags: ,

OS 初期導入時に仮想化環境パッケージを選択した状況でもすぐに仮想マシンの作成を行える訳ではありません。
ここでは、仮想マシン(GuestOS)の作成前の準備/導入作業の流れを記載します。

■準備

□RPM(yum)関連

必要なパッケージは、
 qemu-kvm
 libvirt
 python-virtinst
 bridge-utils
です。

# yum list | egrep "^qemu-kvm|^libvirt|^python-virtinst|^bridge-utils"
	bridge-utils.x86_64                    1.2-9.el6                        @anaconda-CentOS-201106060106.x86_64/6.0
	libvirt-client.x86_64                  0.8.1-27.el6_0.6                 @updates
	libvirt-devel.x86_64                   0.8.1-27.el6_0.6                 @updates
	libvirt-java.noarch                    0.4.5-2.el6                      @anaconda-CentOS-201106060106.x86_64/6.0
	libvirt-java-devel.noarch              0.4.5-2.el6                      @anaconda-CentOS-201106060106.x86_64/6.0
	libvirt-python.x86_64                  0.8.1-27.el6_0.6                 @updates
	python-virtinst.noarch                 0.500.3-7.el6                    @anaconda-CentOS-201106060106.x86_64/6.0
	qemu-kvm.x86_64                        2:0.12.1.2-2.113.el6_0.8         @updates
	qemu-kvm-tools.x86_64                  2:0.12.1.2-2.113.el6_0.8         @updates
★	libvirt.x86_64                         0.8.1-27.el6_0.6                 updates
	libvirt-cim.x86_64                     0.5.8-3.el6                      base
	libvirt-java-javadoc.noarch            0.4.5-2.el6                      base
	libvirt-qpid.x86_64                    0.2.22-3.el6                     base

作業:必要パッケージの確認

上記結果により★箇所のパッケージが不足している為、追加導入します。

# yum -y install libvirt
Loaded plugins: fastestmirror, refresh-packagekit
Loading mirror speeds from cached hostfile
 * base: www.ftp.ne.jp
 * extras: www.ftp.ne.jp
 * updates: www.ftp.ne.jp
Setting up Install Process
Resolving Dependencies
--> Running transaction check
---> Package libvirt.x86_64 0:0.8.1-27.el6_0.6 set to be updated
--> Processing Dependency: lzop for package: libvirt-0.8.1-27.el6_0.6.x86_64
--> Processing Dependency: iscsi-initiator-utils for package: libvirt-0.8.1-27.el6_0.6.x86_64
--> Processing Dependency: ebtables for package: libvirt-0.8.1-27.el6_0.6.x86_64
--> Running transaction check
---> Package ebtables.x86_64 0:2.0.9-5.el6 set to be updated
---> Package iscsi-initiator-utils.x86_64 0:6.2.0.872-10.el6 set to be updated
---> Package lzop.x86_64 0:1.02-0.9.rc1.el6 set to be updated
--> Processing Dependency: liblzo2.so.2()(64bit) for package: lzop-1.02-0.9.rc1.el6.x86_64
--> Running transaction check
---> Package lzo.x86_64 0:2.03-3.1.el6 set to be updated
--> Finished Dependency Resolution

Dependencies Resolved

========================================================================================================================
 Package                             Arch                 Version                           Repository             Size
========================================================================================================================
Installing:
 libvirt                             x86_64               0.8.1-27.el6_0.6                  updates               847 k
Installing for dependencies:
 ebtables                            x86_64               2.0.9-5.el6                       base                   94 k
 iscsi-initiator-utils               x86_64               6.2.0.872-10.el6                  base                  560 k
 lzo                                 x86_64               2.03-3.1.el6                      base                   55 k
 lzop                                x86_64               1.02-0.9.rc1.el6                  base                   50 k

Transaction Summary
========================================================================================================================
Install       5 Package(s)
Upgrade       0 Package(s)

Total download size: 1.6 M
Installed size: 4.9 M
Downloading Packages:
(1/5): ebtables-2.0.9-5.el6.x86_64.rpm                                                           |  94 kB     00:00
(2/5): iscsi-initiator-utils-6.2.0.872-10.el6.x86_64.rpm                                         | 560 kB     00:02
(3/5): libvirt-0.8.1-27.el6_0.6.x86_64.rpm                                                       | 847 kB     00:03
(4/5): lzo-2.03-3.1.el6.x86_64.rpm                                                               |  55 kB     00:00
(5/5): lzop-1.02-0.9.rc1.el6.x86_64.rpm                                                          |  50 kB     00:00
------------------------------------------------------------------------------------------------------------------------
Total                                                                                   200 kB/s | 1.6 MB     00:08
Running rpm_check_debug
Running Transaction Test
Transaction Test Succeeded
Running Transaction
  Installing     : lzo-2.03-3.1.el6.x86_64                                                                          1/5
  Installing     : lzop-1.02-0.9.rc1.el6.x86_64                                                                     2/5
  Installing     : ebtables-2.0.9-5.el6.x86_64                                                                      3/5
  Installing     : iscsi-initiator-utils-6.2.0.872-10.el6.x86_64                                                    4/5
  Installing     : libvirt-0.8.1-27.el6_0.6.x86_64                                                                  5/5

Installed:
  libvirt.x86_64 0:0.8.1-27.el6_0.6

Dependency Installed:
  ebtables.x86_64 0:2.0.9-5.el6      iscsi-initiator-utils.x86_64 0:6.2.0.872-10.el6     lzo.x86_64 0:2.03-3.1.el6
  lzop.x86_64 0:1.02-0.9.rc1.el6

Complete!

作業:必要パッケージの追加導入

■導入

□Kernel 組み込み

HostOS 導入時に仮想化関連のパッケージを選択していれば、既に組み込み済みの為、作業不要です。

# lsmod | grep kvm
kvm_intel              47790  0
kvm                   300283  1 kvm_intel

※CPU が AMD の場合には intel 箇所が amd となる。

作業:組み込み状況の確認

→ 上記の結果(数値は環境依存)であれば以下の作業不要。

# modprobe kvm
# modprobe kvm_intel	# AMDの場合 "kvm_amd"

作業:未組み込みの場合の作業

□サービス自動起動

# service libvirtd start
libvirtd デーモンを起動中:                                 [  OK  ]

# chkconfig libvirtd on
# chkconfig --list libvirtd
libvirtd        0:off   1:off   2:on    3:on    4:on    5:on    6:off

作業:サービス自動起動

□ブリッジ設定(ネットワーク)

※サービス:NetworkManager を停止した上で作業を行う。

# cd /etc/sysconfig/network-scripts

# cp ifcfg-eth1 ifcfg-br0

# vi ifcfg-br0
===== 変更箇所 =====
	# Intel Corporation 82541PI Gigabit Ethernet Controller
★	DEVICE=br0
	HWADDR=00:00:00:00:00:00
	ONBOOT=yes
	IPV6INIT=no
	USERCTL=no
★	TYPE=Bridge
	BOOTPROTO=static
	IPADDR=192.168.0.100
	NETMASK=255.255.255.0
==========

# vi ifcfg-eth1
===== 変更箇所 =====
	# Intel Corporation 82541PI Gigabit Ethernet Controller
	DEVICE=eth1
	HWADDR=00:00:00:00:00:00
	ONBOOT=yes
	IPV6INIT=no
	USERCTL=no
	TYPE=Ethernet
	BOOTPROTO=static
	IPADDR=192.168.0.100
	NETMASK=255.255.255.0
★	BRIDGE=br0
==========

# service network restart

# ifconfig
br0       Link encap:Ethernet  HWaddr 00:00:00:00:00:00
          inet addr:192.168.0.100  Bcast:192.168.0.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:170 errors:0 dropped:0 overruns:0 frame:0
          TX packets:67 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:10482 (10.2 KiB)  TX bytes:11107 (10.8 KiB)

eth1      Link encap:Ethernet  HWaddr 00:00:00:00:00:00
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:3284 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1432 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:1888770 (1.8 MiB)  TX bytes:161389 (157.6 KiB)

作業:ブリッジ設定(ネットワーク)

□不要デバイスの削除

# ifconfig virbr0
virbr0    Link encap:Ethernet  HWaddr 00:00:00:00:00:00
          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)

# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.000000000000       no              eth1
virbr0          8000.000000000000       yes

# virsh net-autostart default --disable
ネットワーク default の自動起動設定が解除されました

# virsh net-destroy default
ネットワーク default は停止されました

# brctl show
bridge name     bridge id               STP enabled     interfaces
br0             8000.000000000000       no              eth1

作業:不要デバイスの削除

□iptables 通信許可設定

NIC のブリッジにて、HostOS で受けたパケットを GuestOS に forward する状況となりましたが、この状況では iptables にて forward が遮断されます。
ということで、その許可設定を組み込みます。

# cat /etc/sysconfig/iptables
===== 追記 =====
	# Firewall configuration written by system-config-firewall
	# Manual customization of this file is not recommended.
	*filter
	:INPUT ACCEPT [0:0]
	:FORWARD ACCEPT [0:0]
	:OUTPUT ACCEPT [0:0]
	-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
★	-A FORWARD -i br0 -j ACCEPT
	-A INPUT -p icmp -j ACCEPT
	-A INPUT -i lo -j ACCEPT
	-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
	-I FORWARD -m physdev --physdev-is-bridged -j ACCEPT
	-A INPUT -j REJECT --reject-with icmp-host-prohibited
	-A FORWARD -j REJECT --reject-with icmp-host-prohibited
	COMMIT
=====

# service iptables restart
ファイアウォールルールを適用中:                            [  OK  ]
チェインポリシーを ACCEPT に設定中nat filter               [  OK  ]
iptables モジュールを取り外し中                            [  OK  ]
iptables ファイアウォールルールを適用中:                   [  OK  ]
iptables モジュールを読み込み中ip_conntrack_netbios_ns     [  OK  ]

作業:iptables 通信許可設定

□VNC 経由の一般ユーザログインでの virt-manager 起動許可設定

当自宅環境では何故か直接の GNOME 操作において不規則にフリーズが発生します。
仮想マシンマネージャの閲覧や操作をする関係上、GNOME 環境は必須といえます。
#最低限のことは virsh コマンドで補えますが、やはり何かと不便です。

フリーズしたら GNOME の再起動行えば良いじゃん!という発想にも至りました。
しかし、残念なことに、この GNOME-2.28 には gdm-restart コマンドが無く、更に gdm の kill-HUP でも解決しませんでした。

では、GNOME が都度初期化される VNC 経由で乗り切ろう!という発想に至りました。
しかし、ここでも問題の壁にぶち当たりました。
最終目的である virt-manager が、gdm(ローカルコンソール)経由であれば、一般ユーザで virt-manager を起動しても root 権限のパスワード問い合わせがあるが、VNC 経由だと問い合わせスルーで起動不可となる。

終いには、CentOS-5.6 で過ごそうかな(´・ω・`)とも思いましたが…

ということで、パスワード問い合わせをスルーされてしまうなら問い合わせ関係なく許可してしまえ!ということで、以下 Polkit の設定で回避できた。

微妙にセキュアな環境を意識しながら自分で外れていっている気が…

# vi /etc/polkit-1/localauthority/50-local.d/org.libvirt.unix.manage.pkla
=====
[Allow fred libvirt management permissions]
Identity=unix-user:svope
Action=org.libvirt.unix.manage
ResultAny=yes
ResultInactive=yes
ResultActive=yes
=====

作業:VNC 経由の一般ユーザログインでの virt-manager 起動許可設定

参考サイト:http://libvirt.org/auth.html#ACL_server_polkit

この作業により、VNC 経由で一般ユーザログインするとログイン直後に問答無用で root パスワードの問い合わせがあります。
この問い合わせに返答すれば、VNC 経由の一般ユーザ(svope)でも仮想マシンマネージャ(virt-manager)の利用が可能となります。

あくまでこの項目の作業だけは、当自宅環境で必須であったためのものです。
必要に迫られない限りは実施する必要は無いと思います。

以上

Tags: ,

Leave a Reply

© 2009 暁なIT備忘録. All Rights Reserved.

This blog is powered by the Wordpress platform and beach rentals.