-# TODO:
-# - merge missing bits from qemu-kvm
#
# Conditional build:
%bcond_without sdl # SDL UI and audio support
Summary: QEMU CPU Emulator
Summary(pl.UTF-8): QEMU - emulator procesora
Name: qemu
-Version: 1.6.1
-Release: 3
+Version: 1.7.1
+Release: 1
License: GPL v2+
Group: Applications/Emulators
Source0: http://wiki.qemu-project.org/download/%{name}-%{version}.tar.bz2
-# Source0-md5: 3a897d722457c5a895cd6ac79a28fda0
-Source11: qemu-guest-agent.service
-Source12: 99-qemu-guest-agent.rules
+# Source0-md5: 9541063d999cf9659ed7fdce71314f31
+Source2: %{name}.binfmt
+# Loads kvm kernel modules at boot
+Source3: kvm-modules-load.conf
+# Creates /dev/kvm
+Source4: 80-kvm.rules
+# KSM control scripts
+Source5: ksm.service
+Source6: ksm.sysconfig
+Source7: ksmctl.c
+Source8: ksmtuned.service
+Source9: ksmtuned
+Source10: ksmtuned.conf
+Source11: %{name}-guest-agent.service
+Source12: 99-%{name}-guest-agent.rules
Patch0: %{name}-cflags.patch
Patch1: vgabios-widescreens.patch
Patch2: %{name}-whitelist.patch
Patch3: %{name}-system-libcacard.patch
+Patch4: vmdk3ro.patch
+Patch5: %{name}-xattr.patch
# Proof of concept, for reference, do not remove
-Patch4: %{name}-kde_virtual_workspaces_hack.patch
+Patch400: %{name}-kde_virtual_workspaces_hack.patch
URL: http://www.qemu-project.org/
%{?with_opengl:BuildRequires: OpenGL-GLX-devel}
%{?with_sdl:BuildRequires: SDL-devel >= 1.2.1}
BuildRequires: alsa-lib-devel
-BuildRequires: bcc
+BuildRequires: bcc
BuildRequires: bluez-libs-devel
BuildRequires: brlapi-devel
%{?with_ceph:BuildRequires: ceph-devel}
BuildRequires: perl-tools-pod
BuildRequires: pkgconfig
%{?with_pulseaudio:BuildRequires: pulseaudio-devel}
-BuildRequires: rpmbuild(macros) >= 1.202
+BuildRequires: rpmbuild(macros) >= 1.644
BuildRequires: sed >= 4.0
%if %{with spice}
BuildRequires: spice-protocol >= 0.12.0
Summary: QEMU common files needed by all QEMU targets
Summary(pl.UTF-8): Wspólne pliki QEMU wymagane przez wszystkie środowiska QEMU
Group: Development/Tools
+Requires(post,preun,postun): systemd-units >= 38
Requires(postun): /usr/sbin/groupdel
Requires(postun): /usr/sbin/userdel
Requires(pre): /bin/id
Requires(pre): /usr/sbin/useradd
Requires: glib2 >= 1:2.12
Requires: libssh2 >= 1.2.8
+Requires: systemd-units >= 38
Provides: group(qemu)
Provides: user(qemu)
Obsoletes: qemu-kvm-common
Summary: QEMU command line tool for manipulating disk images
Summary(pl.UTF-8): Narzędzie QEMU do operacji na obrazach dysków
Group: Development/Tools
-Conflicts: qemu < 1.0-2
Obsoletes: qemu-kvm-img
+Conflicts: qemu < 1.0-2
%description img
This package provides a command line tool for manipulating disk
Summary(pl.UTF-8): QEMU - emulacja trybu użytkownika środowisk qemu
Group: Development/Tools
Requires: %{name}-common = %{version}-%{release}
+Requires(post,postun): systemd-units >= 38
+Requires: systemd-units >= 38
Obsoletes: qemu-kvm-user
%description user
Group: Development/Tools
Requires: %{name}-common = %{version}-%{release}
%systempkg_req
+Obsoletes: kvm
Obsoletes: qemu-kvm-system-x86
%description system-x86
Obsoletes: qemu-kvm-guest-agent
%description guest-agent
-QEMU is a generic and open source processor emulator which achieves
-a good emulation speed by using dynamic translation.
+QEMU is a generic and open source processor emulator which achieves a
+good emulation speed by using dynamic translation.
This package provides an agent to run inside guests, which
communicates with the host over a virtio-serial channel named
%patch1 -p1
%patch2 -p0
%patch3 -p1
+%patch4 -p1
+%patch5 -p1
%{__mv} libcacard libcacard-use-system-lib
--enable-fdt \
%{__enable_disable glusterfs} \
--enable-libiscsi \
- --enable-mixemu \
%{__enable_disable glx} \
%{__enable_disable ceph rbd} \
%{__enable_disable rdma} \
--enable-vnc-png \
--enable-vnc-sasl \
--enable-vnc-tls \
+ --enable-kvm \
%{__enable_disable xen} \
--audio-drv-list="alsa%{?with_iss:,oss}%{?with_sdl:,sdl}%{?with_esd:,esd}%{?with_pulseaudio:,pa}" \
--interp-prefix=%{_libdir}/qemu/lib-%%M \
# rebuild patched vesa tables with additional widescreen modes.
%{__make} -C roms/vgabios stdvga-bios
+%{__cc} %{SOURCE7} %{rpmcflags} -o ksmctl
+
%install
rm -rf $RPM_BUILD_ROOT
+install -d $RPM_BUILD_ROOT{%{systemdunitdir},/usr/lib/binfmt.d} \
+ $RPM_BUILD_ROOT/etc/{sysconfig,udev/rules.d,modules-load.d} \
+ $RPM_BUILD_ROOT{%{_sysconfdir}/sasl,%{_sbindir}}
%{__make} install \
DESTDIR=$RPM_BUILD_ROOT \
EOF
+install -p qemu.sasl $RPM_BUILD_ROOT%{_sysconfdir}/sasl/qemu.conf
+
+%ifarch %{ix86} %{x8664}
+install -p scripts/kvm/kvm_stat $RPM_BUILD_ROOT%{_bindir}
+install -p %{SOURCE3} $RPM_BUILD_ROOT/etc/modules-load.d/kvm.conf
+install -p %{SOURCE4} $RPM_BUILD_ROOT%{_sysconfdir}/udev/rules.d
+%endif
+
+install -p %{SOURCE5} $RPM_BUILD_ROOT%{systemdunitdir}/ksm.service
+install -p %{SOURCE6} $RPM_BUILD_ROOT/etc/sysconfig/ksm
+install -p ksmctl $RPM_BUILD_ROOT%{_sbindir}
+
+install -p %{SOURCE8} $RPM_BUILD_ROOT%{systemdunitdir}/ksmtuned.service
+install -p %{SOURCE9} $RPM_BUILD_ROOT%{_sbindir}/ksmtuned
+install -p %{SOURCE10} $RPM_BUILD_ROOT%{_sysconfdir}/ksmtuned.conf
+
# For the qemu-guest-agent subpackage install the systemd
# service and udev rules.
install -p %{SOURCE11} $RPM_BUILD_ROOT%{systemdunitdir}
install -p %{SOURCE12} $RPM_BUILD_ROOT%{_sysconfdir}/udev/rules.d
-# already packaged
+for i in dummy \
+%ifnarch %{ix86} %{x8664}
+ qemu-i386 \
+%endif
+%ifnarch arm
+ qemu-arm \
+%endif
+%ifnarch ppc ppc64
+ qemu-ppc \
+%endif
+%ifnarch sparc sparc64
+ qemu-sparc \
+%endif
+%ifnarch sh4
+ qemu-sh4 \
+%endif
+; do
+ test $i = dummy && continue
+ grep /$i:\$ %{SOURCE2} > $RPM_BUILD_ROOT/usr/lib/binfmt.d/$i.conf
+done < %{SOURCE2}
+
+# packaged as %doc
%{__rm} $RPM_BUILD_ROOT%{_docdir}/qemu/qemu-{doc,tech}.html
%{__rm} $RPM_BUILD_ROOT%{_docdir}/qemu/qmp-commands.txt
# install patched vesa tables with additional widescreen modes.
cp -p roms/vgabios/VGABIOS-lgpl-latest.stdvga.bin $RPM_BUILD_ROOT%{_datadir}/%{name}/vgabios-stdvga.bin
-%{__mv} $RPM_BUILD_ROOT%{_datadir}/locale/{de_DE,de}
-%{__mv} $RPM_BUILD_ROOT%{_datadir}/locale/{fr_FR,fr}
+%{__mv} $RPM_BUILD_ROOT%{_localedir}/{de_DE,de}
+%{__mv} $RPM_BUILD_ROOT%{_localedir}/{fr_FR,fr}
%find_lang %{name}
%clean
rm -rf $RPM_BUILD_ROOT
%pre common
+%groupadd -g 160 kvm
%groupadd -g 276 qemu
-%useradd -u 276 -g qemu -c "QEMU User" qemu
+%useradd -u 276 -g qemu -G kvm -c "QEMU User" qemu
+
+%post common
+%systemd_post ksm.service
+%systemd_post ksmtuned.service
+
+%preun common
+%systemd_preun ksm.service
+%systemd_preun ksmtuned.service
%postun common
if [ "$1" = "0" ]; then
%userremove qemu
%groupremove qemu
+ %groupremove kvm
fi
+%systemd_reload
+
+%triggerpostun common -- qemu-common < 1.6.1-4
+%systemd_trigger ksm.service
+%systemd_trigger ksmtuned.service
+
+%post user
+%systemd_service_restart systemd-binfmt.service
+
+%postun user
+%systemd_service_restart systemd-binfmt.service
%post guest-agent
%systemd_reload
%files common -f %{name}.lang
%defattr(644,root,root,755)
-%doc README qemu-doc.html qemu-tech.html QMP/qmp-commands.txt
+%doc README qemu-doc.html qemu-tech.html qmp-commands.txt
%attr(755,root,root) %config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/qemu-ifup
%config(noreplace) %verify(not md5 mtime size) %{_sysconfdir}/qemu/target-*.conf
+%config(noreplace) %verify(not md5 mtime size) /etc/ksmtuned.conf
+%config(noreplace) %verify(not md5 mtime size) /etc/sasl/qemu.conf
+%config(noreplace) %verify(not md5 mtime size) /etc/sysconfig/ksm
+%{systemdunitdir}/ksm.service
+%{systemdunitdir}/ksmtuned.service
%dir %{_sysconfdir}/qemu
%attr(755,root,root) %{_bindir}/virtfs-proxy-helper
%attr(755,root,root) %{_bindir}/qemu-nbd
%attr(755,root,root) %{_libdir}/qemu-bridge-helper
+%attr(755,root,root) %{_sbindir}/ksmctl
+%attr(755,root,root) %{_sbindir}/ksmtuned
%{_mandir}/man1/qemu.1*
%{_mandir}/man1/virtfs-proxy-helper.1*
%{_mandir}/man8/qemu-nbd.8*
%files user
%defattr(644,root,root,755)
+/usr/lib/binfmt.d/qemu-*.conf
%attr(755,root,root) %{_bindir}/qemu-alpha
%attr(755,root,root) %{_bindir}/qemu-arm
%attr(755,root,root) %{_bindir}/qemu-armeb
%defattr(644,root,root,755)
%attr(755,root,root) %{_bindir}/qemu-system-i386
%attr(755,root,root) %{_bindir}/qemu-system-x86_64
+%ifarch %{ix86} %{x8664}
+%config(noreplace) %verify(not md5 mtime size) /etc/modules-load.d/kvm.conf
+%config(noreplace) %verify(not md5 mtime size) /etc/udev/rules.d/80-kvm.rules
+%attr(755,root,root) %{_bindir}/kvm_stat
+%endif
%files system-xtensa
%defattr(644,root,root,755)
%attr(755,root,root) %{_bindir}/qemu-system-xtensaeb
%files guest-agent
+%defattr(644,root,root,755)
%config(noreplace) %verify(not md5 mtime size) /etc/udev/rules.d/99-qemu-guest-agent.rules
%{systemdunitdir}/qemu-guest-agent.service
%attr(755,root,root) %{_bindir}/qemu-ga