Virtual Machine Introspection Tools 安装文档 V2.6 - virtManagement/monitorSystem GitHub Wiki
###Virtual Machine Introspection Tools 安装文档 V2.6
注意:本手册是基于 CentOS6.6 版本进行的操作,建议服务器内存在 2G 以上。除非特别指定,所有指令均须由 root 用户在机器上执行。 编辑器主题:FreeCut
安装版本: 操作系统:centos6.6 内存:4G 内核版本:3.10.68 Xen 版本:4.4.0 Libvirt 版本:1.2.10 Xen API:1.2.10 Python :2. 7.9
一. 系统升级
-
安装软件开发工具包 先用命令查看yum group中是否有可用的 “Development Tools”
# yum groupinstall “Development Tools”
如果输出的available group中有 “Development Tools”一项,那我们可以直接使用:
# yum groupinstall “Development Tools”
输出结果:
如果输出结果中没有 “Development Tools”一项,那么我们可能需要更新yum源 yum源更新方法
-
安装 zlib-devel
# yum -y install gcc libgcc glibc libffi-devel libxml2-devel libxslt-devel openssl-devel zlib-devel bzip2-devel ncurses-devel
- 安装 python2.7.9
# wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz # tar zxvf Python-2.7.9.tgz # cd Python-2.7.9 # ./configure --prefix=/usr/local # make && make install # make clean && make distclean # rm /urs/bin/python # ln -s /usr/local/bin/python2.7 /usr/bin/python
//后面会出错因为 yum 是依赖 python2.6.6 运行的,所以需要对 yum 做一些修改
# vim /usr/bin/yum 将第一行的#!/usr/bin/python 修改为#!/usr/bin/python2.6
- 安装 setuptools 和 pip 下载安装包 setuptools-18.4.tar.gz(版本没有限制)
# wget https://pypi.python.org/packages/source/s/setuptools/setuptools-18.4.tar.gz#md5=214c6c43bd7035e870c1beab402c48e7 # tar zxvf setuptools-18.4.tar.gz # cd setuptools-18.4 # python setup.py build # python setup.py install
下载安装pip-7.1.2.tar.gz(版本没有限制)
# wget https://pypi.python.org/packages/source/p/pip/pip-7.1.2.tar.gz#md5=3823d2343d9f3aaab21cf9c917710196 # tar zxvf pip-7.1.2.tar.gz # cd pip-7.1.2 # python setup.py build # python setup.py install
- 安装 Xen 安装 Xen 前,请先确保 yum 配置文件中的 CentOS-Extras 容器生效。 安装 Xen 的 yum服务器提供的 xen 容器配置文件,输入:
# yum install centos-release-xen
完成上一步后,现在开始安装 Xen(由于网络的原因,这一步骤需要的时间可能 比较长,如果由于网络中断,可以重复执行命令直到完成安装),输入开始安装:
# yum install xen xen-devel
由于 Xen 是运行于 Linux 内核上,因此需要通过修改 Grub 配置文件来设置 Grub 先加载 Xen,然后再加载 Linux 内核。在 centos-release-xen 软件包中已经提供了 一个脚本来修改 Grub 配置文件:
# /usr/bin/grub-bootxen.sh
执行脚本完成后,Grub 配置文件应当类似于这样,我们可以看到kenel /xen.gz
,这说明Xen安装成功 :
# vim /etc/grub.conf
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (3.18.17-13.el6.x86_64)
root (hd0,0)
kernel /xen.gz dom0_mem=1024M,max:2048M loglvl=all guest_loglvl=all
module /vmlinuz-3.18.17-13.el6.x86_64 ro root=/dev/mapper/vg_centos-lv_root rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=vg_centos/lv_swap rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=128M rd_LVM_LV=vg_centos/lv_root KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
module /initramfs-3.18.17-13.el6.x86_64.img
注意:这里有一个 bug ,在 /usr/bin/grub-bootxen.sh 运 行 完 成 后 , 需 要 修 改/boot/grub/grub.conf 配置文件中的内核参数,将 dom0_mem=1024M,max:1536M 中的 max 稍微修改大一点
重启机器,通过 uname -r 命令来验证运行的内核版本是否 3.10+ 系列的, 通过 xm info 来验证 xen 服务是否已经在运行中。Xen 的主机操作系统称为Dom0。通过 Xen 来执行的虚拟操作系统(VM)称为 DomU。缺省情况下,虚拟机管理程序会在缺省网络卡(一般是 eth0)背后创 建一个192.168.122.0/24 的 NAT 网络。可以在物理服务器上连接登录到 DomU 虚拟机上。
- 安装 libvirt 所需的组件:
# yum install libvirt python-virtinst libvirt-daemon-xen virt-manager libvirt-devel.x86_64
安装后,请重新启动你的 Dom0 机器,也就是物理服务器。
注意: 重启后可能报出xm 的错误;如果在vmm 中没有看到dom0,说明xend服务没有启动,请执行以下命令
# vim /etc/xen/xend-config.sxp
将/etc/xen/xend-config.sxp 文件中的“#(xend-unix-server no)”注释去掉 即把“#”去
掉,并把“no”改成“yes”,保存即可。
然后重启 xend 服务(在之后的实验中我们可能会遇到xend服务无法连接,解决方法是输入下面的两行,第一行的输入在机器重启后失效,第二行是修改到配置文件,重启后仍有效)
# service xend start # chkconfig xend on
记得启动 xencommons ,以前旧版本的 xend 已经被 xencommons 替代了(没有做)
- 安装 libvmi 安装libvmi参考方法 在安装 libvmi 前先安装相关依赖库
# yum install libvirt bison flex glib2-devel libtool check-devel fuse-devel
安装 libjansson
# wget http://www.digip.org/jansson/releases/jansson-2.7.tar.gz # tar zxvf jansson-2.7.tar.gz # cd jansson-2.7 # ./configure # make && make install
配置 PKG_CONFIG_PATH LD_LIBRARY_PATH
# export LD_LIBRARY_PATH =$LD_LIBRARY_PATH:/usr/local/lib # export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig 注:该方法设置的环境变量在下次重启后将失效,我们习惯在~/.bashrc文件的末尾将上面加入上面的两条语句。
安装libvmi
# wget https://codeload.github.com/libvmi/libvmi/tar.gz/v0.10.1 # tar zxvf libvmi-0.10.1.tar.gz # cd libvmi-0.10.1 # ./autogen.sh # ./configure --enable-xen --enable-xen-events
执行完成后,输出如下:
Feature | Option | Reason
-------------|-------------------------|----------------------------
Xen Support | --enable-xen=yes | yes
Xen Events | --enable-xen-events=yes | yes
KVM Support | --enable-kvm=no | kernel module is not loaded
File Support | --enable-file=yes | yes
Tools | Option | Reason
-------------|-------------------------|----------------------------
VMIFS | --enable-vmifs=yes | yes
可以看到已经支持 Xen Support , Xen Events , File Support , VMIFS
特性。如果没有达到预期输出,你可以选择相应缺失的包下载并安装,执行./configure --enable-xen-events
脚本命令。
然后使用 make 命令编译,make install 是一个可选的命令,你可以选择
执行,也可以不执行。
- 安装DomU 安装DomU之前的准备:
- 安装镜像:与Dom0同样的操作系统(CentOS-6.6-x86_64-bin-DVD1.iso)
- 安装方法:通过virt-manager图形化安装,但安装成功后在后面的libvmi测试中./event-example domain_name会显示*
not support for ept
*,所以我们通过配置文件来安装
创建存放镜像的目录
# mkdir -p /xen/images
初始化一个15G的安装镜像(.img),注意我们这里创建的安装镜像内容为0,这不是最终启动时的镜像,这里的镜像相当于是DomU的分区。
# dd if=/dev/zero of=/xen/images/ubuntu.img bs=1000 count=0 seek=$[1000100015]
新建DomU的配置文件
# vim /etc/xen/centos.hvm
注:如果不明白如何设置参数们可以去/etc/xen/路径下参考相应pv或hvm文件进行配置
/# Kernel image file.
kernel = "/usr/lib/xen/boot/hvmloader"
/# The domain build function. HVM domain uses 'hvm'.
builder='hvm'
/# Initial memory allocation (in megabytes) for the new domain.
memory = 2048
/# when the new domain run , this name will show on the xm list
name = "centos"
/#--------------------------------------------------------------------
/#我们需要注意disk命令的写法,在这由两个三元组构成,我们不妨称做A,B,我们需要理解或自定
/#义的只是A和B中的第一项,A1,B1;A1的路经就是我们用dd命令创建的img镜像路径,B1的路径就
/#是我们系统.iso文件的路径。
disk = [ 'file:/xen/images/centos.img,hda,w', 'file:/home/iso/CentOS-6.6-x86_64-bin-DVD1.iso,hdc:cdrom,r' ]
/#--------------------------------------------------------------------
/# Optionally define mac and/or bridge for the network interfaces.
/# Random MACs are assigned if not given.
/#vif = [ 'type=ioemu, mac=00:16:3e:00:00:11, bridge=xenbr0, model=ne2k_pci' ]
/# type=ioemu specify the NIC is an ioemu device not netfront
vif = [ 'type=ioem' ]
/#-------------------------------------------------------------------
/# boot on floppy (a), hard disk (c), Network (n) or CD-ROM (d)
/# default: hard disk, cd-rom, floppy
boot="cda"
/# Device Model to be used
device_model = 'qemu-dm'
/#!!!!most important,to enable ept , we must set hap = 1
hap=1
sdl=0
opengl=1
vnc=1
vncpasswd=''
stdvga=0
serial='pty'
tsc_mode=0
将 DomU 中的符号表文件复制到Dom0 机器中的/boot 目录下,我们的domu系统是centos,符号表文件是/boot/System.map-2.6.32-28-server。
# scp local_file remote_username@remote_ip:remote_folder 注:该命令在DomU执行,local_file为源文件,remote_username为目的主机的用户名,remote_ip为远程主机ip地址,remote_folder 为源文件存放到目的主机的位置,在本例中dest_dir为/root
复制Dom0中libvmi 目录下的 tools/linux-offset-finder 目录到 DomU 虚拟机中,
# scp -r libvmi-0.10.1/tools/linux-offset-finder/ [email protected]:/root/ *注:该命令在Dom0中执行,复制目录需要添加
-r
选项
在DomU
虚拟机上装载findoffsets
# yum install kernel-devel gcc 注:kernel-devel gcc为相关工具包 # cd /root/linux-offset-finder # make # insmod findoffsets.ko 注:运行insmod findoffsets.ko指令后如果屏幕上没有输出,那我们就需要输入*
dmesg
***
将类似下面的输出内容复制到dom0中的/etc/libvmi.conf文件中,我们需要修改
domain name和sysmap参数以及其他参数,domain name是我们创建的domu的名称,sysmap是该domu中的符号表文件复制到dom0中的路径(/boot/),如果不清楚domu的名称,我们可以在dom0下输入xm list
查看domu的名称。
[domain name] {
ostype = "Linux";
sysmap = "[insert path here]";
linux_name = 0x678;
linux_tasks = 0x448;
linux_mm = 0x480;
linux_pid = 0x4a8;
linux_pgd = 0x50;
}
- 测试 libvmi 在dom0中查看domu的进程信息
# cd /root/libvmi-0.10.1/exmples # ./process-list domu_name
在dom0中查看domu的事件信息
# ./event-example domu_name