当前位置:首页 » 编程软件 » libvirt编译与安装

libvirt编译与安装

发布时间: 2022-04-27 12:35:50

1. 如何在linux上安装libvirt虚拟化工具

libvirt是一套免费、开源的支持Linux下主流虚拟化工具libvirt 比较和用例模型的C函数库,其旨在为包括Xen在内的各种虚拟化工具提供一套方便、可靠的编程接口,支持与C,C++,Ruby,python等多种主流开发语言的绑定。当前主流Linux平台上默认的虚拟化管理工具virt-manager(图形化),virt-install(命令行模式)等均基于libvirt开发而成。

Linux下虚拟化工具llibvirt安装步骤:
by TANG Jia
本测试通过的版本号为:ubuntu12.04、libvirt1.1.2
安装libvirt:
1,安装virtinst
apt get installvirtinst
安装libvirt之前首先安装virtinst目的是为了使后面编译安装libvirt时,覆盖安装virtinst时自带的libvirt的版本,这点很重要。之后才能编译安装libvirt.
2,下载libvirt1.1.2,解压缩,切换至libvirt1.1.2目录
下载libvirt压缩包网址:ftp://libvirt.org/libvirt/
3,如果你直接执行./configure,会提示你缺少很多包,所以先安装包:
apt-get install libxml++2.6-2 libxml++2.6-dev
apt-get install libdevmapper-dev
apt-get install libpciaccess-dev
apt-get install python-dev
apt-get install libnl-dev
4,安装完依赖包后,在当前目录下执行 ./configure--prefix=/usr
(其中--prefix选项为指定安装路径)。
执行成功,部分输出如下:
configure:Readline:no
configure:Python:yes
configure:DTrace:no
configure:numad:no
configure:XML Catalog:/etc/xml/catalog
configure:Init script:check
configure:Char device locks:/var/lock
configure:
configure:Privileges
configure:
configure:QEMU:root:root
configure:
5,编译:make
安装:makeinstall
至此libvirtd安装成功!
6,启动libvirt服务
service libvirt-bin start
万万要注意啦,libvirt-daemon是由libvirt-bin来启动的,而不是libvirtd,libvirt-bin是一个符号链接/etc/init.d/libvirt-bin-> /lib/init/upstart-job,后者是一个shell脚本
同样,停止libvirt服务就是service libvrit-bin stop;
以上操作的正确性仅限于在ubuntu上安装libvirt,重点是第1步和第6步,这和网上很多博文所讲的libvirt安装有些差异,比如很多没有第1步,第6步启动libvirt为service libvirtd
start,这会报错为libvirtd:unrecognizedservice.
第2,3,4,5步的下载、编译、安装在任何版本的Linux上都一致。
libvirt 提供一种虚拟机监控程序不可知的 API 来安全管理运行于主机上的来宾操作系统。希望以上对llibvirt安装流程介绍对大家有所帮助。关注系统部落,锁定电脑系统下载!

2. 如何在python文件中导入libvirt

方法/步骤 1 使用 python -V 查询本机python系统。 2 再安装新版之前安装 先安装bz2、zlib,执行下列代码进行安装 # yum install -y zlib-devel bzip2-devel xz-libs wget 3 采用wget下载python,执行: # wget http://www.python.org/ftp/pytho...

3. 安装kvm虚拟机为什么还要安装libvirt

kvm本身是做内核虚拟化的,是一种hypervisor,libvirt是一套对接hypervisor的库函数接口,他可以对接多种hyperviser,在libvirt上面可以有cli和gui

4. centos 6.0 安装libvirt-python 的具体步骤是什么样的

centos6.0的yum源中是有libvirt-python的,你只需要如下操作即可:

yuminstalllibvirt-python-y

5. 如何安装XEN

对于Fedora系统,它的程序包管理器是yum,将用它从预编译好的程序包来安装Xen。实际上,使用yum安装Xen是一件相当轻松的工作,具体过程如下所示:
1、通过下列命令来安装Xen 内核和有关软件:
yum install kernel-xen xen
这一命令将下载并安装以下程序包及其依赖包:
l kernel-xen:该程序包存放的是主机操作系统和客户操作系统以及系统管理程序所用的Xen内核。
l xen:该程序包存放的是跟Xen系统管理程序交互的用户空间工具。
l bridge-utils :该程序包存放的是用于配置以太网桥的实用程序,以太网桥的作用是将多个以太网设备连在一起。
l libvirt :该程序包存放的是一个C库,它提供了使用Xen框架所需的应用编程接口API 。
l libvirt-python :该程序包存放的是一个Python 模块,有了它就可以让Python 应用程序使用libvirt提供的Xen框架应用编程接口。
l Python-virtinst :该程序包存放的是一个Python 模块,该模块使用libvirt在虚拟机内安装Fedora /Red Hat Enterprise Linux 。
l Xen-libs :该程序包存放的是Xen的管理程序所需的程序库。

