From 378cf61fb6b281829b3059a231f156e14d3bcc60 Mon Sep 17 00:00:00 2001 From: Marcin Krol Date: Sat, 22 Jul 2023 20:05:41 +0200 Subject: [PATCH] - updated to 8.0.3, sync with PLD spec changes --- qemu-execve.patch | 54 +++++++++ qemu-no-fortify.patch | 16 +-- qemu-user-execve.patch | 223 ------------------------------------- qemu-xattr.patch | 8 +- qemu.spec | 245 +++++++++++++++++++++++++++-------------- 5 files changed, 227 insertions(+), 319 deletions(-) create mode 100644 qemu-execve.patch delete mode 100644 qemu-user-execve.patch diff --git a/qemu-execve.patch b/qemu-execve.patch new file mode 100644 index 0000000..03b0931 --- /dev/null +++ b/qemu-execve.patch @@ -0,0 +1,54 @@ +diff -ur qemu-8.0.3.orig/linux-user/syscall.c qemu-8.0.3/linux-user/syscall.c +--- qemu-8.0.3.orig/linux-user/syscall.c 2023-07-22 14:27:06.999503109 +0200 ++++ qemu-8.0.3/linux-user/syscall.c 2023-07-22 15:21:31.161543522 +0200 +@@ -659,6 +659,7 @@ + #endif + safe_syscall5(int, waitid, idtype_t, idtype, id_t, id, siginfo_t *, infop, \ + int, options, struct rusage *, rusage) ++safe_syscall3(int, execve, const char *, filename, char **, argv, char **, envp) + safe_syscall5(int, execveat, int, dirfd, const char *, filename, + char **, argv, char **, envp, int, flags) + #if defined(TARGET_NR_select) || defined(TARGET_NR__newselect) || \ +@@ -8388,9 +8389,9 @@ + return safe_openat(dirfd, path(pathname), flags, mode); + } + +-static int do_execveat(CPUArchState *cpu_env, int dirfd, +- abi_long pathname, abi_long guest_argp, +- abi_long guest_envp, int flags) ++static int do_execv(CPUArchState *cpu_env, int dirfd, ++ abi_long pathname, abi_long guest_argp, ++ abi_long guest_envp, int flags, bool is_execveat) + { + int ret; + char **argp, **envp; +@@ -8469,11 +8470,14 @@ + goto execve_efault; + } + ++ const char *exe = p; + if (is_proc_myself(p, "exe")) { +- ret = get_errno(safe_execveat(dirfd, exec_path, argp, envp, flags)); +- } else { +- ret = get_errno(safe_execveat(dirfd, p, argp, envp, flags)); ++ exe = exec_path; + } ++ ret = is_execveat ++ ? safe_execveat(dirfd, exe, argp, envp, flags) ++ : safe_execve(exe, argp, envp); ++ ret = get_errno(ret); + + unlock_user(p, pathname, 0); + +@@ -9012,9 +9016,9 @@ + return ret; + #endif + case TARGET_NR_execveat: +- return do_execveat(cpu_env, arg1, arg2, arg3, arg4, arg5); ++ return do_execv(cpu_env, arg1, arg2, arg3, arg4, arg5, true); + case TARGET_NR_execve: +- return do_execveat(cpu_env, AT_FDCWD, arg1, arg2, arg3, 0); ++ return do_execv(cpu_env, AT_FDCWD, arg1, arg2, arg3, 0, false); + case TARGET_NR_chdir: + if (!(p = lock_user_string(arg1))) + return -TARGET_EFAULT; diff --git a/qemu-no-fortify.patch b/qemu-no-fortify.patch index aa69ee0..ed6f0e8 100644 --- a/qemu-no-fortify.patch +++ b/qemu-no-fortify.patch @@ -1,7 +1,7 @@ -diff -ur qemu-7.2.0.orig/configure qemu-7.2.0/configure ---- qemu-7.2.0.orig/configure 2023-02-08 21:21:36.128176965 +0100 -+++ qemu-7.2.0/configure 2023-02-08 21:22:06.431170014 +0100 -@@ -275,7 +275,6 @@ +diff -ur qemu-8.0.3.orig/configure qemu-8.0.3/configure +--- qemu-8.0.3.orig/configure 2023-07-22 14:25:13.756890443 +0200 ++++ qemu-8.0.3/configure 2023-07-22 14:25:40.988278232 +0200 +@@ -278,7 +278,6 @@ debug_tcg="no" sanitizers="no" tsan="no" @@ -9,15 +9,15 @@ diff -ur qemu-7.2.0.orig/configure qemu-7.2.0/configure EXESUF="" modules="no" prefix="/usr/local" -@@ -789,7 +788,6 @@ - debug_tcg="yes" +@@ -809,7 +808,6 @@ + meson_option_parse --enable-debug-graph-lock "" meson_option_parse --enable-debug-mutex "" meson_option_add -Doptimization=0 - fortify_source="no" ;; --enable-sanitizers) sanitizers="yes" ;; -@@ -1691,20 +1689,6 @@ +@@ -1718,20 +1716,6 @@ ccache_cpp2=yes fi @@ -38,7 +38,7 @@ diff -ur qemu-7.2.0.orig/configure qemu-7.2.0/configure ########################################## # checks for sanitizers -@@ -2207,10 +2191,6 @@ +@@ -2234,10 +2218,6 @@ write_c_skeleton diff --git a/qemu-user-execve.patch b/qemu-user-execve.patch deleted file mode 100644 index 4faf735..0000000 --- a/qemu-user-execve.patch +++ /dev/null @@ -1,223 +0,0 @@ -Discussion: -https://resin.io/blog/building-arm-containers-on-any-x86-machine-even-dockerhub/ - -https://github.com/resin-io/qemu/commit/782e5bb77014ff136f7bb6133a911e5f53e914a7 - -https://github.com/resin-io/qemu/commit/782e5bb77014ff136f7bb6133a911e5f53e914a7#commitcomment-17193923 -It has gone through review[1][2][3] and I'm waiting for the maintainer of the linux-user subsystem to accept it in his tree. - -[1] https://patchwork.ozlabs.org/patch/569452/ -[2] https://patchwork.ozlabs.org/patch/573877/ -[3] https://patchwork.ozlabs.org/patch/582756/ - -From patchwork Mon Feb 15 05:51:47 2016 -Content-Type: text/plain; charset="utf-8" -MIME-Version: 1.0 -Content-Transfer-Encoding: 7bit -Subject: [v3] linux-user: add option to intercept execve() syscalls -From: Petros Angelatos -X-Patchwork-Id: 582756 -Message-Id: <1455515507-26877-1-git-send-email-petrosagg@resin.io> -To: qemu-devel@nongnu.org -Cc: lucas.kaldstrom@hotmail.co.uk, peter.maydell@linaro.org, - riku.voipio@iki.fi, - laurent@vivier.eu, Petros Angelatos -Date: Sun, 14 Feb 2016 21:51:47 -0800 - -In order for one to use QEMU user mode emulation under a chroot, it is -required to use binfmt_misc. This can be avoided by QEMU never doing a -raw execve() to the host system. - -Introduce a new option, -execve, that uses the current QEMU interpreter -to intercept execve(). - -qemu_execve() will prepend the interpreter path , similar to what -binfmt_misc would do, and then pass the modified execve() to the host. - -It is necessary to parse hashbang scripts in that function otherwise -the kernel will try to run the interpreter of a script without QEMU and -get an invalid exec format error. - -Signed-off-by: Petros Angelatos -Tested-by: Laurent Vivier -Reviewed-by: Laurent Vivier ---- -v3 changes: - - rebase the patchset against current code - -diff -urNpa qemu-7.2.0.orig/linux-user/main.c qemu-7.2.0/linux-user/main.c ---- qemu-7.2.0.orig/linux-user/main.c 2023-02-08 21:23:07.149156085 +0100 -+++ qemu-7.2.0/linux-user/main.c 2023-02-08 21:23:36.695149312 +0100 -@@ -123,6 +123,7 @@ static void usage(int exitcode); - - static const char *interp_prefix = CONFIG_QEMU_INTERP_PREFIX; - const char *qemu_uname_release; -+const char *qemu_execve_path; - - #if !defined(TARGET_DEFAULT_STACK_SIZE) - /* XXX: on x86 MAP_GROWSDOWN only works if ESP <= address + 32, so -@@ -362,6 +363,11 @@ static void handle_arg_guest_base(const - have_guest_base = true; - } - -+static void handle_arg_execve(const char *arg) -+{ -+ qemu_execve_path = strdup(arg); -+} -+ - static void handle_arg_reserved_va(const char *arg) - { - char *p; -@@ -464,6 +470,8 @@ static const struct qemu_argument arg_ta - "uname", "set qemu uname release string to 'uname'"}, - {"B", "QEMU_GUEST_BASE", true, handle_arg_guest_base, - "address", "set guest_base address to 'address'"}, -+ {"execve", "QEMU_EXECVE", true, handle_arg_execve, -+ "path", "use interpreter at 'path' when a process calls execve()"}, - {"R", "QEMU_RESERVED_VA", true, handle_arg_reserved_va, - "size", "reserve 'size' bytes for guest virtual address space"}, - {"d", "QEMU_LOG", true, handle_arg_log, -diff -urNpa qemu-7.2.0.orig/linux-user/syscall.c qemu-7.2.0/linux-user/syscall.c ---- qemu-7.2.0.orig/linux-user/syscall.c 2023-02-08 21:23:07.150156084 +0100 -+++ qemu-7.2.0/linux-user/syscall.c 2023-02-08 21:28:50.327077355 +0100 -@@ -8378,6 +8378,109 @@ static target_timer_t get_timer_id(abi_l - return timerid; - } - -+#define BINPRM_BUF_SIZE 128 -+ -+/* qemu_execve() Must return target values and target errnos. */ -+static abi_long qemu_execve(char *filename, char *argv[], -+ char *envp[]) -+{ -+ char *i_arg = NULL, *i_name = NULL; -+ char **new_argp; -+ int argc, fd, ret, i, offset = 3; -+ char *cp; -+ char buf[BINPRM_BUF_SIZE]; -+ -+ for (argc = 0; argv[argc] != NULL; argc++) { -+ /* nothing */ ; -+ } -+ -+ fd = open(filename, O_RDONLY); -+ if (fd == -1) { -+ return -ENOENT; -+ } -+ -+ ret = read(fd, buf, BINPRM_BUF_SIZE); -+ if (ret == -1) { -+ close(fd); -+ return -ENOENT; -+ } -+ -+ close(fd); -+ -+ /* adapted from the kernel -+ * https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/fs/binfmt_script.c -+ */ -+ if ((buf[0] == '#') && (buf[1] == '!')) { -+ /* -+ * This section does the #! interpretation. -+ * Sorta complicated, but hopefully it will work. -TYT -+ */ -+ -+ buf[BINPRM_BUF_SIZE - 1] = '\0'; -+ cp = strchr(buf, '\n'); -+ if (cp == NULL) { -+ cp = buf+BINPRM_BUF_SIZE-1; -+ } -+ *cp = '\0'; -+ while (cp > buf) { -+ cp--; -+ if ((*cp == ' ') || (*cp == '\t')) { -+ *cp = '\0'; -+ } else { -+ break; -+ } -+ } -+ for (cp = buf+2; (*cp == ' ') || (*cp == '\t'); cp++) { -+ /* nothing */ ; -+ } -+ if (*cp == '\0') { -+ return -ENOEXEC; /* No interpreter name found */ -+ } -+ i_name = cp; -+ i_arg = NULL; -+ for ( ; *cp && (*cp != ' ') && (*cp != '\t'); cp++) { -+ /* nothing */ ; -+ } -+ while ((*cp == ' ') || (*cp == '\t')) { -+ *cp++ = '\0'; -+ } -+ if (*cp) { -+ i_arg = cp; -+ } -+ -+ if (i_arg) { -+ offset = 5; -+ } else { -+ offset = 4; -+ } -+ } -+ -+ new_argp = alloca((argc + offset + 1) * sizeof(void *)); -+ -+ /* Copy the original arguments with offset */ -+ for (i = 0; i < argc; i++) { -+ new_argp[i + offset] = argv[i]; -+ } -+ -+ new_argp[0] = strdup(qemu_execve_path); -+ new_argp[1] = strdup("-0"); -+ new_argp[offset] = filename; -+ new_argp[argc + offset] = NULL; -+ -+ if (i_name) { -+ new_argp[2] = i_name; -+ new_argp[3] = i_name; -+ -+ if (i_arg) { -+ new_argp[4] = i_arg; -+ } -+ } else { -+ new_argp[2] = argv[0]; -+ } -+ -+ return get_errno(safe_execve(qemu_execve_path, new_argp, envp)); -+} -+ - static int target_to_host_cpu_mask(unsigned long *host_mask, - size_t host_size, - abi_ulong target_addr, -@@ -8933,9 +9036,17 @@ static abi_long do_syscall1(CPUArchState - * program's problem. - */ - if (is_proc_myself(p, "exe")) { -- ret = get_errno(safe_execve(exec_path, argp, envp)); -+ if (qemu_execve_path && *qemu_execve_path) { -+ ret = get_errno(qemu_execve(exec_path, argp, envp)); -+ } else { -+ ret = get_errno(safe_execve(exec_path, argp, envp)); -+ } - } else { -- ret = get_errno(safe_execve(p, argp, envp)); -+ if (qemu_execve_path && *qemu_execve_path) { -+ ret = get_errno(qemu_execve(p, argp, envp)); -+ } else { -+ ret = get_errno(safe_execve(p, argp, envp)); -+ } - } - unlock_user(p, arg1, 0); - -diff -urNpa qemu-7.2.0.orig/linux-user/user-internals.h qemu-7.2.0/linux-user/user-internals.h ---- qemu-7.2.0.orig/linux-user/user-internals.h 2023-02-08 21:23:07.148156085 +0100 -+++ qemu-7.2.0/linux-user/user-internals.h 2023-02-08 21:23:36.697149312 +0100 -@@ -27,6 +27,7 @@ void init_task_state(TaskState *ts); - void task_settid(TaskState *); - void stop_all_tasks(void); - extern const char *qemu_uname_release; -+extern const char *qemu_execve_path; - extern unsigned long mmap_min_addr; - - typedef struct IOCTLEntry IOCTLEntry; diff --git a/qemu-xattr.patch b/qemu-xattr.patch index 96dbae1..373f9e9 100644 --- a/qemu-xattr.patch +++ b/qemu-xattr.patch @@ -1,6 +1,6 @@ -diff -ur qemu-7.2.0.orig/fsdev/virtfs-proxy-helper.c qemu-7.2.0/fsdev/virtfs-proxy-helper.c ---- qemu-7.2.0.orig/fsdev/virtfs-proxy-helper.c 2023-02-08 21:30:45.812050860 +0100 -+++ qemu-7.2.0/fsdev/virtfs-proxy-helper.c 2023-02-08 21:31:51.135037450 +0100 +diff -ur qemu-8.0.3.orig/fsdev/virtfs-proxy-helper.c qemu-8.0.3/fsdev/virtfs-proxy-helper.c +--- qemu-8.0.3.orig/fsdev/virtfs-proxy-helper.c 2023-07-22 15:22:45.090597707 +0200 ++++ qemu-8.0.3/fsdev/virtfs-proxy-helper.c 2023-07-22 15:23:27.989209163 +0200 @@ -10,6 +10,7 @@ */ @@ -16,4 +16,4 @@ diff -ur qemu-7.2.0.orig/fsdev/virtfs-proxy-helper.c qemu-7.2.0/fsdev/virtfs-pro -#include "qemu/xattr.h" #include "9p-iov-marshal.h" #include "hw/9pfs/9p-proxy.h" - #include "fsdev/9p-iov-marshal.h" + #include "hw/9pfs/9p-util.h" diff --git a/qemu.spec b/qemu.spec index 2048010..6a74a06 100644 --- a/qemu.spec +++ b/qemu.spec @@ -4,7 +4,7 @@ # Conditional build: %bcond_without sdl # SDL UI and audio support %bcond_without opengl # Don't require GL deps -%bcond_without ceph # Ceph/RBD support +%bcond_with ceph # Ceph/RBD support %bcond_without glusterfs # GlusterFS backend %bcond_without rdma # RDMA-based migration support %bcond_without gtk3 # Do not build GTK+ UI @@ -29,7 +29,7 @@ %bcond_without virgl # build virgl support %bcond_without xkbcommon # xkbcommon support -%if %{without gtk} +%if %{without gtk3} %undefine with_vte %endif %ifarch x32 @@ -43,12 +43,12 @@ Summary: QEMU CPU Emulator Summary(pl.UTF-8): QEMU - emulator procesora Name: qemu -Version: 7.2.0 +Version: 8.0.3 Release: 1 License: GPL v2, BSD (edk2 firmware files) Group: Applications/Emulators Source0: https://download.qemu.org/%{name}-%{version}.tar.xz -# Source0-md5: 7630d6a9eba7ab2bcb9979d6d24c2697 +# Source0-md5: d41853bffb18878dd1ff7afc2eb41f1a # Loads kvm kernel modules at boot Source3: kvm-modules-load.conf # Creates /dev/kvm @@ -62,7 +62,7 @@ Source12: 99-%{name}-guest-agent.rules Source13: %{name}-guest-agent.init Source14: %{name}-guest-agent.logrotate Patch0: %{name}-no-fortify.patch -Patch2: %{name}-user-execve.patch +Patch2: %{name}-execve.patch Patch3: %{name}-xattr.patch Patch4: libjpeg-boolean.patch URL: https://www.qemu.org/ @@ -72,45 +72,58 @@ URL: https://www.qemu.org/ %{?with_sdl:BuildRequires: SDL2-devel >= 2.0} %{?with_sdl:BuildRequires: SDL2_image-devel >= 2.0} BuildRequires: alsa-lib-devel -BuildRequires: bcc >= 0.16.21-2 %{?with_brlapi:BuildRequires: brlapi-devel} BuildRequires: bzip2-devel -BuildRequires: capstone-devel >= 3.0.5 -%{?with_ceph:BuildRequires: ceph-devel} -BuildRequires: curl-devel +BuildRequires: capstone-devel >= 4.0 +%{?with_ceph:BuildRequires: ceph-devel >= 12} +BuildRequires: curl-devel >= 7.29.0 BuildRequires: cyrus-sasl-devel >= 2 -BuildRequires: glib2-devel >= 1:2.48 +BuildRequires: daxctl-devel >= 57 +BuildRequires: gcc >= 6:7.4 +BuildRequires: gettext-tools +BuildRequires: glib2-devel >= 1:2.64 # minimal is 3.4 but new features are used up to 6 %{?with_glusterfs:BuildRequires: glusterfs-devel >= 6} -BuildRequires: gnutls-devel >= 3.1.18 -%{?with_gtk3:BuildRequires: gtk+3-devel >= 3.16} +BuildRequires: gnutls-devel >= 3.6.14 +%{?with_gtk3:BuildRequires: gtk+3-devel >= 3.22.0} +BuildRequires: jack-audio-connection-kit-devel +# for tests +#BuildRequires: keyutils-devel BuildRequires: libaio-devel +BuildRequires: libbpf-devel %{?with_smartcard:BuildRequires: libcacard-devel >= 2.5.1} BuildRequires: libcap-ng-devel +BuildRequires: libdrm-devel %{?with_opengl:BuildRequires: libepoxy-devel} -BuildRequires: libfdt-devel >= 1.4.2 +BuildRequires: libfdt-devel >= 1.5.1 +BuildRequires: libfuse3-devel >= 3.8 %{?with_rdma:BuildRequires: libibverbs-devel} %{?with_iscsi:BuildRequires: libiscsi-devel >= 1.9.0} %{?with_rdma:BuildRequires: libibumad-devel} BuildRequires: libjpeg-devel %{?with_libnfs:BuildRequires: libnfs-devel >= 1.9.3} -BuildRequires: libpng-devel +BuildRequires: libpng-devel >= 2:1.6.34 %{?with_rdma:BuildRequires: librdmacm-devel} %{?with_seccomp:BuildRequires: libseccomp-devel >= 2.3.0} -BuildRequires: libssh-devel >= 0.8 +BuildRequires: libselinux-devel +BuildRequires: libssh-devel >= 0.8.7 +BuildRequires: libslirp-devel >= 4.1.0 # for tests only #BuildRequires: libtasn1-devel +BuildRequires: libu2f-emu-devel BuildRequires: libusb-devel >= 1.0.22 -BuildRequires: liburing-devel +BuildRequires: liburing-devel >= 0.3 BuildRequires: libuuid-devel BuildRequires: libxml2-devel >= 2.0 -%{?with_lttng:BuildRequires: lttng-ust-devel} +%{?with_lttng:BuildRequires: lttng-ust-devel >= 2.1} BuildRequires: lzfse-devel BuildRequires: lzo-devel >= 2 +BuildRequires: meson >= 0.59.3 %{?with_multipath:BuildRequires: multipath-tools-devel} BuildRequires: ncurses-devel -# also libgcrypt-devel >= 1.5.0 possible, but gnutls already pulls nettle -BuildRequires: nettle-devel >= 2.7.1 +# also libgcrypt-devel >= 1.8 possible, but gnutls already pulls nettle +BuildRequires: nettle-devel >= 3.4 +BuildRequires: ninja %{?with_smartcard:BuildRequires: nss-devel >= 1:3.12.8} BuildRequires: numactl-devel BuildRequires: pam-devel @@ -120,7 +133,9 @@ BuildRequires: pixman-devel >= 0.21.8 BuildRequires: pkgconfig %{?with_pmem:BuildRequires: pmdk-devel} %{?with_pulseaudio:BuildRequires: pulseaudio-devel} -BuildRequires: python3 >= 1:3.5 +BuildRequires: python3 >= 1:3.6 +BuildRequires: python3-sphinx_rtd_theme +BuildRequires: rpm-build >= 4.6 BuildRequires: rpmbuild(macros) >= 1.644 %{?with_system_seabios:BuildRequires: seabios} BuildRequires: sed >= 4.0 @@ -130,7 +145,8 @@ BuildRequires: sphinx-pdg BuildRequires: spice-protocol >= 0.12.3 BuildRequires: spice-server-devel >= 0.12.5 %endif -%{?with_systemtap:BuildRequires: systemtap-devel} +%{?with_systemtap:BuildRequires: systemtap-sdt-devel} +BuildRequires: tar >= 1:1.22 BuildRequires: texi2html BuildRequires: texinfo %{?with_multipath:BuildRequires: udev-devel} @@ -141,17 +157,21 @@ BuildRequires: which %{?with_virgl:BuildRequires: virglrenderer-devel} %{?with_vte:BuildRequires: vte-devel >= 0.32.0} # xencontrol xenstore xenguest xenforeignmemory xengnttab xenevtchn xendevicemodel; xentoolcore for xen 4.10+ -# min version is 4.2, more features up to 4.10 -%{?with_xen:BuildRequires: xen-devel >= 4.10} +# min version is 4.2, more features up to 4.11 +%{?with_xen:BuildRequires: xen-devel >= 4.11} BuildRequires: xfsprogs-devel -%{?with_xkbcommon:BuildRequires: xorg-lib-libxkbcommon-devel} +%if %{with xkbcommon} +BuildRequires: xkeyboard-config +BuildRequires: xorg-lib-libxkbcommon-devel +%endif BuildRequires: xorg-lib-libX11-devel +BuildRequires: xz BuildRequires: zlib-devel BuildRequires: zstd-devel >= 1.4.0 %if %{with user_static} -BuildRequires: glib2-static >= 1:2.48 +BuildRequires: glib2-static >= 1:2.74 BuildRequires: glibc-static -BuildRequires: pcre-static +BuildRequires: pcre2-8-static >= 10.32 BuildRequires: zlib-static %endif Requires: %{name}-img = %{version}-%{release} @@ -177,17 +197,23 @@ Requires: %{name}-system-tricore = %{version}-%{release} Requires: %{name}-system-x86 = %{version}-%{release} Requires: %{name}-system-xtensa = %{version}-%{release} Requires: %{name}-user = %{version}-%{release} -Obsoletes: qemu-kvm +Obsoletes: qemu-kvm < 2 ExcludeArch: i386 BuildRoot: %{tmpdir}/%{name}-%{version}-root-%(id -u -n) %define systempkg_req \ -Requires: capstone >= 3.0.5 \ +Requires: capstone >= 4.0 \ +Requires: daxctl-libs >= 57 \ %{?with_smartcard:Requires: libcacard >= 2.5.1} \ -Requires: libfdt >= 1.4.2 \ +Requires: libfdt >= 1.5.1 \ +Requires: libfuse3 >= 3.8 \ +%{?with_iscsi:Requires: libiscsi >= 1.9.0} \ +Requires: libpng >= 2:1.6.34 \ %if %{with seccomp} \ Requires: libseccomp >= 2.3.0 \ %endif \ +Requires: libslirp >= 4.1.0 \ +Requires: liburing >= 0.3 \ Requires: libusb >= 1.0.22 \ Requires: pixman >= 0.21.8 \ %if %{with spice} \ @@ -195,8 +221,7 @@ Requires: spice-server-libs >= 0.12.5 \ %endif \ %if %{with usbredir} \ Requires: usbredir >= 0.6 \ -%endif \ -Requires: zstd >= 1.4.0 +%endif # don't strip/chrpath anything in there; these are boot images, roms etc %define _noautostrip .*%{_datadir}/qemu/.* @@ -243,18 +268,19 @@ Requires(pre): /bin/id Requires(pre): /usr/bin/getgid Requires(pre): /usr/sbin/groupadd Requires(pre): /usr/sbin/useradd -Requires: glib2 >= 1:2.48 -Requires: gnutls-libs >= 3.1.18 -%{?with_gtk3:Requires: gtk+3 >= 3.16} -Requires: nettle >= 2.7.1 +Requires: glib2 >= 1:2.64 +Requires: gnutls-libs >= 3.6.14 +%{?with_gtk3:Requires: gtk+3 >= 3.22.0} +Requires: nettle >= 3.4 %{?with_vte:Requires: vte >= 0.32.0} +Requires: zstd >= 1.4.0 Provides: group(qemu) Provides: user(qemu) -Obsoletes: qemu-kvm-common +Obsoletes: qemu-kvm-common < 2 Obsoletes: qemu-module-block-archipelago < 2.9.0 -Obsoletes: qemu-system-lm32 -Obsoletes: qemu-system-moxie -Obsoletes: qemu-system-unicore32 +Obsoletes: qemu-system-lm32 < 5.2 +Obsoletes: qemu-system-moxie < 6.1 +Obsoletes: qemu-system-unicore32 < 5.2 Conflicts: qemu < 1.0-2 %description common @@ -271,24 +297,22 @@ Ten pakiet udostępnia wspólne pliki wymagane przez wszystkie środowiska QEMU. %package devel -Summary: Development files for programs using qemu -Summary(pl.UTF-8): Pliki programistyczne do programów wykorzystujących qemu +Summary: Header file for QEMU plugins development +Summary(pl.UTF-8): Plik nagłówkowy do tworzenia wtyczek QEMU Group: Development/Libraries -Requires: %{name} = %{version}-%{release} +BuildArch: noarch %description devel -This package contains the header files needed for developing programs -using the QEMU. +Header file for QEMU plugins development. %description devel -l pl.UTF-8 -Ten pakiet zawiera pliki nagłówkowe potrzebne do tworzenia programów -wykorzystujących QEMU. +Plik nagłówkowy do tworzenia wtyczek QEMU. %package img Summary: QEMU command line tool for manipulating disk images Summary(pl.UTF-8): Narzędzie QEMU do operacji na obrazach dysków Group: Applications/Emulators -Obsoletes: qemu-kvm-img +Obsoletes: qemu-kvm-img < 2 Conflicts: qemu < 1.0-2 %description img @@ -299,12 +323,25 @@ images. Ten pakiet udostępnia działające z linii poleceń narzędzia do operacji na obrazach dysków. +%package ivshmem +Summary: Client and server for QEMU ivshmem device +Summary(pl.UTF-8): Klient i serwer dla urządzeia ivshmem QEMU +Group: Development/Tools + +%description ivshmem +This package provides client and server tools for QEMU's ivshmem +device. + +%description ivshmem -l pl.UTF-8 +Ten pakiet udostępnia działające z linii poleceń narzędzia dla +urządzenia ivshmem QEMU. + %package user Summary: QEMU user mode emulation of qemu targets Summary(pl.UTF-8): QEMU - emulacja trybu użytkownika środowisk qemu Group: Applications/Emulators Requires: %{name}-common = %{version}-%{release} -Obsoletes: qemu-kvm-user +Obsoletes: qemu-kvm-user < 2 %description user QEMU is a generic and open source processor emulator which achieves a @@ -343,7 +380,7 @@ Summary(pl.UTF-8): QEMU - emulator systemu z procesorem AArch64 Group: Applications/Emulators Requires: %{name}-common = %{version}-%{release} %systempkg_req -Obsoletes: qemu-kvm-system-aarch64 +Obsoletes: qemu-kvm-system-aarch64 < 2 %description system-aarch64 QEMU is a generic and open source processor emulator which achieves a @@ -363,7 +400,7 @@ Summary(pl.UTF-8): QEMU - emulator systemu z procesorem Alpha Group: Applications/Emulators Requires: %{name}-common = %{version}-%{release} %systempkg_req -Obsoletes: qemu-kvm-system-alpha +Obsoletes: qemu-kvm-system-alpha < 2 %description system-alpha QEMU is a generic and open source processor emulator which achieves a @@ -383,7 +420,7 @@ Summary(pl.UTF-8): QEMU - emulator systemu z 32-bitowym procesorem ARM Group: Applications/Emulators Requires: %{name}-common = %{version}-%{release} %systempkg_req -Obsoletes: qemu-kvm-system-arm +Obsoletes: qemu-kvm-system-arm < 2 %description system-arm QEMU is a generic and open source processor emulator which achieves a @@ -403,7 +440,7 @@ Summary(pl.UTF-8): QEMU - emulator systemu z procesorem AVR Group: Applications/Emulators Requires: %{name}-common = %{version}-%{release} %systempkg_req -Obsoletes: qemu-kvm-system-avr +Obsoletes: qemu-kvm-system-avr < 2 %description system-avr QEMU is a generic and open source processor emulator which achieves a @@ -423,7 +460,7 @@ Summary(pl.UTF-8): QEMU - emulator systemu z procesorem CRIS Group: Applications/Emulators Requires: %{name}-common = %{version}-%{release} %systempkg_req -Obsoletes: qemu-kvm-system-cris +Obsoletes: qemu-kvm-system-cris < 2 %description system-cris QEMU is a generic and open source processor emulator which achieves a @@ -481,7 +518,7 @@ Summary(pl.UTF-8): QEMU - emulator systemu z procesorem m68k Group: Applications/Emulators Requires: %{name}-common = %{version}-%{release} %systempkg_req -Obsoletes: qemu-kvm-system-m68k +Obsoletes: qemu-kvm-system-m68k < 2 %description system-m68k QEMU is a generic and open source processor emulator which achieves a @@ -503,7 +540,7 @@ Summary(pl.UTF-8): QEMU - emulator systemu z procesorem MicroBlaze Group: Applications/Emulators Requires: %{name}-common = %{version}-%{release} %systempkg_req -Obsoletes: qemu-kvm-system-microblaze +Obsoletes: qemu-kvm-system-microblaze < 2 %description system-microblaze QEMU is a generic and open source processor emulator which achieves a @@ -523,7 +560,7 @@ Summary(pl.UTF-8): QEMU - emulator systemu z procesorem MIPS Group: Applications/Emulators Requires: %{name}-common = %{version}-%{release} %systempkg_req -Obsoletes: qemu-kvm-system-mips +Obsoletes: qemu-kvm-system-mips < 2 %description system-mips QEMU is a generic and open source processor emulator which achieves a @@ -562,8 +599,8 @@ Summary(pl.UTF-8): QEMU - emulator systemu z procesorem OpenRISC Group: Applications/Emulators Requires: %{name}-common = %{version}-%{release} %systempkg_req -Obsoletes: qemu-kvm-system-or1k -Obsoletes: qemu-system-or32 +Obsoletes: qemu-kvm-system-or1k < 2 +Obsoletes: qemu-system-or32 < 2.9.0 %description system-or1k QEMU is a generic and open source processor emulator which achieves a @@ -583,7 +620,7 @@ Summary(pl.UTF-8): QEMU - emulator systemu z procesorem PowerPC Group: Applications/Emulators Requires: %{name}-common = %{version}-%{release} %systempkg_req -Obsoletes: qemu-kvm-system-ppc +Obsoletes: qemu-kvm-system-ppc < 2 %description system-ppc QEMU is a generic and open source processor emulator which achieves a @@ -660,7 +697,7 @@ Summary(pl.UTF-8): QEMU - emulator systemu z procesorem S390x (IBM Z) Group: Applications/Emulators Requires: %{name}-common = %{version}-%{release} %systempkg_req -Obsoletes: qemu-kvm-system-s390x +Obsoletes: qemu-kvm-system-s390x < 2 %description system-s390x QEMU is a generic and open source processor emulator which achieves a @@ -680,7 +717,7 @@ Summary(pl.UTF-8): QEMU - emulator systemu z procesorem SH4 Group: Applications/Emulators Requires: %{name}-common = %{version}-%{release} %systempkg_req -Obsoletes: qemu-kvm-system-sh4 +Obsoletes: qemu-kvm-system-sh4 < 2 %description system-sh4 QEMU is a generic and open source processor emulator which achieves a @@ -700,7 +737,7 @@ Summary(pl.UTF-8): QEMU - emulator systemu z procesorem SPARC Group: Applications/Emulators Requires: %{name}-common = %{version}-%{release} %systempkg_req -Obsoletes: qemu-kvm-system-sparc +Obsoletes: qemu-kvm-system-sparc < 2 %description system-sparc QEMU is a generic and open source processor emulator which achieves a @@ -727,7 +764,7 @@ good emulation speed by using dynamic translation. This package provides the system emulator with TriCore CPU. -%description system-sparc -l pl.UTF-8 +%description system-tricore -l pl.UTF-8 QEMU to ogólny, mający otwarte źródła emulator procesora, osiągający dobrą szybkość emulacji dzięki użyciu translacji dynamicznej. @@ -740,8 +777,8 @@ Group: Applications/Emulators Requires: %{name}-common = %{version}-%{release} %{?with_system_seabios:Requires: seabios} %systempkg_req -Obsoletes: kvm -Obsoletes: qemu-kvm-system-x86 +Obsoletes: kvm < 89 +Obsoletes: qemu-kvm-system-x86 < 2 %description system-x86 QEMU is a generic and open source processor emulator which achieves a @@ -761,7 +798,7 @@ Summary(pl.UTF-8): QEMU - emulator systemu z procesorem Xtensa Group: Applications/Emulators Requires: %{name}-common = %{version}-%{release} %systempkg_req -Obsoletes: qemu-kvm-system-xtensa +Obsoletes: qemu-kvm-system-xtensa < 2 %description system-xtensa QEMU is a generic and open source processor emulator which achieves a @@ -779,8 +816,9 @@ Ten pakiet zawiera emulator systemu z procesorem Xtensa. Summary: QEMU guest agent Summary(pl.UTF-8): Agent gościa QEMU Group: Daemons -Requires: glib2 >= 1:2.48 -Obsoletes: qemu-kvm-guest-agent +Requires: glib2 >= 1:2.64 +Requires: liburing >= 0.3 +Obsoletes: qemu-kvm-guest-agent < 2 Conflicts: SysVinit < 2.96-2 %description guest-agent @@ -803,11 +841,24 @@ systemach-gościach, komunikującego się kanałem virtio-serial o nazwie Ten pakiet nie musi być zainstalowany w systemie hosta. +%package module-audio-jack +Summary: QEMU module for JACK audio output +Summary(pl.UTF-8): Moduł QEMU z wyjściem dźwięku JACK +Group: Applications/Emulators +Requires: %{name}-common = %{version}-%{release} + +%description module-audio-jack +QEMU module for JACK audio output. + +%description module-audio-jack -l pl.UTF-8 +Moduł QEMU z wyjściem dźwięku JACK. + %package module-block-curl Summary: QEMU module for 'curl' block devices Summary(pl.UTF-8): Moduł QEMU dla urządeń blokowych typu 'curl' Group: Applications/Emulators Requires: %{name}-common = %{version}-%{release} +Requires: curl-libs >= 7.29.0 %description module-block-curl QEMU block device support for CURL. It allows to access remote disks @@ -865,6 +916,7 @@ Summary: QEMU module for 'rbd' block devices Summary(pl.UTF-8): Moduł QEMU dla urządeń blokowych typu 'rbd' Group: Applications/Emulators Requires: %{name}-common = %{version}-%{release} +Requires: ceph-libs >= 12 %description module-block-rbd QEMU block device support for Ceph/RBD volumes. @@ -877,7 +929,7 @@ Summary: QEMU module for 'ssh' block devices Summary(pl.UTF-8): Moduł QEMU dla urządeń blokowych typu 'ssh' Group: Applications/Emulators Requires: %{name}-common = %{version}-%{release} -Requires: libssh >= 0.8 +Requires: libssh >= 0.8.7 %description module-block-ssh QEMU block device support for accessing remote disks using the Secure @@ -887,6 +939,18 @@ Shell (SSH) protocol. Moduł urządzeń blokowych QEMU do dostępu do zdalnych dysków poprzez protokół SSH (Secure Shell). +%package module-ui-dbus +Summary: QEMU DBus UI driver +Summary(pl.UTF-8): Sterownik interfejsu użytkownika DBus dla QEMU +Group: Applications/Emulators +Requires: %{name}-common = %{version}-%{release} + +%description module-ui-dbus +QEMU DBus UI driver. + +%description module-ui-dbus -l pl.UTF-8 +Sterownik interfejsu użytkownika DBus dla QEMU. + %package module-ui-gtk Summary: QEMU GTK UI driver Summary(pl.UTF-8): Sterownik interfejsu użytkownika GTK dla QEMU @@ -935,7 +999,7 @@ Sondy systemtap/dtrace dla QEMU. %if %{with systemtap} # don't require stap binary during build -%{__sed} -i -e "s/has 'stap'/true/" configure +%{__sed} -i -e "s/stap.found()/true/" meson.build docs/meson.build scripts/meson.build %endif %build @@ -971,10 +1035,11 @@ build() { build dynamic \ --extra-cflags="%{rpmcflags} %{rpmcppflags}" \ --extra-ldflags="%{rpmldflags} -Wl,-z,relro -Wl,-z,now" \ - --audio-drv-list="alsa%{?with_oss:,oss}%{?with_sdl:,sdl}%{?with_pulseaudio:,pa}" \ + --audio-drv-list="alsa,jack%{?with_oss:,oss}%{?with_pulseaudio:,pa}%{?with_sdl:,sdl}" \ --enable-attr \ %{__enable_disable brlapi} \ --enable-cap-ng \ + --enable-capstone \ --enable-curl \ --enable-curses \ --enable-docs \ @@ -993,6 +1058,7 @@ build dynamic \ %{__enable_disable rdma} \ %{__enable_disable sdl} \ %{__enable_disable seccomp} \ + --enable-slirp=system \ %{__enable_disable spice} \ %{__enable_disable smartcard} \ %{__enable_disable snappy} \ @@ -1025,6 +1091,7 @@ build static \ --disable-nettle \ --disable-pie \ --disable-sdl \ + --disable-slirp \ --disable-spice \ --disable-system \ --disable-tools \ @@ -1091,12 +1158,6 @@ install -p %{SOURCE14} $RPM_BUILD_ROOT/etc/logrotate.d/qemu-ga %if %{with system_seabios} ln -sf /usr/share/seabios/bios.bin $RPM_BUILD_ROOT%{_datadir}/%{name}/bios-256k.bin # bios.bin provided by qemu is stripped to 128k, with no Xen support, keep it -for f in $RPM_BUILD_ROOT%{_datadir}/%{name}/*.aml ; do - bn="$(basename $f)" - if [ -e "/usr/share/seabios/$bn" ] ; then - ln -sf "/usr/share/seabios/$bn" "$f" - fi -done %endif %if %{with gtk3} @@ -1107,11 +1168,20 @@ done : > qemu.lang %endif +for t in client server; do + cp -p build-dynamic/contrib/ivshmem-$t/ivshmem-$t $RPM_BUILD_ROOT%{_bindir} +done + +# test modules +%{__rm} $RPM_BUILD_ROOT%{_libdir}/%{name}/accel-qtest-*.so # Windows installer icon, not used %{__rm} $RPM_BUILD_ROOT%{_datadir}/%{name}/qemu-nsis.bmp # packaged as %doc %{__rm} $RPM_BUILD_ROOT%{_datadir}/%{name}/edk2-licenses.txt +# cleanup Sphinx files +%{__rm} $RPM_BUILD_ROOT%{_docdir}/qemu/{.buildinfo,objects.inv} + %clean rm -rf $RPM_BUILD_ROOT @@ -1164,14 +1234,11 @@ fi %attr(755,root,root) %{_libexecdir}/vhost-user-gpu %endif %attr(755,root,root) %{_libexecdir}/virtfs-proxy-helper -%attr(755,root,root) %{_libexecdir}/virtiofsd %dir %{_libdir}/%{name} # modules without too many external dependencies %attr(755,root,root) %{_libdir}/%{name}/block-dmg-bz2.so %attr(755,root,root) %{_libdir}/%{name}/block-dmg-lzfse.so %attr(755,root,root) %{_libdir}/%{name}/audio-alsa.so -%attr(755,root,root) %{_libdir}/%{name}/audio-dbus.so -%attr(755,root,root) %{_libdir}/%{name}/audio-jack.so %if %{with oss} %attr(755,root,root) %{_libdir}/%{name}/audio-oss.so %endif @@ -1194,7 +1261,6 @@ fi %attr(755,root,root) %{_libdir}/%{name}/hw-usb-redirect.so %attr(755,root,root) %{_libdir}/%{name}/hw-usb-smartcard.so %attr(755,root,root) %{_libdir}/%{name}/ui-curses.so -%attr(755,root,root) %{_libdir}/%{name}/ui-dbus.so %attr(755,root,root) %{_libdir}/%{name}/ui-egl-headless.so %if %{with opengl} %attr(755,root,root) %{_libdir}/%{name}/ui-opengl.so @@ -1211,7 +1277,6 @@ fi %if %{with virgl} %{_datadir}/%{name}/vhost-user/50-qemu-gpu.json %endif -%{_datadir}/%{name}/vhost-user/50-qemu-virtiofsd.json %{_desktopdir}/qemu.desktop %{_iconsdir}/hicolor/*x*/apps/qemu.png %{_iconsdir}/hicolor/32x32/apps/qemu.bmp @@ -1219,7 +1284,6 @@ fi %{_mandir}/man1/qemu.1* %{_mandir}/man1/qemu-storage-daemon.1* %{_mandir}/man1/virtfs-proxy-helper.1* -%{_mandir}/man1/virtiofsd.1* %{_mandir}/man7/qemu-block-drivers.7* %{_mandir}/man7/qemu-cpu-models.7* %{_mandir}/man7/qemu-qmp-ref.7* @@ -1237,6 +1301,11 @@ fi %attr(755,root,root) %{_bindir}/qemu-img %{_mandir}/man1/qemu-img.1* +%files ivshmem +%defattr(644,root,root,755) +%attr(755,root,root) %{_bindir}/ivshmem-client +%attr(755,root,root) %{_bindir}/ivshmem-server + %files user %defattr(644,root,root,755) %attr(755,root,root) %{_bindir}/qemu-aarch64 @@ -1499,7 +1568,6 @@ fi %{_datadir}/%{name}/pxe-rtl8139.rom %{_datadir}/%{name}/pxe-virtio.rom %{_datadir}/%{name}/qboot.rom -%{_datadir}/%{name}/sgabios.bin %{_datadir}/%{name}/vgabios.bin %{_datadir}/%{name}/vgabios-ati.bin %{_datadir}/%{name}/vgabios-bochs-display.bin @@ -1532,6 +1600,10 @@ fi %{_mandir}/man7/qemu-ga-ref.7* %{_mandir}/man8/qemu-ga.8* +%files module-audio-jack +%defattr(644,root,root,755) +%attr(755,root,root) %{_libdir}/%{name}/audio-jack.so + %files module-block-curl %defattr(644,root,root,755) %attr(755,root,root) %{_libdir}/%{name}/block-curl.so @@ -1564,6 +1636,11 @@ fi %defattr(644,root,root,755) %attr(755,root,root) %{_libdir}/%{name}/block-ssh.so +%files module-ui-dbus +%defattr(644,root,root,755) +%attr(755,root,root) %{_libdir}/%{name}/audio-dbus.so +%attr(755,root,root) %{_libdir}/%{name}/ui-dbus.so + %if %{with gtk3} %files module-ui-gtk %defattr(644,root,root,755) -- 2.46.0