libvmi 安装配置过程记录

libvmi是用来进行虚拟机自省的。

本机环境:centos6.5 64位

通过virsh version查看xen的信息

Compiled against library: libvirt 1.2.10
Using library: libvirt 1.2.10
Using API: Xen 1.2.10
Running hypervisor: Xen 4.4.0

下载http://libvmi.com/download/

安装教程http://libvmi.com/docs/gcode-install.html

开始之前,要确保已经安装了基本的开发环境,包括gcc,make,autoconf等。可以直接使用yum groupinstall "Development Tools" 安装,但是看到有90多M的包下,我就放弃了,因为里面有很多是现在不需要的,而且使用xen时尽量不在dom0里装过多的东西,这也是为了系统的稳定,所以我选择了一个个安装,原则是“缺啥补啥”,肯定比较麻烦,但这是个学习的过程嘛

先安装gcc

yum -y install gcc

然后安装make

yum intall make

然后安装autoconf

yum install autoconf

暂时装这些,等后面报错了再看需要啥把。

然后按照文档中的说明安装依赖包

首先是libxc

下载http://www.tddft.org/programs/octopus/wiki/index.php/Libxc_2.2.2

./configure

报错could not find Fortran 90 compiler

缺啥补啥

yum install gcc-gfortran

然后就是安装三部曲

./configure

make

make install

下来安装第二个依赖包 yacc(Yet Another Compiler Compiler,是一个经典的生成语法分析器的工具)

yum install byacc

然后安装flex(LEXical compiler,主要功能是生成一个词法分析器scanner的C源码)

yum install flex

接下来安装glib,请看这里http://www.cnblogs.com/chasonzhang/p/4532934.html#rightway

照着这里面做,报了个错

configure: error: *** Working zlib library and headers not found ***

yum install zilb发现已安装,那就

yum install zlib-devel

然后再./configure

又报错

checking for LIBFFI... no
configure: error: Package requirements (libffi >= 3.0.0) were not met:

No package 'libffi' found

yum install libffi发现已安装,那就

yum install libffi-devel

然后再./configure

bingo!下面不说了

所有的依赖包都装好后,该我们的主角libvmi登场了。

将下载的包解压后,进入解压后的目录,运行

./autogen.sh

报错

Error: could not find libtoolize or glibtoolize

yum intall libtool

再次./autogen.sh

然后./configure

报错

No package 'glib-2.0' found

试着把glib-2.0.pc这个文件的路径/usr/local/lib/pkgconfig加到PKG_CONFIG_PATH这个环境变量中,pkg-config程序通过.pc后缀的文件向用户程序提供相应库的路径、版本号等信息

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH

然后再./configure

方法有效,输出中看到checking for GLIB... yes

但又报了另一个错误

No package 'check' found

yum install check

yum install check-devel

再次./configure

bingo!

libvmi 安装配置过程记录_第1张图片

然后make报错了

libvmi 安装配置过程记录_第2张图片

 我先安装了bison

yum install bison

然后卸载了yacc

yum remove byacc

其实bison和yacc的功能差不多,所以没啥用,只是我病急乱投医罢了

最后的解决办法:

./configure --prefix=/usr --with-included-apr

然后make

make install