6. 在ubuntu系统下编译c程序,提示缺少libvirt.h,我已经安装了libvirt,这个头文件要怎么拥有呢

你安装的libvirt.h路径可能不在gcc默认的$INCLUDE环境变量里面。

可以将它添加到INCLUDE里面,也可以编译的时候加-I选项手动指定,gcc -I /path/to/libvirt

7. ibvirterror:将插槽连接到 /usr/local/var/run/libvirt/libvirt-sock'失败:没

你安装的libvirt.h路径可能不在gcc默认的$INCLUDE环境变量里面。可以将它添加到INCLUDE里面,也可以编译的时候加-I选项手动指定,gcc-I/path/to/libvirt

8. 如何在Debian或Ubuntu上编译virt-manager

眼下有几种不同的方法可以管理在KVM虚拟机管理程序上运行的虚拟机。比如说,virt-manager就是一种广受欢迎的基于图形用户界面(GUI)的前端工具,可用来管理虚拟机。不过,如果你想在无外设服务器上使用KVM,那么基于GUI的解决方案并非理想方案。这时候,virsh就派得上用场。virsh是一种命令行工具,可用于管理来宾虚拟机(guest

VM)。就其底层而言,virsh依赖libvirtd服务,该服务可以控制几种不同的虚拟机管理程序,其中包括KVM、Xen、QEMU、LXC和OpenVZ。

如果你想让虚拟机的配置和管理实现自动化,virsh等命令行管理界面也大有用处。此外,virsh支持多种虚拟机管理程序,这就意味着你可以通过同一个virsh界面,管理不同的虚拟机管理程序。

我在本教程中将演示如何在Debian或Ubuntu上使用virsh,从命令行运行KVM。

第一步:证实主机支持硬件虚拟化

作为第一步,证实主机的处理器配备硬件虚拟化扩展机制(比如英特尔VT或AMD-V),KVM需要这样的机制。下面这个命令就能证实一点。

$
egrep '(vmx|svm)' --color /proc/cpuinfo flags : fpu vme de
pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts
mmx fxsr sse sse2
ss syscall nx rdtscp lm constant_tsc up arch_perfmon pebs bts nopl
xtopology tsc_reliable nonstop_tsc aperfmperf pni pclmulqdq vmx ssse3
cx16 pcid sse4_1 sse4_2 x2apic popcnt aes xsave avx f16c rdrand
hypervisor lahf_lm ida arat epb xsaveopt pln pts dtherm tpr_shadow vnmi
ept vpid fsgsbase smep

如果输出结果并不含有vmx或svm标记,这意味着主机的处理器没有支持硬件虚拟化的功能。因而,你就无法在主机上使用KVM。证实了主机处理器随带vmx或svm后,接下来继续安装KVM。

第二步:安装KVM

使用apt-get,安装KVM及相关的用户空间工具。

$ sudo apt-get install qemu-kvm libvirt-bin

下一步,将你的用户ID添加到libvirt群组,那样你就能以非root普通用户的身份,管理虚拟机了。作为上面安装KVM的一部分,必须创建libvirt群组。

$ sudo adser [youruserID] libvirt

重新装入更新后的群组成员信息,如下所示。看到要求输入密码的提示后,输入你的登录密码。

$ exec su -l $USER

这时候,你应该能够以普通用户的身份运行virsh了。为了测试一下,不妨试一试下面这个命令,它会列出可用的虚拟机(目前没有一个虚拟机)。要是你没有遇到权限错误,这意味着到目前为止,一切正常。

$ virsh --connect qemu:///system list Id Name State

9. ubuntu14.10能支持xen到多少版本,ubuntu12.04

Ubuntu12.04安装Xen4

linux3.0内核已经支持xen了,所以不用再编译内核了(对于那些内核支持的系统都不用重新编译内核)。

第一步:安装需要的软件包

安装编译 Xen 和 Linux xen kernel 所需要的软件包:

$ sudo apt-get install gcc g++ make patch libssl-dev bzip2 gettext \

zlib1g-dev python libncurses5-dev libjpeg62-dev libx11-dev \

libgcrypt11-dev pkg-config bridge-utils bcc bin86 libpci-dev \

libsdl-dev python-dev texinfo libc6-dev uuid-dev bison flex fakeroot \

build-essential crash kexec-tools makempfile libncurses5 \

libncurses5-dev iasl gawk

第二步:安装xen vmm

32位和64位系统的区别也很重要。64位按下面步骤很简单,32位就不同,因为xen需要开启pae,默认是没有开启的,所以32位ubuntu首先得执行下面这个命令:

sudo apt-get install linux-image-server

