qemu/qemu.spec
Adttil 7d02ed8899 QEMU update to 8.2.0-1
(cherry picked from commit 81a5806ad45c622189d9c9b20ffb6684dd930837)
2024-03-23 08:21:31 +08:00

615 lines
18 KiB
RPMSpec

# Whether to support Ceph rbd storage backend
%bcond_without rbd
Name: qemu
Version: 8.2.0
Release: 1
Epoch: 11
Summary: QEMU is a generic and open source machine emulator and virtualizer
License: GPLv2 and BSD and MIT and CC-BY-SA-4.0
URL: http://www.qemu.org
Source0: https://download.qemu.org/%{name}-%{version}%{?rcstr}.tar.xz
Source1: 80-kvm.rules
Source2: 99-qemu-guest-agent.rules
Source3: bridge.conf
Source4: BinDir.tar.gz
BuildRequires: flex
BuildRequires: gcc
BuildRequires: make
BuildRequires: bison
BuildRequires: texinfo
BuildRequires: perl-podlators
BuildRequires: chrpath
BuildRequires: gettext
BuildRequires: python-sphinx
BuildRequires: ninja-build
BuildRequires: zlib-devel
BuildRequires: zstd-devel
BuildRequires: gtk3-devel
BuildRequires: gnutls-devel
BuildRequires: numactl-devel
BuildRequires: device-mapper-multipath-devel
BuildRequires: rdma-core-devel
BuildRequires: libcap-devel
BuildRequires: libcap-ng-devel
BuildRequires: cyrus-sasl-devel
BuildRequires: libaio-devel
BuildRequires: usbredir-devel >= 0.5.2
BuildRequires: libseccomp-devel >= 2.3.0
BuildRequires: systemd-devel
BuildRequires: libiscsi-devel
BuildRequires: snappy-devel
BuildRequires: lzo-devel
BuildRequires: ncurses-devel
BuildRequires: libattr-devel
BuildRequires: libcurl-devel
BuildRequires: libjpeg-devel
BuildRequires: libpng-devel
BuildRequires: pixman-devel
BuildRequires: libusbx-devel
BuildRequires: bzip2-devel
BuildRequires: libepoxy-devel
BuildRequires: libtasn1-devel
BuildRequires: libxml2-devel
BuildRequires: libudev-devel
BuildRequires: pam-devel
BuildRequires: perl-Test-Harness
BuildRequires: python3-devel
%if %{with rbd}
BuildRequires: librbd-devel
%endif
BuildRequires: krb5-devel
BuildRequires: libssh-devel
BuildRequires: glib2
BuildRequires: libfdt-devel
BuildRequires: virglrenderer-devel
BuildRequires: libslirp-devel
BuildRequires: liburing-devel
%ifarch loongarch64
BuildRequires: spice-server-devel
%endif
# for upgrade from qemu-kvm
Provides: qemu-kvm
Obsoletes: qemu-kvm < 11:8.2.0
Requires(post): /usr/bin/getent
Requires(post): /usr/sbin/groupadd
Requires(post): /usr/sbin/useradd
Requires(post): systemd-units
Requires(preun): systemd-units
Requires(postun): systemd-units
Requires(postun): qemu-block-iscsi
Requires(postun): qemu-block-curl
Requires(postun): qemu-hw-usb-host
Requires: libgcc
Requires: liburing
%description
QEMU is a FAST! processor emulator using dynamic translation to achieve good emulation speed.
QEMU has two operating modes:
Full system emulation. In this mode, QEMU emulates a full system (for example a PC),
including one or several processors and various peripherals. It can be used to launch
different Operating Systems without rebooting the PC or to debug system code.
User mode emulation. In this mode, QEMU can launch processes compiled for one CPU on another CPU.
It can be used to launch the Wine Windows API emulator (https://www.winehq.org) or to ease
cross-compilation and cross-debugging.
You can refer to https://www.qemu.org for more infortmation.
%package guest-agent
Summary: QEMU guest agent
Requires(post): systemd-units
Requires(preun): systemd-units
Requires(postun): systemd-units
%description guest-agent
This package provides an agent to run inside guests, which communicates
with the host over a virtio-serial channel named "org.qemu.guest_agent.0"
Please refer to https://wiki.qemu.org/Features/GuestAgent for more information.
%package help
Summary: Documents for qemu
Buildarch: noarch
%description help
This package provides documents for qemu related man help and information.
%package img
Summary: QEMU command line tool for manipulating disk images
%description img
This package provides a command line tool for manipulating disk images
%if %{with rbd}
%package block-rbd
Summary: Qemu-block-rbd
%description block-rbd
This package provides RBD support for Qemu
%endif
%package block-ssh
Summary: Qemu-block-ssh
%description block-ssh
This package provides block-ssh support for Qemu
%package block-iscsi
Summary: Qemu-block-iscsi
%description block-iscsi
This package provides block-iscsi support for Qemu
%package block-curl
Summary: Qemu-block-curl
%description block-curl
This package provides block-curl support for Qemu
%package hw-usb-host
Summary: Qemu-hw-usb-host
%description hw-usb-host
This package provides hw-usb-host support for Qemu
%ifarch %{ix86} x86_64
%package seabios
Summary: QEMU seabios
%description seabios
This package include bios-256k.bin and bios.bin of seabios
%endif
%package system-aarch64
Summary: Qemu-system-aarch64
Requires: qemu
%description system-aarch64
This package provides the QEMU system emulator for AArch64.
%package system-arm
Summary: Qemu-system-arm
Requires: qemu
%description system-arm
This package provides the QEMU system emulator for ARM.
%package system-x86_64
Summary: Qemu-system-x86_64
Requires: qemu
%description system-x86_64
This package provides the QEMU system emulator for x86_64.
%package system-ppc64
Summary: Qemu-system-ppc64
Requires: qemu
%description system-ppc64
This package provides the QEMU system emulator for ppc64le.
%package system-riscv
Summary: Qemu-system-riscv32, Qemu-system-riscv64
Requires: qemu
%description system-riscv
This package provides the QEMU system emulator for riscv.
%package system-loongarch64
Summary: Qemu-system-loongarch64
Requires: qemu
%description system-loongarch64
This package provides the QEMU system emulator for loongarch64.
%prep
%setup -q -n qemu-%{version}%{?rcstr}
%autopatch -p1
%build
%ifarch x86_64
buildarch="x86_64-softmmu"
targetarch="aarch64-softmmu arm-softmmu riscv32-softmmu riscv64-softmmu"
%endif
%ifarch aarch64
buildarch="aarch64-softmmu"
targetarch="x86_64-softmmu arm-softmmu riscv32-softmmu riscv64-softmmu"
%endif
%ifarch ppc64le
buildarch="ppc64-softmmu"
targetarch="x86_64-softmmu aarch64-softmmu arm-softmmu riscv32-softmmu riscv64-softmmu"
%endif
%ifarch loongarch64
buildarch="loongarch64-softmmu"
targetarch="x86_64-softmmu aarch64-softmmu arm-softmmu riscv32-softmmu riscv64-softmmu"
%endif
%ifarch riscv64
buildarch="riscv64-softmmu"
targetarch="x86_64-softmmu aarch64-softmmu arm-softmmu riscv32-softmmu"
%endif
buildldflags="VL_LDFLAGS=-Wl,--build-id"
qemubuilddir="build"
tar xf %{SOURCE4}
cd BinDir/
\cp -r -a . ../
cd ../
./configure \
--prefix=%{_prefix} \
--target-list="${buildarch} ${targetarch}" \
--extra-cflags="%{optflags} -fPIE -DPIE -fPIC -ftls-model=initial-exec" \
--extra-ldflags="-Wl,--build-id -Wl,-z,relro -Wl,-z,now -Wl,-z,noexecstack" \
--datadir=%{_datadir} \
--docdir=%{_docdir}/ \
--libdir=%{_libdir} \
--libexecdir=%{_libexecdir} \
--localstatedir=%{_localstatedir} \
--sysconfdir=%{_sysconfdir} \
--interp-prefix=%{_prefix}/qemu-%%M \
--firmwarepath=%{_datadir}/%{name} \
--with-pkgversion=%{name}-%{version}-%{release} \
--python=/usr/bin/python3 \
--disable-slirp \
--enable-slirp-smbd \
--enable-gtk \
--enable-docs \
--enable-guest-agent \
--enable-pie \
--enable-numa \
--enable-mpath \
--disable-libnfs \
--disable-bzip2 \
--enable-kvm \
--enable-tcg \
--enable-rdma \
--enable-linux-aio \
--enable-linux-io-uring \
--enable-cap-ng \
--enable-vhost-user \
--enable-vhost-net \
--enable-vhost-kernel \
--enable-vhost-user-blk-server \
--enable-vhost-vdpa \
--enable-tpm \
--enable-modules \
--enable-libssh \
--enable-fdt \
--enable-virglrenderer \
--enable-cap-ng \
--enable-libusb \
%if %{with rbd}
--enable-rbd \
%else
--disable-rbd \
%endif
--disable-dmg \
--disable-qcow1 \
--disable-vdi \
--disable-vvfat \
--disable-qed \
--disable-parallels \
--disable-capstone \
--disable-smartcard \
--enable-zstd \
--disable-brlapi \
--disable-plugins \
--enable-debug
make %{?_smp_mflags} $buildldflags V=1
cp ${qemubuilddir}/${buildarch}/qemu-system-* qemu-kvm
%install
make %{?_smp_mflags} DESTDIR=%{buildroot} \
install
%find_lang %{name}
install -m 0755 qemu-kvm %{buildroot}%{_libexecdir}/
ln -s %{_libexecdir}/qemu-kvm %{buildroot}/%{_bindir}/qemu-kvm
install -D -p -m 0644 contrib/systemd/qemu-pr-helper.service %{buildroot}%{_unitdir}/qemu-pr-helper.service
install -D -p -m 0644 contrib/systemd/qemu-pr-helper.socket %{buildroot}%{_unitdir}/qemu-pr-helper.socket
install -D -p -m 0644 qemu.sasl %{buildroot}%{_sysconfdir}/sasl2/qemu.conf
install -D -m 0644 %{_sourcedir}/bridge.conf %{buildroot}%{_sysconfdir}/qemu/bridge.conf
install -D -m 0644 %{_sourcedir}/80-kvm.rules %{buildroot}/usr/lib/udev/rules.d/80-kvm.rules
# For qemu-guest-agent package
%global _udevdir /lib/udev/rules.d
install -D -p -m 0644 contrib/systemd/qemu-guest-agent.service %{buildroot}%{_unitdir}/qemu-guest-agent.service
install -D -m 0644 %{_sourcedir}/99-qemu-guest-agent.rules %{buildroot}%{_udevdir}/99-qemu-guest-agent.rules
mkdir -p %{buildroot}%{_localstatedir}/log
touch %{buildroot}%{_localstatedir}/log/qga-fsfreeze-hook.log
# For qemu docs package
%global qemudocdir %{_docdir}/%{name}
rm -rf %{buildroot}%{qemudocdir}/specs
rm -rf %{buildroot}%{qemudocdir}/.buildinfo
rm -rf %{buildroot}%{qemudocdir}/objects.inv
rm -rf %{buildroot}%{qemudocdir}/genindex.html
rm -rf %{buildroot}%{qemudocdir}/index.html
install -D -p -m 0644 -t %{buildroot}%{qemudocdir} README.rst COPYING COPYING.LIB LICENSE
chmod -x %{buildroot}%{_mandir}/man1/*
rm -rf %{buildroot}%{_datadir}/%{name}/vgabios-ati.bin
rm -rf %{buildroot}%{_datadir}/%{name}/bios-microvm.bin
rm -rf %{buildroot}%{_datadir}/%{name}/openbios-*
rm -rf %{buildroot}%{_datadir}/%{name}/QEMU,*.bin
rm -rf %{buildroot}%{_datadir}/%{name}/bamboo.dtb
rm -rf %{buildroot}%{_datadir}/%{name}/canyonlands.dtb
rm -rf %{buildroot}%{_datadir}/%{name}/hppa-firmware.img
rm -rf %{buildroot}%{_datadir}/%{name}/palcode-clipper
rm -rf %{buildroot}%{_datadir}/%{name}/petalogix-*
rm -rf %{buildroot}%{_datadir}/%{name}/qemu_vga.ndrv
rm -rf %{buildroot}%{_datadir}/%{name}/s390-*
%ifnarch ppc64le
rm -rf %{buildroot}%{_datadir}/%{name}/slof.bin
rm -rf %{buildroot}%{_datadir}/%{name}/skiboot.lid
rm -rf %{buildroot}%{_datadir}/%{name}/spapr-*
rm -rf %{buildroot}%{_datadir}/%{name}/ppc_*
%endif
rm -rf %{buildroot}%{_datadir}/%{name}/u-boot*
rm -rf %{buildroot}%{_datadir}/%{name}/core3-hmcode
rm -rf %{buildroot}%{_datadir}/%{name}/core3-reset
rm -rf %{buildroot}%{_datadir}/%{name}/uefi-bios-sw
rm -rf %{buildroot}%{_bindir}/ivshmem*
rm -f %{buildroot}%{_datadir}/%{name}/edk2*
rm -rf %{buildroot}%{_datadir}/%{name}/firmware
rm -rf %{buildroot}%{_datadir}/%{name}/qemu-nsis.bmp
rm -rf %{buildroot}%{_libdir}/%{name}/audio-pa.so
rm -rf %{buildroot}%{_libdir}/%{name}/block-gluster.so
rm -rf %{buildroot}%{_libdir}/%{name}/ui-sdl.so
rm -rf %{buildroot}%{_libdir}/%{name}/chardev-baum.so
%ifnarch loongarch64
rm -rf %{buildroot}%{_libdir}/%{name}/audio-oss.so
rm -rf %{buildroot}%{_libdir}/%{name}/audio-spice.so
rm -rf %{buildroot}%{_libdir}/%{name}/ui-curses.so
rm -rf %{buildroot}%{_libdir}/%{name}/ui-gtk.so
rm -rf %{buildroot}%{_libdir}/%{name}/chardev-spice.so
rm -rf %{buildroot}%{_libdir}/%{name}/hw-display-qxl.so
rm -rf %{buildroot}%{_libdir}/%{name}/hw-s390x-virtio-gpu-ccw.so
rm -rf %{buildroot}%{_libdir}/%{name}/hw-usb-redirect.so
rm -rf %{buildroot}%{_libdir}/%{name}/ui-opengl.so
rm -rf %{buildroot}%{_libdir}/%{name}/ui-spice-app.so
rm -rf %{buildroot}%{_libdir}/%{name}/ui-spice-core.so
%endif
rm -rf %{buildroot}%{_libexecdir}/vhost-user-gpu
rm -rf %{buildroot}%{_datadir}/%{name}/vhost-user/50-qemu-gpu.json
%ifarch ppc64le
%endif
%if %{with rbd}
strip %{buildroot}%{_libdir}/%{name}/block-rbd.so
%endif
strip %{buildroot}%{_libdir}/%{name}/block-iscsi.so
strip %{buildroot}%{_libdir}/%{name}/block-curl.so
strip %{buildroot}%{_libdir}/%{name}/block-ssh.so
strip %{buildroot}%{_libdir}/%{name}/hw-usb-host.so
for f in %{buildroot}%{_bindir}/* %{buildroot}%{_libdir}/* \
%{buildroot}%{_libexecdir}/*; do
if file $f | grep -q ELF | grep -q -i shared; then chrpath --delete $f; fi
done
%check
echo "#define CONFIG_DISABLE_QEMU_LOG" >> build/config-host.h
make %{?_smp_mflags} $buildldflags V=1
make check V=1 %{?_smp_mflags}
%pre
getent group kvm >/dev/null || groupadd -g 36 -r kvm
getent group qemu >/dev/null || groupadd -g 107 -r qemu
getent passwd qemu >/dev/null || \
useradd -r -u 107 -g qemu -G kvm -d / -s /sbin/nologin \
-c "qemu user" qemu
%post guest-agent
%systemd_post qemu-guest-agent.service
%preun guest-agent
%systemd_preun qemu-guest-agent.service
%postun guest-agent
%systemd_postun_with_restart qemu-guest-agent.service
%files -f %{name}.lang
%dir %{_datadir}/%{name}/
%{_libexecdir}/qemu-kvm
%{_bindir}/qemu-kvm
%{_libdir}/%{name}/accel-qtest-*.so
%ifarch x86_64
%{_libdir}/%{name}/accel-tcg-*.so
%{_libdir}/%{name}/hw-display-virtio-vga-gl.so
%{_libdir}/%{name}/hw-display-virtio-vga.so
%endif
%{_libdir}/%{name}/hw-display-virtio-gpu-gl.so
%{_libdir}/%{name}/hw-display-virtio-gpu-pci-gl.so
%{_libdir}/%{name}/hw-display-virtio-gpu-pci.so
%{_libdir}/%{name}/hw-display-virtio-gpu.so
%{_libdir}/%{name}/audio-dbus.so
%{_libdir}/%{name}/ui-dbus.so
%{_libdir}/%{name}/ui-egl-headless.so
%{_docdir}/%{name}/dbus-dbusindex.html
%{_datadir}/%{name}/vof-nvram.bin
%{_datadir}/%{name}/vof.bin
%{_datadir}/%{name}/efi-virtio.rom
%{_datadir}/%{name}/efi-e1000.rom
%{_datadir}/%{name}/efi-e1000e.rom
%{_datadir}/%{name}/efi-rtl8139.rom
%{_datadir}/%{name}/efi-pcnet.rom
%{_datadir}/%{name}/efi-ne2k_pci.rom
%{_datadir}/%{name}/efi-eepro100.rom
%{_datadir}/%{name}/efi-vmxnet3.rom
%{_datadir}/%{name}/pxe-virtio.rom
%{_datadir}/%{name}/pxe-e1000.rom
%{_datadir}/%{name}/pxe-ne2k_pci.rom
%{_datadir}/%{name}/pxe-pcnet.rom
%{_datadir}/%{name}/pxe-rtl8139.rom
%{_datadir}/%{name}/pxe-eepro100.rom
%{_datadir}/%{name}/qboot.rom
%{_datadir}/%{name}/trace-events-all
%{_datadir}/applications/qemu.desktop
%{_datadir}/icons/hicolor/*/apps/*
%{_datadir}/%{name}/keymaps/
%{_bindir}/elf2dmp
%{_bindir}/qemu-edid
%{_bindir}/qemu-keymap
%{_bindir}/qemu-pr-helper
%{_libexecdir}/virtfs-proxy-helper
%{_unitdir}/qemu-pr-helper.service
%{_unitdir}/qemu-pr-helper.socket
%attr(4755, root, root) %{_libexecdir}/qemu-bridge-helper
%config(noreplace) %{_sysconfdir}/sasl2/qemu.conf
%dir %{_sysconfdir}/qemu
%config(noreplace) %{_sysconfdir}/qemu/bridge.conf
/usr/lib/udev/rules.d/80-kvm.rules
%doc %{qemudocdir}/COPYING
%doc %{qemudocdir}/COPYING.LIB
%doc %{qemudocdir}/LICENSE
%ifarch x86_64
%{_datadir}/%{name}/bios.bin
%{_datadir}/%{name}/bios-256k.bin
%{_datadir}/%{name}/vgabios.bin
%{_datadir}/%{name}/vgabios-cirrus.bin
%{_datadir}/%{name}/vgabios-qxl.bin
%{_datadir}/%{name}/vgabios-stdvga.bin
%{_datadir}/%{name}/vgabios-vmware.bin
%{_datadir}/%{name}/vgabios-virtio.bin
%{_datadir}/%{name}/vgabios-ramfb.bin
%{_datadir}/%{name}/vgabios-bochs-display.bin
%{_datadir}/%{name}/linuxboot.bin
%{_datadir}/%{name}/linuxboot_dma.bin
%{_datadir}/%{name}/pvh.bin
%{_datadir}/%{name}/multiboot.bin
%{_datadir}/%{name}/multiboot_dma.bin
%{_datadir}/%{name}/kvmvapic.bin
%endif
%files system-aarch64
%{_bindir}/qemu-system-aarch64
%files system-arm
%{_bindir}/qemu-system-arm
%{_datadir}/%{name}/npcm7xx_bootrom.bin
%files system-x86_64
%{_bindir}/qemu-system-x86_64
%ifnarch x86_64
%{_libdir}/%{name}/accel-tcg-*.so
%{_libdir}/%{name}/hw-display-virtio-vga-gl.so
%{_libdir}/%{name}/hw-display-virtio-vga.so
%{_datadir}/%{name}/bios.bin
%{_datadir}/%{name}/bios-256k.bin
%{_datadir}/%{name}/vgabios.bin
%{_datadir}/%{name}/vgabios-cirrus.bin
%{_datadir}/%{name}/vgabios-qxl.bin
%{_datadir}/%{name}/vgabios-stdvga.bin
%{_datadir}/%{name}/vgabios-vmware.bin
%{_datadir}/%{name}/vgabios-virtio.bin
%{_datadir}/%{name}/vgabios-ramfb.bin
%{_datadir}/%{name}/vgabios-bochs-display.bin
%{_datadir}/%{name}/linuxboot.bin
%{_datadir}/%{name}/linuxboot_dma.bin
%{_datadir}/%{name}/pvh.bin
%{_datadir}/%{name}/multiboot.bin
%{_datadir}/%{name}/multiboot_dma.bin
%{_datadir}/%{name}/kvmvapic.bin
%endif
%ifarch ppc64le
%files system-ppc64
%{_bindir}/qemu-system-ppc64
%{_datadir}/%{name}/slof.bin
%{_datadir}/%{name}/skiboot.lid
%endif
%files system-riscv
%{_bindir}/qemu-system-riscv32
%{_bindir}/qemu-system-riscv64
%{_datadir}/%{name}/opensbi-riscv32-generic-fw_dynamic.*
%{_datadir}/%{name}/opensbi-riscv64-generic-fw_dynamic.*
%ifnarch ppc64le
%endif
%ifarch loongarch64
%files system-loongarch64
%{_bindir}/qemu-system-loongarch64
%{_libdir}/%{name}/audio-oss.so
%{_libdir}/%{name}/ui-curses.so
%{_libdir}/%{name}/ui-gtk.so
%{_libdir}/%{name}/audio-spice.so
%{_libdir}/%{name}/chardev-spice.so
%{_libdir}/%{name}/hw-display-qxl.so
%{_libdir}/%{name}/hw-s390x-virtio-gpu-ccw.so
%{_libdir}/%{name}/hw-usb-redirect.so
%{_libdir}/%{name}/ui-opengl.so
%{_libdir}/%{name}/ui-spice-app.so
%{_libdir}/%{name}/ui-spice-core.so
%endif
%ifnarch loongarch64
%endif
%files help
%dir %{qemudocdir}
%doc %{qemudocdir}/about
%doc %{qemudocdir}/devel
%doc %{qemudocdir}/interop
%doc %{qemudocdir}/search*
%doc %{qemudocdir}/_static
%doc %{qemudocdir}/system
%doc %{qemudocdir}/tools
%doc %{qemudocdir}/user
%doc %{qemudocdir}/README.rst
%{_mandir}/man1/qemu.1*
%{_mandir}/man1/qemu-img.1*
%{_mandir}/man1/qemu-storage-daemon.1*
%{_mandir}/man1/virtfs-proxy-helper.1*
%{_mandir}/man7/qemu-block-drivers.7*
%{_mandir}/man7/qemu-cpu-models.7*
%{_mandir}/man7/qemu-ga-ref.7*
%{_mandir}/man7/qemu-qmp-ref.7*
%{_mandir}/man7/qemu-storage-daemon-qmp-ref.7*
%{_mandir}/man8/qemu-ga.8*
%{_mandir}/man8/qemu-nbd.8*
%{_mandir}/man8/qemu-pr-helper.8*
%files guest-agent
%defattr(-,root,root,-)
%{_bindir}/qemu-ga
%{_unitdir}/qemu-guest-agent.service
%{_udevdir}/99-qemu-guest-agent.rules
%ghost %{_localstatedir}/log/qga-fsfreeze-hook.log
%files img
%{_bindir}/qemu-img
%{_bindir}/qemu-io
%{_bindir}/qemu-nbd
%{_bindir}/qemu-storage-daemon
%if %{with rbd}
%files block-rbd
%{_libdir}/%{name}/block-rbd.so
%endif
%files block-ssh
%{_libdir}/%{name}/block-ssh.so
%files block-iscsi
%{_libdir}/%{name}/block-iscsi.so
%files block-curl
%{_libdir}/%{name}/block-curl.so
%files hw-usb-host
%{_libdir}/%{name}/hw-usb-host.so
%ifarch %{ix86} x86_64
%files seabios
%{_datadir}/%{name}/bios-256k.bin
%{_datadir}/%{name}/bios.bin
%endif
%changelog
* Thu Feb 29 2024 Tao Yang <yangtao286@huawei.com> - 11:8.2.0-1
- Package init