一本码簿

众里寻码千百度,那段却在github处。

0%

UOS下的KVM编译安装

本教程实现在 UOS V20 1070 (内核4.19) 系统上,通过编译安装 QEMU 7.2.21libvirt 8.0.0virt-manager 5.1.0,实现主机 (Host) UOS 与客户机 (Guest) Windows 10 之间基于 VirtioFS 驱动的高效文件共享。

选择此版本组合主要是因为:

  • QEMU 7.2.21 是最后一个完整支持 C语言版本 virtiofsd 的QEMU稳定版。
  • libvirt 8.0.0 是默认会去寻找并使用 C版本 virtiofsd 的最高版本。

系统自带版本的kvm版本老旧,且无法实现基于 VirtioFS 驱动的高效文件共享,编译安装能确保组件间更好的兼容性。教程会涉及升级 Python3pyenvMeson 以满足编译要求,并统一使用 阿里云镜像 加速下载,安装路径统一为 /usr/local

📦 前期准备:环境与依赖

首先,我们来配置编译环境和安装基础依赖。

  1. 更新系统并安装基础工具
    确保系统为最新并安装必要的开发工具:

    1
    2
    3
    sudo apt update
    sudo apt upgrade -y
    sudo apt install -y wget curl git build-essential pkg-config
  2. 配置Python环境 (使用阿里云镜像)
    鉴于UOS自带Python版本可能较低,我们使用 pyenv 安装新版Python。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    # 安装pyenv
    git clone https://gitee.com/mirrors/pyenv.git ~/.pyenv
    echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
    echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
    echo 'eval "$(pyenv init -)"' >> ~/.zshrc
    source ~/.zshrc

    # 配置pyenv使用国内镜像加速Python安装
    echo 'export PYTHON_BUILD_MIRROR_URL="https://mirrors.aliyun.com/python/"' >> ~/.zshrc
    source ~/.zshrc

    # 通过pyenv安装Python 3.8.12 (此版本与QEMU 7.2.21兼容性好)
    pyenv install 3.8.12
    pyenv global 3.8.12
  3. 升级pip和安装Meson (使用阿里云镜像)

    1
    2
    3
    pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
    pip install --upgrade pip
    pip install meson ninja

🔧 组件编译与安装

现在,开始编译和安装三个核心组件。

1. 编译安装 QEMU 7.2.21

QEMU是实际的虚拟机监控器,virtiofsd 也随其发布。

  • 安装QEMU专属依赖

    1
    2
    sudo apt install -y libglib2.0-dev libpixman-1-dev libcap-ng-dev libseccomp-dev \
    libfuse3-dev libattr1-dev libselinux1-dev
  • 编译与安装

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    cd ~
    wget https://download.qemu.org/qemu-7.2.21.tar.xz
    tar xvf qemu-7.2.21.tar.xz
    cd qemu-7.2.21
    ./configure --prefix=/usr/local --target-list=x86_64-softmmu \
    --enable-kvm --enable-spice --enable-vnc --enable-guest-agent \
    --enable-virtfs --enable-virtiofsd --enable-libusb --enable-usb-redir \
    --enable-sdl --enable-seccomp --enable-numa --enable-virglrenderer --enable-opengl
    make -j$(nproc)
    sudo make install
  • 验证安装

    1
    2
    qemu-system-x86_64 --version
    /usr/local/libexec/virtiofsd --version

2. 编译安装 libvirt 8.0.0

libvirt提供了管理虚拟机的API和工具链。

  • 安装libvirt专属依赖

    1
    2
    sudo apt install -y libxml2-dev libgnutls28-dev libyajl-dev libnl-3-dev \
    libnl-route-3-dev libpciaccess-dev libdevmapper-dev libudev-dev libcurl4-gnutls-dev
  • 编译与安装 (使用Meson)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    cd ~
    git clone https://gitlab.com/libvirt/libvirt.git
    cd libvirt
    git checkout v8.0.0
    meson setup build --prefix=/usr/local -Dsystem=true -Ddriver_qemu=enabled -Ddriver_libvirtd=enabled -Ddriver_remote=enabled -Ddocs=disabled

    ninja -C build
    sudo ninja -C build install

    echo 'export LIBVIRT_DEFAULT_URI=qemu:///system' >> ~/.bashrc\n
    echo 'export LIBVIRT_DEFAULT_URI=qemu:///system' >> ~/.zshrc\n
  • 配置并启动libvirt服务

    1
    2
    3
    sudo systemctl daemon-reload
    sudo systemctl enable libvirtd
    sudo systemctl start libvirtd

