1 基于centos8 qemu src rpm

1.1 环境准备

下载src rpm

https://vault.centos.org/8.2.2004/AppStream/Source/SPackages/qemu-kvm-2.12.0-99.module_el8.2.0+524+f765f7e0.4.src.rpm

安装额外的repo

  • epel

yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

或者

yum install epel-release -y

  • enable powertools

编辑/etc/yum.repos.d/CentOS-PowerTools.repo,设置enabled=1

准备rpmbuild开发环境

https://blog.csdn.net/get_set/article/details/53453320

  • yum install -y rpm-build rpmdevtools
  • cd /root && rpmdev-setuptree

rpmdev-setuptree这个命令就是安装rpmdevtools带来的。可以看到运行了这个命令之后,在$HOME目录下多了一个叫做rpmbuild的文件夹,里边内容如下:

  1. $ tree rpmbuild
  2. rpmbuild
  3. ├── BUILD
  4. ├── RPMS
  5. ├── SOURCES
  6. ├── SPECS
  7. └── SRPMS

安装src rpm

rpm -ivh qemu-kvm-2.12.0-99.module_el8.2.0+524+f765f7e0.4.src.rpm

src rpm会安装到$HOME/rpmbuild/下

安装rpmbuild qemu-kvm.spec的依赖

在$HOME/rpmbuild/SPECS/下执行rpmbuild -bp qemu-kvm.spec时会报缺少以下依赖

  1. [root@localhost SPECS]# rpmbuild -bp qemu-kvm.spec
  2. error: Failed build dependencies:
  3. bluez-libs-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  4. brlapi-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  5. check-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  6. cyrus-sasl-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  7. device-mapper-multipath-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  8. glib2-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  9. glusterfs-api-devel >= 3.6.0 is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  10. glusterfs-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  11. gnutls-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  12. iasl is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  13. libaio-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  14. libattr-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  15. libcacard-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  16. libcap-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  17. libcap-ng-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  18. libcurl-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  19. libgcrypt-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  20. libiscsi-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  21. libpmem-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  22. libpng-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  23. librados-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  24. librbd-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  25. libseccomp-devel >= 2.4.0 is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  26. libssh-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  27. libusbx-devel >= 1.0.22 is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  28. libuuid-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  29. lzo-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  30. ncurses-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  31. nss-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  32. numactl-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  33. pciutils-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  34. pixman-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  35. pkgconfig(epoxy) is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  36. pkgconfig(gbm) is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  37. pkgconfig(libdrm) is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  38. pkgconfig(xkbcommon) is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  39. python3-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  40. rdma-core-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  41. snappy-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  42. spice-protocol >= 0.12.12 is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  43. spice-server-devel >= 0.12.8 is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  44. systemd-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  45. systemtap-sdt-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  46. texinfo is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  47. usbredir-devel >= 0.7.1 is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64
  48. zlib-devel is needed by qemu-kvm-15:2.12.0-99.el8.4.x86_64

其中,比较特殊的依赖有

  • iasl

yum search iasl是找不到相关包,但是可以直接yum install -y iasl,因为iasl是在acpica-tools中的

  • python3-devel

yum search python3-devel,是找不到相关包,但是可以直接yum install -y python3-devel

然后建立软连接

ln -sf /usr/bin/python3 /usr/bin/python

  • pkgconfig(epoxy)

yum install -y libepoxy-devel.x86_64

  • pkgconfig(gbm)

yum install -y mesa-libgbm-devel.x86_64

  • pkgconfig(libdrm)

yum install -y libdrm-devel.x86_64

  • pkgconfig(xkbcommon)

yum install -y libxkbcommon-devel.x86_64

其他的包,可以直接使用以下命令安装

  1. yum install -y bluez-libs-devel brlapi-devel check-devel cyrus-sasl-devel device-mapper-multipath-devel glib2-devel glusterfs-api-devel glusterfs-devel gnutls-devel libaio-devel libattr-devel libcacard-devel libcap-devel libcap-ng-devel libcurl-devel libgcrypt-devel libiscsi-devel libpmem-devel libpng-devel librados-devel librbd-devel libseccomp-devel libssh-devel libusbx-devel libuuid-devel lzo-devel ncurses-devel nss-devel numactl-devel pciutils-devel pixman-devel rdma-core-devel snappy-devel spice-protocol spice-server-devel systemd-devel systemtap-sdt-devel texinfo usbredir-devel zlib-devel

2 直接build qemu code

  • 编译命令
  1. ./configure --enable-kvm --prefix=/home/zhanghaoyu/qemu-obj/ --enable-debug --target-list=x86_64-softmmu
  2. make && make install
  • 依赖包安装
    • python