​​libvirt​​ 是目前使用最为广泛的对KVM虚拟机进行管理的工具和 ​​API​​ 。 ​​Libvirtd​​ 是一个 ​​daemon​​ 进程,可以被本地的 ​​virsh​​ 调用,也可以被远程的 ​​virsh​​ 调用, ​​Libvirtd​​ 调用 ​​qemu-kvm​​ 操作虚拟机。下面介绍 Centos7.6 下编译安装 Libvirt 7.5 的方法。

环境准备

编译步骤-7.5
首先下载源码文件:

  1. # Compiling a release tarball
  2. wget https://libvirt.org/sources/libvirt-7.6.0.tar.xz
  3. tar -xvf libvirt-7.6.0.tar.xz
  4. cd libvirt-7.6.0

编译前可以查看一下当前系统下 virsh 的安装位置

  1. [root@compute-01 stl]# find / -name "virsh"
  2. /usr/bin/virsh

可以看到是安装在 ​​.usr/bin​​ 这个 ​​PATH​​ 路径下,因此在编译安装时,可使用如下命令指定安装位置(默认安装在 ​​/usr/local/bin​​ 目录下):

  1. $ meson build --prefix=/usr
  2. $ ninja -C build
  3. $ sudo ninja -C build install

下面是官网给出的几种安装模式,包括直接使用 release 包安装,安装到您的个人目录下,或是根据系统自动安装到相应位置,可以按需选择。

  1. # Compiling a release tarball
  2. $ xz -dc libvirt-x.x.x.tar.xz | tar xvf -
  3. $ cd libvirt-x.x.x
  4. $ meson build
  5. $ meson build [possible options]
  6. $ ninja -C build
  7. $ sudo ninja -C build install
  8. # build & install libvirt to your home directory
  9. $ meson build --prefix=$HOME/usr
  10. $ ninja -C build
  11. $ sudo ninja -C build install
  12. # To produce a build that is compatible with normal OS vendor prefixes, use
  13. $ meson build -Dsystem=true
  14. $ ninja -C build

编译步骤-6.0
这里给出简单的 6.0 版本编译方法。

  1. wget https://libvirt.org/sources/libvirt-6.0.0.tar.xz
  2. tar -xvf
  3. cd libvirt-6.0.0
  4. mkdir build
  5. cd build
  6. ../autogen.sh --system
  7. $ make
  8. $ sudo make install

疑难解决
ERROR: Program ‘rpcgen portable-rpcgen’ not found

  1. wget https://github.com/thkukuk/rpcsvc-proto/releases/download/v1.4.2/rpcsvc-proto-1.4.2.tar.xz
  2. ./configure --sysconfdir=/etc &&
  3. make
  4. make install

Program ‘rst2html5 rst2html5.py rst2html5-3’ not found

  1. $ pip3 install rst2html5

Dependency “glib-2.0” not found, tried pkgconfig and cmake

  1. yum install glib2-devel

Dependency “gnutls” not found, tried pkgconfig and cmake

  1. yum install gnutls-devel

Dependency “libxml-2.0” not found, tried pkgconfig and cmake

  1. yum install libxml2-devel -y

致命错误:rpc/rpc.h:没有那个文件或目录

  1. yum -y install libtirpc-devel
  2. # 修改生成的编译配置文件
  3. find / -name "rpc.h"
  4. vim meson.build
  5. # 在 headers 增加 rpc 头文件绝对路径
  6. headers = [
  7. ...
  8. '/usr/include/tirpc/rpc/rpc.h',
  9. ]

ERROR: Program ‘xsltproc’ not found or not executable

  1. yum install libxslt

​​parser error : Double hyphen within comment: <!— This file is auto-generated from keymaps.csv​​
解决方法:找到报错的 ​​*.html.in​​ 文件报错行出,将报错的 ​​—​​ 改为 ​​-​​ 即可。

编译后没有 vir-install 命令

  1. yum install virt-install

systemd 无法启动
​​libvirtd.service​​ 存在于 ​​/usr/lib/systemd/system/​​ 文件夹下,而在 ​​/etc/systemd/system/​​ 文件夹下有该文件的软连接,表明这是自动启动的。

尝试启动该服务时会报错,因为其中指定环境变量有问题,其中的大部分内容不需要改动,就是下面的文件的路径需要改,因为手动编译安装的libvirt安装路径在 ​​/usr/local/sbin/libvirtd​​ 或是 ​​/usr/sbin/libvirtd​​ ,修改以下两处:

  1. [Service]
  2. ...
  3. EnvironmentFile=/etc/sysconfig/libvirtd
  4. ExecStart=/usr/sbin/libvirtd $LIBVIRTD_ARGS
  5. ...

需根据您系统中实际位置查找到对应位置,如果按照本文建议流程则路径同上,否则需自行查找,之后再次尝试启动即可,有可能需要重新加载一下服务。

  1. systemctl daemon-reload
  2. systemctl reload libvirtd
  3. systemctl start libvirtd

即可启动成功,若不成功请留言。

virt-manager 启动提示 ​​virt qemu-sock no such file or directory​​
检查后应该是 ​​virtqemud​​ 服务没起来导致的,编译安装默认生成的服务路径在 ​​/usr/local/*​​ 下,而我们指定了安装在默认位置 ​​/usr​​ ,参考 systemd 无法启动的解决方法即可解决该问题。

首先看一下 ​​/usr/sbin/virtqemud​​ 这个文件是存在的,下面继续操作,首先使能该服务。

  1. $ systemctl enable virtqemud
  2. Created symlink from /etc/systemd/system/multi-user.target.wants/virtqemud.service to /usr/local/lib/systemd/system/virtqemud.service.
  3. Created symlink from /etc/systemd/system/sockets.target.wants/virtqemud.socket to /usr/local/lib/systemd/system/virtqemud.socket.
  4. Created symlink from /etc/systemd/system/sockets.target.wants/virtqemud-ro.socket to /usr/local/lib/systemd/system/virtqemud-ro.socket.
  5. Created symlink from /etc/systemd/system/sockets.target.wants/virtqemud-admin.socket to /usr/local/lib/systemd

创建了改服务的软连接,宣告自启,此时服务配置有问题,直接修改该软连接指定的文件

  1. vim /usr/local/lib/systemd/system/virtqemud.service
  2. # 类比 libvirtd 的修改这两行,指定正确服务位置
  3. [Service]
  4. ...
  5. EnvironmentFile=-/etc/sysconfig/virtqemud
  6. ExecStart=/usr/sbin/virtqemud $VIRTQEMUD_ARGS

之后重新加载服务,再启动

  1. systemctl daemon-reload
  2. systemctl reload virtqemud
  3. systemctl start virtqemud

不出意外的话就能启动了,若有问题请留言。

文档更新时间: 2023-03-21 13:05   作者:admin