noise

計算機科学や各種設定のメモ

Win8 on ArchLinux with QEMU

qemu-kvm のBridge モードで仮想マシンを動作させるためのメモです。

QEMUの初期設定

visudo で以下の行を追加

 Cmnd_Alias      QEMU=/sbin/ifconfig,/sbin/modprobe,/usr/sbin/brctl,/usr/bin/tunctl
%kvm     ALL=NOPASSWD: QEMU

kvmを利用するときは kvm group にユーザーを追加する必要がある

gpasswd -a <Your_User_Account> kvm
Win8起動スクリプト win8run
#!/bin/sh

QEMU=/usr/local/etc/run-qemu

#COMMON='-cpu host -smp 4 -m 2G -vnc :0'
#COMMON='-cpu host -smp 4 -m 2G -rtc base=localtime -vnc :0'
COMMON='-cpu host -smp 4 -m 2G -rtc base=localtime -vnc :0 -monitor unix:/tmp/win8_monitor.sock,server,nowait'

#OPT="$COMMON"
OPT="$COMMON -daemonize"
#OPT="$COMMON -daemonize -net user,hostfwd=tcp::3389-:3389"

IMAGE='/virtual_machines/win8/win8.raw'
$QEMU $IMAGE $OPT $*
QEMU起動共通のスクリプト /usr/local/etc/run-qemu
#!/bin/sh

USERID=`whoami`
IFACE=$(sudo tunctl -b -u $USERID)

sudo qemu-kvm -net nic,vlan=0 -net tap,vlan=0,ifname="$IFACE" $*

sudo tunctl -d $IFACE &> /dev/null
QEMU起動時に自動的に実行される /etc/qemu-ifup
#!/bin/sh

echo "Executing /etc/qemu-ifup"
echo "Bringing up $1 for bridged mode..."
sudo /sbin/ifconfig $1 0.0.0.0 promisc up
echo "Adding $1 to br0..."
sudo /usr/sbin/brctl addif br0 $1
sleep 2
QEMUでモニターにアクセスするスクリプト win8monitor

daemonizeするとXWindowがなくなるので、モニターにアクセスする他の手段が必要になる。今回はunix domain socket を用いた。
他にもtelnet,tcp,udp,stdio,pipe,COM port,tty,ptyなどにリダイレクト可能。

#!/bin/sh

sudo socat -,icanon=0,echo=0 unix-connect:/tmp/win8_monitor.sock
ブリッジの構築
# pacman -S bridge-utils uml_utilities

/etc/rc.conf

MODULES=(... bridge tun)

...

eth0="eth0 0.0.0.0"
br0="br0 192.168.0.3 netmask 255.255.255.0 broadcast 192.168.0.255"
INTERFACES=(eth0 br0)
gateway="default gw 192.168.0.1"
ROUTES=(gateway)

/etc/conf.d/bridges

bridge_br0="eth0"
control_br0="setfd br0 0"
BRIDGE_INTERFACES=(br0)

あとはIPフォワーディングの設定が要るかもしれない。

# echo 1 > /proc/sys/net/ipv4/ip_forward

とか
/etc/sysctl.conf

# Enable packet forwarding
net.ipv4.ip_forward=1

とか。