虚拟化系列教程-CentOS9源码编译libvirtd工具

接上一篇qemu源码安装
卸载原有版本libvirt
[root@centos9 ~]# yum remove libvirt
Centos9配置网络源
[root@centos9 ~]# dnf config-manager --set-enabled crb
[root@centos9 ~]# dnf install epel-release epel-next-release
安装依赖包
[root@centos9 ~]# yum install -y libtirpc-devel libxml2-devel glib2-devel python3-docutils rpcgen gnutls-devel libpciaccess-devel yajl-devel meson xorg-x11-server-Xorg xorg-x11-xauth cyrus-sasl-devel device-mapper-* gnutls-devel dnsmasq dnsmasq-* libxslt libpciaccess yajl-devel libacl-devel libattr-devel audit-libs-devel libblkid-devel fuse-devel fuse3-devel fuse3-libs libnl3-devel libiscsi-devel libvirt-daemon-* gtk-update-icon-cache rpm-build intltool python3-devel libosinfo gtksourceview3 vala pygobject3-devel libvirt-glib gtk-vnc2 cairo-devel cairo-gobject-devel wireshark
[root@centos9 ~]# pip3 install Pygi gobject PyGObject
参考文档:https://zhuanlan.zhihu.com/p/474084892?utm_id=0
重新下载源码、编译安装
[root@centos9 ~]# wget http://libvirt.org/sources/libvirt-9.0.0.tar.xz
[root@centos9 ~]# tar -xvf libvirt-9.0.0.tar.xz
[root@centos9 ~]# cd libvirt-9.0.0
[root@centos9 libvirt-9.0.0]# mkdir build
[root@centos9 libvirt-9.0.0]# meson build --localstatedir=/var --prefix=/usr
meson build --localstatedir=/var --prefix=/usr --reconfigure #重新配置

[root@centos9 build]# ninja -C build
[root@centos9 build]# ninja -C build install
然后查看一下版本是不是更新了
[root@centos9 ~]# libvirtd --version
libvirtd (libvirt) 9.0.0
[root@centos9 ~]# virsh --version
9.0.0
安装完成检查。
[root@centos9 src]# systemctl daemon-reload
[root@centos9 src]# systemctl restart libvirtd
[root@centos9 src]# systemctl enable libvirtd
[root@centos9 src]# systemctl status libvirtd
运行virsh命令查看机器上的虚拟机列表,提示未能连接到hypervisor
[root@localhost ~]# virsh list --all
error: failed to connect to the hypervisor
error: Failed to connect socket to ‘/usr/local/var/run/libvirt/libvirt-sock’: No such file or directory
出现这一情况的原因可能是没有开启libvirtd服务,用下面的命令查看是否开启
[root@localhost ~]# ps -le | grep libvirtd
显示libvirtd服务并没有开启,所以手动开启一下
[root@localhost ~]# libvirtd -d
现在再看一下,libvirtd服务已经启动了
[root@localhost ~]# ps -le | grep libvirtd
1 S 0 7171 1 23 80 0 - 143264 poll_s ? 00:00:00 libvirtd
验证virsh命令此时就已经可用了
[root@localhost ~]# virsh list --all

编译后没有 vir-install 命令
yum install virt-install virt-manager virt-viewer virt-top virt-v2v
systemd 无法启动
libvirtd.service 存在于 /usr/lib/systemd/system/ 文件夹下,而在 /etc/systemd/system/ 文件夹下有该文件的软连接,表明这是自动启动的。
尝试启动该服务时会报错,因为其中指定环境变量有问题,其中的大部分内容不需要改动,就是下面的文件的路径需要改,因为手动编译安装的 libvirt 安装路径在 /usr/local/sbin/libvirtd 或是 /usr/sbin/libvirtd ,修改以下两处:
[Service]

EnvironmentFile=/etc/sysconfig/libvirtd
ExecStart=/usr/sbin/libvirtd $LIBVIRTD_ARGS

需根据您系统中实际位置查找到对应位置,如果按照本文建议流程则路径同上,否则需自行查找,之后再次尝试启动即可,有可能需要重新加载一下服务。
systemctl daemon-reload
systemctl reload libvirtd
systemctl start libvirtd
即可启动成功。
virt-manager 启动提示 virt qemu-sock no such file or directory
检查后应该是 virtqemud 服务没起来导致的,编译安装默认生成的服务路径在 /usr/local/* 下,而我们指定了安装在默认位置 /usr ,参考 systemd 无法启动的解决方法即可解决该问题。
首先看一下 /usr/sbin/virtqemud 这个文件是存在的,下面继续操作,首先使能该服务。
$ systemctl enable virtqemud
创建了改服务的软连接,宣告自启,此时服务配置有问题,直接修改该软连接指定的文件
vim /usr/local/lib/systemd/system/virtqemud.service
#类比 libvirtd 的修改这两行,指定正确服务位置
[Service]

EnvironmentFile=-/etc/sysconfig/virtqemud
ExecStart=/usr/sbin/virtqemud $VIRTQEMUD_ARGS
之后重新加载服务,再启动
systemctl daemon-reload
systemctl reload virtqemud
systemctl start virtqemud
不出意外的话就能启动了。

sock 文件生成路径不同之迷
在后续使用 virt-manager 连接 libvirt 之时,可能会遇到如下提示的错误。
‘/var/run/libvirt/virtqemud-sock’ 失败: 没有那个文件或目录
这是由于 virt-manager 找不到 libvirt-sock 文件造成的。
然而事实上这个文件已经正常生成,只是其路径跑到了 /var/local/run/libvirt/ 之中,而 virt-manager 却硬要在 /var/run/libvirt/ 里找,最后以失败报错而告终。
解决方法很简单,即在编译 libvirt 时加上 --localstatedir=/var 参数即可(前面已经给出命令),这样 sock 文件就不会跑到 /var/local/run/libvirt 目录中去了。
libvirtd服务start启动成功后,重启OS后,libvirtd默认不启动,该问题没找到原因。

猜你喜欢

转载自blog.csdn.net/taoxicun/article/details/128974669
今日推荐