sudo apt-get install xen-hypervisor-4.1-amd64 xen-utils-4.1 xenwatch xen-tools xen-utils-common xenstore-utils

这里xen-hypervisor-4.1要分32位、64位,64位系统用xen-hypervisor-4.1-amd64,32位用xen-hypervisor-4.1-i386.

第三步:安装libvirt和Virtual Manager

sudo apt-get install virtinst python-libvirt virt-viewer virt-manager

第四步:重启机器,选择有xen的内核启动,进入系统之后,再检查一下 Xen 是否已经成功安装:

$ sudo xm list

Name ID Mem VCPUs State Time(s)

Domain-0 0 1879 2 r----- 6.6

出现上面的信息,则代表安装成功。

第五步:修改配置文件

sudo gedit /etc/xen/xend-config.sxp

将/etc/xen/xend-config.sxp文件中的“#(xend-unix-server no)”注释去掉 即把“#”去掉,并把“no”改成“yes”,保存即可。 然后重启xend服务

sudo gedit ~/.bashrc ,在打开的.bashrc文件中添加下面这句话

export VIRSH_DEFAULT_CONNECT_URI="xen:///"

第六步:打开Virtual Manage时,但是创建时因为相关资源路径问题可能会报以下错误

6.1 ******/usr/lib/xen/bin/qemu-dm:****
路径中xen应该是xen-4.1,解决办法如下

mkdir /usr/lib/xen -p
cp /usr/lib/xen-4.1/* -r /usr/lib/xen/

6.2 ****** libvirtError: POST操作失败: xend_post:来自 xen 守护进程的错误:****
查看日志 /var/log/xen/xend.log 和 /var/log/xen/qemu-dm-demo.log
日志显示/usr/share/qemu/keymaps/en-us could not be found, the keymaps ***
路径中qemu应该是qemu-linaro,解决办法如下

cp -r /usr/share/qemu-linaro/ /usr/share/qemu

这样创建过程基本没有问题了.

第七步:通过libvirt查看xen的版本信息,确认libvirt和xen都已经安装成功

# virsh version

Compiled against library: libvir 0.9.8

Using library: libvir 0.9.8

Using API: Xen 0.9.8

Running hypervisor: Xen 4.1

10. libvirt-java怎么获得虚拟机内存使用率

最近在用Nagios监控Xen PV虚拟机的时候出现了问题,在被监控的服务器上是采用nrpe来采集数据的。但是在进程里无法看到PV虚拟机的进程,虽然可以通过xm top vpsname的方式来获取名为vpsname虚拟机的cpu使用率情况,但是不便于采集数据,通过xm list可以采集到cpu时间,根据CPU时间的差值,可以计算CPU使用率,可是该命令只能root执行,因为该命令可以进行关闭,重启虚拟机等重要操作,所以如果把权限给了nrpe,将可能造成严重的安全问题。
幸好livirt提供了API,所以我打算尝试用API写一个Nagios的插件来满足的我的需求,我的想法就是分别2次获得虚拟机的CPU时间,并分别记录2次取得数据时的系统时间,然后根据差值来计算,在理论上是存在一些误差的。
1.要使用API,首先需要安装libvirt-devel
[root@aikaiyuan ~]# yum -y install libvirt-devel

2.我的代码如下,文件名为vCpu.c
/**
* Program Name: vCpu.c
* Author: steptodream
* Description:A simple plugin to get vps cpu usage
* for nagios(nrpe) by libvirt api
* Compile:gcc -o vCpu vCpu.c -lvirt
*/
#include <stdlib.h>
#include <stdio.h>
#include <libvirt/libvirt.h>
/* define the exit status for nagios */
#define OK 0
#define WARNING 1
#define CRITICAL 2
#define UNKNOWN 3
/* get cpu time of the given name */
double getCpuTime(char *vpsName,virConnectPtr conn) {
virDomainInfo info;
virDomainPtr domain = NULL;
int ret;
/* Find the domain of the given name */
domain = virDomainLookupByName(conn, vpsName);
if (domain == NULL) {
printf("Failed to find the vps called %sn", vpsName);
exit(OK);
}
/* Get the information of the domain */
ret = virDomainGetInfo(domain, &info);
virDomainFree(domain);
if (ret < 0) {
printf("Failed to get information for %sn", vpsName);
exit(OK);
}
return info.cpuTime;
}
int main(int argc,char * argv[])
{
char *vpsName; /* vps name */
int interval = 1; /* check interval */
double warning; /* warning value */
double critical; /* critical value */
double cpuUsage; /* cpu usage of the vps */
struct timeval startTime; /* time of the first time to get cpu time */
struct timeval endTime; /* time of the second time to get cpu time */
int realTime; /* real interval between two times */
long long startCpuTime; /* cpu time of the first time */
long long endCpuTime; /* cpu time of the second time */
int cpuTime; /* value of startCpuTime - endCpuTime */
char *output; /* output data for nagios */
int ret; /* exit status for nagios */
virConnectPtr conn; /* connection pointer */
switch (argc){
case 5:
interval = atoi(argv[4]);
case 4:
vpsName = argv[1];
warning = atof(argv[2]);
critical = atof(argv[3]);
break;
default:
printf("Usage:vCpu <vName> <warning> <critical> [interval]nn");
return OK;
}
/* connect to local Xen Host */
conn = virConnectOpenReadOnly(NULL);
if (conn == NULL) {
printf("Failed to connect to local Xen Hostn");
return OK;
}
/* get cpu time the first time */
startCpuTime = getCpuTime(vpsName, conn);
/* get start time */
if (gettimeofday(&startTime, NULL) == -1) {
printf("Failed to get start timen");
return OK;
}
/* wait for some seconds */
sleep(interval);
/* get cpu time the second time */
endCpuTime = getCpuTime(vpsName, conn);
/* get end time */
if (gettimeofday(&endTime, NULL) == -1) {
printf("Failed to get end timen");
return OK;
}
/* colose connection */
virConnectClose(conn);
/* calculate the usage of cpu */
cpuTime = (startCpuTime - endCpuTime) / 1000;
realTime = 1000000 * (startTime.tv_sec - endTime.tv_sec) +
(startTime.tv_usec - endTime.tv_usec);
cpuUsage = cpuTime / (double)(realTime);
/* display cpuUsage by percentage */
cpuUsage *= 100;

/* make output data and exit status for nagios*/
if (cpuUsage > critical) {
output = "CRITICAL";
ret = CRITICAL;
} else if (cpuUsage > warning){
output = "WARNING";
ret = WARNING;
} else {
output = "OK";
ret = OK;
}
printf("%s CPU:%.2f%|CPU=%.2f",output,cpuUsage,cpuUsage);
return ret;
}