3. 编译安装 virt-manager 5.1.0

virt-manager是一个用于管理虚拟机的图形化界面。

  • 安装virt-manager专属依赖

    1
    2
    sudo apt install -y gir1.2-gtk-3.0 gir1.2-gtksource-3.0 gir1.2-vte-2.91 \
    libosinfo-1.0-dev gettext pylint pytest
  • 编译与安装

    1
    2
    3
    4
    5
    6
    cd ~
    git clone https://github.com/virt-manager/virt-manager.git
    cd virt-manager
    git checkout v5.1.0
    meson setup build
    meson install -C build

⚙️ 配置VirtioFS文件共享

组件安装完毕,接下来配置VirtioFS共享。

  1. 设置用户权限
    将当前用户加入 libvirtkvm 组,以便管理虚拟机而无须root权限:

    1
    2
    sudo usermod -aG libvirt,kvm $USER
    newgrp libvirt
  2. 准备共享目录
    在主机上创建一个准备共享给虚拟机的目录:

    1
    2
    sudo mkdir /mnt/virtiofs_share
    sudo chown -R $USER:$USER /mnt/virtiofs_share
  3. 配置虚拟机XML (关键步骤)
    使用 virsh edit [你的虚拟机名称] 编辑Windows 10虚拟机的配置。

    • 关键点:在 <devices> 部分添加文件系统设备,并必须通过 <binary path="..."> 显式指定C版 virtiofsd 的路径。这是解决libvirt可能找不到正确 virtiofsd 的关键。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      <domain type='kvm'>
      ...
      <devices>
      ...
      <!-- 添加VirtioFS文件系统设备 -->
      <filesystem type='mount' accessmode='passthrough'>
      <driver type='virtiofs'/>
      <!-- 显式指定C版virtiofsd路径 -->
      <binary path='/usr/local/libexec/virtiofsd'/>
      <source dir='/mnt/virtiofs_share'/>
      <target dir='vm_share'/>
      </filesystem>
      ...
      </devices>
      </domain>
    • 注意*:根据实践,在 qemu.conf 中配置 virtiofsd_path 可能无效,因此直接在虚拟机XML中指定驱动位置是更可靠的方法。

  4. Windows 10虚拟机驱动安装
    要让Windows 10识别VirtioFS共享,需安装驱动。

    • Fedora仓库 下载最新的 virtio-win.iso
    • 在virt-manager中,将 virtio-win.iso 挂载到Windows 10虚拟机的CD-ROM。
    • 在Windows虚拟机中,安装ISO根目录下的 virtio-win-gt-x64.msi,或通过设备管理器为未知设备手动安装 virtio-fs 驱动。
    • 驱动安装后,在Windows文件资源管理器的地址栏输入 \\virtiofs\vm_share 访问共享目录,或通过”映射网络驱动器”使用此路径。

💡 故障排除小贴士

  • 权限问题:确保 /usr/local/libexec/virtiofsdlibvirt-qemu 用户可执行,且共享目录有相应权限。

  • libvirt服务:修改配置或XML后,记得重启 sudo systemctl restart libvirtd

  • 驱动问题:确保Windows虚拟机正确安装了 virtio-fs 驱动。

  • 依赖排查与解决

    1
    2
    3
    4
    ldd $(which qemu-system-x86_64) | grep glib
    readelf -d ./build/qemu-system-x86_64 | grep RPATH
    sudo patchelf --set-rpath "/opt/glib-2.87/lib/x86_64-linux-gnu:/opt/libgcrypt-1.10/lib" /usr/local/bin/qemu-system-x86_64
    ./configure LDFLAGS="-Wl,-rpath,/opt/glib-2.87/lib/x86_64-linux-gnu:/opt/libgcrypt-1.10/lib" --target-list=x86_64-softmmu \\n --enable-kvm --enable-spice --enable-vnc --enable-guest-agent \\n --enable-virtfs --enable-libusb --enable-usb-redir \\n --enable-sdl --enable-seccomp --enable-numa --enable-virglrenderer --enable-opengl