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
とか。