当前位置:首页 > linux教程 > 列表

KVM 下 libvirt的编译、安装、配置教程

发布:smiling 来源: PHP粉丝网  添加日期:2015-04-20 16:55:18 浏览: 评论:0 

libvirt是一套免费、开源的支持Linux下主流虚拟化工具的C函数库,其旨在为包括Xen在内的各种虚拟化工具提供一套方便、可靠的编程接口,支持与C,C++,Ruby,Python等多种主流开发语言的绑定,本文我们来看看在KVM 下 libvirt的编译、安装.

6.1.2 libvirt的编译、安装和配置

1.从源代码编译和安装libvirt

如果只是普通用户使用libvirt,一般不需要从源码编译libvirt,只需要安装对应的Linux系统上libvirt软件包即可,一些高级用户或者开发者,可能希望对libvirt进行更多的了解,甚至修改libvirt的源代码来实现自己的功能,那么还是需要了解从源代码编译和安装libvirt的过程.

下面以在一个RHEL 6.3系统上编译libvirt 1.0.0 版本为例,介绍一下libvirt的编译和安装过程.

1)真正开始编译之前,需要检查和清理系统上已经安装的libvirt,如果曾经安装过,命令行操作如下:

  1.  [root@jay-linux kvm_demo]# which libvirtd 
  2. /usr/sbin/libvirtd 
  3. [root@jay-linux kvm_demo]# rpm -q libvirt 
  4. libvirt-0.9.10-21.el6.x86_64 
  5. [root@jay-linux kvm_demo]# rpm -e libvirt 
  6. [root@jay-linux kvm_demo]# libvirtd –version 
  7. -bash: /usr/sbin/libvirtd: No such file or directory 

2)下载libvirt的源代码

你可以选择从正在Linux系统发行版的源代码ISO中获取其libvirt的源代码安装包,也可以选择到libvirt官方网站下载libvirt源代码的tar.gz压缩包,还是可以通过git工具将开发中的libvirt源码仓库克隆到本地。

libvirt官方发布的源代码存放的网页是:http://libvirt.org/sources/ 。该网页上提供了最原生的libvirt各个版本的源代码tar.gz压缩包,以及已经编译好的libvirt-devel 、libvirt-python、libvirt-java、libvirt-php等RPM包下载。libvirt官方还提供了FTP下载源代码的站点:ftp://libvirt.org/libvirt/。下载libvirt-1.0.0.tar.gz 源码包并将其解压缩的命令行如下:

  1. [root@jay-linux kvm_demo]# wget http://libvirt.org/sources/libvirt-1.0.0.tar.gz 
  2.  
  3. –2012-11-25 22:58:24–  http://libvirt.org/sources/libvirt-1.0.0.tar.gz 
  4.  
  5. HTTP request sent, awaiting response… 200 OK 
  6.  
  7. Length: 21868950 (21M) [application/x-gzip] 
  8.  
  9. Saving to: “libvirt-1.0.0.tar.gz” 
  10.  
  11.  
  12.  
  13. 100%[=======================>] 21,868,950  67.6K/s   in 2m 29s 
  14.  
  15. --phpfensi.com 
  16.  
  17. 2012-11-25 23:00:54 (143 KB/s) – “libvirt-1.0.0.tar.gz” saved [21868950/21868950] 
  18.  
  19. [root@jay-linux kvm_demo]# tar -zxf libvirt-1.0.0.tar.gz 

libvirt处于开发中的最新的git代码仓库的地址为:git://libvirt.org/libvirt.git 。还可以通过网页http://libvirt.org/git/ 以在线网页的方式浏览libvirt.git和libvirt-java.git、libvirt-php.git等开发中的代码仓库,另外,libvirt的python绑定的代码就存放在libvirt的源码仓库(libvirt.git)中,没有单独的libvirt-python代码仓库,下载libvirt开发代码仓库的命令行如下:

  1. [root@jay-linux kvm_demo]# git clone git://libvirt.org/libvirt.git 
  2.  
  3. Initialized empty Git repository in /root/kvm_demo/libvirt/.git/ 
  4.  
  5. remote: Counting objects: 96578, done. 
  6.  
  7. remote: Compressing objects: 100% (15214/15214), done. 
  8.  
  9. Receiving objects:  52% (50926/96578), 51.28 MiB | 26 KiB/s 
  10.  
  11. Receiving objects:  52% (50927/96578), 51.31 MiB | 24 KiB/s 
  12.  
  13. remote: Total 96578 (delta 80940), reused 96578 (delta 80940) 
  14.  
  15. Receiving objects: 100% (96578/96578), 91.22 MiB | 63 KiB/s, done. 
  16.  
  17. Resolving deltas: 100% (80940/80940), done. 