ldconfig(它的作用请看http://linux.die.net/man/8/ldconfig)

exit(作用 不详 )

-------------------------------------------------------------------------------------------------------------------------------

接下来是libvmi的配置

为了正常工作,需要在$HOME/etc/或者 /etc/下创建一个配置文件libvmi.conf,我们选择创建在/etc目录下

要在这个配置文件中为libvmi将要访问的每个虚拟机或者内存镜像设置一个条目,需要指明操作系统的类型(例如 Linux或Windows),symbolic information的位置,虚拟机或内存镜像中要访问数据的偏移量。格式如下:

<vm name or filename>{

        <key> = <value>;

        <key> = <value>;

}

虚拟机名字可以通过xm list或xl list或virsh list得到.

下面是一些key的说明(一共九个)

  • ostype  Linux or Windows guests are supported
  • sysmap  虚拟机的System.map文件的路径。注意这个文件只有从dom u拷贝到dom0,LibVMI才能访问它。(The path to the System.map file for the VM. Note that this file must be copied into the dom0 of host VM from the domU or guest VM so that LibVMI can access it.)
  • linux_tasks  The number of bytes(offset) from the start of the struct until task_struct->tasks from linux/sched.h in the target's kernel.
  • linux_mm  Offset to task_struct->mm
  • linux_pid  Offset to task_struct->pid
  • linux_pgd  Offset to mm_struct->pgd
  • win_tasks  Offset to EPROCESS->ActiveProcessLinks.
  • win_pdbase  Offset to EPROCESS->Pcb->DirectoryTableBase.
  • win_pid  Offset to EPROCESS->UniqueProcessId.

其中第一个windows和linux都适用,第二个只适用于linux,接下来三个linux开头的用于linux,windows开头的用于windows

然后到底怎么得到这些值呢?

在libvmi-0.10.1/tools/目录下可以找到一个叫做linux-offset-finder的工具,把这个文件夹拷贝到domU里面(要用root用户登录domU,至于怎么拷贝,我是用163发过去的),然后make,如图

libvmi 安装配置过程记录_第3张图片

然后报了下面的错误

libvmi 安装配置过程记录_第4张图片

进入那个目录,发现有个build的链接文件

libvmi 安装配置过程记录_第5张图片2                                                                                                                           

但是这个build链接失效了,双击它会报出这样的错误

libvmi 安装配置过程记录_第6张图片

yum install kernel-xen-devel

make继续报错

然后yum install kernel-headers

make还是报错

怀疑是不是要

lgconfig

还是不行。

后来发现是安装的版本不对,我使用的内核是2.6.18-398.el5-xen

而安装的kernel-xen-devel版本是

kernel-xen-devel-2.6.18-404.el5

所以这次重装一下,指定版本号

yum install kernel-xen-devel-2.6.18-398.el5

这里有个命令

uname -a; rpm -qa kernel\* | sort 可以列出你当前使用的内核和安装了哪些版本

libvmi 安装配置过程记录_第7张图片

为了防止出错,我们使用把404版本的都卸载掉

如yum remove kernel-headers-2.6.18-404.el5

另一个类似

然后我们发现lib/modules/2.6.18-398.el5xen/下的include能打开了,它指向的是/usr/src/kernels下面对应版本的文件夹

然后我们满心欢喜的make,又报错了

gcc command not found

缺啥补啥,yum install gcc
这次make就没有报错

然后使用insmod findoffsets.ko将模块插入内核

如果想将模块从kernel中移除,使用rmmod findoffsets

我们先将其移除,然后使用 insmod findoffsets.ko -s重新将其载入kernel

-s 是将所有信息记录在系统记录文件中

这次报了个错误

如果这个可以成功的话,我们可以再/var/log/syslog中找到我们需要的信息,但是不成功也没 关系,我们依然可以使用dmesg来查看调试信息

libvmi 安装配置过程记录_第8张图片

原来 -s 和 --syslog都不是有效的参数,可是网上的参考资料都说有这参数啊,算了不管了,我们要得东西得到就行了。

把上面的信息拷贝到dom0中的中的/etc/libvmi.conf中吧。

然后把[domain name]整个替换为虚拟机的名词,此处为centos5.1

然后设置一下sysmap的路径吧

在domU中的/boot/下找到System.map文件,拷贝到dom0的/boot/domU目录下

然后libvmi.conf的配置如下:

libvmi 安装配置过程记录_第9张图片

配置好了之后,我们可以试着运行以下examples目录下的process-list

libvmi 安装配置过程记录_第10张图片

可以看到,成功的在dom0内获得了domU(此处的centos5.1)中的进程列表。

我们再试一下获取domU中的内核模块

libvmi 安装配置过程记录_第11张图片

之前配置LibVMI的时候用到了一个叫做findoffsets的模块,我们可以看到LibVMI可以动态的监控这个模块被插入内核和从内核中移除:

libvmi 安装配置过程记录_第12张图片

你可能感兴趣的:(lib)