本文 首发于 🌱 煎茶转载 请注明 来源

在 鲲鹏 arm 环境下可以直接使用 yum 安装相关虚拟化组件(以 centos 为例):

yum -y install qemu* libvirt* AAVMF virt-install

但是软件库中的虚拟化组件版本较老,不支持 spice 等,而且对端口有限制,无法使用 virt-manager ,也无法对接 openstack 使用,因此需要分别升级 QEMU, libvirt。

(本文内容主要来自华为鲲鹏支持官网文档

鲲鹏 ARM 编译升级 QEMU(带有 OpenStack 相关组件)

安装依赖包。

yum -y install glib2-devel zlib-devel pixman-devel libaio-devel glib libffi-devel gcc gcc-c++ automake libtool bzip2-devel libuuid-devel spice-protocol spice-server-devel usbredir-devel gtk3-devel  SDL2-devel libjpeg-turbo-devel crudini librbd-devel snappy-devel

编译安装

说明:QEMU 默认安装在“/usr/local”下,源码包的下载请参见获取软件包。 使用的是 qemu-4.0.0 版本。该 arm 版本暂不支持虚拟机热迁移功能(支持冷迁移),若有虚拟机热迁移需求,可根据 openEuler 中的 patch 包进行补丁升级,链接如下:https://gitee.com/src-openeuler/qemu/tree/openEuler-20.03-LTS/

wget https://download.qemu.org/qemu-4.0.0.tar.xz

1, 解压并进入 QEMU 目录。

tar -xvf qemu-4.0.0.tar.xz
cd qemu-4.0.0

2, 配置安装,若需对接 openstack 请包含相关依赖:

## 普通配置安装
./configure --target-list=aarch64-softmmu  --enable-linux-aio

## 配置安装,同时带有 openstack 相关依赖
../configure --prefix=/usr --target-list="aarch64-softmmu" \
      --enable-rbd --enable-debug --enable-vnc --enable-vnc-jpeg --enable-vnc-png \
      --enable-kvm --enable-spice --enable-curl --enable-snappy --enable-tools --enable-spice --enable-libusb \
      --enable-usb-redir --enable-linux-aio

编译安装

# 多线程编译
make -j64 
make install

# 链接 qemu-kvm ,若链接存在请先删除
ln -s /usr/bin/qemu-system-aarch64 /usr/bin/qemu-kvm
ln -s /usr/bin/qemu-system-aarch64 /usr/libexec/qemu-kvm

3, 添加 lib 库。

添加 lib 库路径。

vim /etc/ld.so.conf
include /usr/local/lib

使 lib 库更改生效。

ldconfig

4, 检验 QEMU 版本。

qemu-img --version

鲲鹏 ARM 环境编译升级 libvirtd

说明:

官方提供的 src.rpm 包在编译时,有一定几率会失败,需多次尝试。

安装 edk2

  • 在线安装

执行如下命令在线安装 edk2

wget https://www.kraxel.org/repos/firmware.repo -O /etc/yum.repos.d/firmware.repo
yum -y install edk2.git-aarch64
  • 离线安装

在有外网的环境下访问https://www.kraxel.org/repos/jenkins/edk2/,获取 rpm 包并拷贝至目标服务器系统相应位置。执行如下命令离线安装 edk2,如图2所示。

rpm -ivh edk2.git-aarch64*.rpm

安装依赖包

说明:本章节的操作需要外网可用或已配置本地源。

yum -y install libxml2-devel readline-devel ncurses-devel libtasn1-devel gnutls-devel libattr-devel libblkid-devel augeas systemd-devel libpciaccess-devel yajl-devel sanlock-devel libpcap-devel libnl3-devel libselinux-devel dnsmasq radvd cyrus-sasl-devel libacl-devel parted-devel device-mapper-devel xfsprogs-devel librados2-devel librbd1-devel glusterfs-api-devel glusterfs-devel numactl-devel libcap-ng-devel fuse-devel netcf-devel libcurl-devel audit-libs-devel systemtap-sdt-devel nfs-utils dbus-devel scrub numad

编译安装

说明:源码包的下载请参见获取软件包,本章以 libvirt-5.6.0 为例。该 Arm 版本暂不支持虚拟机热迁移功能(支持冷迁移),若有虚拟机热迁移需求,可根据 openEuler 中的 patch 包进行补丁升级,链接如下:https://gitee.com/src-openeuler/libvirt/tree/openEuler-20.03-LTS/

1, 安装 src.rpm 源码包。

rpm -i libvirt-5.6.0-1.fc30.src.rpm

2, 生成 rpm 包。

cd /root/rpmbuild/SPECS/
rpmbuild -ba libvirt.spec

说明: 官方提供的 src.rpm 包在编译时,有一定几率会失败,需多次尝试。

3, 安装 rpm 包。

cd /root/rpmbuild/RPMS/aarch64/yum -y install *.rpm

4, 修改配置文件。

打开 qemu.conf 文件。

vim /etc/libvirt/qemu.conf

添加如下配置。

nvram = ["/usr/share/edk2.git/aarch64/QEMU_EFI-pflash.raw:/usr/share/edk2.git/aarch64/vars-template-pflash.raw"]

5, 重启 libvirtd 服务。

service libvirtd restart
systemctl restart libvirtd

6, 关闭 SELinux。

setenforce 0

参考文献