[qemu/f16] - Require seabios-bin >= 0.6.0-2 (#741992) - Replace init scripts with systemd units (#741920) - Upd

Justin M. Forbes jforbes at fedoraproject.org
Fri Oct 21 20:32:40 UTC 2011


commit 2a5d7215d6a0e99ca801d56742614fb8f112b3c7
Author: Justin M. Forbes <jforbes at redhat.com>
Date:   Fri Oct 21 15:32:18 2011 -0500

    - Require seabios-bin >= 0.6.0-2 (#741992)
    - Replace init scripts with systemd units (#741920)
    - Update to 0.15.1 stable upstream
    - Enable full relro and PIE (rhbz #738812)

 .gitignore       |    1 +
 ksm.init         |  104 -----------------------------------------------------
 ksm.service      |   10 +++++
 ksmctl.c         |   77 +++++++++++++++++++++++++++++++++++++++
 ksmtuned.init    |   94 ------------------------------------------------
 ksmtuned.service |   12 ++++++
 qemu.binfmt      |    6 +++
 qemu.init        |  102 ----------------------------------------------------
 qemu.spec        |  105 ++++++++++++++++++++++++++++++++++-------------------
 sources          |    2 +-
 10 files changed, 174 insertions(+), 339 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 8c3b708..b5d4127 100644
--- a/.gitignore
+++ b/.gitignore
@@ -9,3 +9,4 @@ qemu-kvm-0.13.0-25fdf4a.tar.gz
 /qemu-kvm-0.15.0-59fadcc.tar.gz
 /qemu-kvm-0.15.0-0af4922.tar.gz
 /qemu-kvm-0.15.0.tar.gz
+/qemu-kvm-0.15.1.tar.gz
diff --git a/ksm.service b/ksm.service
new file mode 100644
index 0000000..386240c
--- /dev/null
+++ b/ksm.service
@@ -0,0 +1,10 @@
+[Unit]
+Description=Kernel Samepage Merging
+ConditionPathExists=/sys/kernel/mm/ksm
+
+[Service]
+Type=oneshot
+RemainAfterExit=yes
+EnvironmentFile=-/etc/sysconfig/ksm
+ExecStart=/lib/systemd/ksmctl start
+ExecStop=/lib/systemd/ksmctl stop
diff --git a/ksmctl.c b/ksmctl.c
new file mode 100644
index 0000000..af39591
--- /dev/null
+++ b/ksmctl.c
@@ -0,0 +1,77 @@
+/* Start/stop KSM, for systemd.
+ * Copyright (C) 2009, 2011 Red Hat, Inc.
+ * Written by Paolo Bonzini <pbonzini at redhat.com>.
+ * Based on the original sysvinit script by Dan Kenigsberg <danken at redhat.com>
+ * This file is distributed under the GNU General Public License, version 2
+ * or later.  */
+
+#include <unistd.h>
+#include <stdio.h>
+#include <limits.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define KSM_MAX_KERNEL_PAGES_FILE "/sys/kernel/mm/ksm/max_kernel_pages"
+#define KSM_RUN_FILE		  "/sys/kernel/mm/ksm/run"
+
+char *program_name;
+
+int usage(void)
+{
+	fprintf(stderr, "Usage: %s {start|stop}\n", program_name);
+	return 1;
+}
+
+int write_value(uint64_t value, char *filename)
+{
+	FILE *fp;
+	if (!(fp = fopen(filename, "w")) ||
+	    fprintf(fp, "%llu\n", (unsigned long long) value) == EOF ||
+	    fflush(fp) == EOF ||
+	    fclose(fp) == EOF)
+		return 1;
+
+	return 0;
+}
+
+uint64_t ksm_max_kernel_pages()
+{
+	char *var = getenv("KSM_MAX_KERNEL_PAGES");
+	char *endptr;
+	uint64_t value;
+	if (var && *var) {
+		value = strtoll(var, &endptr, 0);
+		if (value < LLONG_MAX && !*endptr)
+			return value;
+	}
+	/* Unless KSM_MAX_KERNEL_PAGES is set, let KSM munch up to half of
+	 * total memory.  */
+	return sysconf(_SC_PHYS_PAGES) / 2;
+}
+
+int start(void)
+{
+	if (access(KSM_MAX_KERNEL_PAGES_FILE, R_OK) >= 0)
+		write_value(ksm_max_kernel_pages(), KSM_MAX_KERNEL_PAGES_FILE);
+	return write_value(1, KSM_RUN_FILE);
+}
+
+int stop(void)
+{
+	return write_value(0, KSM_RUN_FILE);
+}
+
+int main(int argc, char **argv)
+{
+	program_name = argv[0];
+	if (argc < 2) {
+		return usage();
+	} else if (!strcmp(argv[1], "start")) {
+		return start();
+	} else if (!strcmp(argv[1], "stop")) {
+		return stop();
+	} else {
+		return usage();
+	}
+}
diff --git a/ksmtuned.service b/ksmtuned.service
new file mode 100644
index 0000000..39febcc
--- /dev/null
+++ b/ksmtuned.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=Kernel Samepage Merging (KSM) Tuning Daemon
+After=ksm.service
+Requires=ksm.service
+
+[Service]
+ExecStart=/usr/sbin/ksmtuned
+ExecReload=/bin/kill -USR1 $MAINPID
+Type=forking
+
+[Install]
+WantedBy=multi-user.target
diff --git a/qemu.binfmt b/qemu.binfmt
new file mode 100644
index 0000000..9078b60
--- /dev/null
+++ b/qemu.binfmt
@@ -0,0 +1,6 @@
+:qemu-i386:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x03\x00:\xff\xff\xff\xff\xff\xfe\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfa\xff\xff\xff:/usr/bin/qemu-i386:
+:qemu-i486:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x06\x00:\xff\xff\xff\xff\xff\xfe\xfe\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfa\xff\xff\xff:/usr/bin/qemu-i386:
+:qemu-arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfa\xff\xff\xff:/usr/bin/qemu-arm:
+:qemu-ppc:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x14:\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfa\xff\xff\xff:/usr/bin/qemu-ppc:
+:qemu-sparc:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x02:\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfa\xff\xff\xff:/usr/bin/qemu-sparc:
+:qemu-sh4:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x2a\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfa\xff\xff\xff:/usr/bin/qemu-sh4:
diff --git a/qemu.spec b/qemu.spec
index e0b83f1..638edca 100644
--- a/qemu.spec
+++ b/qemu.spec
@@ -1,7 +1,7 @@
 Summary: QEMU is a FAST! processor emulator
 Name: qemu
-Version: 0.15.0
-Release: 6%{?dist}
+Version: 0.15.1
+Release: 1%{?dist}
 # Epoch because we pushed a qemu-1.0 package
 Epoch: 2
 License: GPLv2+ and LGPLv2+ and BSD
@@ -19,7 +19,7 @@ URL: http://www.qemu.org/
 
 Source0: http://downloads.sourceforge.net/sourceforge/kvm/qemu-kvm-%{version}.tar.gz
 
-Source1: qemu.init
+Source1: qemu.binfmt
 
 # Loads kvm kernel modules at boot
 Source2: kvm.modules
@@ -28,11 +28,12 @@ Source2: kvm.modules
 Source3: 80-kvm.rules
 
 # KSM control scripts
-Source4: ksm.init
+Source4: ksm.service
 Source5: ksm.sysconfig
-Source6: ksmtuned.init
-Source7: ksmtuned
-Source8: ksmtuned.conf
+Source6: ksmctl.c
+Source7: ksmtuned.service
+Source8: ksmtuned
+Source9: ksmtuned.conf
 
 Source10: qemu-guest-agent.service
 Source11: 99-qemu-guest-agent.rules
@@ -210,7 +211,7 @@ Requires: %{name}-common = %{epoch}:%{version}-%{release}
 Provides: kvm = 85
 Obsoletes: kvm < 85
 Requires: vgabios >= 0.6c-2
-Requires: seabios-bin
+Requires: seabios-bin >= 0.6.0-2
 Requires: /usr/share/gpxe/8086100e.rom
 Requires: /usr/share/gpxe/rtl8029.rom
 Requires: /usr/share/gpxe/pcnet32.rom
@@ -354,8 +355,8 @@ sed -i.debug 's/"-g $CFLAGS"/"$CFLAGS"/g' configure
             --sysconfdir=%{_sysconfdir} \
             --audio-drv-list=pa,sdl,alsa,oss \
             --disable-strip \
-            --extra-ldflags=$extraldflags \
-            --extra-cflags="%{optflags}" \
+            --extra-ldflags="$extraldflags -pie -Wl,-z,relro -Wl,-z,now" \
+            --extra-cflags="%{optflags} -fPIE -DPIE" \
 %ifarch x86_64
             --enable-spice \
 %endif
@@ -385,8 +386,8 @@ make clean
     --audio-drv-list=pa,sdl,alsa,oss \
     --disable-kvm \
     --disable-strip \
-    --extra-ldflags=$extraldflags \
-    --extra-cflags="%{optflags}" \
+    --extra-ldflags="$extraldflags -pie -Wl,-z,relro -Wl,-z,now" \
+    --extra-cflags="%{optflags} -fPIE -DPIE" \
     --disable-xen \
 %ifarch x86_64
     --enable-spice \
@@ -401,15 +402,19 @@ echo "==="
 
 make V=1 %{?_smp_mflags} $buildldflags
 
+gcc %{SOURCE6} -O2 -g -o ksmctl
+
+
 %install
 rm -rf $RPM_BUILD_ROOT
 
-install -D -p -m 0755 %{SOURCE4} $RPM_BUILD_ROOT%{_initddir}/ksm
+install -D -p -m 0755 %{SOURCE4} $RPM_BUILD_ROOT/lib/systemd/system/ksm.service
 install -D -p -m 0644 %{SOURCE5} $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/ksm
+install -D -p -m 0755 ksmctl $RPM_BUILD_ROOT/lib/systemd/ksmctl
 
-install -D -p -m 0755 %{SOURCE6} $RPM_BUILD_ROOT%{_initddir}/ksmtuned
-install -D -p -m 0755 %{SOURCE7} $RPM_BUILD_ROOT%{_sbindir}/ksmtuned
-install -D -p -m 0644 %{SOURCE8} $RPM_BUILD_ROOT%{_sysconfdir}/ksmtuned.conf
+install -D -p -m 0755 %{SOURCE7} $RPM_BUILD_ROOT/lib/systemd/system/ksmtuned.service
+install -D -p -m 0755 %{SOURCE8} $RPM_BUILD_ROOT%{_sbindir}/ksmtuned
+install -D -p -m 0644 %{SOURCE9} $RPM_BUILD_ROOT%{_sysconfdir}/ksmtuned.conf
 
 %ifarch %{ix86} x86_64
 mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/modules
@@ -433,7 +438,6 @@ make prefix="${RPM_BUILD_ROOT}%{_prefix}" \
      datadir="${RPM_BUILD_ROOT}%{_datadir}/%{name}" \
      sysconfdir="${RPM_BUILD_ROOT}%{_sysconfdir}" install
 chmod -x ${RPM_BUILD_ROOT}%{_mandir}/man1/*
-install -D -p -m 0755 %{SOURCE1} $RPM_BUILD_ROOT%{_initddir}/qemu
 install -D -p -m 0644 -t ${RPM_BUILD_ROOT}%{qemudocdir} Changelog README TODO COPYING COPYING.LIB LICENSE
 
 install -D -p -m 0644 qemu.sasl $RPM_BUILD_ROOT%{_sysconfdir}/sasl2/qemu.conf
@@ -472,6 +476,30 @@ ln -s ../vgabios/VGABIOS-lgpl-latest.stdvga.bin %{buildroot}/%{_datadir}/%{name}
 ln -s ../vgabios/VGABIOS-lgpl-latest.vmware.bin %{buildroot}/%{_datadir}/%{name}/vgabios-vmware.bin
 ln -s ../seabios/bios.bin %{buildroot}/%{_datadir}/%{name}/bios.bin
 
+mkdir -p $RPM_BUILD_ROOT%{_exec_prefix}/lib/binfmt.d
+for i in dummy \
+%ifnarch %{ix86} x86_64
+    qemu-i386 \
+%endif
+%if !%{with_x86only}
+%ifnarch arm
+    qemu-arm \
+%endif
+%ifnarch ppc ppc64
+    qemu-ppc \
+%endif
+%ifnarch sparc sparc64
+    qemu-sparc \
+%endif
+%ifnarch sh4
+    qemu-sh4 \
+%endif
+%endif
+; do
+  test $i = dummy && continue
+  grep /$i:\$ %{SOURCE1} > $RPM_BUILD_ROOT%{_exec_prefix}/lib/binfmt.d/$i.conf
+  chmod 644 $RPM_BUILD_ROOT%{_exec_prefix}/lib/binfmt.d/$i.conf
+done < %{SOURCE1}
 
 # For the qemu-guest-agent subpackage install the systemd
 # service and udev rules.
@@ -498,36 +526,28 @@ getent passwd qemu >/dev/null || \
   useradd -r -u 107 -g qemu -G kvm -d / -s /sbin/nologin \
     -c "qemu user" qemu
 
-/sbin/chkconfig --add ksm
-/sbin/chkconfig --add ksmtuned
+/bin/systemctl --global enable ksm.service
+/bin/systemctl --global enable ksmtuned.service
 
 %preun common
 if [ $1 -eq 0 ]; then
-    /sbin/service ksmtuned stop &>/dev/null || :
-    /sbin/chkconfig --del ksmtuned
-    /sbin/service ksm stop &>/dev/null || :
-    /sbin/chkconfig --del ksm
+    /bin/systemctl --system stop ksmtuned.service &>/dev/null || :
+    /bin/systemctl --system stop ksm.service &>/dev/null || :
+    /bin/systemctl --global disable ksmtuned.service
+    /bin/systemctl --global disable ksm.service
 fi
 
 %postun common
 if [ $1 -ge 1 ]; then
-    /sbin/service ksm condrestart &>/dev/null || :
-    /sbin/service ksmtuned condrestart &>/dev/null || :
+    /bin/systemctl --system try-restart ksm.service &>/dev/null || :
+    /bin/systemctl --system try-restart ksmtuned.service &>/dev/null || :
 fi
 
 %post user
-/sbin/chkconfig --add qemu
-
-%preun user
-if [ $1 -eq 0 ]; then
-    /sbin/service qemu stop &>/dev/null || :
-    /sbin/chkconfig --del qemu
-fi
+/bin/systemctl --system try-restart systemd-binfmt.service &>/dev/null || :
 
 %postun user
-if [ $1 -ge 1 ]; then
-    /sbin/service qemu condrestart &>/dev/null || :
-fi
+/bin/systemctl --system try-restart systemd-binfmt.service &>/dev/null || :
 
 %files
 %defattr(-,root,root)
@@ -552,9 +572,10 @@ fi
 %{_mandir}/man8/qemu-nbd.8*
 %{_bindir}/qemu-nbd
 %config(noreplace) %{_sysconfdir}/sasl2/qemu.conf
-%{_initddir}/ksm
+/lib/systemd/system/ksm.service
+/lib/systemd/ksmctl
 %config(noreplace) %{_sysconfdir}/sysconfig/ksm
-%{_initddir}/ksmtuned
+/lib/systemd/system/ksmtuned.service
 %{_sbindir}/ksmtuned
 %config(noreplace) %{_sysconfdir}/ksmtuned.conf
 %dir %{_sysconfdir}/qemu
@@ -568,7 +589,7 @@ fi
 
 %files user
 %defattr(-,root,root)
-%{_initddir}/qemu
+%{_exec_prefix}/lib/binfmt.d/qemu-*.conf
 %{_bindir}/qemu-i386
 %{_bindir}/qemu-x86_64
 %if !%{with_x86only}
@@ -677,6 +698,14 @@ fi
 %{_mandir}/man1/qemu-img.1*
 
 %changelog
+* Fri Oct 21 2011 Justin M. Forbes <jforbes at redhat.com> - 2:0.15.1-1
+- Require seabios-bin >= 0.6.0-2 (#741992)
+- Replace init scripts with systemd units (#741920)
+- Update to 0.15.1 stable upstream
+  
+* Fri Oct 21 2011 Paul Moore <pmoore at redhat.com>
+- Enable full relro and PIE (rhbz #738812)
+
 * Wed Oct 12 2011 Daniel P. Berrange <berrange at redhat.com> - 2:0.15.0-6
 - Add BR on ceph-devel to enable RBD block device
 
diff --git a/sources b/sources
index 250f8be..fcf95cc 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-b45b0deebba4ce47dcaaab3807f6ed47  qemu-kvm-0.15.0.tar.gz
+8800a7d6b3aa4a168ea7f78dc66c0320  qemu-kvm-0.15.1.tar.gz


More information about the scm-commits mailing list