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,如果曾经安装过,命令行操作如下:
- [root@jay-linuxkvm_demo]#whichlibvirtd
- /usr/sbin/libvirtd
- [root@jay-linuxkvm_demo]#rpm-qlibvirt
- libvirt-0.9.10-21.el6.x86_64
- [root@jay-linuxkvm_demo]#rpm-elibvirt
- [root@jay-linuxkvm_demo]#libvirtd–version
- -bash:/usr/sbin/libvirtd:Nosuchfileordirectory
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 源码包并将其解压缩的命令行如下:
- [root@jay-linuxkvm_demo]#wgethttp://libvirt.org/sources/libvirt-1.0.0.tar.gz
- –2012-11-2522:58:24–http://libvirt.org/sources/libvirt-1.0.0.tar.gz
- HTTPrequestsent,awaitingresponse…200OK
- Length:21868950(21M)[application/x-gzip]
- Savingto:“libvirt-1.0.0.tar.gz”
- 100%[=======================>]21,868,95067.6K/sin2m29s
- --phpfensi.com
- 2012-11-2523:00:54(143KB/s)–“libvirt-1.0.0.tar.gz”saved[21868950/21868950]
- [root@jay-linuxkvm_demo]#tar-zxflibvirt-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开发代码仓库的命令行如下:
- [root@jay-linuxkvm_demo]#gitclonegit://libvirt.org/libvirt.git
- InitializedemptyGitrepositoryin/root/kvm_demo/libvirt/.git/
- remote:Countingobjects:96578,done.
- remote:Compressingobjects:100%(15214/15214),done.
- Receivingobjects:52%(50926/96578),51.28MiB|26KiB/s
- Receivingobjects:52%(50927/96578),51.31MiB|24KiB/s
- remote:Total96578(delta80940),reused96578(delta80940)
- Receivingobjects:100%(96578/96578),91.22MiB|63KiB/s,done.
- Resolvingdeltas:100%(80940/80940),done.
3)配置和编译libvirt
配置和编译libvirt的方法与Linux上多数的开源项目的方法类似,都是先运行 configure 脚本进行编译环境配置,然后用 make 命令进行编译,用 make install 命令进行安装.
查看有哪些配置选项可用的命令为“./configure –help”,命令行操作如下:
- [root@jay-linuxkvm_demo]#cdlibvirt-1.0.0
- [root@jay-linuxlibvirt-1.0.0]#./configure–help
- `configure’configureslibvirt1.0.0toadapttomanykindsofsystems.
- Usage:./configure[OPTION]…[VAR=VALUE]…
- Toassignenvironmentvariables(e.g.,CC,CFLAGS…),specifythemas
- VAR=VALUE.Seebelowfordescriptionsofsomeoftheusefulvariables.
- Defaultsfortheoptionsarespecifiedinbrackets.
- Configuration:
- -h,–helpdisplaythishelpandexit
- –help=shortdisplayoptionsspecifictothispackage
- –help=recursivedisplaytheshorthelpofalltheincludedpackages
- -V,–versiondisplayversioninformationandexit
- -q,–quiet,–silentdonotprint`checking…’messages
- –cache-file=FILEcachetestresultsinFILE[disabled]
- -C,–config-cachealiasfor`–cache-file=config.cache’
- -n,–no-createdonotcreateoutputfiles
- –srcdir=DIRfindthesourcesinDIR[configurediror`..']
- Installationdirectories:
- –prefix=PREFIXinstallarchitecture-independentfilesinPREFIX
- [/usr/local]
- –exec-prefix=EPREFIXinstallarchitecture-dependentfilesinEPREFIX
- [PREFIX]
- Bydefault,`makeinstall’willinstallallthefilesin
- `/usr/local/bin’,`/usr/local/lib’etc.Youcanspecify
- aninstallationprefixotherthan`/usr/local’using`–prefix’,
- forinstance`–prefix=$HOME’.
- <!–此处省略配置libvirt的数百行帮助选项信息–>
根据上面的配置帮助信息可知,如果不用“–prefix=PREFIX”参数指定自定义的安装路径,那么libvirt相关的文件默认都会被安装到 /usr/local/bin 和 /usr/local/lib 等目录中。
配置libvirt编译环境的命令为“./configure”,命令行操作如下:
- [root@jay-linuxlibvirt-1.0.0]#./configure
- checkingforaBSD-compatibleinstall…/usr/bin/install-c
- checkingwhetherbuildenvironmentissane…yes
- checkingforathread-safemkdir-p…/bin/mkdir-p
- checkingforgawk…gawk
- checkingwhethermakesets$(MAKE)…yes
- checkinghowtocreateaustartararchive…gnutar
- <!–此处省略配置过程中的数百行输出信息–>
- configure:Readline:yes
- configure:Python:yes
- configure:DTrace:no
- configure:numad:no
- configure:XMLCatalog:/etc/xml/catalog
- configure:Initscript:redhat
- configure:Consolelocks:/var/lock
- configure:
- configure:Privileges
- configure:
- configure:QEMU:root:root
- configure:
在配置过程中,可能会由于缺少编译时需要依赖的软件包而配置失败,只需要按照提示安装对应的软件包,然后重新运行“./configure”命令配置即可。默认情况下,libvirt会配置QEMU/KVM、vmware的驱动支持(如果能找到相关依赖库程序),也会配置libvirtd和virsh等,还会默认配置libvirt对python的绑定。对于Xen、Hyper-V等的支持,配置程序会自动检查当前系统是否含有这些Hypervisor 相关的程序,如果检测成功,就会编译对应的驱动。
真正编译libvirt的命令为“make”,命令行操作如下:
- [root@jay-linuxlibvirt-1.0.0]#make-j4
- makeall-recursive
- make[1]:Enteringdirectory`/root/kvm_demo/libvirt-1.0.0′
- Makingallingnulib/lib
- make[2]:Enteringdirectory`/root/kvm_demo/libvirt-1.0.0/gnulib/lib’
- GENalloca.h
- GENc++defs.h
- GENwarn-on-use.h
- <!–此处省略编译过程中的数百行输出信息–>
- Makingallinexamples/systemtap
- make[2]:Enteringdirectory`/root/kvm_demo/libvirt-1.0.0/examples/systemtap’
- make[2]:Nothingtobedonefor`all’.
- make[2]:Leavingdirectory`/root/kvm_demo/libvirt-1.0.0/examples/systemtap’
- make[2]:Enteringdirectory`/root/kvm_demo/libvirt-1.0.0′
- make[2]:Leavingdirectory`/root/kvm_demo/libvirt-1.0.0′
- make[1]:Leavingdirectory`/root/kvm_demo/libvirt-1.0.0′
4)安装libvirt
在配置和编译时都不需要超级用户(root)权限,但是在安装libvirt时一般都需要root用户权限,执行 make install 命令即可完成libvirt安装,命令行操作如下:
- [root@jay-linuxlibvirt-1.0.0]#makeinstall
- Makinginstallingnulib/lib
- make[1]:Enteringdirectory`/root/kvm_demo/libvirt-1.0.0/gnulib/lib’
- makeinstall-am
- make[2]:Enteringdirectory`/root/kvm_demo/libvirt-1.0.0/gnulib/lib’
- make[3]:Enteringdirectory`/root/kvm_demo/libvirt-1.0.0/gnulib/lib’
- iftestyes=no;then
- case‘linux-gnu’in
- darwin[56]*)
- need_charset_alias=true;;
- <!–此处省略安装过程中的数百行输出信息–>
- make[2]:Enteringdirectory`/root/kvm_demo/libvirt-1.0.0′
- make[2]:Nothingtobedonefor`install-exec-am’.
- /bin/mkdir-p‘/usr/local/lib/pkgconfig’
- /usr/bin/install-c-m644libvirt.pc‘/usr/local/lib/pkgconfig’
- make[2]:Leavingdirectory`/root/kvm_demo/libvirt-1.0.0′
- make[1]:Leavingdirectory`/root/kvm_demo/libvirt-1.0.0′
5)检查已经安装的libvirt
libvirt的安装会给系统安装上libvirtd、virsh等可执行程序,也会安装libvirt 的API程序库,还会安装对python的绑定,检查这些安装后的文件,命令行操作如下:
- [root@jay-linuxlibvirt-1.0.0]#whichlibvirtd
- /usr/local/sbin/libvirtd
- [root@jay-linuxlibvirt-1.0.0]#libvirtd–version
- libvirtd(libvirt)1.0.0
- [root@jay-linuxlibvirt-1.0.0]#whichvirsh
- /usr/local/bin/virsh
- [root@jay-linuxlibvirt-1.0.0]#virsh–version
- 1.0.0
- [root@jay-linuxlibvirt-1.0.0]#ls/usr/local/include/libvirt/
- libvirt.hlibvirt-qemu.hvirterror.h
- [root@jay-linuxlibvirt-1.0.0]#ls/usr/local/lib/libvirt*
- /usr/local/lib/libvirt.a/usr/local/lib/libvirt-qemu.so/usr/local/lib/libvirt.so.0
- /usr/local/lib/libvirt.la/usr/local/lib/libvirt-qemu.so.0/usr/local/lib/libvirt.so.0.1000.0
- /usr/local/lib/libvirt-qemu.a/usr/local/lib/libvirt-qemu.so.0.1000.0
- /usr/local/lib/libvirt-qemu.la/usr/local/lib/libvirt.so
- /usr/local/lib/libvirt:
- connection-driver
- [root@jay-linuxlibvirt-1.0.0]#ls/usr/local/lib64/python2.6/site-packages/*virt*
- /usr/local/lib64/python2.6/site-packages/libvirtmod.la/usr/local/lib64/python2.6/site-packages/libvirtmod.so
- /usr/local/lib64/python2.6/site-packages/libvirtmod_qemu.la/usr/local/lib64/python2.6/site-packages/libvirt.py
- /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的基本操作命令行如下,省略命令执行的输出信息,代码如下 复制代码:
- [root@jay-linuxkvm_demo]#cdlibvirt.git
- [root@jay-linuxlibvirt.git]#./autogen.sh
- [root@jay-linuxlibvirt.git]#make
- [root@jay-linuxlibvirt.git]#makeinstall
默认状态下,配置和编译后安装的目录与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”参数,带有这个参数来配置,就会尽可能保证安装目录与原生系统的一致性,其命令行操作如下(省略了部分命令执行的输出信息):
- [root@jay-linuxlibvirt.git]#./autogen.sh–system
- [root@jay-linuxlibvirt.git]#make
- [root@jay-linuxlibvirt.git]#makeinstall
- [root@jay-linuxlibvirt.git]#whichlibvirtd
- /usr/sbin/libvirtd
- [root@jay-linuxlibvirt.git]#whichvirsh
- /usr/bin/virsh
- [root@jay-linuxlibvirt.git]#ls/usr/lib64/libvirt*
- /usr/lib64/libvirt.a/usr/lib64/libvirt-qemu.so/usr/lib64/libvirt.so
- /usr/lib64/libvirt.la/usr/lib64/libvirt-qemu.so.0/usr/lib64/libvirt.so.0
- /usr/lib64/libvirt-qemu.a/usr/lib64/libvirt-qemu.so.0.1000.0/usr/lib64/libvirt.so.0.1000.0
- /usr/lib64/libvirt-qemu.la/usr/lib64/libvirt-qemu.so.0.9.10/usr/lib64/libvirt.so.0.9.10
- /usr/lib64/libvirt:
- connection-driver
2.用软件包安装libvirt
在很多流行的Linux发型版(如RHEL 6.x、Fedora 17、Ubuntu 12.10等)上都提供了libvirt相关的软件包,按照安装普通软件包的方式安装libvirt相关的软件包即可,在笔者当前使用的 RHEL 6.3 中可以使用 yum 或 rpm 工具来安装对应的RPM包,查看某系统中已经安装的libvirt相关的RPM包,命令行如下所示:
- [root@rhel6u3-ga~]#rpm-qa|greplibvirt
- libvirt-python-0.9.10-21.el6.x86_64
- libvirt-java-javadoc-0.4.7-1.el6.noarch
- libvirt-qmf-0.3.0-6.el6.x86_64
- libvirt-client-0.9.10-21.el6.x86_64
- libvirt-lock-sanlock-0.9.10-21.el6.x86_64
- libvirt-java-devel-0.4.7-1.el6.noarch
- libvirt-0.9.10-21.el6.x86_64
- libvirt-snmp-0.0.2-3.el6.x86_64
- libvirt-java-0.4.7-1.el6.noarch
- libvirt-devel-0.9.10-21.el6.x86_64
- libvirt-cim-0.6.1-3.el6.x86_64
当然,RHEL 6.3 中默认采用QEMU/KVM的虚拟化方案,所以应该安装QEMU相关的软件包,查看这些软件包的命令行操作如下:
- [root@rhel6u3-ga~]#rpm-qa|grepqemu
- qemu-img-0.12.1.2-2.295.el6.x86_64
- qemu-kvm-0.12.1.2-2.295.el6.x86_64
- 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版也是实验性的版本,而不是正式产品的发行版,其功能并不保证非常完善.