CentOS7等老OS在国内仍然大量使用,近期多次在CentOS7上编译安装高版本QEMU与libvirt,遇到不少问题,在这里做个记录。
步骤1:卸载所有与qemu和libvirt相关的包,删除/usr/local/bin/等目录下自行安装的相关二进制文件
步骤2:export PKG_CONFIG_PATH=/usr/local/lib64/pkgconfig/:/usr/local/lib/pkgconfig/:/usr/lib/pkgconfig/
步骤3:编译安装openssl1.1.1w,https://openssl-library.org/source/old/1.1.1/index.html。配置命令./config --prefix=/usr/local/openssl11 --openssldir=/usr/local/openssl11 shared zlib
步骤4:手工安装Python3,版本>=3.8。CentOS7没有找到Python 3.6以上的可用安装源,所以直接从github下载高版本Python3代码编译安装即可。这里使用了3.12版本。编译需要指定使用openssl 1.1版本,命令为./configure --with-openssl=/usr/local/openssl11
步骤5:安装依赖包,yum install libxml2-devel libpciaccess-devel yajl-devel libtirpc-devel,pip3 install docutils
步骤6:下载qemu与其依赖的子项目代码。建议优先从Download QEMU - QEMU下载官方打包好的代码,其中包含了大部分依赖的子项目代码,不需要在编译时再通过git获取。个别子项目(例如dtc)可能仍然需要编译时获取。由于国内通过git获取github和gitlab仓库不稳定,可以从网页直接下载依赖项目的代码包,然后解压到qemu/subprojects下的对应项目路径中。这里下载了官方的8.2.7代码包。
步骤7:编译qemu。qemu的编译相对简单,按文档操作即可。这里使用了配置参数./configure --prefix=/usr/local/ --target-list=x86_64-softmmu --enable-kvm --enable-vnc。
步骤8:下载编译glib,版本>=2.58.0。同样建议下载Releases · GNOME / GLib · GitLab中的release archive打包版。这里使用了2.81.1。
步骤9:下载编译gmp,这里使用版本6.3.0
步骤10:下载编译libnettle,这里使用从Index of /gnu/nettle下载的3.10版本。需要注意使用./configure --enable-public-key --with-lib-path=/usr/local/lib来包含gmp支持,只有这样才会编译gnutls需要的libhogweed。
步骤11:下载编译libtasn,从Index of /gnu/libtasn1下载4.19.0版本。
步骤12:下载编译gnutls,这里使用从ftp.gnupg.org:gcrypt/gnutls/v3.7下载的3.7.11版本。使用配置命令LDFLAGS='-L/usr/local/lib -L/usr/local/lib64' ./configure --prefix=/usr --with-included-unistring --without-p11-kit。编译中可能遇到许多库版本冲突的问题,可以通过config.log中的日志辅助判断解决。
步骤13:下载编译libvirt,这里使用10.5.0版本。使用配置命令meson setup build -Dsystem=true -Ddriver_qemu=enabled -Ddriver_libvirtd=enabled -Ddriver_remote=enabled。错误日志在build/meson-logs/meson-log.txt中。
步骤14:修改/usr/lib/systemd/system/libvirtd.service,删除其中的Environment="LIBVIRTD_ARGS=--timeout 120"这一行,这个功能在centos7的systemd上不成立。之后执行systemctl daemon-reload;systemctl restart libvirtd,启动libvirtd服务。
步骤15:安装virt-manager和virt-install,yum install virt-manager virt-install
步骤16:重新执行libvirt的安装命令ninja -C build install。因为上一步可能会同时安装依赖包libvirt-client等,覆盖掉自己编译的libvirt文件。或者也可以在上一步安装时指定--nodeps参数来避免安装依赖包。
步骤17:使用virt-install或virsh创建虚拟机,使用virt-manager完成虚拟机安装。
通过上述步骤,可以在CentOS7上完成新版本qemu和libvirt安装,使用支持最新虚拟化特性的虚拟机。