3)配置和编译libvirt

配置和编译libvirt的方法与Linux上多数的开源项目的方法类似,都是先运行 configure 脚本进行编译环境配置,然后用 make 命令进行编译,用 make install 命令进行安装.

查看有哪些配置选项可用的命令为“./configure –help”,命令行操作如下:

  1. [root@jay-linux kvm_demo]# cd libvirt-1.0.0 
  2.  
  3. [root@jay-linux libvirt-1.0.0]# ./configure –help 
  4.  
  5. `configure’ configures libvirt 1.0.0 to adapt to many kinds of systems. 
  6.  
  7. Usage: ./configure [OPTION]… [VAR=VALUE]…  
  8.  
  9. To assign environment variables (e.g., CC, CFLAGS…), specify them as 
  10.  
  11. VAR=VALUE.  See below for descriptions of some of the useful variables. 
  12.  
  13.  
  14.  
  15. Defaults for the options are specified in brackets. 
  16.  
  17.  
  18.  
  19. Configuration: 
  20.  
  21. -h, –help              display this help and exit 
  22.  
  23. –help=short        display options specific to this package 
  24.  
  25. –help=recursive    display the short help of all the included packages 
  26.  
  27. -V, –version           display version information and exit 
  28.  
  29. -q, –quiet, –silent   do not print `checking …’ messages 
  30.  
  31. –cache-file=FILE   cache test results in FILE [disabled] 
  32.  
  33. -C, –config-cache      alias for `–cache-file=config.cache’ 
  34.  
  35. -n, –no-create         do not create output files 
  36.  
  37. –srcdir=DIR        find the sources in DIR [configure dir or `..'] 
  38.  
  39.  
  40.  
  41. Installation directories: 
  42.  
  43. –prefix=PREFIX         install architecture-independent files in PREFIX 
  44.  
  45. [/usr/local
  46.  
  47. exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX 
  48.  
  49. [PREFIX] 
  50.  
  51.  
  52.  
  53. By default, `make install’ will install all the files in 
  54.  
  55. `/usr/local/bin’, `/usr/local/lib’ etc.  You can specify 
  56.  
  57. an installation prefix other than `/usr/local’ using `–prefix’, 
  58.  
  59. for instance `–prefix=$HOME’. 
  60.  
  61.  
  62. <!– 此处省略配置libvirt的数百行帮助选项信息 –> 

根据上面的配置帮助信息可知,如果不用“–prefix=PREFIX”参数指定自定义的安装路径,那么libvirt相关的文件默认都会被安装到 /usr/local/bin 和 /usr/local/lib 等目录中。

配置libvirt编译环境的命令为“./configure”,命令行操作如下:

  1. [root@jay-linux libvirt-1.0.0]# ./configure 
  2.  
  3. checking for a BSD-compatible install… /usr/bin/install -c 
  4.  
  5. checking whether build environment is sane… yes 
  6.  
  7. checking for a thread-safe mkdir -p… /bin/mkdir -p 
  8.  
  9. checking for gawk… gawk 
  10.  
  11. checking whether make sets $(MAKE)… yes 
  12.  
  13. checking how to create a ustar tar archive… gnutar 
  14.  
  15. <!– 此处省略配置过程中的数百行输出信息 –> 
  16.  
  17. configure:      Readline: yes 
  18.  
  19. configure:        Python: yes 
  20.  
  21. configure:        DTrace: no 
  22.  
  23. configure:         numad: no 
  24.  
  25. configure:   XML Catalog: /etc/xml/catalog 
  26.  
  27. configure:   Init script: redhat 
  28.  
  29. configure: Console locks: /var/lock 
  30.  
  31. configure: 
  32.  
  33. configure: Privileges 
  34.  
  35. configure: 
  36.  
  37. configure:       QEMU: root:root 
  38.  
  39. configure: 

在配置过程中,可能会由于缺少编译时需要依赖的软件包而配置失败,只需要按照提示安装对应的软件包,然后重新运行“./configure”命令配置即可。默认情况下,libvirt会配置QEMU/KVM、vmware的驱动支持(如果能找到相关依赖库程序),也会配置libvirtd和virsh等,还会默认配置libvirt对python的绑定。对于Xen、Hyper-V等的支持,配置程序会自动检查当前系统是否含有这些Hypervisor 相关的程序,如果检测成功,就会编译对应的驱动。

真正编译libvirt的命令为“make”,命令行操作如下:

  1. [root@jay-linux libvirt-1.0.0]# make -j 4 
  2.  
  3. make  all-recursive 
  4.  
  5. make[1]: Entering directory `/root/kvm_demo/libvirt-1.0.0′ 
  6.  
  7. Making all in gnulib/lib 
  8.  
  9. make[2]: Entering directory `/root/kvm_demo/libvirt-1.0.0/gnulib/lib’ 
  10.  
  11. GEN    alloca.h 
  12.  
  13. GEN    c++defs.h 
  14.  
  15. GEN    warn-on-use.h 
  16.  
  17. <!– 此处省略编译过程中的数百行输出信息 –> 
  18.  
  19. Making all in examples/systemtap 
  20.  
  21. make[2]: Entering directory `/root/kvm_demo/libvirt-1.0.0/examples/systemtap’ 
  22.  
  23. make[2]: Nothing to be done for `all’. 
  24.  
  25. make[2]: Leaving directory `/root/kvm_demo/libvirt-1.0.0/examples/systemtap’ 
  26.  
  27. make[2]: Entering directory `/root/kvm_demo/libvirt-1.0.0′ 
  28.  
  29. make[2]: Leaving directory `/root/kvm_demo/libvirt-1.0.0′ 
  30.  
  31. make[1]: Leaving directory `/root/kvm_demo/libvirt-1.0.0′ 

4)安装libvirt

