パッケージ | コメント |
kvm | kvm カーネルモジュールと、kvm 用にコンパイルされた qemu (/usr/libexec/qemu-kvm) など。 |
virt-manager | ゲストOS のインストールや定義、削除、起動/停止などを行う GUI アプリケーション。yum でインストールすれば、libvirt, xen-libs, bridge-utils, qemu-img なども引きずられて入る。ディストリビューションによっては、kvm には必須でない qemu パッケージ (/usr/bin/qemu-system-x86_64 等) もインストールされる。 |
xen-runtime | Fedora Core にはあるが RHEL/CentOS 5.x には存在しない。シェルスクリプトなど、Xen を動かす時に使われるツール群で、Xen カーネルや xend デーモンは含まれない、いわば xen パッケージのミニセット。仮想ネットワーク (ブリッジ) をパートタイム的に使いたい場合には、/etc/xen/scripts/ 下のスクリプト群があると便利なのでインストールする。ブリッジを恒久的に作っておく方式なら不要だ。こうしたスクリプトは RHEL/CentOS 5 では xen 本体パッケージにしか含まれていない。 |
パッケージ | コメント |
tunctl | 後で出てくる TAP ネットワークデバイスを操作するユーティリティコマンド。実際には QEMU が内部的に面倒を見てくれるのでどうしても要るというわけではないが、研究のために入れておくとよい。 |
virtio-win | RHEL 5.4 にのみある。Windows ゲストのための virtio ドライバ集。2010/1/31 時点では、Windows Server 2003 と 2008 (ともに i386 及び amd64) のブロック(ディスク)ドライバとネットワークドライバが含まれている。Windows Server 2008 64ビット用のドライバはちゃんと署名されている。詳しくは後述。 |
virtio Windowsドライバ | ホストが CentOS や Fedora Core の場合は、KVM のサイトから最新の virtio ドライバを入手すべし。2010/1/31 現在、ブロックドライバは Vista/7/2003/2008 の x86 及び amd64 と、XP の x86。ネットワークドライバは Vista/7/XP/2003/2008 の x86 及び amd64 と、Windows 2000 用が含まれている。ただし、いずれのドライバも署名はされていない。これらと同じドライバを ISO イメージにまとめたものを、"/contrib/famzah" というサイトが提供してくれている。詳しくは後述。 |
# Bridge interface 0 DEVICE=br0 TYPE=Bridge ONBOOT=yes BOOTPROTO=static IPADDR=192.168.0.5 NETMASK=255.255.255.0 DELAY=0ifcfg-eth0
DEVICE=eth0 HWADDR=00:1f:e2:0c:78:1b <--もともと書いてあったなら残したまま ONBOOT=yes BOOTPROTO=none #IPADDR=192.168.0.5 <--コメントアウトするか削除 #NETMASK=255.255.255.0 <--コメントアウトするか削除 BRIDGE=br0 <--接続するブリッジあとは `service network restart' すればインターフェイスが出来上がる。ただしひとつだけ注意がある -- この設定以後、ホストマシンのゲートウェイデバイスは eth0 ではなく br0 になるので、サーバデーモンなどの設定ファイルでインターフェイス名を指定してあるものは、eth0 を br0 に書き換えなくてはならない。
#!/bin/bash # network-bridge-custom 0.3.0 # Use with network-bridge-util > 0.3.0 dir=$(dirname "$0") # Resolv symbolic link for $dir if [ -L $0 ]; then link=$(ls -l $0 |cut -d' ' -f10) if grep -q / <<<$link ; then linkdir=${link%/*} if [ -z "$linkdir" ]; then dir= elif [ x${linkdir%%/*} = x ]; then dir=$linkdir else dir=${dir}/$linkdir fi fi fi . ${dir}/network-bridge-util ## Auto-detect VirNet variables. set_virnet_vars function do_bridge () { ## This is the very heart of network-bridge script. ${dir}/network-bridge "$@" bridge=eth0 netdev=eth0 antispoof=no #${dir}/network-bridge "$@" bridge=eth1 netdev=eth1 antispoof=no } case "$1" in status) do_bridge "$@" exit ;; *) ;; esac ## Iptables optimization. optimize_ipt ## This is the very heart of network-bridge script. do_bridge "$@" ## Disable kernel IP forwarding if there is no NAT bridges. disable_ipfwd ## Additional routing configuration. set_route /etc/xen/route.conf #sysctl -w net.ipv4.conf.eth1.rp_filter=1 &>/dev/null以上の準備が整ったら、Xen の場合に xend が起動時にやっていたコールを、手動で唱えてやる。
root# /etc/xen/scripts/network-bridge-custom start
これで、前出の図に示した ホスト側の構造が出来上がる。ただし、tapX デバイスは実際に QEMU/KVM ゲストを立ち上げる際に作られるのでまだない。
逆に、peth0 を本来の eth0 に戻したくなった時には、
root# /etc/xen/scripts/network-bridge-custom stop
と唱えてやればいい。また、
root# /etc/xen/scripts/network-bridge-custom status
とコールするとブリッジ関係のステータスが表示される。
"/etc/xen/scripts/network-bridge..." というのは度々手動でコマンドするには長すぎる...。私と同意見なら、上記 network-bridge-custom ファイルへのシンボリックリンクだけを、PATH の通った場所 (例えば /usr/local/bin) に作ればいい。シンボリックリンクの名前も実体と異なって構わない。