qemu guest agent研究




1. qemu-guest-agent虚拟机内安装:

debian: 在/etc/apt/sources.list增加一行 deb http://ftp.cn.debian.org/debian sid main,sudo apt-get update,sudo apt-get install qemu-guest-agent
ubuntu: 在/etc/apt/sources.list增加一行 deb http://free.nchc.org.tw/ubuntu/ raring main universe,sudo apt-get update,sudo apt-get install qemu-guest-agent

2.安装卡住

  原因是如果你先修改了libvirt的配置文件,增加了virtio-serial的配置,并且name=’org.qemu.guest_agent.0’,那么由于在/etc/init.d/qemu-guest-agent启动脚本中没有增加-d参数,导致qemu-guest-agent处于前台启动过程,无法退出,导致安装卡住,解决方法是kill掉qemu-ga进程或者先安装qemu-guest-agent,之后再修改libvirt配置。

3.libvirt配置文件

     <channel type=’unix’>
       <source mode=’bind’ path=’/var/lib/libvirt/qemu/test.agent’/>
        <target type=’virtio’ name=’com.163.spice.0’/>
     </channel>
要注意path=’/var/lib/libvirt/qemu/test.agent’这个路径libvirt-qemu:kvm用户要有权限进行读写,否则虚拟机会启动失败。

4.无法与宿主机通信

要输出如下内容才基本可断定配置的serial可以通信:
root@debian:~# qemu-ga -v -p /dev/virtio-ports/com.163.spice.0
1372055252.431905: debug: received EOF
1372055252.532232: debug: received EOF
1372055252.632594: debug: received EOF
1372055252.732949: debug: received EOF
否则要查找原因。
我遇到一个特别奇怪的问题,如果我按照libvirt官方配置说明中的配置,
<channel type=’unix’>
      <source mode=’bind’ path=’/var/lib/libvirt/qemu/test.agent’/>
      <target type=’virtio’ name=’org.qemu.guest_agent.0’/>
</channel>
会导致/dev/virtio-ports/org.qemu.guest_agent.0无法用来与宿主机通信,改为com.163.guest_agent.0或者org.qemu.ga.0或者其他类似的名字,甚至不写(默认名称com.redhat.spice.0)都OK,我的libvirt版本是0.9.13,qemu版本(qemu-kvm  1.1.2+dfsg-2),虚拟机内核版本(Linux debian 3.2.0-3-amd64/Linux ubuntu 3.2.0-29-generic)。
这个问题的原因是如果不改名,libvirt就会自己连接到这个socket上,所以如果你不想让libvirt连接,就得改掉默认的名称。详见http://wiki.libvirt.org/page/Qemu_guest_agent(Configure guest agent without libvirt interference)

5. 依赖的内核模块(virtio_console)

debian wheezy 3.2内核编译处理的qemu-guest-agent:https://github.com/aspirer/study/blob/master/qemu-guest-agent/qemu-ga

—————————————————————————————-

qemu编译:

apt-get install libzip-dev libsdl1.2-dev  uml-utilities  dh-autoreconf  bridge-utils libpixman-1-dev
可选安装包(不确定是否需要):build-essential
./configure –target-list=x86_64-softmmu –prefix=/usr –localstatedir=/var –sysconfdir=/etc –enable-debug
make或者只编译qemu-guest-agent: make qemu-ga