libvirt API 的C语言调用
一、实验名称
libvirt API 的C语言调用
二、实验目的
1.完成lbvirt的安装;
2. 编写C语言程序,实现调用libvirt API
三、实验内容及步骤.
3.1创建虚拟机
下载VMware Workstation并且创建一台虚拟机
3.2 libvirt的编译和安装
可以通过多种方式安装libvirt。普通用户如果只是使用libvirt,可以直接通过yum安装,以yum的方式安装libvirt时,只需执行“yum install libvirt”命令即可。
这里用到的是已有的压缩包,使用远程登陆工具FinalShell将主机与虚拟机(#ip addr)连接。
将libvirt-1.3.5.tar压缩包上传到虚拟机root目录下的libvirt文件夹内
连接成功后,切换目录至刚才新建的libvirt目录下,对所上传的压缩包进行解压:
进入文件夹:# cd libvirt
解压 :# tar -xvf libvirt-1.3.5.tar.gz
查看文件 :# ls
进入文件夹 :# cd libvirt-1.3.5
libvirt配置
配置libvirt时,需运行libvirt安装目录下的configure脚本文件。
在配置过程中,经常会因为缺少编译所需的包而导致配置失败。在配置失败时,按照错误提示安装相应的软件包即可,在相应的软件包安装完成后继续执行“./configure”命令进行配置,直到配置成功。
#./configure
可以看到这里缺少gcc,下一步:#yum install gcc安装
#./configure
执行命令后会显示缺少对应的安装包,根据提示进行安装
安装yajl-devel
#yum install yajl-devel
安装libxml2-devel
#yum install libxml2-devel
安装device-mapper-devel
#yum install device-mapper-devel
安装libpciaccess-devel
#yum install libpciaccess-devel
安装libnl-devel.x86_64
#yum install libnl-devel.x86_64
有时,安装相应的软件包时,又会因为缺少其他的包而引起错误,那么就需关联寻找所需的包依次进行安装。
libvirt编译
virsh通过调用libvirt API来实现虚拟化的管理,是一个完全在命令行文本模式下运行的工具,系统管理员可以通过脚本程序方便地进行虚拟化的自动部署和管理。
配置./configure成功后,在libvirt安装目录下执行“make”命令编译。命令操作如下:
#make
在使用make命令时,可以使用make的“-j”参数进行多进程编译以提高编译速度,例“make -j 4”
安装libvirt
编译成功后执行“#make install”命令进行libvirt的安装,在配置和编译libvirt时都不需要超级用户(root)权限,但是在安装时需要超级用户(root)权限,如果不是root用户登录,需切换用户或使用sudo命令。
libvirt安装时会默认安装libvirtd和virsh等可执行程序,可进行以下操作查看
查看virsh命令位置:
查看virsh的版本号
查看已经安装的libvirt
需查看libvirt是否启动,实质是查看libvirt的libvirtd -d这个守护进程是否启动。
libvirtd是libvirt虚拟化管理工具的服务器端的守护程序。如果要让某个节点能够用libvirt进行管理(无论是本地还是远程管理),都需要在这个节点上运行着libvirtd这个守护进程,以便让其他上层管理工具可以连接到该节点,libvirtd负责执行其他管理工具发送给它的虚拟化管理操作指令。而libvirt的客户端工具(包括virsh、virt-manager等)可以连接到本地或远程的libvirtd进程,以便管理节点上的客户机(启动、关闭、重启、迁移等)、收集节点上的宿主机和客户机的配置和资源使用状态。
使用以下命令查看libvirtd进程是否启动
#ps -el|grep libvirt
由此可知,,libvirtd进程已经启动,进程号是1053.
开启libvirtd守护进程:
#systemctl start libvirtd
#service libvirt status
3.3 libvirt中域的XML配置文件
创建一个虚拟机的硬盘,将来来存放虚拟操作系统的.这个虚拟硬盘是利用文件系统来进行模拟的.
#qemu-img create -f qcow2 -o preallocation=full /var/lib/libvirt/images/test.qcow2 10G
新建一个xly.xml文件,里面存放虚拟机的配置信息,有内存、cpu、硬盘位置、光驱、VNC等配置。
用virsh命令查看当前节点中的情况,再编译和运行这个示例程序去查询一些域的信息
#virsh start newlinux
#virsh define create_kvm.xml
3.4使用libvirt API查询信息
写入C语言代码,文件名为:***.c
#xly.c
建立到Hypervisor的连接
#virsh -c qemu:///session
#gcc -g -Wall xly.c -o create -lvirt
.用virsh查看虚拟机的信息
#domid newlinux
#dominfo newlinux
四、实验结论
通过本次实验,完成了libvirt API 的C语言调用, 知道了libvirt可以支持多种不同的Hypervisor,针对不同的Hypervisor,libvirt提供了不同的驱动,通过libvirt这个中间适配层,用户空间的管理工具可以管理多种不同的Hypervisor及其上运行的虚拟客户机。
libvirt的主要功能如下:
(1) 虚拟机管理。包括对节点上的各虚拟机的生命周期的管理,比如启动、停止、暂停、保存、恢复和迁移;也包括支持对多种设备类型的热插拔操作,例如磁盘、网卡、内存和CPU等。
2) 远程节点的管理。只要物理节点上运行了libvirt daemon,那么,远程节点上的管理程序就可以连接到该节点,然后进行管理操作,所有的libvirt功能就都可以访问和使用
(3) 存储管理:任何运行了libvirt daemon的主机,都可以通过libvirt管理不同类型的存储,(4) 网络接口管理:任何运行了libvirt daemon的主机,都可以通过libvirt管理物理和逻辑的网络接口。
(5) 虚拟NAT和基于路由的网络:任何运行了libvirt daemon的主机都可以通过libvirt管理和创建虚拟网络。
本次实验遇到的问题:解压完libvirt的安装包,进行配置时出现了缺少对应安装包的问题,问题如下:
(1)error: You must install the libyajl library & headers to compile libvirt,error: You must install device-mapper-devel/libdevmapper >= 1.0.0 to 经过上网查找将上述所缺少的安装包 #yum install yajl_devel# yum install libxml2-devel# yum install device-mapper-devel# yum install libpciaccess-devel.x86_64解决了以上问题,安装完成后执行./configure命令。
(2)新建的虚拟机内没有gcc文件,./configure时出现错误,#yum install gcc解决该问题