3.编译测试,根据我的需求,我设置了3个必须参数和1个可选参数,分别是虚拟机名称vpsName,警告值warning(百分比值),危急值critical(百分比值)和检查间隔interval(秒)
[root@aikaiyuan ~]# gcc -o vCpu vCpu.c -lvirt
[root@aikaiyuan ~]# ./vCpu vmtest 1 2
OK CPU:0.20%|CPU=0.20

当然了,你同时可以再打开一个终端,用xm top vmtest来获取vmtest的cpu使用率,然后对比一下取值是否接近一致。我们再来看看返回值是否正常,因为Nagios是靠这个来判断服务状态的。
[root@aikaiyuan ~]# echo $?
0

注意,我的具体要求是检测指定名称的虚拟机的CPU使用率,如果超过了规定的warning或者critical值,就给使用者发邮件,所以在没有得到数据或者程序出错的情况,我都是以正常状态退出程序的。
另外,本人开发经验薄弱,所以代码里难免存在错误和不合理的地方以及不完善的地方(比如参数的合法性检验),仅供参考。
最后,关于代码中时间,我是以微秒(us)为统一单位来计算的,得到的cpu的时间是纳秒(ns),这个在结构体virDomainInfo定义中可以看到:
struct virDomainInfo{
unsigned char state : the running state, one of virDomainState
unsigned long maxMem : the maximum memory in KBytes allowed
unsigned long memory : the memory in KBytes used by the domain
unsigned short nrVirtCpu : the number of virtual CPUs for the domain
unsigned long long cpuTime : the CPU time used in nanoseconds
}

而通过gettimeofday取得存取到timeval结构体里的时间,包含tv_sec(s秒)和tv_usec(us微秒)这2种单位,可以从timeval结构体的定义中看到:
struct timeval {
time_t tv_sec; /* seconds */
suseconds_t tv_usec; /* microseconds */
};

热点内容
vb数据库程序 发布:2024-05-18 13:01:57 浏览:110
新建文件夹2免费手机 发布:2024-05-18 12:56:13 浏览:364
自己在家搭建服务器有水冷散热吗 发布:2024-05-18 12:47:27 浏览:648
旧版的安卓手机怎么使用微信 发布:2024-05-18 12:46:36 浏览:466
我的世界服务器开多久 发布:2024-05-18 12:45:32 浏览:592
vba获取网页表格数据库数据库数据库 发布:2024-05-18 12:23:24 浏览:699
腾讯服务器为什么卡顿 发布:2024-05-18 12:02:12 浏览:305
如何知道密码锁有没有nfc 发布:2024-05-18 11:58:09 浏览:961
单片机c语言模块化编程 发布:2024-05-18 11:53:16 浏览:644
win7xp共享打印机拒绝访问 发布:2024-05-18 11:51:00 浏览:847