在配置和编译时都不需要超级用户(root)权限,但是在安装libvirt时一般都需要root用户权限,执行 make install 命令即可完成libvirt安装,命令行操作如下:

  1. [root@jay-linux libvirt-1.0.0]# make install 
  2.  
  3. Making install in gnulib/lib 
  4.  
  5. make[1]: Entering directory `/root/kvm_demo/libvirt-1.0.0/gnulib/lib’ 
  6.  
  7. make  install-am 
  8.  
  9. make[2]: Entering directory `/root/kvm_demo/libvirt-1.0.0/gnulib/lib’ 
  10.  
  11. make[3]: Entering directory `/root/kvm_demo/libvirt-1.0.0/gnulib/lib’ 
  12.  
  13. if test yes = nothen  
  14.  
  15. case ‘linux-gnu’ in  
  16.  
  17. darwin[56]*)  
  18.  
  19. need_charset_alias=true ;;  
  20.  
  21. <!– 此处省略安装过程中的数百行输出信息 –> 
  22.  
  23. make[2]: Entering directory `/root/kvm_demo/libvirt-1.0.0′ 
  24.  
  25. make[2]: Nothing to be done for `install-exec-am’. 
  26.  
  27. /bin/mkdir -p ‘/usr/local/lib/pkgconfig’ 
  28.  
  29. /usr/bin/install -c -m 644 libvirt.pc ‘/usr/local/lib/pkgconfig’ 
  30.  
  31. make[2]: Leaving directory `/root/kvm_demo/libvirt-1.0.0′ 
  32.  
  33. make[1]: Leaving directory `/root/kvm_demo/libvirt-1.0.0′ 

5)检查已经安装的libvirt

libvirt的安装会给系统安装上libvirtd、virsh等可执行程序,也会安装libvirt 的API程序库,还会安装对python的绑定,检查这些安装后的文件,命令行操作如下:

  1. [root@jay-linux libvirt-1.0.0]# which libvirtd 
  2.  
  3. /usr/local/sbin/libvirtd 
  4.  
  5. [root@jay-linux libvirt-1.0.0]# libvirtd –version 
  6.  
  7. libvirtd (libvirt) 1.0.0 
  8.  
  9. [root@jay-linux libvirt-1.0.0]# which virsh 
  10.  
  11. /usr/local/bin/virsh 
  12.  
  13. [root@jay-linux libvirt-1.0.0]# virsh –version 
  14.  
  15. 1.0.0 
  16.  
  17.  
  18.  
  19. [root@jay-linux libvirt-1.0.0]# ls /usr/local/include/libvirt/ 
  20.  
  21. libvirt.h  libvirt-qemu.h  virterror.h 
  22.  
  23.  
  24.  
  25. [root@jay-linux libvirt-1.0.0]# ls /usr/local/lib/libvirt* 
  26.  
  27. /usr/local/lib/libvirt.a        /usr/local/lib/libvirt-qemu.so           /usr/local/lib/libvirt.so.0 
  28.  
  29. /usr/local/lib/libvirt.la       /usr/local/lib/libvirt-qemu.so.0         /usr/local/lib/libvirt.so.0.1000.0 
  30.  
  31. /usr/local/lib/libvirt-qemu.a   /usr/local/lib/libvirt-qemu.so.0.1000.0 
  32.  
  33. /usr/local/lib/libvirt-qemu.la  /usr/local/lib/libvirt.so 
  34.  
  35.  
  36.  
  37. /usr/local/lib/libvirt: 
  38.  
  39. connection-driver 
  40.  
  41. [root@jay-linux libvirt-1.0.0]# ls /usr/local/lib64/python2.6/site-packages/*virt* 
  42.  
  43. /usr/local/lib64/python2.6/site-packages/libvirtmod.la       /usr/local/lib64/python2.6/site-packages/libvirtmod.so 
  44.  
  45. /usr/local/lib64/python2.6/site-packages/libvirtmod_qemu.la  /usr/local/lib64/python2.6/site-packages/libvirt.py 
  46.  
  47. /usr/local/lib64/python2.6/site-packages/libvirtmod_qemu.so  /usr/local/lib64/python2.6/site-packages/libvirt_qemu.py 

如果安装后立即使用libvirt这些程序库时,遇到找不到对应库文件的错误提示,这时可能需要运行 ldconfig 等工具来更新刚才安装的共享库.

6)从libvirt的git代码仓库编译libvirt

从git源代码仓库编译和安装libvirt,与从libvirt的源码tar.gz包编译安装的过程是完全类似的。这里只介绍一些在编译前的配置(configure)时的一些不同之处。使用 libvirt.git 源码仓库配置时,是先运行其自带的 autogen.sh 这个脚本,它会默认会先下载 git://git.sv.gnu.org/gnulib.git ,然后根据模板生成configure配置脚本和初始化一些Makefile文件,最后自动运行 configure 文件进行对编译环境的配置。

从git源码仓库安装libvirt的基本操作命令行如下,省略命令执行的输出信息,代码如下 复制代码:

  1. [root@jay-linux kvm_demo]# cd libvirt.git 
  2.  
  3. [root@jay-linux libvirt.git]# ./autogen.sh 
  4.  
  5. [root@jay-linux libvirt.git]# make 
  6.  
  7. [root@jay-linux libvirt.git]# make install 

默认状态下,配置和编译后安装的目录与Linux操作系统发行版提供的默认目录可能是不一致的,例如:RHEL 6.3中用系统的RPM包安装的libvirtd、virsh等可执行程序被安装 /usr/sbin/ 目录下,libvirt.so、libvirt-qemu.so等共享库文件被安装在 /usr/lib64/ 目录下,而从前面步骤

5)中可知自己编译安装时,默认会将libvirtd、virsh等安装在 /usr/local/sbin 目录下,而libvirt.so、libvirt-qemu.so 等被安装在 /usr/local/lib/ 目录下。如果想保持对操作系统发型版中安装可执行程序和共享库的目录的一致性, autogen.sh 脚本提供了“–system”参数,带有这个参数来配置,就会尽可能保证安装目录与原生系统的一致性,其命令行操作如下(省略了部分命令执行的输出信息):

  1. [root@jay-linux libvirt.git]# ./autogen.sh –system 
  2.  
  3. [root@jay-linux libvirt.git]# make 
  4.  
  5. [root@jay-linux libvirt.git]# make install 
  6.  
  7. [root@jay-linux libvirt.git]# which libvirtd 
  8.  
  9. /usr/sbin/libvirtd 
  10.  
  11. [root@jay-linux libvirt.git]# which virsh 
  12.  
  13. /usr/bin/virsh 
  14.  
  15. [root@jay-linux libvirt.git]# ls /usr/lib64/libvirt* 
  16.  
  17. /usr/lib64/libvirt.a        /usr/lib64/libvirt-qemu.so           /usr/lib64/libvirt.so 
  18.  
  19. /usr/lib64/libvirt.la       /usr/lib64/libvirt-qemu.so.0         /usr/lib64/libvirt.so.0 
  20.  
  21. /usr/lib64/libvirt-qemu.a   /usr/lib64/libvirt-qemu.so.0.1000.0  /usr/lib64/libvirt.so.0.1000.0 
  22.  
  23. /usr/lib64/libvirt-qemu.la  /usr/lib64/libvirt-qemu.so.0.9.10    /usr/lib64/libvirt.so.0.9.10 
  24.  
  25. /usr/lib64/libvirt: 
  26.  
  27. connection-driver 

2.用软件包安装libvirt

在很多流行的Linux发型版(如RHEL 6.x、Fedora 17、Ubuntu 12.10等)上都提供了libvirt相关的软件包,按照安装普通软件包的方式安装libvirt相关的软件包即可,在笔者当前使用的 RHEL 6.3 中可以使用 yum 或 rpm 工具来安装对应的RPM包,查看某系统中已经安装的libvirt相关的RPM包,命令行如下所示:

  1. [root@rhel6u3-ga ~]# rpm -qa | grep libvirt 
  2.  
  3. libvirt-python-0.9.10-21.el6.x86_64 
  4.  
  5. libvirt-java-javadoc-0.4.7-1.el6.noarch 
  6.  
  7. libvirt-qmf-0.3.0-6.el6.x86_64 
  8.  
  9. libvirt-client-0.9.10-21.el6.x86_64 
  10.  
  11. libvirt-lock-sanlock-0.9.10-21.el6.x86_64 
  12.  
  13. libvirt-java-devel-0.4.7-1.el6.noarch 
  14.  
  15. libvirt-0.9.10-21.el6.x86_64 
  16.  
  17. libvirt-snmp-0.0.2-3.el6.x86_64 
  18.  
  19. libvirt-java-0.4.7-1.el6.noarch 
  20.  
  21. libvirt-devel-0.9.10-21.el6.x86_64 
  22.  
  23. libvirt-cim-0.6.1-3.el6.x86_64 

当然,RHEL 6.3 中默认采用QEMU/KVM的虚拟化方案,所以应该安装QEMU相关的软件包,查看这些软件包的命令行操作如下:

  1. [root@rhel6u3-ga ~]# rpm -qa | grep qemu 
  2.  
  3. qemu-img-0.12.1.2-2.295.el6.x86_64 
  4.  
  5. qemu-kvm-0.12.1.2-2.295.el6.x86_64 
  6.  
  7. gpxe-roms-qemu-0.9.7-6.9.el6.noarch 

由于libvirt是跨平台的,而且还支持微软公司的Hyper-V虚拟化,所以你也可以在Windows上安装libvirt,甚至编译libvirt,可以到libvirt官方的网页中查看和下载能在Windows上运行的libvirt安装程序,http://libvirt.org/sources/win32_experimental/,不过,由于libvirt主要还是基于Linux开发的,而且支持它的公司(Redhat等)中的开发者和个人开发者大多数都是Linux程序员,故libvirt的Windows版本还是处于开发中的,开发进度并不如Linux上libvirt开发得快,前面提到能下载的libvirt Windows版也是实验性的版本,而不是正式产品的发行版,其功能并不保证非常完善.

Tags: KVM ibvirt编译 ibvirt安装

分享到: