CentOS9源码编译libvirtd工具
卸载原有版本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 device-mapper-devel meson
[root@centos9 ~]# meson configure --includedir /usr/include/tirpc/rpc/
libtirpc的rpc.h在/usr/include/tirpc/rpc/rpc.h,必须要手动告诉meson其目录位置,不然后面ninja -C build的时候会报错:rpc/rpc.h:没有那个文件或目录。
重新下载源码、编译安装
[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 && cd build
[root@centos9 build]# meson build
• # build & install libvirt to your home directory
• $ meson build --prefix=$HOME/usr
[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 ~]# cd libvirt-9.0.0/build/src/
[root@centos9 src]# systemctl status libvirtd
[root@centos9 src]# cp *.service /etc/systemd/system/
[root@centos9 src]# cp *socket /etc/systemd/system/
[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
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
不出意外的话就能启动了
报错1:
ERROR internal error: process exited while connecting to monitor: Cannot set up guest memory ‘pc.ram’: Cannot allocate memory
解决办法:
#vim /etc/libvirt/qemu.conf
user = “root” # 该项去星号
group = “root” # 该项去星号
#这个问题是你的虚拟机的内存有点小,虚拟机的内存小的同时还再来带一台机器,肯定带不起来所以会报错。
#刚开始我设置的内存是24G(出错),后来设置成16G(出错),后来设置成10G(也出错了),后来设置成2G能起来了
#后来我把VMware的内存调到32G后就能正常的创建4G内存的虚机了
报错2:
错误:将插槽连接到 ‘/var/run/libvirt/libvirt-sock’ 失败: 没有那个文件或目录
解决办法:
systemctl status libvirtd 查看该服务状态
systemctl start libvirtd 启动该服务
systemctl enable libvirtd 开机自启动
报错3:
错误:将插槽连接到 ‘/var/run/libvirt/virtqemud-sock’ 失败: 没有那个文件或目录
[root@centos9 ~]# find / -name ‘virtqemud-sock’
/var/local/run/libvirt/virtqemud-sock
需要创建一个软连接
[root@centos9 ~]# ln -s /var/local/run/libvirt/virtqemud-sock /var/run/libvirt/virtqemud-sock
该报错就算创建软连接,只在当前会话有效,重启后libvirtd服务也是dead状态,软连接也不存在了,该问题还未查找到原因。