libvirt 編譯
https://opengers.github.io/virtualization/kvm-libvirt-qemu-1/
http://smilejay.com/2012/06/qemu-kvm_compilation_installation/
3.4 編譯和安裝qemu-kvm
除了在內核空間的KVM模塊之外,在用戶空間需要QEMU[注6]來模擬所需要CPU和設備模型以及用於啟動客戶機進程,這樣才有了一個完整的KVM運行環境。而qemu-kvm是為了針對KVM專門做了修改和優化的QEMU分支[注7],在本書寫作的2012年,qemu-kvm分支里面的小部分特性還沒有完全合並進入到qemu的主干代碼之中,所以本書中采用qemu-kvm來講解。
在編譯和安裝了KVM並且啟動到編譯的內核之后,下面來看一下qemu-kvm的編譯和安裝。
3.4.1 下載qemu-kvm源代碼
目前的QEMU項目針對KVM的代碼分支qemu-kvm也是由Redhat公司的Gleb Natapov和Marcelo Tosatti作維護者(Maintainer),代碼也是托管在kernel.org上。
qemu-kvm開發代碼倉庫的網頁連接為:http://git.kernel.org/?p=virt/kvm/qemu-kvm.git
其中,可以看到有如下3個URL連接可供下載開發中的最新qemu-kvm的代碼倉庫。 git://git.kernel.org/pub/scm/virt/kvm/qemu-kvm.git
http://git.kernel.org/pub/scm/virt/kvm/qemu-kvm.git
https://git.kernel.org/pub/scm/virt/kvm/qemu-kvm.git
可以根據自己實際需要選擇3個中任一個用git clone命令下載即可,它們是完全一樣的。
另外,可以到sourceforge.net的如下鏈接中根據需要下載qemu-kvm各個發布版本的代碼壓縮包(作者建議使用最新的正式發布版本,因為它的功能更多,同時也比較穩定)。
http://sourceforge.net/projects/kvm/files/qemu-kvm/
在本節講解編譯時,以下載開發中的最新的qemu-kvm.git為例,獲取其代碼倉庫過程如下:
1
2 3 4 5 6 7 8 9 10 |
[root@jay-linux kvm_demo]# git clone\ git://git.kernel.org/pub/scm/virt/kvm/qemu-kvm.git qemu-kvm.git Initialized empty Git repository in /root/kvm_demo/qemu-kvm.git/.git/ remote: Counting objects: 145222, done. remote: Compressing objects: 100% (35825/35825), done. remote: Total 145222 (delta 114656), reused 137663 (delta 107444) Receiving objects: 100% (145222/145222), 40.83 MiB | 10.33 MiB/s, done. Resolving deltas: 100% (114656/114656), done. [root@jay-linux kvm_demo]# cd qemu-kvm.git [root@jay-linux kvm.git]# pwd /root/kvm_demo/qemu-kvm.git |
3.4.2 配置和編譯qemu-kvm
qemu-kvm的配置並不復雜,通常情況下,可以直接運行代碼倉庫中configure文件進行配置即可。當然,如果對其配置並不熟悉,可以運行“./configure –help”命令查看配置的一些選項及其幫助信息。
顯示配置的幫助手冊信息如下:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
[root@jay-linux qemu-kvm.git]# ./configure --help Usage: configure [options] Options: [defaults in brackets after descriptions] Standard options: --help print this message --prefix=PREFIX install in PREFIX [/usr/local] --interp-prefix=PREFIX where to find shared libraries, etc. use %M for cpu name [/usr/gnemul/qemu-%M] --target-list=LIST set target list (default: build everything) Available targets: i386-softmmu x86_64-softmmu <!- 此處省略百余行幫助信息的輸出 -> --disable-guest-agent disable building of the QEMU Guest Agent --enable-guest-agent enable building of the QEMU Guest Agent --with-coroutine=BACKEND coroutine backend. Supported options: gthread, ucontext, sigaltstack, windows NOTE: The object files are built at the place where configure is launched |
執行configure文件進行配置的過程如下:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[root@jay-linux qemu-kvm.git]# ./configure Install prefix /usr/local BIOS directory /usr/local/share/qemu binary directory /usr/local/bin library directory /usr/local/lib include directory /usr/local/include config directory /usr/local/etc Manual directory /usr/local/share/man ELF interp prefix /usr/gnemul/qemu-%M Source path /root/kvm_demo/qemu-kvm.git C compiler gcc Host C compiler gcc <!– 此處省略數十行 –> VNC support yes #通常需要通過VNC連接到客戶機中 <!– 此處省略十余行 –> KVM support yes #這是對KVM的支持 TCG interpreter no KVM device assig. yes #這是對KVM中VT-d功能的支持 <!– 此處省略十余行 –> OpenGL support yes libiscsi support no build guest agent yes coroutine backend ucontext |
需要注意的是,上面命令行輸出的KVM相關的選項需要是配置為yes,另外,一般VNC的支持也是配置為yes的(因為通常需要用VNC連接到客戶機中)。
【2013.05.13 updated】 在configure時,可能遇到“glib-2.12 required to compile QEMU”的錯誤,是需要安裝glib2和glib2-dev軟件包,在RHEL上的安裝命令為“yum install glib2 glib2-devel”,在Ubuntu上安裝的過程為“apt-get install libglib2.0 libglib2.0-dev”。
經過配置之后,進行編譯就很簡單了,直接執行make即可進行編譯,如下所示:
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
[root@jay-linux qemu-kvm.git]# make -j 20 GEN config-host.h GEN trace.h GEN qemu-options.def GEN qmp-commands.h GEN qapi-types.h GEN qapi-visit.h GEN tests/test-qapi-types.h GEN tests/test-qapi-visit.h GEN tests/test-qmp-commands.h CC libcacard/cac.o CC libcacard/event.o <!– 此處省略數百行的編譯時輸出信息 –> CC x86_64-softmmu/target-i386/cpu.o CC x86_64-softmmu/target-i386/machine.o CC x86_64-softmmu/target-i386/arch_memory_mapping.o CC x86_64-softmmu/target-i386/arch_dump.o CC x86_64-softmmu/target-i386/kvm.o CC x86_64-softmmu/target-i386/hyperv.o LINK x86_64-softmmu/qemu-system-x86_64 |
可以看到,最后有編譯生成qemu-system-x86_64文件,它就是我們常用的qemu-kvm的命令行工具(在多數Linux發行版中自帶的qemu-kvm軟件包的命令行是qemu-kvm,只是名字不同而已)。
3.4.2 安裝qemu-kvm
編譯完成之后,運行“make install”命令即可安裝qemu-kvm,其過程如下:
1
2 3 4 5 6 7 8 9 10 11 12 13 |
[root@jay-linux qemu-kvm.git]# make install | tee make-install.log install -d -m 0755 “/usr/local/share/qemu” install -d -m 0755 “/usr/local/etc/qemu” install -c -m 0644 /root/kvm_demo/qemu-kvm.git/sysconfigs/target/target-x86_64.conf “/usr/local/etc/qemu” install -c -m 0644 /root/kvm_demo/qemu-kvm.git/sysconfigs/target/cpus-x86_64.conf “/usr/local/share/qemu” install -d -m 0755 “/usr/local/bin” install -c -m 0755 vscclient qemu-ga qemu-nbd qemu-img qemu-io “/usr/local/bin” install -d -m 0755 “/usr/local/libexec” <!– 此處省略數行的安裝時輸出信息 –> make[1]: Entering directory `/root/kvm_demo/qemu-kvm.git/x86_64-softmmu’ install -m 755 qemu-system-x86_64 “/usr/local/bin” strip “/usr/local/bin/qemu-system-x86_64″ make[1]: Leaving directory `/root/kvm_demo/qemu-kvm.git/x86_64-softmmu’ |
qemu-kvm的安裝過程的主要任務有這幾個:創建qemu的一些目錄,拷貝一些配置文件到相應的目錄下,拷貝一些firmware文件(如:sgabios.bin, kvmvapic.bin)到目錄下以便qemu-kvm的命令行啟動時可以找到對應的固件提供給客戶機使用,拷貝keymaps到相應的目錄下以便在客戶機中支持各種所需鍵盤類型,拷貝qemu-system-x86_64、qemu-img等可執行程序到對應的目錄下。下面的一些命令行檢查了qemu-kvm被安裝了之后的系統狀態。
1
2 3 4 5 6 7 8 9 10 11 12 13 14 |
[root@jay-linux qemu-kvm.git]# which qemu-system-x86_64 /usr/local/bin/qemu-system-x86_64 [root@jay-linux qemu-kvm.git]# which qemu-img /usr/local/bin/qemu-img [root@jay-linux qemu-kvm.git]# ls /usr/local/share/qemu/ bamboo.dtb mpc8544ds.dtb petalogix-ml605.dtb pxe-pcnet.rom slof.bin vgabios-vmware.bin bios.bin multiboot.bin petalogix-s3adsp1800.dtb pxe-rtl8139.rom spapr-rtas.bin cpus-x86_64.conf openbios-ppc ppc_rom.bin pxe-virtio.rom vgabios.bin keymaps openbios-sparc32 pxe-e1000.rom qemu-icon.bmp vgabios-cirrus.bin kvmvapic.bin openbios-sparc64 pxe-eepro100.rom s390-zipl.rom vgabios-qxl.bin linuxboot.bin palcode-clipper pxe-ne2k_pci.rom sgabios.bin vgabios-stdvga.bin [root@jay-linux qemu-kvm.git]# ls /usr/local/share/qemu/keymaps/ ar common de en-gb es fi fr fr-ca hr is ja lv modifiers nl-be pl pt-br sl th bepo da de-ch en-us et fo fr-be fr-ch hu it lt mk nl no pt ru sv tr |
由於qemu-kvm是用戶空間的程序,安裝之后不用重啟系統,直接用qemu-system-x86_64、qemu-img這樣的命令行工具即可使用qemu-kvm了。