systemd/systemd.spec

938 lines
33 KiB
RPMSpec
Raw Normal View History

#
# spec file for package systemd
#
# Copyright (c) 2012 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via http://bugs.opensuse.org/
#
%define bootstrap 0
%define real systemd
%define udevpkgname udev
%define udev_major 1
Name: systemd
Url: http://www.freedesktop.org/wiki/Software/systemd
Version: 195
Release: 0
Summary: A System and Session Manager
License: LGPL-2.1+
Group: System/Base
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: audit-devel
BuildRequires: dbus-1
%if ! 0%{?bootstrap}
BuildRequires: docbook-xsl-stylesheets
%endif
- Update to version 39: + New systemd-cgtop tool to show control groups by their resource usage. + Linking against libacl for ACLs is optional again. + If a group "adm" exists, journal files are automatically owned by them, thus allow members of this group full access to the system journal as well as all user journals. + The journal now stores the SELinux context of the logging client for all entries. + Add C++ inclusion guards to all public headers. + New output mode "cat" in the journal to print only text messages, without any meta data like date or time. + Include tiny X server wrapper as a temporary stop-gap to teach XOrg udev display enumeration (until XOrg supports udev hotplugging for display devices). + Add new systemd-cat tool for executing arbitrary programs with STDERR/STDOUT connected to the journal. Can also act as BSD logger replacement, and does so by default. + Optionally store all locally generated coredumps in the journal along with meta data. + systemd-tmpfiles learnt four new commands: n, L, c, b, for writing short strings to files (for usage for /sys), and for creating symlinks, character and block device nodes. + New unit file option ControlGroupPersistent= to make cgroups persistent. + Support multiple local RTCs in a sane way. + No longer monopolize IO when replaying readahead data on rotating disks. + Don't show kernel threads in systemd-cgls anymore, unless requested with new -k switch. OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=234
2012-01-25 15:08:16 +01:00
BuildRequires: fdupes
%if ! 0%{?bootstrap}
BuildRequires: gobject-introspection-devel
%endif
BuildRequires: gperf
%if ! 0%{?bootstrap}
BuildRequires: gtk-doc
%endif
BuildRequires: intltool
- Update to version 34: * Bugfixes * optionaly apply cgroup attributes to cgroups systemd creates * honour sticky bit when trimming cgroup trees * improve readahead - Add libacl-devel as BuildRequires (needed for systemd-uaccess) - Add some %{nil} to systemd.macros to fix some build issues. - Fix dbus assertion - move gtk part to its own package, to reduce bootstrapping (bnc#713981). old: Base:System/systemd new: home:fcrozat:systemd/systemd rev NoneIndex: macros.systemd =================================================================== --- macros.systemd (revision 186) +++ macros.systemd (revision 29) @@ -39,7 +39,8 @@ if [ $FIRST_ARG -eq 1 ]; then \ # Initial installation \ /bin/systemctl daemon-reload >/dev/null 2>&1 || : \ -fi +fi \ +%{nil} # On uninstall, disable and stop services %service_del_preun() \ @@ -48,7 +49,8 @@ # Package removal, not upgrade \ /bin/systemctl --no-reload disable %{?*} > /dev/null 2>&1 || : \ /bin/systemctl stop %{?*} > /dev/null 2>&1 || : \ -fi +fi \ +%{nil} # On uninstall, tell systemd to reload its unit files %service_del_postun() \ @@ -57,7 +59,8 @@ if [ $FIRST_ARG -ge 1 ]; then \ # Package upgrade, not uninstall \ /bin/systemctl try-restart %{?*} >/dev/null 2>&1 || : \ -fi +fi \ +%{nil} %service_migrate_to_systemd_pre() \ test -n "$FIRST_ARG" || FIRST_ARG=$1 \ @@ -75,7 +78,8 @@ if [ -n "$services_to_migrate" ]; then \ /usr/sbin/systemd-sysv-convert --save $services_to_migrate >/dev/null 2>&1 || : \ fi \ -fi +fi \ +%{nil} %service_migrate_to_systemd_post() \ for service in %{?*} ; do \ @@ -88,6 +92,7 @@ /usr/sbin/systemd-sysv-convert --apply $services_to_migrate >/dev/null 2>&1 || : \ /bin/systemctl daemon-reload >/dev/null 2>&1 || : \ fi \ +%{nil} %service_migrate_to_systemd_postun() \ test -n "$FIRST_ARG" || FIRST_ARG=$1 \ @@ -95,5 +100,6 @@ for service in %{?*} ; do \ rm -f "/var/lib/systemd/migrated/$service" 2> /dev/null \ done \ -fi +fi \ +%{nil} Index: systemd.changes =================================================================== --- systemd.changes (revision 186) +++ systemd.changes (revision 29) @@ -1,4 +1,18 @@ ------------------------------------------------------------------- +Thu Sep 1 09:25:40 UTC 2011 - fcrozat@novell.com + +- Update to version 34: + * Bugfixes + * optionaly apply cgroup attributes to cgroups systemd creates + * honour sticky bit when trimming cgroup trees + * improve readahead +- Add libacl-devel as BuildRequires (needed for systemd-uaccess) +- Add some %{nil} to systemd.macros to fix some build issues. +- Fix dbus assertion +- move gtk part to its own package, to reduce bootstrapping + (bnc#713981). + +------------------------------------------------------------------- Fri Aug 26 14:10:30 UTC 2011 - fcrozat@suse.com - Update compose_table patch to use two separate loadkeys call, Index: systemd.spec =================================================================== --- systemd.spec (revision 186) +++ systemd.spec (revision 29) @@ -21,8 +21,8 @@ Name: systemd Url: http://www.freedesktop.org/wiki/Software/systemd -Version: 33 -Release: 17 +Version: 34 +Release: 1 License: GPLv2+ Group: System/Base Summary: A System and Session Manager @@ -32,11 +32,11 @@ BuildRequires: audit-devel BuildRequires: gperf BuildRequires: libcap-devel +BuildRequires: libacl-devel BuildRequires: tcpd-devel BuildRequires: pam-devel BuildRequires: libcryptsetup-devel BuildRequires: pkg-config -BuildRequires: gtk2-devel libnotify-devel libxslt-devel BuildRequires: libselinux-devel libsepol-devel BuildRequires: intltool Requires: udev >= 172 @@ -62,18 +62,7 @@ # Never add any patches to this package without the upstream commit id # in the patch. Any patches added here without a very good reason to make # an exception will be silently removed with the next version update. -# PATCH-FIX-UPSTREAM aj@suse.de gperf: Include missing.h -Patch2: gperf-missing.patch -# PATCH-FIX-UPSTREAM fcrozat@suse.com -- accept none option in crypttab -Patch3: systemd-cryptsetup.patch -# PATCH-FIX-UPSTREAM fcrozat@suse.com -- don't set getty before passphrase is typed -Patch4: systemd-cryptsetup-query.patch -# PATCH-FIX-UPSTREAM aj@suse.com -- fix crash on systemctl enable -Patch5: fix-crash.patch -# PATCH-FIX-UPSTREAM fcrozat@suse.com bnc671673 -- fix kexec support -Patch7: 0001-initctl-check-for-kexec_loaded-when-reboot-is-reques.patch -# PATCH-FIX-UPSTREAM fcrozat@suse.com -- don't look for system manager configuration when running user manager -Patch9: 0001-path-lookup-monitor-etc-systemd-user-for-user-manage.patch +Patch9: 0001-execute-fix-bus-serialization-for-commands.patch %description Systemd is a system and service manager, compatible with SysV and LSB @@ -95,15 +84,6 @@ %description devel Development headers and auxiliary files for developing applications for systemd. -%package gtk -License: GPLv2+ -Group: System/Base -Summary: Graphical front-end for systemd -Requires: %{name} = %{version} - -%description gtk -Graphical front-end for systemd system and service manager. - %package sysvinit License: GPLv2+ Group: System/Base @@ -134,12 +114,7 @@ %prep %setup -q %patch1 -p1 -%patch2 -p1 -%patch3 -p1 -%patch4 -p1 -%patch5 -p1 %patch6 -p1 -%patch7 -p1 %patch8 -p1 %patch9 -p1 @@ -153,6 +128,7 @@ --with-distro=suse \ --docdir=%{_docdir}/systemd \ --with-rootdir= \ + --disable-gtk \ CFLAGS="%{optflags}" make %{?_smp_mflags} @@ -185,6 +161,7 @@ ln -s /dev/null %{buildroot}/lib/systemd/system/clock.service ln -s /dev/null %{buildroot}/lib/systemd/system/crypto.service ln -s /dev/null %{buildroot}/lib/systemd/system/crypto-early.service +ln -s /dev/null %{buildroot}/lib/systemd/system/device-mapper.service ln -s /dev/null %{buildroot}/lib/systemd/system/earlysyslog.service ln -s /dev/null %{buildroot}/lib/systemd/system/kbd.service ln -s /dev/null %{buildroot}/lib/systemd/system/ldconfig.service @@ -334,11 +311,6 @@ %dir /var/lib/systemd/sysv-convert %dir /var/lib/systemd/migrated -%files gtk -%defattr(-,root,root,-) -%{_bindir}/systemadm -%{_bindir}/systemd-gnome-ask-password-agent -%{_mandir}/man1/systemadm.1* %files devel %defattr(-,root,root,-) Index: 0001-execute-fix-bus-serialization-for-commands.patch =================================================================== --- 0001-execute-fix-bus-serialization-for-commands.patch (added) +++ 0001-execute-fix-bus-serialization-for-commands.patch (revision 29) @@ -0,0 +1,44 @@ +From 7daa9e6e29b546275566084512ea4e547bc79b91 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering <lennart@poettering.net> +Date: Mon, 29 Aug 2011 19:44:52 +0200 +Subject: [PATCH] execute: fix bus serialization for commands + +--- + src/dbus-execute.c | 7 +++++-- + 1 files changed, 5 insertions(+), 2 deletions(-) + +diff --git a/src/dbus-execute.c b/src/dbus-execute.c +index 6ceffc5..201f6b5 100644 +--- a/src/dbus-execute.c ++++ b/src/dbus-execute.c +@@ -308,13 +308,14 @@ int bus_execute_append_command(DBusMessageIter *i, const char *property, void *d + assert(i); + assert(property); + +- if (!dbus_message_iter_open_container(i, DBUS_TYPE_ARRAY, "(sasbttuii)", &sub)) ++ if (!dbus_message_iter_open_container(i, DBUS_TYPE_ARRAY, "(sasbttttuii)", &sub)) + return -ENOMEM; + + LIST_FOREACH(command, c, c) { + char **l; + uint32_t pid; + int32_t code, status; ++ dbus_bool_t b; + + if (!c->path) + continue; +@@ -332,8 +333,10 @@ int bus_execute_append_command(DBusMessageIter *i, const char *property, void *d + code = (int32_t) c->exec_status.code; + status = (int32_t) c->exec_status.status; + ++ b = !!c->ignore; ++ + if (!dbus_message_iter_close_container(&sub2, &sub3) || +- !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_BOOLEAN, &c->ignore) || ++ !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_BOOLEAN, &b) || + !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_UINT64, &c->exec_status.start_timestamp.realtime) || + !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_UINT64, &c->exec_status.start_timestamp.monotonic) || + !dbus_message_iter_append_basic(&sub2, DBUS_TYPE_UINT64, &c->exec_status.exit_timestamp.realtime) || +-- +1.7.3.4 + Index: pre_checkin.sh =================================================================== --- pre_checkin.sh (added) +++ pre_checkin.sh (revision 29) @@ -0,0 +1,6 @@ +#!/bin/sh + +VERSION=`sed -e '/^Version:/!d' -e 's/Version: *//' systemd.spec` +RELEASE=`sed -e '/^Release:/!d' -e 's/Release: *//' systemd.spec` +sed -i -e "s,^\(Version:[ tab]*\).*,\1$VERSION," -e "s,^\(Release:[ tab]*\).*,\1$RELEASE," systemd-gtk.spec +cp systemd.changes systemd-gtk.changes Index: systemd-34.tar.bz2 =================================================================== Binary files systemd-34.tar.bz2 (revision 29) added Index: systemd-gtk.changes =================================================================== --- systemd-gtk.changes (added) +++ systemd-gtk.changes (revision 29) @@ -0,0 +1,1640 @@ +------------------------------------------------------------------- +Thu Sep 1 09:25:40 UTC 2011 - fcrozat@novell.com + +- Update to version 34: + * Bugfixes + * optionaly apply cgroup attributes to cgroups systemd creates + * honour sticky bit when trimming cgroup trees + * improve readahead +- Add libacl-devel as BuildRequires (needed for systemd-uaccess) +- Add some %{nil} to systemd.macros to fix some build issues. +- Fix dbus assertion +- move gtk part to its own package, to reduce bootstrapping + (bnc#713981). + +------------------------------------------------------------------- +Fri Aug 26 14:10:30 UTC 2011 - fcrozat@suse.com + +- Update compose_table patch to use two separate loadkeys call, + compose table overflows otherwise (spotted by Werner Fink). + +------------------------------------------------------------------- +Wed Aug 24 13:02:12 UTC 2011 - fcrozat@novell.com + +- Add tty1.patch: ensure passphrase are handled before starting + gettty on tty1. +- Add inittab generator, creating default.target at startup based + on /etc/inittab value. +- No longer try to create /etc/systemd/system/default.target at + initial package install (bnc#707418) +- Fix configuration path used for systemd user manager. +- Ensure pam-config output is no display in install script. +- Remove buildrequires on vala, no longer needed. + +------------------------------------------------------------------- +Fri Aug 19 15:29:49 UTC 2011 - fcrozat@suse.com + +- Handle disable_capslock, compose table and kbd_rate +- Add rpm macros.systemd file. +- Do not disable klogd, it has its own service now. +- Handle kexec correctly (bnc#671673). +- Disable preload services, they are conflicting with systemd. + +------------------------------------------------------------------- +Fri Aug 19 08:15:15 UTC 2011 - fcrozat@suse.com + +- enable pam_systemd module, using pam-config. + +------------------------------------------------------------------- +Thu Aug 18 07:31:12 UTC 2011 - aj@suse.de + +- Fix crash with systemctl enable. + +------------------------------------------------------------------- +Tue Aug 16 17:02:27 UTC 2011 - fcrozat@suse.com + +- Fix localfs.service to no cause cycle and starts it after + local-fs.target. + +------------------------------------------------------------------- +Thu Aug 4 15:59:58 UTC 2011 - fcrozat@suse.com + +- Remove root-fsck.patch, mkinitrd will use the same path as + dracut. +- Add systemd-cryptsetup.patch: don't complain on "none" option in + crypttab. +- Add systemd-cryptsetup-query.patch: block boot until passphrase + is typed. + +------------------------------------------------------------------- +Wed Aug 3 16:03:25 UTC 2011 - fcrozat@suse.com + +- Add root-fsck.patch: do not run fsck on / if it is rw +- Ship a non null localfs.service, fixes static mount points not + being mounted properly. + +------------------------------------------------------------------- +Wed Aug 3 07:11:33 UTC 2011 - aj@suse.de + +- Update to version 33: + * optimizations and bugfixes. + * New PrivateNetwork= service setting which allows you to shut off + networking for a specific service (i.e. all routable network + interfaces will disappear for that service). + * Merged insserv-parsing.patch and bash-completion-restart.patch + patches. + +------------------------------------------------------------------- +Tue Aug 2 08:29:30 UTC 2011 - fcrozat@suse.com + +- Add insserv-parsing.patch: read/parse insserv.conf. +- Add bash-completion-restart.patch: fix restart service list + (bnc#704782). + +------------------------------------------------------------------- +Mon Aug 1 09:04:53 UTC 2011 - aj@suse.de + +- Split up devel package. +- restart logind after upgrade. +- Adjust rpmlintrc for changes. + +------------------------------------------------------------------- +Fri Jul 29 10:48:20 UTC 2011 - aj@suse.de + +- Update to version 32: + * bugfixes + * improve selinux setup + +------------------------------------------------------------------- +Thu Jul 28 07:27:32 UTC 2011 - aj@suse.de + +- Update to version 31: + * rewrite of enable/disable code: New features systemctl --runtime, + systemctl mask, systemctl link and presets. + * sd-daemon is now shared library. + +------------------------------------------------------------------- +Tue Jul 19 11:56:43 UTC 2011 - aj@suse.de + +- Update to version 30: + + Logic from pam_systemd has been moved to new systemd-login. + + VT gettys are autospawn only when needed + + Handle boot.local/halt.local on SUSE distribution + + add support for systemctl --root + +------------------------------------------------------------------- +Wed Jun 29 12:54:24 UTC 2011 - fcrozat@suse.com + +- Make sure to not start kbd initscript, it is handled by systemd + natively. + +------------------------------------------------------------------- +Fri Jun 17 09:34:24 UTC 2011 - fcrozat@novell.com + +- version 29: + + enable chkconfig support in systemctl for openSUSE. + + systemctl: plug a leak upon create_symlink mismatch + + mount /run without MS_NOEXEC + + dbus: fix name of capability property + + systemctl: fix double unref of a dbus message + + cryptsetup-generator: fix /etc/cryptsetup options + + selinux: selinuxfs can be mounted on /sys/fs/selinux + + readahead-common: fix total memory size detection + + systemctl: fix 'is-enabled' for native units under /lib + + systemctl: fix a FILE* leak + + pam-module: add debug= parameter + + remote-fs.target: do not order after network.target +- update tarball url. + +------------------------------------------------------------------- +Wed Jun 15 10:00:29 UTC 2011 - saschpe@suse.de + +- Use RPM macros instead of $RPM_FOO variables +- Don't require %{version}-%{release} of the base package, + %{version} is sufficient + +------------------------------------------------------------------- +Tue Jun 14 15:10:41 CEST 2011 - kay.sievers@novell.com + +- new snapshot + - mount /run without MS_NOEXEC + - readahead-common: fix total memory size detection + - enable chkconfig support in systemctl for openSUSE + - selinux: selinuxfs can be mounted on /sys/fs/selinux + - cryptsetup-generator: fix /etc/cryptsetup options + - systemctl: fix double unref of a dbus message +- drop merged chkconfig patch + +------------------------------------------------------------------- +Tue Jun 14 12:39:25 UTC 2011 - fcrozat@novell.com + +- Add sysv chkconfig patch to be able to enable / disable sysv + initscripts with systemctl. +- Ensure plymouth support is buildable conditionnally. + +------------------------------------------------------------------- +Thu May 26 21:16:06 CEST 2011 - kay.sievers@novell.com + +- version 28 + - drop hwclock-save.service + - fix segfault when a DBus message has no interface + - man: update the list of unit search locations + - readahead-collect: ignore EACCES for fanotify + - rtc in localtime: use settimeofday(NULL, tz) + instead of hwclock(8) + +------------------------------------------------------------------- +Sat May 21 23:57:30 CEST 2011 - kay.sievers@novell.com + +- new snapshot + - fix crash in D-Bus code + +------------------------------------------------------------------- +Sat May 21 18:17:59 CEST 2011 - kay.sievers@novell.com + +- new snapshot + - socket: always use SO_{RCV,SND}BUFFORCE to allow larger values + - util: use new VT ESC sequence to clear scrollback buffer + - sd-daemon: move _sd_hidden_ from .h to .c file + - missing: add IP_TRANSPARENT (1441 more lines skipped) Index: systemd-gtk.spec =================================================================== --- systemd-gtk.spec (added) +++ systemd-gtk.spec (revision 29) @@ -0,0 +1,83 @@ +# +# spec file for package systemd-gtk +# +# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany. +# +# All modifications and additions to the file contributed by third parties +# remain the property of their copyright owners, unless otherwise agreed +# upon. The license for this file, and modifications and additions to the +# file, is the same license as for the pristine package itself (unless the +# license for the pristine package is not an Open Source License, in which +# case the license is the MIT License). An "Open Source License" is a +# license that conforms to the Open Source Definition (Version 1.9) +# published by the Open Source Initiative. + +# Please submit bugfixes or comments via http://bugs.opensuse.org/ +# + +# norootforbuild + +Name: systemd-gtk +Url: http://www.freedesktop.org/wiki/Software/systemd +Version: 34 +Release: 1 +License: GPLv2+ +Group: System/Base +BuildRoot: %{_tmppath}/%{name}-%{version}-build +BuildRequires: libudev-devel udev +BuildRequires: dbus-1-devel +BuildRequires: audit-devel +BuildRequires: gperf +BuildRequires: libcap-devel +BuildRequires: libacl-devel +BuildRequires: tcpd-devel +BuildRequires: pam-devel +BuildRequires: libcryptsetup-devel +BuildRequires: pkg-config +BuildRequires: libselinux-devel libsepol-devel +BuildRequires: intltool +BuildRequires: gtk2-devel libnotify-devel +Summary: Graphical front-end for systemd +Requires: systemd = %{version} +Source0: http://www.freedesktop.org/software/systemd/systemd-%{version}.tar.bz2 +Source1: systemd-rpmlintrc + +# Upstream First - Policy: +# Never add any patches to this package without the upstream commit id +# in the patch. Any patches added here without a very good reason to make +# an exception will be silently removed with the next version update. + +%description +Graphical front-end for systemd system and service manager. + +%prep +%setup -q -n systemd-%{version} + +%build +autoreconf -fiv +# prevent pre-generated and distributed files from re-building +find . -name "*.[1-8]" -exec touch '{}' \; +touch src/systemadm.c +export V=1 +%configure \ + --with-distro=suse \ + --docdir=%{_docdir}/systemd \ + --with-rootdir= \ + CFLAGS="%{optflags}" +make %{?_smp_mflags} + +%install +%makeinstall +# remove everything but systemadm and password agent +find %{buildroot} -not -type d -not -name 'systemadm*' -not -name systemd-gnome-ask-password-agent -delete + +%clean +rm -rf %{buildroot} + +%files +%defattr(-,root,root,-) +%{_bindir}/systemadm +%{_bindir}/systemd-gnome-ask-password-agent +%{_mandir}/man1/systemadm.1* + +%changelog Index: 0001-initctl-check-for-kexec_loaded-when-reboot-is-reques.patch =================================================================== --- 0001-initctl-check-for-kexec_loaded-when-reboot-is-reques.patch (revision 186) +++ 0001-initctl-check-for-kexec_loaded-when-reboot-is-reques.patch (deleted) @@ -1,82 +0,0 @@ -From b1e304bb59e1a80abacfd6f0377ae14c3c1a10cc Mon Sep 17 00:00:00 2001 -From: Frederic Crozat <fcrozat@suse.com> -Date: Mon, 22 Aug 2011 14:58:50 +0200 -Subject: [PATCH] initctl: check for kexec_loaded when reboot is requested through initctl - ---- - src/initctl.c | 2 ++ - src/systemctl.c | 12 ------------ - src/util.c | 12 ++++++++++++ - src/util.h | 2 ++ - 4 files changed, 16 insertions(+), 12 deletions(-) - -diff --git a/src/initctl.c b/src/initctl.c -index f36f1cc..eaa717a 100644 ---- a/src/initctl.c -+++ b/src/initctl.c -@@ -93,6 +93,8 @@ static const char *translate_runlevel(int runlevel, bool *isolate) { - for (i = 0; i < ELEMENTSOF(table); i++) - if (table[i].runlevel == runlevel) { - *isolate = table[i].isolate; -+ if (runlevel == '6' && kexec_loaded()) -+ return SPECIAL_KEXEC_TARGET; - return table[i].special; - } - -diff --git a/src/systemctl.c b/src/systemctl.c -index bb998d3..0ff9221 100644 ---- a/src/systemctl.c -+++ b/src/systemctl.c -@@ -4403,18 +4403,6 @@ static int parse_time_spec(const char *t, usec_t *_u) { - return 0; - } - --static bool kexec_loaded(void) { -- bool loaded = false; -- char *s; -- -- if (read_one_line_file("/sys/kernel/kexec_loaded", &s) >= 0) { -- if (s[0] == '1') -- loaded = true; -- free(s); -- } -- return loaded; --} -- - static int shutdown_parse_argv(int argc, char *argv[]) { - - enum { -diff --git a/src/util.c b/src/util.c -index 8d54049..247156d 100644 ---- a/src/util.c -+++ b/src/util.c -@@ -5680,3 +5680,15 @@ static const char *const signal_table[] = { - }; - - DEFINE_STRING_TABLE_LOOKUP(signal, int); -+ -+bool kexec_loaded(void) { -+ bool loaded = false; -+ char *s; -+ -+ if (read_one_line_file("/sys/kernel/kexec_loaded", &s) >= 0) { -+ if (s[0] == '1') -+ loaded = true; -+ free(s); -+ } -+ return loaded; -+} -diff --git a/src/util.h b/src/util.h -index 407160d..8b31e5b 100644 ---- a/src/util.h -+++ b/src/util.h -@@ -497,4 +497,6 @@ int signal_from_string_try_harder(const char *s); - extern int saved_argc; - extern char **saved_argv; - -+bool kexec_loaded(void); -+ - #endif --- -1.7.3.4 - Index: 0001-path-lookup-monitor-etc-systemd-user-for-user-manage.patch =================================================================== --- 0001-path-lookup-monitor-etc-systemd-user-for-user-manage.patch (revision 186) +++ 0001-path-lookup-monitor-etc-systemd-user-for-user-manage.patch (deleted) @@ -1,25 +0,0 @@ -From 1cf32c016f97b2c99d7df06ce5d5b858f86c507a Mon Sep 17 00:00:00 2001 -From: Frederic Crozat <fcrozat@suse.com> -Date: Wed, 24 Aug 2011 13:39:06 +0200 -Subject: [PATCH] path-lookup: monitor /etc/systemd/user for user manager - ---- - src/path-lookup.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/src/path-lookup.c b/src/path-lookup.c -index bed9175..5f5ad8c 100644 ---- a/src/path-lookup.c -+++ b/src/path-lookup.c -@@ -209,7 +209,7 @@ int lookup_paths_init(LookupPaths *p, ManagerRunningAs running_as, bool personal - * the arrays in user_dirs() above! */ - "/run/systemd/user", - USER_CONFIG_UNIT_PATH, -- "/etc/systemd/system", -+ "/etc/systemd/user", - "/usr/local/lib/systemd/user", - "/usr/local/share/systemd/user", - USER_DATA_UNIT_PATH, --- -1.7.3.4 - Index: fix-crash.patch =================================================================== --- fix-crash.patch (revision 186) +++ fix-crash.patch (deleted) @@ -1,19 +0,0 @@ -commit e191553d1dc80cd6d65d05f0cb29f8967fab6983 -Author: Kay Sievers <kay.sievers@vrfy.org> -Date: Wed Aug 17 19:38:07 2011 +0200 - - convert int to boolean for dbus_bool_t - -diff --git a/src/dbus-manager.c b/src/dbus-manager.c -index ae88895..cfc2afc 100644 ---- a/src/dbus-manager.c -+++ b/src/dbus-manager.c -@@ -444,7 +444,7 @@ static DBusMessage *message_from_file_changes( - if (carries_install_info >= 0) { - dbus_bool_t b; - -- b = carries_install_info; -+ b = !!carries_install_info; - if (!dbus_message_iter_append_basic(&iter, DBUS_TYPE_BOOLEAN, &b)) - goto oom; - } Index: gperf-missing.patch =================================================================== --- gperf-missing.patch (revision 186) +++ gperf-missing.patch (deleted) @@ -1,25 +0,0 @@ -From: Thierry Reding <thierry.reding@avionic-design.de> -To: systemd-devel@lists.freedesktop.org -Date: Wed, 3 Aug 2011 08:40:27 +0200 -Subject: [systemd-devel] [PATCH] gperf: Include missing.h. - -Older GNU C libraries don't define RLIMIT_RTTIME, so including the -missing.h is required to fix the build. ---- - src/load-fragment-gperf.gperf.m4 | 1 + - 1 files changed, 1 insertions(+), 0 deletions(-) - -diff --git a/src/load-fragment-gperf.gperf.m4 b/src/load-fragment-gperf.gperf.m4 -index 650f444..8e52890 100644 ---- a/src/load-fragment-gperf.gperf.m4 -+++ b/src/load-fragment-gperf.gperf.m4 -@@ -2,6 +2,7 @@ - #include <stddef.h> - #include "conf-parser.h" - #include "load-fragment.h" -+#include "missing.h" - %} - struct ConfigPerfItem; - %null_strings --- -1.7.6 Index: systemd-33.tar.bz2 =================================================================== Binary files systemd-33.tar.bz2 (revision 186) deleted Index: systemd-cryptsetup-query.patch =================================================================== --- systemd-cryptsetup-query.patch (revision 186) +++ systemd-cryptsetup-query.patch (deleted) @@ -1,28 +0,0 @@ -From d58446e4b3217f97baca7961154813a563ccdd19 Mon Sep 17 00:00:00 2001 -From: Frederic Crozat <fcrozat@suse.com> -Date: Thu, 4 Aug 2011 16:46:33 +0200 -Subject: [PATCH] cryptsetup-generator: block boot when querying passphrase. - -Ensure we wait for passphrase before starting tty1 or graphical display. -Needed when not using plymouth. ---- - src/cryptsetup-generator.c | 3 ++- - 1 files changed, 2 insertions(+), 1 deletions(-) - -diff --git a/src/cryptsetup-generator.c b/src/cryptsetup-generator.c -index a340218..6f3aa78 100644 ---- a/src/cryptsetup-generator.c -+++ b/src/cryptsetup-generator.c -@@ -112,7 +112,8 @@ static int create_disk( - "DefaultDependencies=no\n" - "BindTo=%s dev-mapper-%%i.device\n" - "After=systemd-readahead-collect.service systemd-readahead-replay.service %s\n" -- "Before=umount.target\n", -+ "Before=umount.target\n" -+ "Before=local-fs.target\n", - d, d); - - if (!nofail) --- -1.7.3.4 - Index: systemd-cryptsetup.patch =================================================================== --- systemd-cryptsetup.patch (revision 186) +++ systemd-cryptsetup.patch (deleted) @@ -1,25 +0,0 @@ -From aa5f34f2109a02db7887c220c5a35b6a8ee3e6c8 Mon Sep 17 00:00:00 2001 -From: Frederic Crozat <fcrozat@suse.com> -Date: Thu, 4 Aug 2011 16:04:43 +0200 -Subject: [PATCH] cryptsetup: accept "none" option - ---- - src/cryptsetup.c | 2 +- - 1 files changed, 1 insertions(+), 1 deletions(-) - -diff --git a/src/cryptsetup.c b/src/cryptsetup.c -index cf288de..ac7b6d6 100644 ---- a/src/cryptsetup.c -+++ b/src/cryptsetup.c -@@ -110,7 +110,7 @@ static int parse_one_option(const char *option) { - return 0; - } - -- } else -+ } else if (!streq(option, "none")) - log_error("Encountered unknown /etc/crypttab option '%s', ignoring.", option); - - return 0; --- -1.7.3.4 - OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=187
2011-09-01 13:43:46 +02:00
BuildRequires: libacl-devel
BuildRequires: libcap-devel
BuildRequires: libsepol-devel
BuildRequires: libtool
BuildRequires: libusb-devel
%if ! 0%{?bootstrap}
BuildRequires: libxslt-tools
%endif
BuildRequires: pam-devel
BuildRequires: tcpd-devel
BuildRequires: xz
BuildRequires: pkgconfig(blkid) >= 2.20
BuildRequires: pkgconfig(dbus-1) >= 1.3.2
%if ! 0%{?bootstrap}
BuildRequires: pkgconfig(glib-2.0) >= 2.22.0
BuildRequires: pkgconfig(libcryptsetup) >= 1.4.2
%endif
BuildRequires: pkgconfig(libkmod) >= 5
BuildRequires: pkgconfig(liblzma)
%if ! 0%{?bootstrap}
BuildRequires: pkgconfig(libmicrohttpd)
%endif
BuildRequires: pkgconfig(libpci) >= 3
%if ! 0%{?bootstrap}
BuildRequires: pkgconfig(libqrencode)
%endif
BuildRequires: pkgconfig(libselinux) >= 2.1.9
BuildRequires: pkgconfig(libsepol)
BuildRequires: pkgconfig(usbutils) >= 0.82
%if 0%{?bootstrap}
Requires: this-is-only-for-build-envs
%else
# the buildignore is important for bootstrapping
#!BuildIgnore: udev
Requires: %{udevpkgname} >= 172
Requires: dbus-1 >= 1.4.0
Requires: kbd
Requires: pam-config >= 0.79-5
Requires: pwdutils
Requires: systemd-presets-branding
Requires: util-linux >= 2.21
Requires(post): coreutils
Requires(post): findutils
%endif
Conflicts: filesystem < 11.5
Conflicts: mkinitrd < 2.7.0
Source0: http://www.freedesktop.org/software/systemd/systemd-%{version}.tar.xz
Source1: systemd-rpmlintrc
Source2: localfs.service
Source3: systemd-sysv-convert
Source4: macros.systemd
Source5: systemd-insserv_conf
Source6: baselibs.conf
Source7: libgcrypt.m4
- links more manpages for migrated tools (from Christopher Yeleighton). - disable boot.localnet service, ypbind service will do the right thing now (bnc#716746) - add xdm-display-manager.patch: pull xdm.service instead of display-manager.service (needed until xdm initscript is migrated to native systemd service). - Add fix-permissions-btmp.patch: ensure btmp is owned only by root (bnc#777405). - Have the udev package create a tape group, as referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules (DimStar). - Add fix-bad-memory-access.patch: fix crash in journal rotation. - Add fix-dbus-crash.patch: fix D-Bus caused crash. - Add sync-on-shutdown.patch: ensure sync is done when initiating shutdown. - Add mount-efivars.patch: mount efivars if booting on UEFI. - Ship a empty systemd-journald initscript in systemd-logger to stop insserv to complain about missing syslog dependency. - Update 0001-service-Fix-dependencies-added-when-parsing-insserv..patch with bug fixes from Debian. old: Base:System/systemd new: home:fcrozat:branches:Base:System/systemd rev NoneIndex: 0001-service-Fix-dependencies-added-when-parsing-insserv..patch =================================================================== --- 0001-service-Fix-dependencies-added-when-parsing-insserv..patch (revision 311) +++ 0001-service-Fix-dependencies-added-when-parsing-insserv..patch (revision 5) @@ -1,17 +1,35 @@ -From 6620bceb7233a830be3635a4f7a7dc75c13a9c8e Mon Sep 17 00:00:00 2001 -From: Frederic Crozat <fcrozat@suse.com> -Date: Fri, 30 Sep 2011 14:12:45 +0200 -Subject: [PATCH] service: Fix dependencies added when parsing insserv.conf - ---- - src/service.c | 16 +++++++++------- - 1 files changed, 9 insertions(+), 7 deletions(-) - -Index: systemd-41/src/service.c +Index: systemd-195/src/core/service.c =================================================================== ---- systemd-41.orig/src/core/service.c -+++ systemd-41/src/core/service.c -@@ -3210,23 +3210,30 @@ static void sysv_facility_in_insserv_con +--- systemd-195.orig/src/core/service.c ++++ systemd-195/src/core/service.c +@@ -3391,12 +3391,13 @@ static void service_notify_message(Unit + + #ifdef HAVE_SYSV_COMPAT + +-#ifdef TARGET_SUSE +-static void sysv_facility_in_insserv_conf(Manager *mgr) { +- FILE *f=NULL; ++#if defined(TARGET_SUSE) || defined(TARGET_DEBIAN) ++static void sysv_parse_insserv_conf(Manager *mgr, const char* filename) { ++ FILE *f = NULL; + int r; + +- if (!(f = fopen("/etc/insserv.conf", "re"))) { ++ if (!(f = fopen(filename, "re"))) { ++ log_error("Failed to open file %s", filename); + r = errno == ENOENT ? 0 : -errno; + goto finish; + } +@@ -3410,7 +3411,7 @@ static void sysv_facility_in_insserv_con + break; + + r = -errno; +- log_error("Failed to read configuration file '/etc/insserv.conf': %s", strerror(-r)); ++ log_error("Failed to read configuration file '%s': %s", filename, strerror(-r)); + goto finish; + } + +@@ -3425,23 +3426,30 @@ static void sysv_facility_in_insserv_con Unit *u; if (sysv_translate_facility(parsed[0], NULL, &facility) < 0) continue; @@ -29,12 +47,12 @@ STRV_FOREACH (j, parsed+1) { - if (*j[0]=='+') { - e = UNIT_WANTS; -+ if (*j[0]=='+') ++ if (*j[0] == '+') name = *j+1; - } - else { - e = UNIT_REQUIRES; -+ else ++ else name = *j; - } + if (streq(name, "boot.localfs") || @@ -44,9 +62,54 @@ continue; - r = unit_add_two_dependencies_by_name(u, UNIT_BEFORE, e, dep, NULL, true); -+ r = unit_add_dependency_by_name_inverse(u, UNIT_BEFORE, dep, NULL, true); -+ if (*j[0]!='+') ++ r = unit_add_two_dependencies_by_name_inverse(u, UNIT_WANTS, UNIT_BEFORE, dep, NULL, true); ++ if (*j[0] != '+') + r = unit_add_dependency_by_name(u, UNIT_REQUIRES, dep, NULL, true); free(dep); } } +@@ -3454,6 +3462,35 @@ finish: + fclose(f); + + } ++ ++static void sysv_facility_in_insserv_conf(Manager *mgr) { ++ DIR *d =NULL; ++ struct dirent *de; ++ ++#ifdef TARGET_DEBIAN ++ if (!(d = opendir("/etc/insserv.conf.d/"))) ++ if (errno != ENOENT) { ++ log_warning("opendir() failed on /etc/insserv.conf.d/ %s", strerror(errno)); ++ goto finish; ++ } ++ ++ while ((de = readdir(d))) { ++ char *path = NULL; ++ if (ignore_file(de->d_name)) ++ continue; ++ ++ path = join("/etc/insserv.conf.d/", de->d_name, NULL); ++ sysv_parse_insserv_conf(mgr, path); ++ free(path); ++ } ++finish: ++ if (d) ++ closedir(d); ++#endif ++ ++ sysv_parse_insserv_conf(mgr, "/etc/insserv.conf"); ++} ++ + #endif + + static int service_enumerate(Manager *m) { +@@ -3604,7 +3641,7 @@ static int service_enumerate(Manager *m) + + r = 0; + +-#ifdef TARGET_SUSE ++#if defined(TARGET_SUSE) || defined(TARGET_DEBIAN) + sysv_facility_in_insserv_conf (m); + #endif + Index: systemd-mini.changes =================================================================== --- systemd-mini.changes (revision 311) +++ systemd-mini.changes (revision 5) @@ -1,4 +1,35 @@ ------------------------------------------------------------------- +Tue Nov 20 09:36:43 UTC 2012 - fcrozat@suse.com + +- links more manpages for migrated tools (from Christopher + Yeleighton). +- disable boot.localnet service, ypbind service will do the right + thing now (bnc#716746) +- add xdm-display-manager.patch: pull xdm.service instead of + display-manager.service (needed until xdm initscript is migrated + to native systemd service). +- Add fix-permissions-btmp.patch: ensure btmp is owned only by root + (bnc#777405). +- Have the udev package create a tape group, as referenced by + 50-udev-default.rules and 60-persistent-storage-tape.rules + (DimStar). +- Add fix-bad-memory-access.patch: fix crash in journal rotation. +- Add fix-dbus-crash.patch: fix D-Bus caused crash. +- Add sync-on-shutdown.patch: ensure sync is done when initiating + shutdown. +- Add mount-efivars.patch: mount efivars if booting on UEFI. + + +------------------------------------------------------------------- +Thu Nov 15 14:31:28 UTC 2012 - fcrozat@suse.com + +- Ship a empty systemd-journald initscript in systemd-logger to + stop insserv to complain about missing syslog dependency. +- Update + 0001-service-Fix-dependencies-added-when-parsing-insserv..patch + with bug fixes from Debian. + +------------------------------------------------------------------- Wed Nov 14 17:36:05 UTC 2012 - fcrozat@suse.com - /var/log/journal is now only provided by systemd-logger (journal Index: systemd-mini.spec =================================================================== --- systemd-mini.spec (revision 311) +++ systemd-mini.spec (revision 5) @@ -102,6 +102,7 @@ Source5: systemd-insserv_conf Source6: baselibs.conf Source7: libgcrypt.m4 +Source8: systemd-journald.init Source1060: boot.udev Source1061: write_dev_root_rule @@ -128,6 +129,8 @@ Patch56: support-suse-clock-sysconfig.patch Patch59: fix-enable-disable-boot-initscript.patch Patch60: var-run-lock.patch +Patch63: xdm-display-manager.patch +Patch64: fix-permissions-btmp.patch # Upstream First - Policy: # Never add any patches to this package without the upstream commit id @@ -137,6 +140,14 @@ Patch61: fix-logind-pty-seat.patch # PATCH-FIX-UPSTREAM fix-build-glibc217.patch fcrozat@suse.com -- fix build with latest glibc Patch62: fix-build-glibc217.patch +# PATCH-FIX-UPSTREAM fix-bad-memory-access.patch fcrozat@suse.com -- fix bad memory access +Patch65: fix-bad-memory-access.patch +# PATCH-FIX-UPSTREAM fix-dbus-crash.patch fcrozat@suse.com -- fix D-Bus caused crash +Patch66: fix-dbus-crash.patch +# PATCH-FIX-UPSTREAM sync-on-shutdown.patch fcrozat@suse.com -- Sync on shutdown +Patch67: sync-on-shutdown.patch +# PATCH-FIX-UPSTREAM mount-efivars.patch fcrozat@suse.com -- mount efivars if booting under UEFI +Patch68: mount-efivars.patch # udev patches # PATCH-FIX-OPENSUSE 0001-Reinstate-TIMEOUT-handling.patch @@ -151,8 +162,6 @@ # PATCH-FIX-OPENSUSE 0027-udev-fix-sg-autoload-regression.patch Patch1027: 0027-udev-fix-sg-autoload-regression.patch -# systemd patches - %description Systemd is a system and service manager, compatible with SysV and LSB init scripts for Linux. systemd provides aggressive parallelization @@ -313,6 +322,7 @@ %patch1026 -p1 %patch1027 -p1 +#systemd %patch1 -p1 %patch6 -p1 # don't apply when bootstrapping to not modify configure.in @@ -337,6 +347,12 @@ %patch60 -p1 %patch61 -p1 %patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 %build autoreconf -fiv @@ -368,8 +384,14 @@ ln -sf %{_bindir}/systemd-ask-password $RPM_BUILD_ROOT/bin/systemd-ask-password ln -sf %{_bindir}/systemctl $RPM_BUILD_ROOT/bin/systemctl ln -sf %{_prefix}/lib/systemd/systemd-udevd $RPM_BUILD_ROOT/sbin/udevd +%if ! 0%{?bootstrap} +ln -sf systemd-udevd.8 $RPM_BUILD_ROOT/%{_mandir}/man8/udevd.8 +%endif mkdir -p $RPM_BUILD_ROOT/%{_prefix}/usr/lib/firmware/updates ln -sf /lib/firmware $RPM_BUILD_ROOT/usr/lib/firmware +%if ! 0%{?bootstrap} +install -m755 -D %{S:8} $RPM_BUILD_ROOT/etc/init.d/systemd-journald +%endif install -m755 -D %{S:1060} $RPM_BUILD_ROOT/etc/init.d/boot.udev ln -s systemd-udevd.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev.service @@ -378,11 +400,6 @@ mkdir -p $RPM_BUILD_ROOT/lib/systemd/system/basic.target.wants ln -sf ../udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants -#fix manpages -%if ! 0%{?bootstrap} -sed -i -e 's,^\(\.so \)\(.*\.\)\([0-9]\),\1man\3/\2\3,g' %{buildroot}/%{_mandir}/*/* -%endif - #workaround for 716939 chmod 644 %{buildroot}%{_bindir}/systemd-analyze mkdir -p %{buildroot}%{_sysconfdir}/rpm @@ -392,7 +409,7 @@ install -m755 %{S:3} -D %{buildroot}%{_sbindir}/systemd-sysv-convert # do not install, code has been fixed, might be useful in the future -#install -m755 %{S:5} %{buildroot}/lib/systemd/system-generators +#install -m755 %{S:5} %{buildroot}/usr/lib/systemd/system-generators ln -s ../usr/lib/systemd/systemd %{buildroot}/bin/systemd ln -s ../usr/lib/systemd/systemd %{buildroot}/sbin/init ln -s ../usr/bin/systemctl %{buildroot}/sbin/reboot @@ -415,8 +432,7 @@ ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/ldconfig.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/loadmodules.service install -m644 %{S:2} %{buildroot}/%{_prefix}/lib/systemd/system/localfs.service -# need to be implemented in systemd directly -#ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service +ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/proc.service ln -s systemd-fsck-root.service %{buildroot}/%{_prefix}/lib/systemd/system/rootfsck.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/single.service @@ -442,8 +458,12 @@ %endif # legacy links -ln -s loginctl %{buildroot}%{_bindir}/systemd-loginctl -ln -s journalctl %{buildroot}%{_bindir}/systemd-journalctl +for f in loginctl journalctl ; do + ln -s $f %{buildroot}%{_bindir}/systemd-$f +%if ! 0%{?bootstrap} + ln -s $f.1 %{buildroot}%{_mandir}/man1/systemd-$f.1 +%endif +done ln -s /usr/lib/udev %{buildroot}/lib/udev # Create the /var/log/journal directory to change the volatile journal to a persistent one @@ -532,6 +552,8 @@ elif [ ! -e /lib/udev ]; then ln -s /usr/lib/udev /lib/udev fi +# Create "tape" group which is referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules +/usr/sbin/groupadd -r tape 2> /dev/null || : # kill daemon if we are not in a chroot if test -f /proc/1/exe -a -d /proc/1/root ; then if test "$(stat -Lc '%%D-%%i' /)" = "$(stat -Lc '%%D-%%i' /proc/1/root)"; then @@ -724,6 +746,10 @@ %exclude %{_mandir}/man8/telinit.8* %exclude %{_mandir}/man8/runlevel.8* %exclude %{_mandir}/man*/*udev*.[0-9]* + +# Packaged in analyze subpackage +%exclude %{_mandir}/man1/systemd-analyze.1* + %{_mandir}/man1/*.1* %{_mandir}/man3/*.3* %{_mandir}/man5/*.5* @@ -787,7 +813,11 @@ %endif %files analyze +%defattr(-,root,root) %attr(0755,root,root) /usr/bin/systemd-analyze +%if ! 0%{?bootstrap} +%{_mandir}/man1/systemd-analyze.1* +%endif %files -n %{udevpkgname} %defattr(-,root,root) @@ -878,6 +908,7 @@ %defattr(-,root,root) %dir /var/log/journal /var/log/README +/etc/init.d/systemd-journald %endif Index: systemd.changes =================================================================== --- systemd.changes (revision 311) +++ systemd.changes (revision 5) @@ -1,4 +1,35 @@ ------------------------------------------------------------------- +Tue Nov 20 09:36:43 UTC 2012 - fcrozat@suse.com + +- links more manpages for migrated tools (from Christopher + Yeleighton). +- disable boot.localnet service, ypbind service will do the right + thing now (bnc#716746) +- add xdm-display-manager.patch: pull xdm.service instead of + display-manager.service (needed until xdm initscript is migrated + to native systemd service). +- Add fix-permissions-btmp.patch: ensure btmp is owned only by root + (bnc#777405). +- Have the udev package create a tape group, as referenced by + 50-udev-default.rules and 60-persistent-storage-tape.rules + (DimStar). +- Add fix-bad-memory-access.patch: fix crash in journal rotation. +- Add fix-dbus-crash.patch: fix D-Bus caused crash. +- Add sync-on-shutdown.patch: ensure sync is done when initiating + shutdown. +- Add mount-efivars.patch: mount efivars if booting on UEFI. + + +------------------------------------------------------------------- +Thu Nov 15 14:31:28 UTC 2012 - fcrozat@suse.com + +- Ship a empty systemd-journald initscript in systemd-logger to + stop insserv to complain about missing syslog dependency. +- Update + 0001-service-Fix-dependencies-added-when-parsing-insserv..patch + with bug fixes from Debian. + +------------------------------------------------------------------- Wed Nov 14 17:36:05 UTC 2012 - fcrozat@suse.com - /var/log/journal is now only provided by systemd-logger (journal Index: systemd.spec =================================================================== --- systemd.spec (revision 311) +++ systemd.spec (revision 5) @@ -97,6 +97,7 @@ Source5: systemd-insserv_conf Source6: baselibs.conf Source7: libgcrypt.m4 +Source8: systemd-journald.init Source1060: boot.udev Source1061: write_dev_root_rule @@ -123,6 +124,8 @@ Patch56: support-suse-clock-sysconfig.patch Patch59: fix-enable-disable-boot-initscript.patch Patch60: var-run-lock.patch +Patch63: xdm-display-manager.patch +Patch64: fix-permissions-btmp.patch # Upstream First - Policy: # Never add any patches to this package without the upstream commit id @@ -132,6 +135,14 @@ Patch61: fix-logind-pty-seat.patch # PATCH-FIX-UPSTREAM fix-build-glibc217.patch fcrozat@suse.com -- fix build with latest glibc Patch62: fix-build-glibc217.patch +# PATCH-FIX-UPSTREAM fix-bad-memory-access.patch fcrozat@suse.com -- fix bad memory access +Patch65: fix-bad-memory-access.patch +# PATCH-FIX-UPSTREAM fix-dbus-crash.patch fcrozat@suse.com -- fix D-Bus caused crash +Patch66: fix-dbus-crash.patch +# PATCH-FIX-UPSTREAM sync-on-shutdown.patch fcrozat@suse.com -- Sync on shutdown +Patch67: sync-on-shutdown.patch +# PATCH-FIX-UPSTREAM mount-efivars.patch fcrozat@suse.com -- mount efivars if booting under UEFI +Patch68: mount-efivars.patch # udev patches # PATCH-FIX-OPENSUSE 0001-Reinstate-TIMEOUT-handling.patch @@ -146,8 +157,6 @@ # PATCH-FIX-OPENSUSE 0027-udev-fix-sg-autoload-regression.patch Patch1027: 0027-udev-fix-sg-autoload-regression.patch -# systemd patches - %description Systemd is a system and service manager, compatible with SysV and LSB init scripts for Linux. systemd provides aggressive parallelization @@ -308,6 +317,7 @@ %patch1026 -p1 %patch1027 -p1 +#systemd %patch1 -p1 %patch6 -p1 # don't apply when bootstrapping to not modify configure.in @@ -332,6 +342,12 @@ %patch60 -p1 %patch61 -p1 %patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 %build autoreconf -fiv @@ -363,8 +379,14 @@ ln -sf %{_bindir}/systemd-ask-password $RPM_BUILD_ROOT/bin/systemd-ask-password ln -sf %{_bindir}/systemctl $RPM_BUILD_ROOT/bin/systemctl ln -sf %{_prefix}/lib/systemd/systemd-udevd $RPM_BUILD_ROOT/sbin/udevd +%if ! 0%{?bootstrap} +ln -sf systemd-udevd.8 $RPM_BUILD_ROOT/%{_mandir}/man8/udevd.8 +%endif mkdir -p $RPM_BUILD_ROOT/%{_prefix}/usr/lib/firmware/updates ln -sf /lib/firmware $RPM_BUILD_ROOT/usr/lib/firmware +%if ! 0%{?bootstrap} +install -m755 -D %{S:8} $RPM_BUILD_ROOT/etc/init.d/systemd-journald +%endif install -m755 -D %{S:1060} $RPM_BUILD_ROOT/etc/init.d/boot.udev ln -s systemd-udevd.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev.service @@ -373,11 +395,6 @@ mkdir -p $RPM_BUILD_ROOT/lib/systemd/system/basic.target.wants ln -sf ../udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants -#fix manpages -%if ! 0%{?bootstrap} -sed -i -e 's,^\(\.so \)\(.*\.\)\([0-9]\),\1man\3/\2\3,g' %{buildroot}/%{_mandir}/*/* -%endif - #workaround for 716939 chmod 644 %{buildroot}%{_bindir}/systemd-analyze mkdir -p %{buildroot}%{_sysconfdir}/rpm @@ -387,7 +404,7 @@ install -m755 %{S:3} -D %{buildroot}%{_sbindir}/systemd-sysv-convert # do not install, code has been fixed, might be useful in the future -#install -m755 %{S:5} %{buildroot}/lib/systemd/system-generators +#install -m755 %{S:5} %{buildroot}/usr/lib/systemd/system-generators ln -s ../usr/lib/systemd/systemd %{buildroot}/bin/systemd ln -s ../usr/lib/systemd/systemd %{buildroot}/sbin/init ln -s ../usr/bin/systemctl %{buildroot}/sbin/reboot @@ -410,8 +427,7 @@ ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/ldconfig.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/loadmodules.service install -m644 %{S:2} %{buildroot}/%{_prefix}/lib/systemd/system/localfs.service -# need to be implemented in systemd directly -#ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service +ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/proc.service ln -s systemd-fsck-root.service %{buildroot}/%{_prefix}/lib/systemd/system/rootfsck.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/single.service @@ -437,8 +453,12 @@ %endif # legacy links -ln -s loginctl %{buildroot}%{_bindir}/systemd-loginctl -ln -s journalctl %{buildroot}%{_bindir}/systemd-journalctl +for f in loginctl journalctl ; do + ln -s $f %{buildroot}%{_bindir}/systemd-$f +%if ! 0%{?bootstrap} + ln -s $f.1 %{buildroot}%{_mandir}/man1/systemd-$f.1 +%endif +done ln -s /usr/lib/udev %{buildroot}/lib/udev # Create the /var/log/journal directory to change the volatile journal to a persistent one @@ -527,6 +547,8 @@ elif [ ! -e /lib/udev ]; then ln -s /usr/lib/udev /lib/udev fi +# Create "tape" group which is referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules +/usr/sbin/groupadd -r tape 2> /dev/null || : # kill daemon if we are not in a chroot if test -f /proc/1/exe -a -d /proc/1/root ; then if test "$(stat -Lc '%%D-%%i' /)" = "$(stat -Lc '%%D-%%i' /proc/1/root)"; then @@ -719,6 +741,10 @@ %exclude %{_mandir}/man8/telinit.8* %exclude %{_mandir}/man8/runlevel.8* %exclude %{_mandir}/man*/*udev*.[0-9]* + +# Packaged in analyze subpackage +%exclude %{_mandir}/man1/systemd-analyze.1* + %{_mandir}/man1/*.1* %{_mandir}/man3/*.3* %{_mandir}/man5/*.5* @@ -782,7 +808,11 @@ %endif %files analyze +%defattr(-,root,root) %attr(0755,root,root) /usr/bin/systemd-analyze +%if ! 0%{?bootstrap} +%{_mandir}/man1/systemd-analyze.1* +%endif %files -n %{udevpkgname} %defattr(-,root,root) @@ -873,6 +903,7 @@ %defattr(-,root,root) %dir /var/log/journal /var/log/README +/etc/init.d/systemd-journald %endif Index: fix-bad-memory-access.patch =================================================================== --- fix-bad-memory-access.patch (added) +++ fix-bad-memory-access.patch (revision 5) @@ -0,0 +1,23 @@ +From 7d73c1343be02a59b17de0cd34375deeb815d89c Mon Sep 17 00:00:00 2001 +From: Lennart Poettering <lennart@poettering.net> +Date: Tue, 20 Nov 2012 00:19:27 +0100 +Subject: [PATCH] journald: fix bad memory access + +https://bugzilla.redhat.com/show_bug.cgi?id=875653 +--- + src/journal/journald-server.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: systemd-195/src/journal/journald.c +=================================================================== +--- systemd-195.orig/src/journal/journald.c ++++ systemd-195/src/journal/journald.c +@@ -342,7 +342,7 @@ static void server_rotate(Server *s) { + HASHMAP_FOREACH_KEY(f, k, s->user_journals, i) { + r = journal_file_rotate(&f, s->compress, s->seal); + if (r < 0) +- if (f->path) ++ if (f) + log_error("Failed to rotate %s: %s", f->path, strerror(-r)); + else + log_error("Failed to create user journal: %s", strerror(-r)); Index: fix-dbus-crash.patch =================================================================== --- fix-dbus-crash.patch (added) +++ fix-dbus-crash.patch (revision 5) @@ -0,0 +1,32 @@ +From 645a9e5a2bbb06464a3fba1a3501e9d79e5bbad8 Mon Sep 17 00:00:00 2001 +From: Eelco Dolstra <eelco.dolstra@logicblox.com> +Date: Wed, 31 Oct 2012 11:53:56 +0100 +Subject: [PATCH] dbus-manager: fix a fatal dbus abort in + bus_manager_message_handler() + +If ListUnitFiles fails, or an OOM occurs, then dbus_message_unref() +will be called twice on "reply", causing systemd to crash. So remove +the call to dbus_message_unref(); it is unnecessary because of +the cleanup attribute on "reply". + +[zj: modified to leave one dbus_message_unref() alone, per Colin +Walters' comment.] +--- + src/core/dbus-manager.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c +index 2010241..3cf3e90 100644 +--- a/src/core/dbus-manager.c ++++ b/src/core/dbus-manager.c +@@ -1436,7 +1436,6 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, + r = unit_file_get_list(m->running_as == SYSTEMD_SYSTEM ? UNIT_FILE_SYSTEM : UNIT_FILE_USER, NULL, h); + if (r < 0) { + unit_file_list_free(h); +- dbus_message_unref(reply); + return bus_send_error_reply(connection, message, NULL, r); + } + +-- +1.7.10.4 + Index: fix-permissions-btmp.patch =================================================================== --- fix-permissions-btmp.patch (added) +++ fix-permissions-btmp.patch (revision 5) @@ -0,0 +1,13 @@ +Index: systemd-44/tmpfiles.d/systemd.conf +=================================================================== +--- systemd-44.orig/tmpfiles.d/systemd.conf ++++ systemd-44/tmpfiles.d/systemd.conf +@@ -11,7 +11,7 @@ d /run/user 0755 root root 10d + F /run/utmp 0664 root utmp - + + f /var/log/wtmp 0664 root utmp - +-f /var/log/btmp 0600 root utmp - ++f /var/log/btmp 0600 root root - + + d /var/cache/man - - - 30d + Index: mount-efivars.patch =================================================================== --- mount-efivars.patch (added) +++ mount-efivars.patch (revision 5) @@ -0,0 +1,336 @@ +From f271dd97622b656c1c013d181ea615c671cc2438 Mon Sep 17 00:00:00 2001 +From: "Lee, Chun-Yi" <joeyli.kernel@gmail.com> +Date: Sat, 27 Oct 2012 11:23:22 +0800 +Subject: [PATCH] systemd: mount the EFI variable filesystem +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Add efivarfs to the mount_table in mount-setup.c, so the EFI variable +filesystem will be mounted when systemd executed. + +The EFI variable filesystem will merge in v3.7 or v3.8 linux kernel. + +Cc: Kay Sievers <kay@vrfy.org> +Cc: Lennart Poettering <lennart@poettering.net> +Cc: Mantas Mikulėnas <grawity@gmail.com> +Cc: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> +Cc: Matt Fleming <matt.fleming@intel.com> +Cc: Jeremy Kerr <jeremy.kerr@canonical.com> +Cc: Matthew Garrett <mjg@redhat.com> +Signed-off-by: Lee, Chun-Yi <jlee@suse.com> +--- + src/core/kmod-setup.c | 7 ++++--- + src/core/mount-setup.c | 1 + + 2 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index cc2a2d9..ce8a8e7 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -31,9 +31,10 @@ + #include "kmod-setup.h" + + static const char * const kmod_table[] = { +- "autofs4", "/sys/class/misc/autofs", +- "ipv6", "/sys/module/ipv6", +- "unix", "/proc/net/unix" ++ "autofs4", "/sys/class/misc/autofs", ++ "ipv6", "/sys/module/ipv6", ++ "efivarfs", "/sys/firmware/efi/efivars", ++ "unix", "/proc/net/unix" + }; + + #pragma GCC diagnostic push +diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c +index 0fd112f..9894c7f 100644 +--- a/src/core/mount-setup.c ++++ b/src/core/mount-setup.c +@@ -66,6 +66,7 @@ static const MountPoint mount_table[] = { + { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, + { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, true, true }, + { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, ++ { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, + { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, + { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, false, true }, + { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +-- +1.7.10.4 + +From c1e5704657315b436c0409e8172c1fcb76adccad Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:06:27 +0100 +Subject: [PATCH] shared: add is_efiboot() + +--- + src/shared/util.c | 4 ++++ + src/shared/util.h | 2 ++ + 2 files changed, 6 insertions(+) + +diff --git a/src/shared/util.c b/src/shared/util.c +index 2a8afae..9983695 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -77,6 +77,10 @@ char **saved_argv = NULL; + static volatile unsigned cached_columns = 0; + static volatile unsigned cached_lines = 0; + ++bool is_efiboot(void) { ++ return access("/sys/firmware/efi", F_OK) >= 0; ++} ++ + size_t page_size(void) { + static __thread size_t pgsz = 0; + long r; +diff --git a/src/shared/util.h b/src/shared/util.h +index e387b12..99972cc 100644 +--- a/src/shared/util.h ++++ b/src/shared/util.h +@@ -90,6 +90,8 @@ union dirent_storage { + #define ANSI_HIGHLIGHT_YELLOW_ON "\x1B[1;33m" + #define ANSI_HIGHLIGHT_OFF "\x1B[0m" + ++bool is_efiboot(void); ++ + usec_t now(clockid_t clock); + + dual_timestamp* dual_timestamp_get(dual_timestamp *ts); +-- +1.7.10.4 + +From 1022373284b7562431fb0a6dba45db8af089a0e3 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:54:19 +0100 +Subject: [PATCH] kmod-setup: add conditional module loading callback + +--- + src/core/kmod-setup.c | 32 ++++++++++++++++++++------------ + 1 file changed, 20 insertions(+), 12 deletions(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index ce8a8e7..383a6b2 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -30,11 +30,17 @@ + + #include "kmod-setup.h" + +-static const char * const kmod_table[] = { +- "autofs4", "/sys/class/misc/autofs", +- "ipv6", "/sys/module/ipv6", +- "efivarfs", "/sys/firmware/efi/efivars", +- "unix", "/proc/net/unix" ++typedef struct Kmodule { ++ const char *name; ++ const char *directory; ++ bool (*condition_fn)(void); ++} KModule; ++ ++static const KModule kmod_table[] = { ++ { "autofs4", "/sys/class/misc/autofs", NULL } , ++ { "ipv6", "/sys/module/ipv6", NULL }, ++ { "efivarfs", "/sys/firmware/efi/efivars", NULL }, ++ { "unix", "/proc/net/unix", NULL } , + }; + + #pragma GCC diagnostic push +@@ -42,7 +48,8 @@ static const char * const kmod_table[] = { + static void systemd_kmod_log(void *data, int priority, const char *file, int line, + const char *fn, const char *format, va_list args) + { +- log_metav(priority, file, line, fn, format, args); ++ /* library logging is enabled at debug only */ ++ log_metav(LOG_DEBUG, file, line, fn, format, args); + } + #pragma GCC diagnostic pop + +@@ -53,13 +60,15 @@ int kmod_setup(void) { + int err; + + for (i = 0; i < ELEMENTSOF(kmod_table); i += 2) { ++ if (kmod_table[i].condition_fn && !kmod_table[i].condition_fn()) ++ continue; + +- if (access(kmod_table[i+1], F_OK) >= 0) ++ if (access(kmod_table[i].directory, F_OK) >= 0) + continue; + + log_debug("Your kernel apparently lacks built-in %s support. Might be a good idea to compile it in. " + "We'll now try to work around this by loading the module...", +- kmod_table[i]); ++ kmod_table[i].name); + + if (!ctx) { + ctx = kmod_new(NULL, NULL); +@@ -69,13 +78,12 @@ int kmod_setup(void) { + } + + kmod_set_log_fn(ctx, systemd_kmod_log, NULL); +- + kmod_load_resources(ctx); + } + +- err = kmod_module_new_from_name(ctx, kmod_table[i], &mod); ++ err = kmod_module_new_from_name(ctx, kmod_table[i].name, &mod); + if (err < 0) { +- log_error("Failed to load module '%s'", kmod_table[i]); ++ log_error("Failed to lookup module '%s'", kmod_table[i].name); + continue; + } + +@@ -85,7 +93,7 @@ int kmod_setup(void) { + else if (err == KMOD_PROBE_APPLY_BLACKLIST) + log_info("Module '%s' is blacklisted", kmod_module_get_name(mod)); + else +- log_error("Failed to insert '%s'", kmod_module_get_name(mod)); ++ log_error("Failed to insert module '%s'", kmod_module_get_name(mod)); + + kmod_module_unref(mod); + } +-- +1.7.10.4 + +From 3dfb265083347cb5700dc38f7cc0f479f378e6e9 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:55:23 +0100 +Subject: [PATCH] kmod-setup: mounting efivarfs, *after* we tried to mount it, + is pointless + +The mount() system call, which we issue before loading modules, will trigger +a modprobe by the kernel and block until it returns. Trying to load it again +later, will have exactly the same result as the first time. +--- + src/core/kmod-setup.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index 383a6b2..20ab232 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -39,7 +39,6 @@ typedef struct Kmodule { + static const KModule kmod_table[] = { + { "autofs4", "/sys/class/misc/autofs", NULL } , + { "ipv6", "/sys/module/ipv6", NULL }, +- { "efivarfs", "/sys/firmware/efi/efivars", NULL }, + { "unix", "/proc/net/unix", NULL } , + }; + +-- +1.7.10.4 + +From 6aa220e019f9dffd96590b06b68f937985204109 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 17:03:48 +0100 +Subject: [PATCH] mount-setup: try mounting 'efivarfs' only if the system + bootet with EFI + +--- + TODO | 3 --- + src/core/mount-setup.c | 50 ++++++++++++++++++++++++++++++++---------------- + 2 files changed, 34 insertions(+), 19 deletions(-) + +diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c +index 9894c7f..98614d0 100644 +--- a/src/core/mount-setup.c ++++ b/src/core/mount-setup.c +@@ -46,14 +46,20 @@ + #define TTY_GID 5 + #endif + ++typedef enum MountMode { ++ MNT_NONE = 0, ++ MNT_FATAL = 1 << 0, ++ MNT_IN_CONTAINER = 1 << 1, ++} MountMode; ++ + typedef struct MountPoint { + const char *what; + const char *where; + const char *type; + const char *options; + unsigned long flags; +- bool fatal; +- bool in_container; ++ bool (*condition_fn)(void); ++ MountMode mode; + } MountPoint; + + /* The first three entries we might need before SELinux is up. The +@@ -62,16 +68,26 @@ typedef struct MountPoint { + #define N_EARLY_MOUNT 4 + + static const MountPoint mount_table[] = { +- { "proc", "/proc", "proc", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, +- { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, +- { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, true, true }, +- { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, +- { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, +- { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +- { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, false, true }, +- { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +- { "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME, false, true }, +- { "cgroup", "/sys/fs/cgroup/systemd", "cgroup", "none,name=systemd", MS_NOSUID|MS_NOEXEC|MS_NODEV, false, true }, ++ { "proc", "/proc", "proc", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_NONE }, ++ { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ is_efiboot, MNT_NONE }, ++ { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, ++ NULL, MNT_IN_CONTAINER }, ++ { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_IN_CONTAINER }, ++ { "cgroup", "/sys/fs/cgroup/systemd", "cgroup", "none,name=systemd", MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_IN_CONTAINER }, + }; + + /* These are API file systems that might be mounted by other software, +@@ -119,6 +135,9 @@ static int mount_one(const MountPoint *p, bool relabel) { + + assert(p); + ++ if (p->condition_fn && !p->condition_fn()) ++ return 0; ++ + /* Relabel first, just in case */ + if (relabel) + label_fix(p->where, true, true); +@@ -131,7 +150,7 @@ static int mount_one(const MountPoint *p, bool relabel) { + return 0; + + /* Skip securityfs in a container */ +- if (!p->in_container && detect_container(NULL) > 0) ++ if (!(p->mode & MNT_IN_CONTAINER) && detect_container(NULL) > 0) + return 0; + + /* The access mode here doesn't really matter too much, since +@@ -149,8 +168,8 @@ static int mount_one(const MountPoint *p, bool relabel) { + p->type, + p->flags, + p->options) < 0) { +- log_full(p->fatal ? LOG_ERR : LOG_DEBUG, "Failed to mount %s: %s", p->where, strerror(errno)); +- return p->fatal ? -errno : 0; ++ log_full((p->mode & MNT_FATAL) ? LOG_ERR : LOG_DEBUG, "Failed to mount %s: %s", p->where, strerror(errno)); ++ return (p->mode & MNT_FATAL) ? -errno : 0; + } + + /* Relabel again, since we now mounted something fresh here */ +@@ -289,7 +308,6 @@ int mount_cgroup_controllers(char ***join_controllers) { + p.type = "cgroup"; + p.options = options; + p.flags = MS_NOSUID|MS_NOEXEC|MS_NODEV; +- p.fatal = false; + + r = mount_one(&p, true); + free(controller); +-- +1.7.10.4 + Index: sync-on-shutdown.patch =================================================================== --- sync-on-shutdown.patch (added) +++ sync-on-shutdown.patch (revision 5) @@ -0,0 +1,49 @@ +From 0049f05a8bb82c3e084bacc5945596761d706c55 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering <lennart@poettering.net> +Date: Fri, 16 Nov 2012 01:30:29 +0100 +Subject: [PATCH] shutdown: readd explicit sync() when shutting down + +As it turns out reboot() doesn't actually imply a file system sync, but +only a disk sync. Accordingly, readd explicit sync() invocations +immediately before we invoke reboot(). + +This is much less dramatic than it might sounds as we umount all +disks/read-only remount them anyway before going down. +--- + src/core/service.c | 1 + + src/core/shutdown.c | 7 +++++++ + 2 files changed, 8 insertions(+) + +diff --git a/src/core/service.c b/src/core/service.c +index cf08485..df72aba 100644 +--- a/src/core/service.c ++++ b/src/core/service.c +@@ -2485,6 +2485,7 @@ static int service_start_limit_test(Service *s) { + + case SERVICE_START_LIMIT_REBOOT_IMMEDIATE: + log_warning("%s start request repeated too quickly, rebooting immediately.", UNIT(s)->id); ++ sync(); + reboot(RB_AUTOBOOT); + break; + +diff --git a/src/core/shutdown.c b/src/core/shutdown.c +index cc8c57b..b59aef1 100644 +--- a/src/core/shutdown.c ++++ b/src/core/shutdown.c +@@ -273,6 +273,13 @@ int main(int argc, char *argv[]) { + } + } + ++ /* The kernel will automaticall flush ATA disks and suchlike ++ * on reboot(), but the file systems need to be synce'd ++ * explicitly in advance. So let's do this here, but not ++ * needlessly slow down containers. */ ++ if (!in_container) ++ sync(); ++ + if (cmd == LINUX_REBOOT_CMD_KEXEC) { + + if (!in_container) { +-- +1.7.10.4 + Index: systemd-journald.init =================================================================== --- systemd-journald.init (added) +++ systemd-journald.init (revision 5) @@ -0,0 +1,33 @@ +#! /bin/sh +# +# Copyright (c) 2001-2002 SuSE Linux AG, Nuernberg, Germany. +# All rights reserved. +# +# /etc/init.d/systemd-journald +# +### BEGIN INIT INFO +# Provides: syslog +# Required-Start: $null +# Required-Stop: $null +# Default-Start: 2 3 5 +# Default-Stop: +# Short-Description: compat wrapper for journald +# Description: compat wrapper for journald +### END INIT INFO + +. /etc/rc.status + +rc_reset + +case "$1" in + start|stop|restart) + rc_failed 3 + rc_status -v + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 + ;; +esac + +rc_exit Index: xdm-display-manager.patch =================================================================== --- xdm-display-manager.patch (added) +++ xdm-display-manager.patch (revision 5) @@ -0,0 +1,13 @@ +Index: systemd-195/units/graphical.target +=================================================================== +--- systemd-195.orig/units/graphical.target ++++ systemd-195/units/graphical.target +@@ -11,7 +11,7 @@ Documentation=man:systemd.special(7) + Requires=multi-user.target + After=multi-user.target + Conflicts=rescue.target +-Wants=display-manager.service ++Wants=xdm.service + AllowIsolate=yes + + [Install] OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=312
2012-11-20 13:10:12 +01:00
Source8: systemd-journald.init
Source1060: boot.udev
Source1061: write_dev_root_rule
Source1062: udev-root-symlink.systemd
Patch1: 0001-Add-bootsplash-handling-for-password-dialogs.patch
# handle SUSE specific kbd settings
Patch6: 0001-handle-disable_caplock-and-compose_table-and-kbd_rat.patch
Patch7: systemd-numlock-suse.patch
# don't start getty on tty1 until all password request are done
Patch8: tty1.patch
Patch10: 0001-service-Fix-dependencies-added-when-parsing-insserv..patch
Patch13: 0001-service-flags-sysv-service-with-detected-pid-as-Rema.patch
Patch15: support-sysvinit.patch
Patch16: modules_on_boot.patch
Patch22: new-lsb-headers.patch
Patch23: storage-after-cryptsetup.patch
Patch24: delay-fsck-cryptsetup-after-md-lvm-dmraid.patch
Patch31: lock-opensuse.patch
Patch33: crypt-loop-file.patch
Patch36: sysctl-modules.patch
Patch38: dm-lvm-after-local-fs-pre-target.patch
Patch53: fastboot-forcefsck.patch
Patch56: support-suse-clock-sysconfig.patch
Patch59: fix-enable-disable-boot-initscript.patch
Patch60: var-run-lock.patch
- links more manpages for migrated tools (from Christopher Yeleighton). - disable boot.localnet service, ypbind service will do the right thing now (bnc#716746) - add xdm-display-manager.patch: pull xdm.service instead of display-manager.service (needed until xdm initscript is migrated to native systemd service). - Add fix-permissions-btmp.patch: ensure btmp is owned only by root (bnc#777405). - Have the udev package create a tape group, as referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules (DimStar). - Add fix-bad-memory-access.patch: fix crash in journal rotation. - Add fix-dbus-crash.patch: fix D-Bus caused crash. - Add sync-on-shutdown.patch: ensure sync is done when initiating shutdown. - Add mount-efivars.patch: mount efivars if booting on UEFI. - Ship a empty systemd-journald initscript in systemd-logger to stop insserv to complain about missing syslog dependency. - Update 0001-service-Fix-dependencies-added-when-parsing-insserv..patch with bug fixes from Debian. old: Base:System/systemd new: home:fcrozat:branches:Base:System/systemd rev NoneIndex: 0001-service-Fix-dependencies-added-when-parsing-insserv..patch =================================================================== --- 0001-service-Fix-dependencies-added-when-parsing-insserv..patch (revision 311) +++ 0001-service-Fix-dependencies-added-when-parsing-insserv..patch (revision 5) @@ -1,17 +1,35 @@ -From 6620bceb7233a830be3635a4f7a7dc75c13a9c8e Mon Sep 17 00:00:00 2001 -From: Frederic Crozat <fcrozat@suse.com> -Date: Fri, 30 Sep 2011 14:12:45 +0200 -Subject: [PATCH] service: Fix dependencies added when parsing insserv.conf - ---- - src/service.c | 16 +++++++++------- - 1 files changed, 9 insertions(+), 7 deletions(-) - -Index: systemd-41/src/service.c +Index: systemd-195/src/core/service.c =================================================================== ---- systemd-41.orig/src/core/service.c -+++ systemd-41/src/core/service.c -@@ -3210,23 +3210,30 @@ static void sysv_facility_in_insserv_con +--- systemd-195.orig/src/core/service.c ++++ systemd-195/src/core/service.c +@@ -3391,12 +3391,13 @@ static void service_notify_message(Unit + + #ifdef HAVE_SYSV_COMPAT + +-#ifdef TARGET_SUSE +-static void sysv_facility_in_insserv_conf(Manager *mgr) { +- FILE *f=NULL; ++#if defined(TARGET_SUSE) || defined(TARGET_DEBIAN) ++static void sysv_parse_insserv_conf(Manager *mgr, const char* filename) { ++ FILE *f = NULL; + int r; + +- if (!(f = fopen("/etc/insserv.conf", "re"))) { ++ if (!(f = fopen(filename, "re"))) { ++ log_error("Failed to open file %s", filename); + r = errno == ENOENT ? 0 : -errno; + goto finish; + } +@@ -3410,7 +3411,7 @@ static void sysv_facility_in_insserv_con + break; + + r = -errno; +- log_error("Failed to read configuration file '/etc/insserv.conf': %s", strerror(-r)); ++ log_error("Failed to read configuration file '%s': %s", filename, strerror(-r)); + goto finish; + } + +@@ -3425,23 +3426,30 @@ static void sysv_facility_in_insserv_con Unit *u; if (sysv_translate_facility(parsed[0], NULL, &facility) < 0) continue; @@ -29,12 +47,12 @@ STRV_FOREACH (j, parsed+1) { - if (*j[0]=='+') { - e = UNIT_WANTS; -+ if (*j[0]=='+') ++ if (*j[0] == '+') name = *j+1; - } - else { - e = UNIT_REQUIRES; -+ else ++ else name = *j; - } + if (streq(name, "boot.localfs") || @@ -44,9 +62,54 @@ continue; - r = unit_add_two_dependencies_by_name(u, UNIT_BEFORE, e, dep, NULL, true); -+ r = unit_add_dependency_by_name_inverse(u, UNIT_BEFORE, dep, NULL, true); -+ if (*j[0]!='+') ++ r = unit_add_two_dependencies_by_name_inverse(u, UNIT_WANTS, UNIT_BEFORE, dep, NULL, true); ++ if (*j[0] != '+') + r = unit_add_dependency_by_name(u, UNIT_REQUIRES, dep, NULL, true); free(dep); } } +@@ -3454,6 +3462,35 @@ finish: + fclose(f); + + } ++ ++static void sysv_facility_in_insserv_conf(Manager *mgr) { ++ DIR *d =NULL; ++ struct dirent *de; ++ ++#ifdef TARGET_DEBIAN ++ if (!(d = opendir("/etc/insserv.conf.d/"))) ++ if (errno != ENOENT) { ++ log_warning("opendir() failed on /etc/insserv.conf.d/ %s", strerror(errno)); ++ goto finish; ++ } ++ ++ while ((de = readdir(d))) { ++ char *path = NULL; ++ if (ignore_file(de->d_name)) ++ continue; ++ ++ path = join("/etc/insserv.conf.d/", de->d_name, NULL); ++ sysv_parse_insserv_conf(mgr, path); ++ free(path); ++ } ++finish: ++ if (d) ++ closedir(d); ++#endif ++ ++ sysv_parse_insserv_conf(mgr, "/etc/insserv.conf"); ++} ++ + #endif + + static int service_enumerate(Manager *m) { +@@ -3604,7 +3641,7 @@ static int service_enumerate(Manager *m) + + r = 0; + +-#ifdef TARGET_SUSE ++#if defined(TARGET_SUSE) || defined(TARGET_DEBIAN) + sysv_facility_in_insserv_conf (m); + #endif + Index: systemd-mini.changes =================================================================== --- systemd-mini.changes (revision 311) +++ systemd-mini.changes (revision 5) @@ -1,4 +1,35 @@ ------------------------------------------------------------------- +Tue Nov 20 09:36:43 UTC 2012 - fcrozat@suse.com + +- links more manpages for migrated tools (from Christopher + Yeleighton). +- disable boot.localnet service, ypbind service will do the right + thing now (bnc#716746) +- add xdm-display-manager.patch: pull xdm.service instead of + display-manager.service (needed until xdm initscript is migrated + to native systemd service). +- Add fix-permissions-btmp.patch: ensure btmp is owned only by root + (bnc#777405). +- Have the udev package create a tape group, as referenced by + 50-udev-default.rules and 60-persistent-storage-tape.rules + (DimStar). +- Add fix-bad-memory-access.patch: fix crash in journal rotation. +- Add fix-dbus-crash.patch: fix D-Bus caused crash. +- Add sync-on-shutdown.patch: ensure sync is done when initiating + shutdown. +- Add mount-efivars.patch: mount efivars if booting on UEFI. + + +------------------------------------------------------------------- +Thu Nov 15 14:31:28 UTC 2012 - fcrozat@suse.com + +- Ship a empty systemd-journald initscript in systemd-logger to + stop insserv to complain about missing syslog dependency. +- Update + 0001-service-Fix-dependencies-added-when-parsing-insserv..patch + with bug fixes from Debian. + +------------------------------------------------------------------- Wed Nov 14 17:36:05 UTC 2012 - fcrozat@suse.com - /var/log/journal is now only provided by systemd-logger (journal Index: systemd-mini.spec =================================================================== --- systemd-mini.spec (revision 311) +++ systemd-mini.spec (revision 5) @@ -102,6 +102,7 @@ Source5: systemd-insserv_conf Source6: baselibs.conf Source7: libgcrypt.m4 +Source8: systemd-journald.init Source1060: boot.udev Source1061: write_dev_root_rule @@ -128,6 +129,8 @@ Patch56: support-suse-clock-sysconfig.patch Patch59: fix-enable-disable-boot-initscript.patch Patch60: var-run-lock.patch +Patch63: xdm-display-manager.patch +Patch64: fix-permissions-btmp.patch # Upstream First - Policy: # Never add any patches to this package without the upstream commit id @@ -137,6 +140,14 @@ Patch61: fix-logind-pty-seat.patch # PATCH-FIX-UPSTREAM fix-build-glibc217.patch fcrozat@suse.com -- fix build with latest glibc Patch62: fix-build-glibc217.patch +# PATCH-FIX-UPSTREAM fix-bad-memory-access.patch fcrozat@suse.com -- fix bad memory access +Patch65: fix-bad-memory-access.patch +# PATCH-FIX-UPSTREAM fix-dbus-crash.patch fcrozat@suse.com -- fix D-Bus caused crash +Patch66: fix-dbus-crash.patch +# PATCH-FIX-UPSTREAM sync-on-shutdown.patch fcrozat@suse.com -- Sync on shutdown +Patch67: sync-on-shutdown.patch +# PATCH-FIX-UPSTREAM mount-efivars.patch fcrozat@suse.com -- mount efivars if booting under UEFI +Patch68: mount-efivars.patch # udev patches # PATCH-FIX-OPENSUSE 0001-Reinstate-TIMEOUT-handling.patch @@ -151,8 +162,6 @@ # PATCH-FIX-OPENSUSE 0027-udev-fix-sg-autoload-regression.patch Patch1027: 0027-udev-fix-sg-autoload-regression.patch -# systemd patches - %description Systemd is a system and service manager, compatible with SysV and LSB init scripts for Linux. systemd provides aggressive parallelization @@ -313,6 +322,7 @@ %patch1026 -p1 %patch1027 -p1 +#systemd %patch1 -p1 %patch6 -p1 # don't apply when bootstrapping to not modify configure.in @@ -337,6 +347,12 @@ %patch60 -p1 %patch61 -p1 %patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 %build autoreconf -fiv @@ -368,8 +384,14 @@ ln -sf %{_bindir}/systemd-ask-password $RPM_BUILD_ROOT/bin/systemd-ask-password ln -sf %{_bindir}/systemctl $RPM_BUILD_ROOT/bin/systemctl ln -sf %{_prefix}/lib/systemd/systemd-udevd $RPM_BUILD_ROOT/sbin/udevd +%if ! 0%{?bootstrap} +ln -sf systemd-udevd.8 $RPM_BUILD_ROOT/%{_mandir}/man8/udevd.8 +%endif mkdir -p $RPM_BUILD_ROOT/%{_prefix}/usr/lib/firmware/updates ln -sf /lib/firmware $RPM_BUILD_ROOT/usr/lib/firmware +%if ! 0%{?bootstrap} +install -m755 -D %{S:8} $RPM_BUILD_ROOT/etc/init.d/systemd-journald +%endif install -m755 -D %{S:1060} $RPM_BUILD_ROOT/etc/init.d/boot.udev ln -s systemd-udevd.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev.service @@ -378,11 +400,6 @@ mkdir -p $RPM_BUILD_ROOT/lib/systemd/system/basic.target.wants ln -sf ../udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants -#fix manpages -%if ! 0%{?bootstrap} -sed -i -e 's,^\(\.so \)\(.*\.\)\([0-9]\),\1man\3/\2\3,g' %{buildroot}/%{_mandir}/*/* -%endif - #workaround for 716939 chmod 644 %{buildroot}%{_bindir}/systemd-analyze mkdir -p %{buildroot}%{_sysconfdir}/rpm @@ -392,7 +409,7 @@ install -m755 %{S:3} -D %{buildroot}%{_sbindir}/systemd-sysv-convert # do not install, code has been fixed, might be useful in the future -#install -m755 %{S:5} %{buildroot}/lib/systemd/system-generators +#install -m755 %{S:5} %{buildroot}/usr/lib/systemd/system-generators ln -s ../usr/lib/systemd/systemd %{buildroot}/bin/systemd ln -s ../usr/lib/systemd/systemd %{buildroot}/sbin/init ln -s ../usr/bin/systemctl %{buildroot}/sbin/reboot @@ -415,8 +432,7 @@ ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/ldconfig.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/loadmodules.service install -m644 %{S:2} %{buildroot}/%{_prefix}/lib/systemd/system/localfs.service -# need to be implemented in systemd directly -#ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service +ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/proc.service ln -s systemd-fsck-root.service %{buildroot}/%{_prefix}/lib/systemd/system/rootfsck.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/single.service @@ -442,8 +458,12 @@ %endif # legacy links -ln -s loginctl %{buildroot}%{_bindir}/systemd-loginctl -ln -s journalctl %{buildroot}%{_bindir}/systemd-journalctl +for f in loginctl journalctl ; do + ln -s $f %{buildroot}%{_bindir}/systemd-$f +%if ! 0%{?bootstrap} + ln -s $f.1 %{buildroot}%{_mandir}/man1/systemd-$f.1 +%endif +done ln -s /usr/lib/udev %{buildroot}/lib/udev # Create the /var/log/journal directory to change the volatile journal to a persistent one @@ -532,6 +552,8 @@ elif [ ! -e /lib/udev ]; then ln -s /usr/lib/udev /lib/udev fi +# Create "tape" group which is referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules +/usr/sbin/groupadd -r tape 2> /dev/null || : # kill daemon if we are not in a chroot if test -f /proc/1/exe -a -d /proc/1/root ; then if test "$(stat -Lc '%%D-%%i' /)" = "$(stat -Lc '%%D-%%i' /proc/1/root)"; then @@ -724,6 +746,10 @@ %exclude %{_mandir}/man8/telinit.8* %exclude %{_mandir}/man8/runlevel.8* %exclude %{_mandir}/man*/*udev*.[0-9]* + +# Packaged in analyze subpackage +%exclude %{_mandir}/man1/systemd-analyze.1* + %{_mandir}/man1/*.1* %{_mandir}/man3/*.3* %{_mandir}/man5/*.5* @@ -787,7 +813,11 @@ %endif %files analyze +%defattr(-,root,root) %attr(0755,root,root) /usr/bin/systemd-analyze +%if ! 0%{?bootstrap} +%{_mandir}/man1/systemd-analyze.1* +%endif %files -n %{udevpkgname} %defattr(-,root,root) @@ -878,6 +908,7 @@ %defattr(-,root,root) %dir /var/log/journal /var/log/README +/etc/init.d/systemd-journald %endif Index: systemd.changes =================================================================== --- systemd.changes (revision 311) +++ systemd.changes (revision 5) @@ -1,4 +1,35 @@ ------------------------------------------------------------------- +Tue Nov 20 09:36:43 UTC 2012 - fcrozat@suse.com + +- links more manpages for migrated tools (from Christopher + Yeleighton). +- disable boot.localnet service, ypbind service will do the right + thing now (bnc#716746) +- add xdm-display-manager.patch: pull xdm.service instead of + display-manager.service (needed until xdm initscript is migrated + to native systemd service). +- Add fix-permissions-btmp.patch: ensure btmp is owned only by root + (bnc#777405). +- Have the udev package create a tape group, as referenced by + 50-udev-default.rules and 60-persistent-storage-tape.rules + (DimStar). +- Add fix-bad-memory-access.patch: fix crash in journal rotation. +- Add fix-dbus-crash.patch: fix D-Bus caused crash. +- Add sync-on-shutdown.patch: ensure sync is done when initiating + shutdown. +- Add mount-efivars.patch: mount efivars if booting on UEFI. + + +------------------------------------------------------------------- +Thu Nov 15 14:31:28 UTC 2012 - fcrozat@suse.com + +- Ship a empty systemd-journald initscript in systemd-logger to + stop insserv to complain about missing syslog dependency. +- Update + 0001-service-Fix-dependencies-added-when-parsing-insserv..patch + with bug fixes from Debian. + +------------------------------------------------------------------- Wed Nov 14 17:36:05 UTC 2012 - fcrozat@suse.com - /var/log/journal is now only provided by systemd-logger (journal Index: systemd.spec =================================================================== --- systemd.spec (revision 311) +++ systemd.spec (revision 5) @@ -97,6 +97,7 @@ Source5: systemd-insserv_conf Source6: baselibs.conf Source7: libgcrypt.m4 +Source8: systemd-journald.init Source1060: boot.udev Source1061: write_dev_root_rule @@ -123,6 +124,8 @@ Patch56: support-suse-clock-sysconfig.patch Patch59: fix-enable-disable-boot-initscript.patch Patch60: var-run-lock.patch +Patch63: xdm-display-manager.patch +Patch64: fix-permissions-btmp.patch # Upstream First - Policy: # Never add any patches to this package without the upstream commit id @@ -132,6 +135,14 @@ Patch61: fix-logind-pty-seat.patch # PATCH-FIX-UPSTREAM fix-build-glibc217.patch fcrozat@suse.com -- fix build with latest glibc Patch62: fix-build-glibc217.patch +# PATCH-FIX-UPSTREAM fix-bad-memory-access.patch fcrozat@suse.com -- fix bad memory access +Patch65: fix-bad-memory-access.patch +# PATCH-FIX-UPSTREAM fix-dbus-crash.patch fcrozat@suse.com -- fix D-Bus caused crash +Patch66: fix-dbus-crash.patch +# PATCH-FIX-UPSTREAM sync-on-shutdown.patch fcrozat@suse.com -- Sync on shutdown +Patch67: sync-on-shutdown.patch +# PATCH-FIX-UPSTREAM mount-efivars.patch fcrozat@suse.com -- mount efivars if booting under UEFI +Patch68: mount-efivars.patch # udev patches # PATCH-FIX-OPENSUSE 0001-Reinstate-TIMEOUT-handling.patch @@ -146,8 +157,6 @@ # PATCH-FIX-OPENSUSE 0027-udev-fix-sg-autoload-regression.patch Patch1027: 0027-udev-fix-sg-autoload-regression.patch -# systemd patches - %description Systemd is a system and service manager, compatible with SysV and LSB init scripts for Linux. systemd provides aggressive parallelization @@ -308,6 +317,7 @@ %patch1026 -p1 %patch1027 -p1 +#systemd %patch1 -p1 %patch6 -p1 # don't apply when bootstrapping to not modify configure.in @@ -332,6 +342,12 @@ %patch60 -p1 %patch61 -p1 %patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 %build autoreconf -fiv @@ -363,8 +379,14 @@ ln -sf %{_bindir}/systemd-ask-password $RPM_BUILD_ROOT/bin/systemd-ask-password ln -sf %{_bindir}/systemctl $RPM_BUILD_ROOT/bin/systemctl ln -sf %{_prefix}/lib/systemd/systemd-udevd $RPM_BUILD_ROOT/sbin/udevd +%if ! 0%{?bootstrap} +ln -sf systemd-udevd.8 $RPM_BUILD_ROOT/%{_mandir}/man8/udevd.8 +%endif mkdir -p $RPM_BUILD_ROOT/%{_prefix}/usr/lib/firmware/updates ln -sf /lib/firmware $RPM_BUILD_ROOT/usr/lib/firmware +%if ! 0%{?bootstrap} +install -m755 -D %{S:8} $RPM_BUILD_ROOT/etc/init.d/systemd-journald +%endif install -m755 -D %{S:1060} $RPM_BUILD_ROOT/etc/init.d/boot.udev ln -s systemd-udevd.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev.service @@ -373,11 +395,6 @@ mkdir -p $RPM_BUILD_ROOT/lib/systemd/system/basic.target.wants ln -sf ../udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants -#fix manpages -%if ! 0%{?bootstrap} -sed -i -e 's,^\(\.so \)\(.*\.\)\([0-9]\),\1man\3/\2\3,g' %{buildroot}/%{_mandir}/*/* -%endif - #workaround for 716939 chmod 644 %{buildroot}%{_bindir}/systemd-analyze mkdir -p %{buildroot}%{_sysconfdir}/rpm @@ -387,7 +404,7 @@ install -m755 %{S:3} -D %{buildroot}%{_sbindir}/systemd-sysv-convert # do not install, code has been fixed, might be useful in the future -#install -m755 %{S:5} %{buildroot}/lib/systemd/system-generators +#install -m755 %{S:5} %{buildroot}/usr/lib/systemd/system-generators ln -s ../usr/lib/systemd/systemd %{buildroot}/bin/systemd ln -s ../usr/lib/systemd/systemd %{buildroot}/sbin/init ln -s ../usr/bin/systemctl %{buildroot}/sbin/reboot @@ -410,8 +427,7 @@ ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/ldconfig.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/loadmodules.service install -m644 %{S:2} %{buildroot}/%{_prefix}/lib/systemd/system/localfs.service -# need to be implemented in systemd directly -#ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service +ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/proc.service ln -s systemd-fsck-root.service %{buildroot}/%{_prefix}/lib/systemd/system/rootfsck.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/single.service @@ -437,8 +453,12 @@ %endif # legacy links -ln -s loginctl %{buildroot}%{_bindir}/systemd-loginctl -ln -s journalctl %{buildroot}%{_bindir}/systemd-journalctl +for f in loginctl journalctl ; do + ln -s $f %{buildroot}%{_bindir}/systemd-$f +%if ! 0%{?bootstrap} + ln -s $f.1 %{buildroot}%{_mandir}/man1/systemd-$f.1 +%endif +done ln -s /usr/lib/udev %{buildroot}/lib/udev # Create the /var/log/journal directory to change the volatile journal to a persistent one @@ -527,6 +547,8 @@ elif [ ! -e /lib/udev ]; then ln -s /usr/lib/udev /lib/udev fi +# Create "tape" group which is referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules +/usr/sbin/groupadd -r tape 2> /dev/null || : # kill daemon if we are not in a chroot if test -f /proc/1/exe -a -d /proc/1/root ; then if test "$(stat -Lc '%%D-%%i' /)" = "$(stat -Lc '%%D-%%i' /proc/1/root)"; then @@ -719,6 +741,10 @@ %exclude %{_mandir}/man8/telinit.8* %exclude %{_mandir}/man8/runlevel.8* %exclude %{_mandir}/man*/*udev*.[0-9]* + +# Packaged in analyze subpackage +%exclude %{_mandir}/man1/systemd-analyze.1* + %{_mandir}/man1/*.1* %{_mandir}/man3/*.3* %{_mandir}/man5/*.5* @@ -782,7 +808,11 @@ %endif %files analyze +%defattr(-,root,root) %attr(0755,root,root) /usr/bin/systemd-analyze +%if ! 0%{?bootstrap} +%{_mandir}/man1/systemd-analyze.1* +%endif %files -n %{udevpkgname} %defattr(-,root,root) @@ -873,6 +903,7 @@ %defattr(-,root,root) %dir /var/log/journal /var/log/README +/etc/init.d/systemd-journald %endif Index: fix-bad-memory-access.patch =================================================================== --- fix-bad-memory-access.patch (added) +++ fix-bad-memory-access.patch (revision 5) @@ -0,0 +1,23 @@ +From 7d73c1343be02a59b17de0cd34375deeb815d89c Mon Sep 17 00:00:00 2001 +From: Lennart Poettering <lennart@poettering.net> +Date: Tue, 20 Nov 2012 00:19:27 +0100 +Subject: [PATCH] journald: fix bad memory access + +https://bugzilla.redhat.com/show_bug.cgi?id=875653 +--- + src/journal/journald-server.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: systemd-195/src/journal/journald.c +=================================================================== +--- systemd-195.orig/src/journal/journald.c ++++ systemd-195/src/journal/journald.c +@@ -342,7 +342,7 @@ static void server_rotate(Server *s) { + HASHMAP_FOREACH_KEY(f, k, s->user_journals, i) { + r = journal_file_rotate(&f, s->compress, s->seal); + if (r < 0) +- if (f->path) ++ if (f) + log_error("Failed to rotate %s: %s", f->path, strerror(-r)); + else + log_error("Failed to create user journal: %s", strerror(-r)); Index: fix-dbus-crash.patch =================================================================== --- fix-dbus-crash.patch (added) +++ fix-dbus-crash.patch (revision 5) @@ -0,0 +1,32 @@ +From 645a9e5a2bbb06464a3fba1a3501e9d79e5bbad8 Mon Sep 17 00:00:00 2001 +From: Eelco Dolstra <eelco.dolstra@logicblox.com> +Date: Wed, 31 Oct 2012 11:53:56 +0100 +Subject: [PATCH] dbus-manager: fix a fatal dbus abort in + bus_manager_message_handler() + +If ListUnitFiles fails, or an OOM occurs, then dbus_message_unref() +will be called twice on "reply", causing systemd to crash. So remove +the call to dbus_message_unref(); it is unnecessary because of +the cleanup attribute on "reply". + +[zj: modified to leave one dbus_message_unref() alone, per Colin +Walters' comment.] +--- + src/core/dbus-manager.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c +index 2010241..3cf3e90 100644 +--- a/src/core/dbus-manager.c ++++ b/src/core/dbus-manager.c +@@ -1436,7 +1436,6 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, + r = unit_file_get_list(m->running_as == SYSTEMD_SYSTEM ? UNIT_FILE_SYSTEM : UNIT_FILE_USER, NULL, h); + if (r < 0) { + unit_file_list_free(h); +- dbus_message_unref(reply); + return bus_send_error_reply(connection, message, NULL, r); + } + +-- +1.7.10.4 + Index: fix-permissions-btmp.patch =================================================================== --- fix-permissions-btmp.patch (added) +++ fix-permissions-btmp.patch (revision 5) @@ -0,0 +1,13 @@ +Index: systemd-44/tmpfiles.d/systemd.conf +=================================================================== +--- systemd-44.orig/tmpfiles.d/systemd.conf ++++ systemd-44/tmpfiles.d/systemd.conf +@@ -11,7 +11,7 @@ d /run/user 0755 root root 10d + F /run/utmp 0664 root utmp - + + f /var/log/wtmp 0664 root utmp - +-f /var/log/btmp 0600 root utmp - ++f /var/log/btmp 0600 root root - + + d /var/cache/man - - - 30d + Index: mount-efivars.patch =================================================================== --- mount-efivars.patch (added) +++ mount-efivars.patch (revision 5) @@ -0,0 +1,336 @@ +From f271dd97622b656c1c013d181ea615c671cc2438 Mon Sep 17 00:00:00 2001 +From: "Lee, Chun-Yi" <joeyli.kernel@gmail.com> +Date: Sat, 27 Oct 2012 11:23:22 +0800 +Subject: [PATCH] systemd: mount the EFI variable filesystem +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Add efivarfs to the mount_table in mount-setup.c, so the EFI variable +filesystem will be mounted when systemd executed. + +The EFI variable filesystem will merge in v3.7 or v3.8 linux kernel. + +Cc: Kay Sievers <kay@vrfy.org> +Cc: Lennart Poettering <lennart@poettering.net> +Cc: Mantas Mikulėnas <grawity@gmail.com> +Cc: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> +Cc: Matt Fleming <matt.fleming@intel.com> +Cc: Jeremy Kerr <jeremy.kerr@canonical.com> +Cc: Matthew Garrett <mjg@redhat.com> +Signed-off-by: Lee, Chun-Yi <jlee@suse.com> +--- + src/core/kmod-setup.c | 7 ++++--- + src/core/mount-setup.c | 1 + + 2 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index cc2a2d9..ce8a8e7 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -31,9 +31,10 @@ + #include "kmod-setup.h" + + static const char * const kmod_table[] = { +- "autofs4", "/sys/class/misc/autofs", +- "ipv6", "/sys/module/ipv6", +- "unix", "/proc/net/unix" ++ "autofs4", "/sys/class/misc/autofs", ++ "ipv6", "/sys/module/ipv6", ++ "efivarfs", "/sys/firmware/efi/efivars", ++ "unix", "/proc/net/unix" + }; + + #pragma GCC diagnostic push +diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c +index 0fd112f..9894c7f 100644 +--- a/src/core/mount-setup.c ++++ b/src/core/mount-setup.c +@@ -66,6 +66,7 @@ static const MountPoint mount_table[] = { + { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, + { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, true, true }, + { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, ++ { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, + { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, + { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, false, true }, + { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +-- +1.7.10.4 + +From c1e5704657315b436c0409e8172c1fcb76adccad Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:06:27 +0100 +Subject: [PATCH] shared: add is_efiboot() + +--- + src/shared/util.c | 4 ++++ + src/shared/util.h | 2 ++ + 2 files changed, 6 insertions(+) + +diff --git a/src/shared/util.c b/src/shared/util.c +index 2a8afae..9983695 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -77,6 +77,10 @@ char **saved_argv = NULL; + static volatile unsigned cached_columns = 0; + static volatile unsigned cached_lines = 0; + ++bool is_efiboot(void) { ++ return access("/sys/firmware/efi", F_OK) >= 0; ++} ++ + size_t page_size(void) { + static __thread size_t pgsz = 0; + long r; +diff --git a/src/shared/util.h b/src/shared/util.h +index e387b12..99972cc 100644 +--- a/src/shared/util.h ++++ b/src/shared/util.h +@@ -90,6 +90,8 @@ union dirent_storage { + #define ANSI_HIGHLIGHT_YELLOW_ON "\x1B[1;33m" + #define ANSI_HIGHLIGHT_OFF "\x1B[0m" + ++bool is_efiboot(void); ++ + usec_t now(clockid_t clock); + + dual_timestamp* dual_timestamp_get(dual_timestamp *ts); +-- +1.7.10.4 + +From 1022373284b7562431fb0a6dba45db8af089a0e3 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:54:19 +0100 +Subject: [PATCH] kmod-setup: add conditional module loading callback + +--- + src/core/kmod-setup.c | 32 ++++++++++++++++++++------------ + 1 file changed, 20 insertions(+), 12 deletions(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index ce8a8e7..383a6b2 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -30,11 +30,17 @@ + + #include "kmod-setup.h" + +-static const char * const kmod_table[] = { +- "autofs4", "/sys/class/misc/autofs", +- "ipv6", "/sys/module/ipv6", +- "efivarfs", "/sys/firmware/efi/efivars", +- "unix", "/proc/net/unix" ++typedef struct Kmodule { ++ const char *name; ++ const char *directory; ++ bool (*condition_fn)(void); ++} KModule; ++ ++static const KModule kmod_table[] = { ++ { "autofs4", "/sys/class/misc/autofs", NULL } , ++ { "ipv6", "/sys/module/ipv6", NULL }, ++ { "efivarfs", "/sys/firmware/efi/efivars", NULL }, ++ { "unix", "/proc/net/unix", NULL } , + }; + + #pragma GCC diagnostic push +@@ -42,7 +48,8 @@ static const char * const kmod_table[] = { + static void systemd_kmod_log(void *data, int priority, const char *file, int line, + const char *fn, const char *format, va_list args) + { +- log_metav(priority, file, line, fn, format, args); ++ /* library logging is enabled at debug only */ ++ log_metav(LOG_DEBUG, file, line, fn, format, args); + } + #pragma GCC diagnostic pop + +@@ -53,13 +60,15 @@ int kmod_setup(void) { + int err; + + for (i = 0; i < ELEMENTSOF(kmod_table); i += 2) { ++ if (kmod_table[i].condition_fn && !kmod_table[i].condition_fn()) ++ continue; + +- if (access(kmod_table[i+1], F_OK) >= 0) ++ if (access(kmod_table[i].directory, F_OK) >= 0) + continue; + + log_debug("Your kernel apparently lacks built-in %s support. Might be a good idea to compile it in. " + "We'll now try to work around this by loading the module...", +- kmod_table[i]); ++ kmod_table[i].name); + + if (!ctx) { + ctx = kmod_new(NULL, NULL); +@@ -69,13 +78,12 @@ int kmod_setup(void) { + } + + kmod_set_log_fn(ctx, systemd_kmod_log, NULL); +- + kmod_load_resources(ctx); + } + +- err = kmod_module_new_from_name(ctx, kmod_table[i], &mod); ++ err = kmod_module_new_from_name(ctx, kmod_table[i].name, &mod); + if (err < 0) { +- log_error("Failed to load module '%s'", kmod_table[i]); ++ log_error("Failed to lookup module '%s'", kmod_table[i].name); + continue; + } + +@@ -85,7 +93,7 @@ int kmod_setup(void) { + else if (err == KMOD_PROBE_APPLY_BLACKLIST) + log_info("Module '%s' is blacklisted", kmod_module_get_name(mod)); + else +- log_error("Failed to insert '%s'", kmod_module_get_name(mod)); ++ log_error("Failed to insert module '%s'", kmod_module_get_name(mod)); + + kmod_module_unref(mod); + } +-- +1.7.10.4 + +From 3dfb265083347cb5700dc38f7cc0f479f378e6e9 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:55:23 +0100 +Subject: [PATCH] kmod-setup: mounting efivarfs, *after* we tried to mount it, + is pointless + +The mount() system call, which we issue before loading modules, will trigger +a modprobe by the kernel and block until it returns. Trying to load it again +later, will have exactly the same result as the first time. +--- + src/core/kmod-setup.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index 383a6b2..20ab232 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -39,7 +39,6 @@ typedef struct Kmodule { + static const KModule kmod_table[] = { + { "autofs4", "/sys/class/misc/autofs", NULL } , + { "ipv6", "/sys/module/ipv6", NULL }, +- { "efivarfs", "/sys/firmware/efi/efivars", NULL }, + { "unix", "/proc/net/unix", NULL } , + }; + +-- +1.7.10.4 + +From 6aa220e019f9dffd96590b06b68f937985204109 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 17:03:48 +0100 +Subject: [PATCH] mount-setup: try mounting 'efivarfs' only if the system + bootet with EFI + +--- + TODO | 3 --- + src/core/mount-setup.c | 50 ++++++++++++++++++++++++++++++++---------------- + 2 files changed, 34 insertions(+), 19 deletions(-) + +diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c +index 9894c7f..98614d0 100644 +--- a/src/core/mount-setup.c ++++ b/src/core/mount-setup.c +@@ -46,14 +46,20 @@ + #define TTY_GID 5 + #endif + ++typedef enum MountMode { ++ MNT_NONE = 0, ++ MNT_FATAL = 1 << 0, ++ MNT_IN_CONTAINER = 1 << 1, ++} MountMode; ++ + typedef struct MountPoint { + const char *what; + const char *where; + const char *type; + const char *options; + unsigned long flags; +- bool fatal; +- bool in_container; ++ bool (*condition_fn)(void); ++ MountMode mode; + } MountPoint; + + /* The first three entries we might need before SELinux is up. The +@@ -62,16 +68,26 @@ typedef struct MountPoint { + #define N_EARLY_MOUNT 4 + + static const MountPoint mount_table[] = { +- { "proc", "/proc", "proc", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, +- { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, +- { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, true, true }, +- { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, +- { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, +- { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +- { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, false, true }, +- { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +- { "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME, false, true }, +- { "cgroup", "/sys/fs/cgroup/systemd", "cgroup", "none,name=systemd", MS_NOSUID|MS_NOEXEC|MS_NODEV, false, true }, ++ { "proc", "/proc", "proc", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_NONE }, ++ { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ is_efiboot, MNT_NONE }, ++ { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, ++ NULL, MNT_IN_CONTAINER }, ++ { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_IN_CONTAINER }, ++ { "cgroup", "/sys/fs/cgroup/systemd", "cgroup", "none,name=systemd", MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_IN_CONTAINER }, + }; + + /* These are API file systems that might be mounted by other software, +@@ -119,6 +135,9 @@ static int mount_one(const MountPoint *p, bool relabel) { + + assert(p); + ++ if (p->condition_fn && !p->condition_fn()) ++ return 0; ++ + /* Relabel first, just in case */ + if (relabel) + label_fix(p->where, true, true); +@@ -131,7 +150,7 @@ static int mount_one(const MountPoint *p, bool relabel) { + return 0; + + /* Skip securityfs in a container */ +- if (!p->in_container && detect_container(NULL) > 0) ++ if (!(p->mode & MNT_IN_CONTAINER) && detect_container(NULL) > 0) + return 0; + + /* The access mode here doesn't really matter too much, since +@@ -149,8 +168,8 @@ static int mount_one(const MountPoint *p, bool relabel) { + p->type, + p->flags, + p->options) < 0) { +- log_full(p->fatal ? LOG_ERR : LOG_DEBUG, "Failed to mount %s: %s", p->where, strerror(errno)); +- return p->fatal ? -errno : 0; ++ log_full((p->mode & MNT_FATAL) ? LOG_ERR : LOG_DEBUG, "Failed to mount %s: %s", p->where, strerror(errno)); ++ return (p->mode & MNT_FATAL) ? -errno : 0; + } + + /* Relabel again, since we now mounted something fresh here */ +@@ -289,7 +308,6 @@ int mount_cgroup_controllers(char ***join_controllers) { + p.type = "cgroup"; + p.options = options; + p.flags = MS_NOSUID|MS_NOEXEC|MS_NODEV; +- p.fatal = false; + + r = mount_one(&p, true); + free(controller); +-- +1.7.10.4 + Index: sync-on-shutdown.patch =================================================================== --- sync-on-shutdown.patch (added) +++ sync-on-shutdown.patch (revision 5) @@ -0,0 +1,49 @@ +From 0049f05a8bb82c3e084bacc5945596761d706c55 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering <lennart@poettering.net> +Date: Fri, 16 Nov 2012 01:30:29 +0100 +Subject: [PATCH] shutdown: readd explicit sync() when shutting down + +As it turns out reboot() doesn't actually imply a file system sync, but +only a disk sync. Accordingly, readd explicit sync() invocations +immediately before we invoke reboot(). + +This is much less dramatic than it might sounds as we umount all +disks/read-only remount them anyway before going down. +--- + src/core/service.c | 1 + + src/core/shutdown.c | 7 +++++++ + 2 files changed, 8 insertions(+) + +diff --git a/src/core/service.c b/src/core/service.c +index cf08485..df72aba 100644 +--- a/src/core/service.c ++++ b/src/core/service.c +@@ -2485,6 +2485,7 @@ static int service_start_limit_test(Service *s) { + + case SERVICE_START_LIMIT_REBOOT_IMMEDIATE: + log_warning("%s start request repeated too quickly, rebooting immediately.", UNIT(s)->id); ++ sync(); + reboot(RB_AUTOBOOT); + break; + +diff --git a/src/core/shutdown.c b/src/core/shutdown.c +index cc8c57b..b59aef1 100644 +--- a/src/core/shutdown.c ++++ b/src/core/shutdown.c +@@ -273,6 +273,13 @@ int main(int argc, char *argv[]) { + } + } + ++ /* The kernel will automaticall flush ATA disks and suchlike ++ * on reboot(), but the file systems need to be synce'd ++ * explicitly in advance. So let's do this here, but not ++ * needlessly slow down containers. */ ++ if (!in_container) ++ sync(); ++ + if (cmd == LINUX_REBOOT_CMD_KEXEC) { + + if (!in_container) { +-- +1.7.10.4 + Index: systemd-journald.init =================================================================== --- systemd-journald.init (added) +++ systemd-journald.init (revision 5) @@ -0,0 +1,33 @@ +#! /bin/sh +# +# Copyright (c) 2001-2002 SuSE Linux AG, Nuernberg, Germany. +# All rights reserved. +# +# /etc/init.d/systemd-journald +# +### BEGIN INIT INFO +# Provides: syslog +# Required-Start: $null +# Required-Stop: $null +# Default-Start: 2 3 5 +# Default-Stop: +# Short-Description: compat wrapper for journald +# Description: compat wrapper for journald +### END INIT INFO + +. /etc/rc.status + +rc_reset + +case "$1" in + start|stop|restart) + rc_failed 3 + rc_status -v + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 + ;; +esac + +rc_exit Index: xdm-display-manager.patch =================================================================== --- xdm-display-manager.patch (added) +++ xdm-display-manager.patch (revision 5) @@ -0,0 +1,13 @@ +Index: systemd-195/units/graphical.target +=================================================================== +--- systemd-195.orig/units/graphical.target ++++ systemd-195/units/graphical.target +@@ -11,7 +11,7 @@ Documentation=man:systemd.special(7) + Requires=multi-user.target + After=multi-user.target + Conflicts=rescue.target +-Wants=display-manager.service ++Wants=xdm.service + AllowIsolate=yes + + [Install] OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=312
2012-11-20 13:10:12 +01:00
Patch63: xdm-display-manager.patch
Patch64: fix-permissions-btmp.patch
# PATCH-FIX-UPSTREAM fix-debugshell.patch fcrozat@suse.com bnc#789052 -- use bash if sushell isn't available
Patch71: fix-debugshell.patch
# PATCH-FIX-OPENSUSE handle-root-uses-lang.patch bnc#792182 fcrozat@suse.com -- handle ROOT_USES_LANG=ctype
Patch72: handle-root-uses-lang.patch
# Upstream First - Policy:
# Never add any patches to this package without the upstream commit id
# in the patch. Any patches added here without a very good reason to make
# an exception will be silently removed with the next version update.
# PATCH-FIX-UPSTREAM fix-logind-pty-seat.patch fcrozat@suse.com -- fix logind complaining when doing su/sudo in X terminal
Patch61: fix-logind-pty-seat.patch
# PATCH-FIX-UPSTREAM fix-build-glibc217.patch fcrozat@suse.com -- fix build with latest glibc
Patch62: fix-build-glibc217.patch
- links more manpages for migrated tools (from Christopher Yeleighton). - disable boot.localnet service, ypbind service will do the right thing now (bnc#716746) - add xdm-display-manager.patch: pull xdm.service instead of display-manager.service (needed until xdm initscript is migrated to native systemd service). - Add fix-permissions-btmp.patch: ensure btmp is owned only by root (bnc#777405). - Have the udev package create a tape group, as referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules (DimStar). - Add fix-bad-memory-access.patch: fix crash in journal rotation. - Add fix-dbus-crash.patch: fix D-Bus caused crash. - Add sync-on-shutdown.patch: ensure sync is done when initiating shutdown. - Add mount-efivars.patch: mount efivars if booting on UEFI. - Ship a empty systemd-journald initscript in systemd-logger to stop insserv to complain about missing syslog dependency. - Update 0001-service-Fix-dependencies-added-when-parsing-insserv..patch with bug fixes from Debian. old: Base:System/systemd new: home:fcrozat:branches:Base:System/systemd rev NoneIndex: 0001-service-Fix-dependencies-added-when-parsing-insserv..patch =================================================================== --- 0001-service-Fix-dependencies-added-when-parsing-insserv..patch (revision 311) +++ 0001-service-Fix-dependencies-added-when-parsing-insserv..patch (revision 5) @@ -1,17 +1,35 @@ -From 6620bceb7233a830be3635a4f7a7dc75c13a9c8e Mon Sep 17 00:00:00 2001 -From: Frederic Crozat <fcrozat@suse.com> -Date: Fri, 30 Sep 2011 14:12:45 +0200 -Subject: [PATCH] service: Fix dependencies added when parsing insserv.conf - ---- - src/service.c | 16 +++++++++------- - 1 files changed, 9 insertions(+), 7 deletions(-) - -Index: systemd-41/src/service.c +Index: systemd-195/src/core/service.c =================================================================== ---- systemd-41.orig/src/core/service.c -+++ systemd-41/src/core/service.c -@@ -3210,23 +3210,30 @@ static void sysv_facility_in_insserv_con +--- systemd-195.orig/src/core/service.c ++++ systemd-195/src/core/service.c +@@ -3391,12 +3391,13 @@ static void service_notify_message(Unit + + #ifdef HAVE_SYSV_COMPAT + +-#ifdef TARGET_SUSE +-static void sysv_facility_in_insserv_conf(Manager *mgr) { +- FILE *f=NULL; ++#if defined(TARGET_SUSE) || defined(TARGET_DEBIAN) ++static void sysv_parse_insserv_conf(Manager *mgr, const char* filename) { ++ FILE *f = NULL; + int r; + +- if (!(f = fopen("/etc/insserv.conf", "re"))) { ++ if (!(f = fopen(filename, "re"))) { ++ log_error("Failed to open file %s", filename); + r = errno == ENOENT ? 0 : -errno; + goto finish; + } +@@ -3410,7 +3411,7 @@ static void sysv_facility_in_insserv_con + break; + + r = -errno; +- log_error("Failed to read configuration file '/etc/insserv.conf': %s", strerror(-r)); ++ log_error("Failed to read configuration file '%s': %s", filename, strerror(-r)); + goto finish; + } + +@@ -3425,23 +3426,30 @@ static void sysv_facility_in_insserv_con Unit *u; if (sysv_translate_facility(parsed[0], NULL, &facility) < 0) continue; @@ -29,12 +47,12 @@ STRV_FOREACH (j, parsed+1) { - if (*j[0]=='+') { - e = UNIT_WANTS; -+ if (*j[0]=='+') ++ if (*j[0] == '+') name = *j+1; - } - else { - e = UNIT_REQUIRES; -+ else ++ else name = *j; - } + if (streq(name, "boot.localfs") || @@ -44,9 +62,54 @@ continue; - r = unit_add_two_dependencies_by_name(u, UNIT_BEFORE, e, dep, NULL, true); -+ r = unit_add_dependency_by_name_inverse(u, UNIT_BEFORE, dep, NULL, true); -+ if (*j[0]!='+') ++ r = unit_add_two_dependencies_by_name_inverse(u, UNIT_WANTS, UNIT_BEFORE, dep, NULL, true); ++ if (*j[0] != '+') + r = unit_add_dependency_by_name(u, UNIT_REQUIRES, dep, NULL, true); free(dep); } } +@@ -3454,6 +3462,35 @@ finish: + fclose(f); + + } ++ ++static void sysv_facility_in_insserv_conf(Manager *mgr) { ++ DIR *d =NULL; ++ struct dirent *de; ++ ++#ifdef TARGET_DEBIAN ++ if (!(d = opendir("/etc/insserv.conf.d/"))) ++ if (errno != ENOENT) { ++ log_warning("opendir() failed on /etc/insserv.conf.d/ %s", strerror(errno)); ++ goto finish; ++ } ++ ++ while ((de = readdir(d))) { ++ char *path = NULL; ++ if (ignore_file(de->d_name)) ++ continue; ++ ++ path = join("/etc/insserv.conf.d/", de->d_name, NULL); ++ sysv_parse_insserv_conf(mgr, path); ++ free(path); ++ } ++finish: ++ if (d) ++ closedir(d); ++#endif ++ ++ sysv_parse_insserv_conf(mgr, "/etc/insserv.conf"); ++} ++ + #endif + + static int service_enumerate(Manager *m) { +@@ -3604,7 +3641,7 @@ static int service_enumerate(Manager *m) + + r = 0; + +-#ifdef TARGET_SUSE ++#if defined(TARGET_SUSE) || defined(TARGET_DEBIAN) + sysv_facility_in_insserv_conf (m); + #endif + Index: systemd-mini.changes =================================================================== --- systemd-mini.changes (revision 311) +++ systemd-mini.changes (revision 5) @@ -1,4 +1,35 @@ ------------------------------------------------------------------- +Tue Nov 20 09:36:43 UTC 2012 - fcrozat@suse.com + +- links more manpages for migrated tools (from Christopher + Yeleighton). +- disable boot.localnet service, ypbind service will do the right + thing now (bnc#716746) +- add xdm-display-manager.patch: pull xdm.service instead of + display-manager.service (needed until xdm initscript is migrated + to native systemd service). +- Add fix-permissions-btmp.patch: ensure btmp is owned only by root + (bnc#777405). +- Have the udev package create a tape group, as referenced by + 50-udev-default.rules and 60-persistent-storage-tape.rules + (DimStar). +- Add fix-bad-memory-access.patch: fix crash in journal rotation. +- Add fix-dbus-crash.patch: fix D-Bus caused crash. +- Add sync-on-shutdown.patch: ensure sync is done when initiating + shutdown. +- Add mount-efivars.patch: mount efivars if booting on UEFI. + + +------------------------------------------------------------------- +Thu Nov 15 14:31:28 UTC 2012 - fcrozat@suse.com + +- Ship a empty systemd-journald initscript in systemd-logger to + stop insserv to complain about missing syslog dependency. +- Update + 0001-service-Fix-dependencies-added-when-parsing-insserv..patch + with bug fixes from Debian. + +------------------------------------------------------------------- Wed Nov 14 17:36:05 UTC 2012 - fcrozat@suse.com - /var/log/journal is now only provided by systemd-logger (journal Index: systemd-mini.spec =================================================================== --- systemd-mini.spec (revision 311) +++ systemd-mini.spec (revision 5) @@ -102,6 +102,7 @@ Source5: systemd-insserv_conf Source6: baselibs.conf Source7: libgcrypt.m4 +Source8: systemd-journald.init Source1060: boot.udev Source1061: write_dev_root_rule @@ -128,6 +129,8 @@ Patch56: support-suse-clock-sysconfig.patch Patch59: fix-enable-disable-boot-initscript.patch Patch60: var-run-lock.patch +Patch63: xdm-display-manager.patch +Patch64: fix-permissions-btmp.patch # Upstream First - Policy: # Never add any patches to this package without the upstream commit id @@ -137,6 +140,14 @@ Patch61: fix-logind-pty-seat.patch # PATCH-FIX-UPSTREAM fix-build-glibc217.patch fcrozat@suse.com -- fix build with latest glibc Patch62: fix-build-glibc217.patch +# PATCH-FIX-UPSTREAM fix-bad-memory-access.patch fcrozat@suse.com -- fix bad memory access +Patch65: fix-bad-memory-access.patch +# PATCH-FIX-UPSTREAM fix-dbus-crash.patch fcrozat@suse.com -- fix D-Bus caused crash +Patch66: fix-dbus-crash.patch +# PATCH-FIX-UPSTREAM sync-on-shutdown.patch fcrozat@suse.com -- Sync on shutdown +Patch67: sync-on-shutdown.patch +# PATCH-FIX-UPSTREAM mount-efivars.patch fcrozat@suse.com -- mount efivars if booting under UEFI +Patch68: mount-efivars.patch # udev patches # PATCH-FIX-OPENSUSE 0001-Reinstate-TIMEOUT-handling.patch @@ -151,8 +162,6 @@ # PATCH-FIX-OPENSUSE 0027-udev-fix-sg-autoload-regression.patch Patch1027: 0027-udev-fix-sg-autoload-regression.patch -# systemd patches - %description Systemd is a system and service manager, compatible with SysV and LSB init scripts for Linux. systemd provides aggressive parallelization @@ -313,6 +322,7 @@ %patch1026 -p1 %patch1027 -p1 +#systemd %patch1 -p1 %patch6 -p1 # don't apply when bootstrapping to not modify configure.in @@ -337,6 +347,12 @@ %patch60 -p1 %patch61 -p1 %patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 %build autoreconf -fiv @@ -368,8 +384,14 @@ ln -sf %{_bindir}/systemd-ask-password $RPM_BUILD_ROOT/bin/systemd-ask-password ln -sf %{_bindir}/systemctl $RPM_BUILD_ROOT/bin/systemctl ln -sf %{_prefix}/lib/systemd/systemd-udevd $RPM_BUILD_ROOT/sbin/udevd +%if ! 0%{?bootstrap} +ln -sf systemd-udevd.8 $RPM_BUILD_ROOT/%{_mandir}/man8/udevd.8 +%endif mkdir -p $RPM_BUILD_ROOT/%{_prefix}/usr/lib/firmware/updates ln -sf /lib/firmware $RPM_BUILD_ROOT/usr/lib/firmware +%if ! 0%{?bootstrap} +install -m755 -D %{S:8} $RPM_BUILD_ROOT/etc/init.d/systemd-journald +%endif install -m755 -D %{S:1060} $RPM_BUILD_ROOT/etc/init.d/boot.udev ln -s systemd-udevd.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev.service @@ -378,11 +400,6 @@ mkdir -p $RPM_BUILD_ROOT/lib/systemd/system/basic.target.wants ln -sf ../udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants -#fix manpages -%if ! 0%{?bootstrap} -sed -i -e 's,^\(\.so \)\(.*\.\)\([0-9]\),\1man\3/\2\3,g' %{buildroot}/%{_mandir}/*/* -%endif - #workaround for 716939 chmod 644 %{buildroot}%{_bindir}/systemd-analyze mkdir -p %{buildroot}%{_sysconfdir}/rpm @@ -392,7 +409,7 @@ install -m755 %{S:3} -D %{buildroot}%{_sbindir}/systemd-sysv-convert # do not install, code has been fixed, might be useful in the future -#install -m755 %{S:5} %{buildroot}/lib/systemd/system-generators +#install -m755 %{S:5} %{buildroot}/usr/lib/systemd/system-generators ln -s ../usr/lib/systemd/systemd %{buildroot}/bin/systemd ln -s ../usr/lib/systemd/systemd %{buildroot}/sbin/init ln -s ../usr/bin/systemctl %{buildroot}/sbin/reboot @@ -415,8 +432,7 @@ ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/ldconfig.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/loadmodules.service install -m644 %{S:2} %{buildroot}/%{_prefix}/lib/systemd/system/localfs.service -# need to be implemented in systemd directly -#ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service +ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/proc.service ln -s systemd-fsck-root.service %{buildroot}/%{_prefix}/lib/systemd/system/rootfsck.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/single.service @@ -442,8 +458,12 @@ %endif # legacy links -ln -s loginctl %{buildroot}%{_bindir}/systemd-loginctl -ln -s journalctl %{buildroot}%{_bindir}/systemd-journalctl +for f in loginctl journalctl ; do + ln -s $f %{buildroot}%{_bindir}/systemd-$f +%if ! 0%{?bootstrap} + ln -s $f.1 %{buildroot}%{_mandir}/man1/systemd-$f.1 +%endif +done ln -s /usr/lib/udev %{buildroot}/lib/udev # Create the /var/log/journal directory to change the volatile journal to a persistent one @@ -532,6 +552,8 @@ elif [ ! -e /lib/udev ]; then ln -s /usr/lib/udev /lib/udev fi +# Create "tape" group which is referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules +/usr/sbin/groupadd -r tape 2> /dev/null || : # kill daemon if we are not in a chroot if test -f /proc/1/exe -a -d /proc/1/root ; then if test "$(stat -Lc '%%D-%%i' /)" = "$(stat -Lc '%%D-%%i' /proc/1/root)"; then @@ -724,6 +746,10 @@ %exclude %{_mandir}/man8/telinit.8* %exclude %{_mandir}/man8/runlevel.8* %exclude %{_mandir}/man*/*udev*.[0-9]* + +# Packaged in analyze subpackage +%exclude %{_mandir}/man1/systemd-analyze.1* + %{_mandir}/man1/*.1* %{_mandir}/man3/*.3* %{_mandir}/man5/*.5* @@ -787,7 +813,11 @@ %endif %files analyze +%defattr(-,root,root) %attr(0755,root,root) /usr/bin/systemd-analyze +%if ! 0%{?bootstrap} +%{_mandir}/man1/systemd-analyze.1* +%endif %files -n %{udevpkgname} %defattr(-,root,root) @@ -878,6 +908,7 @@ %defattr(-,root,root) %dir /var/log/journal /var/log/README +/etc/init.d/systemd-journald %endif Index: systemd.changes =================================================================== --- systemd.changes (revision 311) +++ systemd.changes (revision 5) @@ -1,4 +1,35 @@ ------------------------------------------------------------------- +Tue Nov 20 09:36:43 UTC 2012 - fcrozat@suse.com + +- links more manpages for migrated tools (from Christopher + Yeleighton). +- disable boot.localnet service, ypbind service will do the right + thing now (bnc#716746) +- add xdm-display-manager.patch: pull xdm.service instead of + display-manager.service (needed until xdm initscript is migrated + to native systemd service). +- Add fix-permissions-btmp.patch: ensure btmp is owned only by root + (bnc#777405). +- Have the udev package create a tape group, as referenced by + 50-udev-default.rules and 60-persistent-storage-tape.rules + (DimStar). +- Add fix-bad-memory-access.patch: fix crash in journal rotation. +- Add fix-dbus-crash.patch: fix D-Bus caused crash. +- Add sync-on-shutdown.patch: ensure sync is done when initiating + shutdown. +- Add mount-efivars.patch: mount efivars if booting on UEFI. + + +------------------------------------------------------------------- +Thu Nov 15 14:31:28 UTC 2012 - fcrozat@suse.com + +- Ship a empty systemd-journald initscript in systemd-logger to + stop insserv to complain about missing syslog dependency. +- Update + 0001-service-Fix-dependencies-added-when-parsing-insserv..patch + with bug fixes from Debian. + +------------------------------------------------------------------- Wed Nov 14 17:36:05 UTC 2012 - fcrozat@suse.com - /var/log/journal is now only provided by systemd-logger (journal Index: systemd.spec =================================================================== --- systemd.spec (revision 311) +++ systemd.spec (revision 5) @@ -97,6 +97,7 @@ Source5: systemd-insserv_conf Source6: baselibs.conf Source7: libgcrypt.m4 +Source8: systemd-journald.init Source1060: boot.udev Source1061: write_dev_root_rule @@ -123,6 +124,8 @@ Patch56: support-suse-clock-sysconfig.patch Patch59: fix-enable-disable-boot-initscript.patch Patch60: var-run-lock.patch +Patch63: xdm-display-manager.patch +Patch64: fix-permissions-btmp.patch # Upstream First - Policy: # Never add any patches to this package without the upstream commit id @@ -132,6 +135,14 @@ Patch61: fix-logind-pty-seat.patch # PATCH-FIX-UPSTREAM fix-build-glibc217.patch fcrozat@suse.com -- fix build with latest glibc Patch62: fix-build-glibc217.patch +# PATCH-FIX-UPSTREAM fix-bad-memory-access.patch fcrozat@suse.com -- fix bad memory access +Patch65: fix-bad-memory-access.patch +# PATCH-FIX-UPSTREAM fix-dbus-crash.patch fcrozat@suse.com -- fix D-Bus caused crash +Patch66: fix-dbus-crash.patch +# PATCH-FIX-UPSTREAM sync-on-shutdown.patch fcrozat@suse.com -- Sync on shutdown +Patch67: sync-on-shutdown.patch +# PATCH-FIX-UPSTREAM mount-efivars.patch fcrozat@suse.com -- mount efivars if booting under UEFI +Patch68: mount-efivars.patch # udev patches # PATCH-FIX-OPENSUSE 0001-Reinstate-TIMEOUT-handling.patch @@ -146,8 +157,6 @@ # PATCH-FIX-OPENSUSE 0027-udev-fix-sg-autoload-regression.patch Patch1027: 0027-udev-fix-sg-autoload-regression.patch -# systemd patches - %description Systemd is a system and service manager, compatible with SysV and LSB init scripts for Linux. systemd provides aggressive parallelization @@ -308,6 +317,7 @@ %patch1026 -p1 %patch1027 -p1 +#systemd %patch1 -p1 %patch6 -p1 # don't apply when bootstrapping to not modify configure.in @@ -332,6 +342,12 @@ %patch60 -p1 %patch61 -p1 %patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 %build autoreconf -fiv @@ -363,8 +379,14 @@ ln -sf %{_bindir}/systemd-ask-password $RPM_BUILD_ROOT/bin/systemd-ask-password ln -sf %{_bindir}/systemctl $RPM_BUILD_ROOT/bin/systemctl ln -sf %{_prefix}/lib/systemd/systemd-udevd $RPM_BUILD_ROOT/sbin/udevd +%if ! 0%{?bootstrap} +ln -sf systemd-udevd.8 $RPM_BUILD_ROOT/%{_mandir}/man8/udevd.8 +%endif mkdir -p $RPM_BUILD_ROOT/%{_prefix}/usr/lib/firmware/updates ln -sf /lib/firmware $RPM_BUILD_ROOT/usr/lib/firmware +%if ! 0%{?bootstrap} +install -m755 -D %{S:8} $RPM_BUILD_ROOT/etc/init.d/systemd-journald +%endif install -m755 -D %{S:1060} $RPM_BUILD_ROOT/etc/init.d/boot.udev ln -s systemd-udevd.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev.service @@ -373,11 +395,6 @@ mkdir -p $RPM_BUILD_ROOT/lib/systemd/system/basic.target.wants ln -sf ../udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants -#fix manpages -%if ! 0%{?bootstrap} -sed -i -e 's,^\(\.so \)\(.*\.\)\([0-9]\),\1man\3/\2\3,g' %{buildroot}/%{_mandir}/*/* -%endif - #workaround for 716939 chmod 644 %{buildroot}%{_bindir}/systemd-analyze mkdir -p %{buildroot}%{_sysconfdir}/rpm @@ -387,7 +404,7 @@ install -m755 %{S:3} -D %{buildroot}%{_sbindir}/systemd-sysv-convert # do not install, code has been fixed, might be useful in the future -#install -m755 %{S:5} %{buildroot}/lib/systemd/system-generators +#install -m755 %{S:5} %{buildroot}/usr/lib/systemd/system-generators ln -s ../usr/lib/systemd/systemd %{buildroot}/bin/systemd ln -s ../usr/lib/systemd/systemd %{buildroot}/sbin/init ln -s ../usr/bin/systemctl %{buildroot}/sbin/reboot @@ -410,8 +427,7 @@ ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/ldconfig.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/loadmodules.service install -m644 %{S:2} %{buildroot}/%{_prefix}/lib/systemd/system/localfs.service -# need to be implemented in systemd directly -#ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service +ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/proc.service ln -s systemd-fsck-root.service %{buildroot}/%{_prefix}/lib/systemd/system/rootfsck.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/single.service @@ -437,8 +453,12 @@ %endif # legacy links -ln -s loginctl %{buildroot}%{_bindir}/systemd-loginctl -ln -s journalctl %{buildroot}%{_bindir}/systemd-journalctl +for f in loginctl journalctl ; do + ln -s $f %{buildroot}%{_bindir}/systemd-$f +%if ! 0%{?bootstrap} + ln -s $f.1 %{buildroot}%{_mandir}/man1/systemd-$f.1 +%endif +done ln -s /usr/lib/udev %{buildroot}/lib/udev # Create the /var/log/journal directory to change the volatile journal to a persistent one @@ -527,6 +547,8 @@ elif [ ! -e /lib/udev ]; then ln -s /usr/lib/udev /lib/udev fi +# Create "tape" group which is referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules +/usr/sbin/groupadd -r tape 2> /dev/null || : # kill daemon if we are not in a chroot if test -f /proc/1/exe -a -d /proc/1/root ; then if test "$(stat -Lc '%%D-%%i' /)" = "$(stat -Lc '%%D-%%i' /proc/1/root)"; then @@ -719,6 +741,10 @@ %exclude %{_mandir}/man8/telinit.8* %exclude %{_mandir}/man8/runlevel.8* %exclude %{_mandir}/man*/*udev*.[0-9]* + +# Packaged in analyze subpackage +%exclude %{_mandir}/man1/systemd-analyze.1* + %{_mandir}/man1/*.1* %{_mandir}/man3/*.3* %{_mandir}/man5/*.5* @@ -782,7 +808,11 @@ %endif %files analyze +%defattr(-,root,root) %attr(0755,root,root) /usr/bin/systemd-analyze +%if ! 0%{?bootstrap} +%{_mandir}/man1/systemd-analyze.1* +%endif %files -n %{udevpkgname} %defattr(-,root,root) @@ -873,6 +903,7 @@ %defattr(-,root,root) %dir /var/log/journal /var/log/README +/etc/init.d/systemd-journald %endif Index: fix-bad-memory-access.patch =================================================================== --- fix-bad-memory-access.patch (added) +++ fix-bad-memory-access.patch (revision 5) @@ -0,0 +1,23 @@ +From 7d73c1343be02a59b17de0cd34375deeb815d89c Mon Sep 17 00:00:00 2001 +From: Lennart Poettering <lennart@poettering.net> +Date: Tue, 20 Nov 2012 00:19:27 +0100 +Subject: [PATCH] journald: fix bad memory access + +https://bugzilla.redhat.com/show_bug.cgi?id=875653 +--- + src/journal/journald-server.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: systemd-195/src/journal/journald.c +=================================================================== +--- systemd-195.orig/src/journal/journald.c ++++ systemd-195/src/journal/journald.c +@@ -342,7 +342,7 @@ static void server_rotate(Server *s) { + HASHMAP_FOREACH_KEY(f, k, s->user_journals, i) { + r = journal_file_rotate(&f, s->compress, s->seal); + if (r < 0) +- if (f->path) ++ if (f) + log_error("Failed to rotate %s: %s", f->path, strerror(-r)); + else + log_error("Failed to create user journal: %s", strerror(-r)); Index: fix-dbus-crash.patch =================================================================== --- fix-dbus-crash.patch (added) +++ fix-dbus-crash.patch (revision 5) @@ -0,0 +1,32 @@ +From 645a9e5a2bbb06464a3fba1a3501e9d79e5bbad8 Mon Sep 17 00:00:00 2001 +From: Eelco Dolstra <eelco.dolstra@logicblox.com> +Date: Wed, 31 Oct 2012 11:53:56 +0100 +Subject: [PATCH] dbus-manager: fix a fatal dbus abort in + bus_manager_message_handler() + +If ListUnitFiles fails, or an OOM occurs, then dbus_message_unref() +will be called twice on "reply", causing systemd to crash. So remove +the call to dbus_message_unref(); it is unnecessary because of +the cleanup attribute on "reply". + +[zj: modified to leave one dbus_message_unref() alone, per Colin +Walters' comment.] +--- + src/core/dbus-manager.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c +index 2010241..3cf3e90 100644 +--- a/src/core/dbus-manager.c ++++ b/src/core/dbus-manager.c +@@ -1436,7 +1436,6 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, + r = unit_file_get_list(m->running_as == SYSTEMD_SYSTEM ? UNIT_FILE_SYSTEM : UNIT_FILE_USER, NULL, h); + if (r < 0) { + unit_file_list_free(h); +- dbus_message_unref(reply); + return bus_send_error_reply(connection, message, NULL, r); + } + +-- +1.7.10.4 + Index: fix-permissions-btmp.patch =================================================================== --- fix-permissions-btmp.patch (added) +++ fix-permissions-btmp.patch (revision 5) @@ -0,0 +1,13 @@ +Index: systemd-44/tmpfiles.d/systemd.conf +=================================================================== +--- systemd-44.orig/tmpfiles.d/systemd.conf ++++ systemd-44/tmpfiles.d/systemd.conf +@@ -11,7 +11,7 @@ d /run/user 0755 root root 10d + F /run/utmp 0664 root utmp - + + f /var/log/wtmp 0664 root utmp - +-f /var/log/btmp 0600 root utmp - ++f /var/log/btmp 0600 root root - + + d /var/cache/man - - - 30d + Index: mount-efivars.patch =================================================================== --- mount-efivars.patch (added) +++ mount-efivars.patch (revision 5) @@ -0,0 +1,336 @@ +From f271dd97622b656c1c013d181ea615c671cc2438 Mon Sep 17 00:00:00 2001 +From: "Lee, Chun-Yi" <joeyli.kernel@gmail.com> +Date: Sat, 27 Oct 2012 11:23:22 +0800 +Subject: [PATCH] systemd: mount the EFI variable filesystem +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Add efivarfs to the mount_table in mount-setup.c, so the EFI variable +filesystem will be mounted when systemd executed. + +The EFI variable filesystem will merge in v3.7 or v3.8 linux kernel. + +Cc: Kay Sievers <kay@vrfy.org> +Cc: Lennart Poettering <lennart@poettering.net> +Cc: Mantas Mikulėnas <grawity@gmail.com> +Cc: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> +Cc: Matt Fleming <matt.fleming@intel.com> +Cc: Jeremy Kerr <jeremy.kerr@canonical.com> +Cc: Matthew Garrett <mjg@redhat.com> +Signed-off-by: Lee, Chun-Yi <jlee@suse.com> +--- + src/core/kmod-setup.c | 7 ++++--- + src/core/mount-setup.c | 1 + + 2 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index cc2a2d9..ce8a8e7 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -31,9 +31,10 @@ + #include "kmod-setup.h" + + static const char * const kmod_table[] = { +- "autofs4", "/sys/class/misc/autofs", +- "ipv6", "/sys/module/ipv6", +- "unix", "/proc/net/unix" ++ "autofs4", "/sys/class/misc/autofs", ++ "ipv6", "/sys/module/ipv6", ++ "efivarfs", "/sys/firmware/efi/efivars", ++ "unix", "/proc/net/unix" + }; + + #pragma GCC diagnostic push +diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c +index 0fd112f..9894c7f 100644 +--- a/src/core/mount-setup.c ++++ b/src/core/mount-setup.c +@@ -66,6 +66,7 @@ static const MountPoint mount_table[] = { + { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, + { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, true, true }, + { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, ++ { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, + { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, + { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, false, true }, + { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +-- +1.7.10.4 + +From c1e5704657315b436c0409e8172c1fcb76adccad Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:06:27 +0100 +Subject: [PATCH] shared: add is_efiboot() + +--- + src/shared/util.c | 4 ++++ + src/shared/util.h | 2 ++ + 2 files changed, 6 insertions(+) + +diff --git a/src/shared/util.c b/src/shared/util.c +index 2a8afae..9983695 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -77,6 +77,10 @@ char **saved_argv = NULL; + static volatile unsigned cached_columns = 0; + static volatile unsigned cached_lines = 0; + ++bool is_efiboot(void) { ++ return access("/sys/firmware/efi", F_OK) >= 0; ++} ++ + size_t page_size(void) { + static __thread size_t pgsz = 0; + long r; +diff --git a/src/shared/util.h b/src/shared/util.h +index e387b12..99972cc 100644 +--- a/src/shared/util.h ++++ b/src/shared/util.h +@@ -90,6 +90,8 @@ union dirent_storage { + #define ANSI_HIGHLIGHT_YELLOW_ON "\x1B[1;33m" + #define ANSI_HIGHLIGHT_OFF "\x1B[0m" + ++bool is_efiboot(void); ++ + usec_t now(clockid_t clock); + + dual_timestamp* dual_timestamp_get(dual_timestamp *ts); +-- +1.7.10.4 + +From 1022373284b7562431fb0a6dba45db8af089a0e3 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:54:19 +0100 +Subject: [PATCH] kmod-setup: add conditional module loading callback + +--- + src/core/kmod-setup.c | 32 ++++++++++++++++++++------------ + 1 file changed, 20 insertions(+), 12 deletions(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index ce8a8e7..383a6b2 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -30,11 +30,17 @@ + + #include "kmod-setup.h" + +-static const char * const kmod_table[] = { +- "autofs4", "/sys/class/misc/autofs", +- "ipv6", "/sys/module/ipv6", +- "efivarfs", "/sys/firmware/efi/efivars", +- "unix", "/proc/net/unix" ++typedef struct Kmodule { ++ const char *name; ++ const char *directory; ++ bool (*condition_fn)(void); ++} KModule; ++ ++static const KModule kmod_table[] = { ++ { "autofs4", "/sys/class/misc/autofs", NULL } , ++ { "ipv6", "/sys/module/ipv6", NULL }, ++ { "efivarfs", "/sys/firmware/efi/efivars", NULL }, ++ { "unix", "/proc/net/unix", NULL } , + }; + + #pragma GCC diagnostic push +@@ -42,7 +48,8 @@ static const char * const kmod_table[] = { + static void systemd_kmod_log(void *data, int priority, const char *file, int line, + const char *fn, const char *format, va_list args) + { +- log_metav(priority, file, line, fn, format, args); ++ /* library logging is enabled at debug only */ ++ log_metav(LOG_DEBUG, file, line, fn, format, args); + } + #pragma GCC diagnostic pop + +@@ -53,13 +60,15 @@ int kmod_setup(void) { + int err; + + for (i = 0; i < ELEMENTSOF(kmod_table); i += 2) { ++ if (kmod_table[i].condition_fn && !kmod_table[i].condition_fn()) ++ continue; + +- if (access(kmod_table[i+1], F_OK) >= 0) ++ if (access(kmod_table[i].directory, F_OK) >= 0) + continue; + + log_debug("Your kernel apparently lacks built-in %s support. Might be a good idea to compile it in. " + "We'll now try to work around this by loading the module...", +- kmod_table[i]); ++ kmod_table[i].name); + + if (!ctx) { + ctx = kmod_new(NULL, NULL); +@@ -69,13 +78,12 @@ int kmod_setup(void) { + } + + kmod_set_log_fn(ctx, systemd_kmod_log, NULL); +- + kmod_load_resources(ctx); + } + +- err = kmod_module_new_from_name(ctx, kmod_table[i], &mod); ++ err = kmod_module_new_from_name(ctx, kmod_table[i].name, &mod); + if (err < 0) { +- log_error("Failed to load module '%s'", kmod_table[i]); ++ log_error("Failed to lookup module '%s'", kmod_table[i].name); + continue; + } + +@@ -85,7 +93,7 @@ int kmod_setup(void) { + else if (err == KMOD_PROBE_APPLY_BLACKLIST) + log_info("Module '%s' is blacklisted", kmod_module_get_name(mod)); + else +- log_error("Failed to insert '%s'", kmod_module_get_name(mod)); ++ log_error("Failed to insert module '%s'", kmod_module_get_name(mod)); + + kmod_module_unref(mod); + } +-- +1.7.10.4 + +From 3dfb265083347cb5700dc38f7cc0f479f378e6e9 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:55:23 +0100 +Subject: [PATCH] kmod-setup: mounting efivarfs, *after* we tried to mount it, + is pointless + +The mount() system call, which we issue before loading modules, will trigger +a modprobe by the kernel and block until it returns. Trying to load it again +later, will have exactly the same result as the first time. +--- + src/core/kmod-setup.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index 383a6b2..20ab232 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -39,7 +39,6 @@ typedef struct Kmodule { + static const KModule kmod_table[] = { + { "autofs4", "/sys/class/misc/autofs", NULL } , + { "ipv6", "/sys/module/ipv6", NULL }, +- { "efivarfs", "/sys/firmware/efi/efivars", NULL }, + { "unix", "/proc/net/unix", NULL } , + }; + +-- +1.7.10.4 + +From 6aa220e019f9dffd96590b06b68f937985204109 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 17:03:48 +0100 +Subject: [PATCH] mount-setup: try mounting 'efivarfs' only if the system + bootet with EFI + +--- + TODO | 3 --- + src/core/mount-setup.c | 50 ++++++++++++++++++++++++++++++++---------------- + 2 files changed, 34 insertions(+), 19 deletions(-) + +diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c +index 9894c7f..98614d0 100644 +--- a/src/core/mount-setup.c ++++ b/src/core/mount-setup.c +@@ -46,14 +46,20 @@ + #define TTY_GID 5 + #endif + ++typedef enum MountMode { ++ MNT_NONE = 0, ++ MNT_FATAL = 1 << 0, ++ MNT_IN_CONTAINER = 1 << 1, ++} MountMode; ++ + typedef struct MountPoint { + const char *what; + const char *where; + const char *type; + const char *options; + unsigned long flags; +- bool fatal; +- bool in_container; ++ bool (*condition_fn)(void); ++ MountMode mode; + } MountPoint; + + /* The first three entries we might need before SELinux is up. The +@@ -62,16 +68,26 @@ typedef struct MountPoint { + #define N_EARLY_MOUNT 4 + + static const MountPoint mount_table[] = { +- { "proc", "/proc", "proc", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, +- { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, +- { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, true, true }, +- { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, +- { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, +- { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +- { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, false, true }, +- { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +- { "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME, false, true }, +- { "cgroup", "/sys/fs/cgroup/systemd", "cgroup", "none,name=systemd", MS_NOSUID|MS_NOEXEC|MS_NODEV, false, true }, ++ { "proc", "/proc", "proc", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_NONE }, ++ { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ is_efiboot, MNT_NONE }, ++ { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, ++ NULL, MNT_IN_CONTAINER }, ++ { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_IN_CONTAINER }, ++ { "cgroup", "/sys/fs/cgroup/systemd", "cgroup", "none,name=systemd", MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_IN_CONTAINER }, + }; + + /* These are API file systems that might be mounted by other software, +@@ -119,6 +135,9 @@ static int mount_one(const MountPoint *p, bool relabel) { + + assert(p); + ++ if (p->condition_fn && !p->condition_fn()) ++ return 0; ++ + /* Relabel first, just in case */ + if (relabel) + label_fix(p->where, true, true); +@@ -131,7 +150,7 @@ static int mount_one(const MountPoint *p, bool relabel) { + return 0; + + /* Skip securityfs in a container */ +- if (!p->in_container && detect_container(NULL) > 0) ++ if (!(p->mode & MNT_IN_CONTAINER) && detect_container(NULL) > 0) + return 0; + + /* The access mode here doesn't really matter too much, since +@@ -149,8 +168,8 @@ static int mount_one(const MountPoint *p, bool relabel) { + p->type, + p->flags, + p->options) < 0) { +- log_full(p->fatal ? LOG_ERR : LOG_DEBUG, "Failed to mount %s: %s", p->where, strerror(errno)); +- return p->fatal ? -errno : 0; ++ log_full((p->mode & MNT_FATAL) ? LOG_ERR : LOG_DEBUG, "Failed to mount %s: %s", p->where, strerror(errno)); ++ return (p->mode & MNT_FATAL) ? -errno : 0; + } + + /* Relabel again, since we now mounted something fresh here */ +@@ -289,7 +308,6 @@ int mount_cgroup_controllers(char ***join_controllers) { + p.type = "cgroup"; + p.options = options; + p.flags = MS_NOSUID|MS_NOEXEC|MS_NODEV; +- p.fatal = false; + + r = mount_one(&p, true); + free(controller); +-- +1.7.10.4 + Index: sync-on-shutdown.patch =================================================================== --- sync-on-shutdown.patch (added) +++ sync-on-shutdown.patch (revision 5) @@ -0,0 +1,49 @@ +From 0049f05a8bb82c3e084bacc5945596761d706c55 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering <lennart@poettering.net> +Date: Fri, 16 Nov 2012 01:30:29 +0100 +Subject: [PATCH] shutdown: readd explicit sync() when shutting down + +As it turns out reboot() doesn't actually imply a file system sync, but +only a disk sync. Accordingly, readd explicit sync() invocations +immediately before we invoke reboot(). + +This is much less dramatic than it might sounds as we umount all +disks/read-only remount them anyway before going down. +--- + src/core/service.c | 1 + + src/core/shutdown.c | 7 +++++++ + 2 files changed, 8 insertions(+) + +diff --git a/src/core/service.c b/src/core/service.c +index cf08485..df72aba 100644 +--- a/src/core/service.c ++++ b/src/core/service.c +@@ -2485,6 +2485,7 @@ static int service_start_limit_test(Service *s) { + + case SERVICE_START_LIMIT_REBOOT_IMMEDIATE: + log_warning("%s start request repeated too quickly, rebooting immediately.", UNIT(s)->id); ++ sync(); + reboot(RB_AUTOBOOT); + break; + +diff --git a/src/core/shutdown.c b/src/core/shutdown.c +index cc8c57b..b59aef1 100644 +--- a/src/core/shutdown.c ++++ b/src/core/shutdown.c +@@ -273,6 +273,13 @@ int main(int argc, char *argv[]) { + } + } + ++ /* The kernel will automaticall flush ATA disks and suchlike ++ * on reboot(), but the file systems need to be synce'd ++ * explicitly in advance. So let's do this here, but not ++ * needlessly slow down containers. */ ++ if (!in_container) ++ sync(); ++ + if (cmd == LINUX_REBOOT_CMD_KEXEC) { + + if (!in_container) { +-- +1.7.10.4 + Index: systemd-journald.init =================================================================== --- systemd-journald.init (added) +++ systemd-journald.init (revision 5) @@ -0,0 +1,33 @@ +#! /bin/sh +# +# Copyright (c) 2001-2002 SuSE Linux AG, Nuernberg, Germany. +# All rights reserved. +# +# /etc/init.d/systemd-journald +# +### BEGIN INIT INFO +# Provides: syslog +# Required-Start: $null +# Required-Stop: $null +# Default-Start: 2 3 5 +# Default-Stop: +# Short-Description: compat wrapper for journald +# Description: compat wrapper for journald +### END INIT INFO + +. /etc/rc.status + +rc_reset + +case "$1" in + start|stop|restart) + rc_failed 3 + rc_status -v + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 + ;; +esac + +rc_exit Index: xdm-display-manager.patch =================================================================== --- xdm-display-manager.patch (added) +++ xdm-display-manager.patch (revision 5) @@ -0,0 +1,13 @@ +Index: systemd-195/units/graphical.target +=================================================================== +--- systemd-195.orig/units/graphical.target ++++ systemd-195/units/graphical.target +@@ -11,7 +11,7 @@ Documentation=man:systemd.special(7) + Requires=multi-user.target + After=multi-user.target + Conflicts=rescue.target +-Wants=display-manager.service ++Wants=xdm.service + AllowIsolate=yes + + [Install] OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=312
2012-11-20 13:10:12 +01:00
# PATCH-FIX-UPSTREAM fix-bad-memory-access.patch fcrozat@suse.com -- fix bad memory access
Patch65: fix-bad-memory-access.patch
# PATCH-FIX-UPSTREAM fix-dbus-crash.patch fcrozat@suse.com -- fix D-Bus caused crash
Patch66: fix-dbus-crash.patch
# PATCH-FIX-UPSTREAM sync-on-shutdown.patch fcrozat@suse.com -- Sync on shutdown
Patch67: sync-on-shutdown.patch
# PATCH-FIX-UPSTREAM mount-efivars.patch fcrozat@suse.com -- mount efivars if booting under UEFI
Patch68: mount-efivars.patch
# PATCH-FIX-UPSTREAM switch-root-try-pivot-root.patch fcrozat@suse.com -- try pivot_root before overmounting /
Patch69: switch-root-try-pivot-root.patch
# PATCH-FIX-UPSTREAM remount-ro-before-unmount.patch fcrozat@suse.com -- remount ro before unmounting in final shutdown loop
Patch70: remount-ro-before-unmount.patch
# PATCH-FIX-UPSTREAM revert-of-9279749b84cc87c7830280b7895a48bed03c9429.patch crrodriguez@opensuse.org -- do not consider failure to umount / and /usr an error.
Patch73: revert-of-9279749b84cc87c7830280b7895a48bed03c9429.patch
# udev patches
# PATCH-FIX-OPENSUSE 0001-Reinstate-TIMEOUT-handling.patch
Patch1001: 0001-Reinstate-TIMEOUT-handling.patch
# PATCH-FIX-OPENSUSE 0013-re-enable-by_path-links-for-ata-devices.patch
Patch1013: 0013-re-enable-by_path-links-for-ata-devices.patch
# PATCH-FIX-OPENSUSE 0014-rules-create-by-id-scsi-links-for-ATA-devices.patch
Patch1014: 0014-rules-create-by-id-scsi-links-for-ATA-devices.patch
# PATCH-FIX-OPENSUSE 0026-udev-netlink-null-rules.patch
Patch1026: 0026-udev-netlink-null-rules.patch
# PATCH-FIX-OPENSUSE 0027-udev-fix-sg-autoload-regression.patch
Patch1027: 0027-udev-fix-sg-autoload-regression.patch
# PATCH-FIX-OPENSUSE fix-devname-prefix.patch fcrozat@suse.com -- fix modules.devname path, it isn't in /usr
Patch1028: fix-devname-prefix.patch
%description
Systemd is a system and service manager, compatible with SysV and LSB
init scripts for Linux. systemd provides aggressive parallelization
capabilities, uses socket and D-Bus activation for starting services,
offers on-demand starting of daemons, keeps track of processes using
Linux cgroups, supports snapshotting and restoring of the system state,
maintains mount and automount points and implements an elaborate
transactional dependency-based service control logic. It can work as a
drop-in replacement for sysvinit.
%package devel
Summary: Development headers for systemd
License: LGPL-2.1+
Group: Development/Libraries/C and C++
Requires: %{name} = %{version}
%description devel
Development headers and auxiliary files for developing applications for systemd.
%package sysvinit
Summary: System V init tools
License: LGPL-2.1+
Group: System/Base
Requires: %{name} = %{version}
Provides: sbin_init
Conflicts: otherproviders(sbin_init)
Provides: sysvinit:/sbin/init
%description sysvinit
Drop-in replacement of System V init tools.
%package analyze
Summary: Tool for processing systemd profiling information
License: LGPL-2.1+
Group: System/Base
Requires: %{name} = %{version}
Requires: dbus-1-python
Requires: python-cairo
# for the systemd-analyze split:
Conflicts: systemd < 44-10
%description analyze
'systemd-analyze blame' lists which systemd unit needed how much time to finish
initialization at boot.
'systemd-analyze plot' renders an SVG visualizing the parallel start of units
at boot.
%package -n %{udevpkgname}
Summary: A rule-based device node and kernel event manager
License: GPL-2.0
Group: System/Kernel
Url: http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html
PreReq: /bin/pidof /bin/rm /usr/bin/stat %insserv_prereq %fillup_prereq /usr/sbin/groupadd /usr/bin/getent /sbin/mkinitrd
Requires(post): lib%{udevpkgname}%{udev_major}
Conflicts: systemd < 39
Conflicts: aaa_base < 11.5
Conflicts: filesystem < 11.5
Conflicts: mkinitrd < 2.7.0
Conflicts: util-linux < 2.16
Conflicts: ConsoleKit < 0.4.1
Requires: filesystem
%if 0%{?bootstrap}
Provides: udev = %{version}
%endif
%description -n %{udevpkgname}
Udev creates and removes device nodes in /dev for devices discovered or
removed from the system. It receives events via kernel netlink messages
and dispatches them according to rules in /lib/udev/rules.d/. Matching
rules may name a device node, create additional symlinks to the node,
call tools to initialize a device, or load needed kernel modules.
%package -n lib%{udevpkgname}%{udev_major}
Summary: Dynamic library to access udev device information
License: LGPL-2.1+
Group: System/Libraries
Requires: %{udevpkgname} >= %{version}-%{release}
%if 0%{?bootstrap}
Conflicts: libudev%{udev_major}
%endif
%description -n lib%{udevpkgname}%{udev_major}
This package contains the dynamic library libudev, which provides
access to udev device information
%package -n lib%{udevpkgname}-devel
Summary: Development files for libudev
License: LGPL-2.1+
Group: Development/Libraries/Other
Requires: lib%{udevpkgname}%{udev_major} = %{version}-%{release}
%if 0%{?bootstrap}
Provides: libudev-devel = %{version}
%endif
%description -n lib%{udevpkgname}-devel
This package contains the development files for the library libudev, a
dynamic library, which provides access to udev device information.
%if ! 0%{?bootstrap}
%package -n libgudev-1_0-0
Summary: GObject library, to access udev device information
License: LGPL-2.1+
Group: System/Libraries
Requires: lib%{udevpkgname}%{udev_major} = %{version}-%{release}
%description -n libgudev-1_0-0
This package contains the GObject library libgudev, which provides
access to udev device information.
%package -n typelib-1_0-GUdev-1_0
Summary: GObject library, to access udev device information -- Introspection bindings
License: LGPL-2.1+
Group: System/Libraries
%description -n typelib-1_0-GUdev-1_0
This package provides the GObject Introspection bindings for libgudev, which
provides access to udev device information.
%package -n libgudev-1_0-devel
Summary: Devel package for libgudev
License: LGPL-2.1+
Group: Development/Libraries/Other
Requires: glib2-devel
Requires: libgudev-1_0-0 = %{version}-%{release}
Requires: libudev-devel = %{version}-%{release}
Requires: typelib-1_0-GUdev-1_0 = %{version}-%{release}
%description -n libgudev-1_0-devel
This is the devel package for the GObject library libgudev, which
provides GObject access to udev device information.
%package logger
Summary: Journal only logging
License: LGPL-2.1+
Group: System/Base
Provides: syslog
Provides: sysvinit(syslog)
Conflicts: otherproviders(syslog)
%description logger
This package marks the installation to not use syslog but only the journal.
%endif
%prep
%setup -q -n systemd-%{version}
# only needed for bootstrap
%if 0%{?bootstrap}
cp %{SOURCE7} m4/
%endif
#udev
%patch1001 -p1
%patch1013 -p1
%patch1014 -p1
%patch1026 -p1
%patch1027 -p1
%patch1028 -p1
- links more manpages for migrated tools (from Christopher Yeleighton). - disable boot.localnet service, ypbind service will do the right thing now (bnc#716746) - add xdm-display-manager.patch: pull xdm.service instead of display-manager.service (needed until xdm initscript is migrated to native systemd service). - Add fix-permissions-btmp.patch: ensure btmp is owned only by root (bnc#777405). - Have the udev package create a tape group, as referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules (DimStar). - Add fix-bad-memory-access.patch: fix crash in journal rotation. - Add fix-dbus-crash.patch: fix D-Bus caused crash. - Add sync-on-shutdown.patch: ensure sync is done when initiating shutdown. - Add mount-efivars.patch: mount efivars if booting on UEFI. - Ship a empty systemd-journald initscript in systemd-logger to stop insserv to complain about missing syslog dependency. - Update 0001-service-Fix-dependencies-added-when-parsing-insserv..patch with bug fixes from Debian. old: Base:System/systemd new: home:fcrozat:branches:Base:System/systemd rev NoneIndex: 0001-service-Fix-dependencies-added-when-parsing-insserv..patch =================================================================== --- 0001-service-Fix-dependencies-added-when-parsing-insserv..patch (revision 311) +++ 0001-service-Fix-dependencies-added-when-parsing-insserv..patch (revision 5) @@ -1,17 +1,35 @@ -From 6620bceb7233a830be3635a4f7a7dc75c13a9c8e Mon Sep 17 00:00:00 2001 -From: Frederic Crozat <fcrozat@suse.com> -Date: Fri, 30 Sep 2011 14:12:45 +0200 -Subject: [PATCH] service: Fix dependencies added when parsing insserv.conf - ---- - src/service.c | 16 +++++++++------- - 1 files changed, 9 insertions(+), 7 deletions(-) - -Index: systemd-41/src/service.c +Index: systemd-195/src/core/service.c =================================================================== ---- systemd-41.orig/src/core/service.c -+++ systemd-41/src/core/service.c -@@ -3210,23 +3210,30 @@ static void sysv_facility_in_insserv_con +--- systemd-195.orig/src/core/service.c ++++ systemd-195/src/core/service.c +@@ -3391,12 +3391,13 @@ static void service_notify_message(Unit + + #ifdef HAVE_SYSV_COMPAT + +-#ifdef TARGET_SUSE +-static void sysv_facility_in_insserv_conf(Manager *mgr) { +- FILE *f=NULL; ++#if defined(TARGET_SUSE) || defined(TARGET_DEBIAN) ++static void sysv_parse_insserv_conf(Manager *mgr, const char* filename) { ++ FILE *f = NULL; + int r; + +- if (!(f = fopen("/etc/insserv.conf", "re"))) { ++ if (!(f = fopen(filename, "re"))) { ++ log_error("Failed to open file %s", filename); + r = errno == ENOENT ? 0 : -errno; + goto finish; + } +@@ -3410,7 +3411,7 @@ static void sysv_facility_in_insserv_con + break; + + r = -errno; +- log_error("Failed to read configuration file '/etc/insserv.conf': %s", strerror(-r)); ++ log_error("Failed to read configuration file '%s': %s", filename, strerror(-r)); + goto finish; + } + +@@ -3425,23 +3426,30 @@ static void sysv_facility_in_insserv_con Unit *u; if (sysv_translate_facility(parsed[0], NULL, &facility) < 0) continue; @@ -29,12 +47,12 @@ STRV_FOREACH (j, parsed+1) { - if (*j[0]=='+') { - e = UNIT_WANTS; -+ if (*j[0]=='+') ++ if (*j[0] == '+') name = *j+1; - } - else { - e = UNIT_REQUIRES; -+ else ++ else name = *j; - } + if (streq(name, "boot.localfs") || @@ -44,9 +62,54 @@ continue; - r = unit_add_two_dependencies_by_name(u, UNIT_BEFORE, e, dep, NULL, true); -+ r = unit_add_dependency_by_name_inverse(u, UNIT_BEFORE, dep, NULL, true); -+ if (*j[0]!='+') ++ r = unit_add_two_dependencies_by_name_inverse(u, UNIT_WANTS, UNIT_BEFORE, dep, NULL, true); ++ if (*j[0] != '+') + r = unit_add_dependency_by_name(u, UNIT_REQUIRES, dep, NULL, true); free(dep); } } +@@ -3454,6 +3462,35 @@ finish: + fclose(f); + + } ++ ++static void sysv_facility_in_insserv_conf(Manager *mgr) { ++ DIR *d =NULL; ++ struct dirent *de; ++ ++#ifdef TARGET_DEBIAN ++ if (!(d = opendir("/etc/insserv.conf.d/"))) ++ if (errno != ENOENT) { ++ log_warning("opendir() failed on /etc/insserv.conf.d/ %s", strerror(errno)); ++ goto finish; ++ } ++ ++ while ((de = readdir(d))) { ++ char *path = NULL; ++ if (ignore_file(de->d_name)) ++ continue; ++ ++ path = join("/etc/insserv.conf.d/", de->d_name, NULL); ++ sysv_parse_insserv_conf(mgr, path); ++ free(path); ++ } ++finish: ++ if (d) ++ closedir(d); ++#endif ++ ++ sysv_parse_insserv_conf(mgr, "/etc/insserv.conf"); ++} ++ + #endif + + static int service_enumerate(Manager *m) { +@@ -3604,7 +3641,7 @@ static int service_enumerate(Manager *m) + + r = 0; + +-#ifdef TARGET_SUSE ++#if defined(TARGET_SUSE) || defined(TARGET_DEBIAN) + sysv_facility_in_insserv_conf (m); + #endif + Index: systemd-mini.changes =================================================================== --- systemd-mini.changes (revision 311) +++ systemd-mini.changes (revision 5) @@ -1,4 +1,35 @@ ------------------------------------------------------------------- +Tue Nov 20 09:36:43 UTC 2012 - fcrozat@suse.com + +- links more manpages for migrated tools (from Christopher + Yeleighton). +- disable boot.localnet service, ypbind service will do the right + thing now (bnc#716746) +- add xdm-display-manager.patch: pull xdm.service instead of + display-manager.service (needed until xdm initscript is migrated + to native systemd service). +- Add fix-permissions-btmp.patch: ensure btmp is owned only by root + (bnc#777405). +- Have the udev package create a tape group, as referenced by + 50-udev-default.rules and 60-persistent-storage-tape.rules + (DimStar). +- Add fix-bad-memory-access.patch: fix crash in journal rotation. +- Add fix-dbus-crash.patch: fix D-Bus caused crash. +- Add sync-on-shutdown.patch: ensure sync is done when initiating + shutdown. +- Add mount-efivars.patch: mount efivars if booting on UEFI. + + +------------------------------------------------------------------- +Thu Nov 15 14:31:28 UTC 2012 - fcrozat@suse.com + +- Ship a empty systemd-journald initscript in systemd-logger to + stop insserv to complain about missing syslog dependency. +- Update + 0001-service-Fix-dependencies-added-when-parsing-insserv..patch + with bug fixes from Debian. + +------------------------------------------------------------------- Wed Nov 14 17:36:05 UTC 2012 - fcrozat@suse.com - /var/log/journal is now only provided by systemd-logger (journal Index: systemd-mini.spec =================================================================== --- systemd-mini.spec (revision 311) +++ systemd-mini.spec (revision 5) @@ -102,6 +102,7 @@ Source5: systemd-insserv_conf Source6: baselibs.conf Source7: libgcrypt.m4 +Source8: systemd-journald.init Source1060: boot.udev Source1061: write_dev_root_rule @@ -128,6 +129,8 @@ Patch56: support-suse-clock-sysconfig.patch Patch59: fix-enable-disable-boot-initscript.patch Patch60: var-run-lock.patch +Patch63: xdm-display-manager.patch +Patch64: fix-permissions-btmp.patch # Upstream First - Policy: # Never add any patches to this package without the upstream commit id @@ -137,6 +140,14 @@ Patch61: fix-logind-pty-seat.patch # PATCH-FIX-UPSTREAM fix-build-glibc217.patch fcrozat@suse.com -- fix build with latest glibc Patch62: fix-build-glibc217.patch +# PATCH-FIX-UPSTREAM fix-bad-memory-access.patch fcrozat@suse.com -- fix bad memory access +Patch65: fix-bad-memory-access.patch +# PATCH-FIX-UPSTREAM fix-dbus-crash.patch fcrozat@suse.com -- fix D-Bus caused crash +Patch66: fix-dbus-crash.patch +# PATCH-FIX-UPSTREAM sync-on-shutdown.patch fcrozat@suse.com -- Sync on shutdown +Patch67: sync-on-shutdown.patch +# PATCH-FIX-UPSTREAM mount-efivars.patch fcrozat@suse.com -- mount efivars if booting under UEFI +Patch68: mount-efivars.patch # udev patches # PATCH-FIX-OPENSUSE 0001-Reinstate-TIMEOUT-handling.patch @@ -151,8 +162,6 @@ # PATCH-FIX-OPENSUSE 0027-udev-fix-sg-autoload-regression.patch Patch1027: 0027-udev-fix-sg-autoload-regression.patch -# systemd patches - %description Systemd is a system and service manager, compatible with SysV and LSB init scripts for Linux. systemd provides aggressive parallelization @@ -313,6 +322,7 @@ %patch1026 -p1 %patch1027 -p1 +#systemd %patch1 -p1 %patch6 -p1 # don't apply when bootstrapping to not modify configure.in @@ -337,6 +347,12 @@ %patch60 -p1 %patch61 -p1 %patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 %build autoreconf -fiv @@ -368,8 +384,14 @@ ln -sf %{_bindir}/systemd-ask-password $RPM_BUILD_ROOT/bin/systemd-ask-password ln -sf %{_bindir}/systemctl $RPM_BUILD_ROOT/bin/systemctl ln -sf %{_prefix}/lib/systemd/systemd-udevd $RPM_BUILD_ROOT/sbin/udevd +%if ! 0%{?bootstrap} +ln -sf systemd-udevd.8 $RPM_BUILD_ROOT/%{_mandir}/man8/udevd.8 +%endif mkdir -p $RPM_BUILD_ROOT/%{_prefix}/usr/lib/firmware/updates ln -sf /lib/firmware $RPM_BUILD_ROOT/usr/lib/firmware +%if ! 0%{?bootstrap} +install -m755 -D %{S:8} $RPM_BUILD_ROOT/etc/init.d/systemd-journald +%endif install -m755 -D %{S:1060} $RPM_BUILD_ROOT/etc/init.d/boot.udev ln -s systemd-udevd.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev.service @@ -378,11 +400,6 @@ mkdir -p $RPM_BUILD_ROOT/lib/systemd/system/basic.target.wants ln -sf ../udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants -#fix manpages -%if ! 0%{?bootstrap} -sed -i -e 's,^\(\.so \)\(.*\.\)\([0-9]\),\1man\3/\2\3,g' %{buildroot}/%{_mandir}/*/* -%endif - #workaround for 716939 chmod 644 %{buildroot}%{_bindir}/systemd-analyze mkdir -p %{buildroot}%{_sysconfdir}/rpm @@ -392,7 +409,7 @@ install -m755 %{S:3} -D %{buildroot}%{_sbindir}/systemd-sysv-convert # do not install, code has been fixed, might be useful in the future -#install -m755 %{S:5} %{buildroot}/lib/systemd/system-generators +#install -m755 %{S:5} %{buildroot}/usr/lib/systemd/system-generators ln -s ../usr/lib/systemd/systemd %{buildroot}/bin/systemd ln -s ../usr/lib/systemd/systemd %{buildroot}/sbin/init ln -s ../usr/bin/systemctl %{buildroot}/sbin/reboot @@ -415,8 +432,7 @@ ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/ldconfig.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/loadmodules.service install -m644 %{S:2} %{buildroot}/%{_prefix}/lib/systemd/system/localfs.service -# need to be implemented in systemd directly -#ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service +ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/proc.service ln -s systemd-fsck-root.service %{buildroot}/%{_prefix}/lib/systemd/system/rootfsck.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/single.service @@ -442,8 +458,12 @@ %endif # legacy links -ln -s loginctl %{buildroot}%{_bindir}/systemd-loginctl -ln -s journalctl %{buildroot}%{_bindir}/systemd-journalctl +for f in loginctl journalctl ; do + ln -s $f %{buildroot}%{_bindir}/systemd-$f +%if ! 0%{?bootstrap} + ln -s $f.1 %{buildroot}%{_mandir}/man1/systemd-$f.1 +%endif +done ln -s /usr/lib/udev %{buildroot}/lib/udev # Create the /var/log/journal directory to change the volatile journal to a persistent one @@ -532,6 +552,8 @@ elif [ ! -e /lib/udev ]; then ln -s /usr/lib/udev /lib/udev fi +# Create "tape" group which is referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules +/usr/sbin/groupadd -r tape 2> /dev/null || : # kill daemon if we are not in a chroot if test -f /proc/1/exe -a -d /proc/1/root ; then if test "$(stat -Lc '%%D-%%i' /)" = "$(stat -Lc '%%D-%%i' /proc/1/root)"; then @@ -724,6 +746,10 @@ %exclude %{_mandir}/man8/telinit.8* %exclude %{_mandir}/man8/runlevel.8* %exclude %{_mandir}/man*/*udev*.[0-9]* + +# Packaged in analyze subpackage +%exclude %{_mandir}/man1/systemd-analyze.1* + %{_mandir}/man1/*.1* %{_mandir}/man3/*.3* %{_mandir}/man5/*.5* @@ -787,7 +813,11 @@ %endif %files analyze +%defattr(-,root,root) %attr(0755,root,root) /usr/bin/systemd-analyze +%if ! 0%{?bootstrap} +%{_mandir}/man1/systemd-analyze.1* +%endif %files -n %{udevpkgname} %defattr(-,root,root) @@ -878,6 +908,7 @@ %defattr(-,root,root) %dir /var/log/journal /var/log/README +/etc/init.d/systemd-journald %endif Index: systemd.changes =================================================================== --- systemd.changes (revision 311) +++ systemd.changes (revision 5) @@ -1,4 +1,35 @@ ------------------------------------------------------------------- +Tue Nov 20 09:36:43 UTC 2012 - fcrozat@suse.com + +- links more manpages for migrated tools (from Christopher + Yeleighton). +- disable boot.localnet service, ypbind service will do the right + thing now (bnc#716746) +- add xdm-display-manager.patch: pull xdm.service instead of + display-manager.service (needed until xdm initscript is migrated + to native systemd service). +- Add fix-permissions-btmp.patch: ensure btmp is owned only by root + (bnc#777405). +- Have the udev package create a tape group, as referenced by + 50-udev-default.rules and 60-persistent-storage-tape.rules + (DimStar). +- Add fix-bad-memory-access.patch: fix crash in journal rotation. +- Add fix-dbus-crash.patch: fix D-Bus caused crash. +- Add sync-on-shutdown.patch: ensure sync is done when initiating + shutdown. +- Add mount-efivars.patch: mount efivars if booting on UEFI. + + +------------------------------------------------------------------- +Thu Nov 15 14:31:28 UTC 2012 - fcrozat@suse.com + +- Ship a empty systemd-journald initscript in systemd-logger to + stop insserv to complain about missing syslog dependency. +- Update + 0001-service-Fix-dependencies-added-when-parsing-insserv..patch + with bug fixes from Debian. + +------------------------------------------------------------------- Wed Nov 14 17:36:05 UTC 2012 - fcrozat@suse.com - /var/log/journal is now only provided by systemd-logger (journal Index: systemd.spec =================================================================== --- systemd.spec (revision 311) +++ systemd.spec (revision 5) @@ -97,6 +97,7 @@ Source5: systemd-insserv_conf Source6: baselibs.conf Source7: libgcrypt.m4 +Source8: systemd-journald.init Source1060: boot.udev Source1061: write_dev_root_rule @@ -123,6 +124,8 @@ Patch56: support-suse-clock-sysconfig.patch Patch59: fix-enable-disable-boot-initscript.patch Patch60: var-run-lock.patch +Patch63: xdm-display-manager.patch +Patch64: fix-permissions-btmp.patch # Upstream First - Policy: # Never add any patches to this package without the upstream commit id @@ -132,6 +135,14 @@ Patch61: fix-logind-pty-seat.patch # PATCH-FIX-UPSTREAM fix-build-glibc217.patch fcrozat@suse.com -- fix build with latest glibc Patch62: fix-build-glibc217.patch +# PATCH-FIX-UPSTREAM fix-bad-memory-access.patch fcrozat@suse.com -- fix bad memory access +Patch65: fix-bad-memory-access.patch +# PATCH-FIX-UPSTREAM fix-dbus-crash.patch fcrozat@suse.com -- fix D-Bus caused crash +Patch66: fix-dbus-crash.patch +# PATCH-FIX-UPSTREAM sync-on-shutdown.patch fcrozat@suse.com -- Sync on shutdown +Patch67: sync-on-shutdown.patch +# PATCH-FIX-UPSTREAM mount-efivars.patch fcrozat@suse.com -- mount efivars if booting under UEFI +Patch68: mount-efivars.patch # udev patches # PATCH-FIX-OPENSUSE 0001-Reinstate-TIMEOUT-handling.patch @@ -146,8 +157,6 @@ # PATCH-FIX-OPENSUSE 0027-udev-fix-sg-autoload-regression.patch Patch1027: 0027-udev-fix-sg-autoload-regression.patch -# systemd patches - %description Systemd is a system and service manager, compatible with SysV and LSB init scripts for Linux. systemd provides aggressive parallelization @@ -308,6 +317,7 @@ %patch1026 -p1 %patch1027 -p1 +#systemd %patch1 -p1 %patch6 -p1 # don't apply when bootstrapping to not modify configure.in @@ -332,6 +342,12 @@ %patch60 -p1 %patch61 -p1 %patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 %build autoreconf -fiv @@ -363,8 +379,14 @@ ln -sf %{_bindir}/systemd-ask-password $RPM_BUILD_ROOT/bin/systemd-ask-password ln -sf %{_bindir}/systemctl $RPM_BUILD_ROOT/bin/systemctl ln -sf %{_prefix}/lib/systemd/systemd-udevd $RPM_BUILD_ROOT/sbin/udevd +%if ! 0%{?bootstrap} +ln -sf systemd-udevd.8 $RPM_BUILD_ROOT/%{_mandir}/man8/udevd.8 +%endif mkdir -p $RPM_BUILD_ROOT/%{_prefix}/usr/lib/firmware/updates ln -sf /lib/firmware $RPM_BUILD_ROOT/usr/lib/firmware +%if ! 0%{?bootstrap} +install -m755 -D %{S:8} $RPM_BUILD_ROOT/etc/init.d/systemd-journald +%endif install -m755 -D %{S:1060} $RPM_BUILD_ROOT/etc/init.d/boot.udev ln -s systemd-udevd.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev.service @@ -373,11 +395,6 @@ mkdir -p $RPM_BUILD_ROOT/lib/systemd/system/basic.target.wants ln -sf ../udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants -#fix manpages -%if ! 0%{?bootstrap} -sed -i -e 's,^\(\.so \)\(.*\.\)\([0-9]\),\1man\3/\2\3,g' %{buildroot}/%{_mandir}/*/* -%endif - #workaround for 716939 chmod 644 %{buildroot}%{_bindir}/systemd-analyze mkdir -p %{buildroot}%{_sysconfdir}/rpm @@ -387,7 +404,7 @@ install -m755 %{S:3} -D %{buildroot}%{_sbindir}/systemd-sysv-convert # do not install, code has been fixed, might be useful in the future -#install -m755 %{S:5} %{buildroot}/lib/systemd/system-generators +#install -m755 %{S:5} %{buildroot}/usr/lib/systemd/system-generators ln -s ../usr/lib/systemd/systemd %{buildroot}/bin/systemd ln -s ../usr/lib/systemd/systemd %{buildroot}/sbin/init ln -s ../usr/bin/systemctl %{buildroot}/sbin/reboot @@ -410,8 +427,7 @@ ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/ldconfig.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/loadmodules.service install -m644 %{S:2} %{buildroot}/%{_prefix}/lib/systemd/system/localfs.service -# need to be implemented in systemd directly -#ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service +ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/proc.service ln -s systemd-fsck-root.service %{buildroot}/%{_prefix}/lib/systemd/system/rootfsck.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/single.service @@ -437,8 +453,12 @@ %endif # legacy links -ln -s loginctl %{buildroot}%{_bindir}/systemd-loginctl -ln -s journalctl %{buildroot}%{_bindir}/systemd-journalctl +for f in loginctl journalctl ; do + ln -s $f %{buildroot}%{_bindir}/systemd-$f +%if ! 0%{?bootstrap} + ln -s $f.1 %{buildroot}%{_mandir}/man1/systemd-$f.1 +%endif +done ln -s /usr/lib/udev %{buildroot}/lib/udev # Create the /var/log/journal directory to change the volatile journal to a persistent one @@ -527,6 +547,8 @@ elif [ ! -e /lib/udev ]; then ln -s /usr/lib/udev /lib/udev fi +# Create "tape" group which is referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules +/usr/sbin/groupadd -r tape 2> /dev/null || : # kill daemon if we are not in a chroot if test -f /proc/1/exe -a -d /proc/1/root ; then if test "$(stat -Lc '%%D-%%i' /)" = "$(stat -Lc '%%D-%%i' /proc/1/root)"; then @@ -719,6 +741,10 @@ %exclude %{_mandir}/man8/telinit.8* %exclude %{_mandir}/man8/runlevel.8* %exclude %{_mandir}/man*/*udev*.[0-9]* + +# Packaged in analyze subpackage +%exclude %{_mandir}/man1/systemd-analyze.1* + %{_mandir}/man1/*.1* %{_mandir}/man3/*.3* %{_mandir}/man5/*.5* @@ -782,7 +808,11 @@ %endif %files analyze +%defattr(-,root,root) %attr(0755,root,root) /usr/bin/systemd-analyze +%if ! 0%{?bootstrap} +%{_mandir}/man1/systemd-analyze.1* +%endif %files -n %{udevpkgname} %defattr(-,root,root) @@ -873,6 +903,7 @@ %defattr(-,root,root) %dir /var/log/journal /var/log/README +/etc/init.d/systemd-journald %endif Index: fix-bad-memory-access.patch =================================================================== --- fix-bad-memory-access.patch (added) +++ fix-bad-memory-access.patch (revision 5) @@ -0,0 +1,23 @@ +From 7d73c1343be02a59b17de0cd34375deeb815d89c Mon Sep 17 00:00:00 2001 +From: Lennart Poettering <lennart@poettering.net> +Date: Tue, 20 Nov 2012 00:19:27 +0100 +Subject: [PATCH] journald: fix bad memory access + +https://bugzilla.redhat.com/show_bug.cgi?id=875653 +--- + src/journal/journald-server.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: systemd-195/src/journal/journald.c +=================================================================== +--- systemd-195.orig/src/journal/journald.c ++++ systemd-195/src/journal/journald.c +@@ -342,7 +342,7 @@ static void server_rotate(Server *s) { + HASHMAP_FOREACH_KEY(f, k, s->user_journals, i) { + r = journal_file_rotate(&f, s->compress, s->seal); + if (r < 0) +- if (f->path) ++ if (f) + log_error("Failed to rotate %s: %s", f->path, strerror(-r)); + else + log_error("Failed to create user journal: %s", strerror(-r)); Index: fix-dbus-crash.patch =================================================================== --- fix-dbus-crash.patch (added) +++ fix-dbus-crash.patch (revision 5) @@ -0,0 +1,32 @@ +From 645a9e5a2bbb06464a3fba1a3501e9d79e5bbad8 Mon Sep 17 00:00:00 2001 +From: Eelco Dolstra <eelco.dolstra@logicblox.com> +Date: Wed, 31 Oct 2012 11:53:56 +0100 +Subject: [PATCH] dbus-manager: fix a fatal dbus abort in + bus_manager_message_handler() + +If ListUnitFiles fails, or an OOM occurs, then dbus_message_unref() +will be called twice on "reply", causing systemd to crash. So remove +the call to dbus_message_unref(); it is unnecessary because of +the cleanup attribute on "reply". + +[zj: modified to leave one dbus_message_unref() alone, per Colin +Walters' comment.] +--- + src/core/dbus-manager.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c +index 2010241..3cf3e90 100644 +--- a/src/core/dbus-manager.c ++++ b/src/core/dbus-manager.c +@@ -1436,7 +1436,6 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, + r = unit_file_get_list(m->running_as == SYSTEMD_SYSTEM ? UNIT_FILE_SYSTEM : UNIT_FILE_USER, NULL, h); + if (r < 0) { + unit_file_list_free(h); +- dbus_message_unref(reply); + return bus_send_error_reply(connection, message, NULL, r); + } + +-- +1.7.10.4 + Index: fix-permissions-btmp.patch =================================================================== --- fix-permissions-btmp.patch (added) +++ fix-permissions-btmp.patch (revision 5) @@ -0,0 +1,13 @@ +Index: systemd-44/tmpfiles.d/systemd.conf +=================================================================== +--- systemd-44.orig/tmpfiles.d/systemd.conf ++++ systemd-44/tmpfiles.d/systemd.conf +@@ -11,7 +11,7 @@ d /run/user 0755 root root 10d + F /run/utmp 0664 root utmp - + + f /var/log/wtmp 0664 root utmp - +-f /var/log/btmp 0600 root utmp - ++f /var/log/btmp 0600 root root - + + d /var/cache/man - - - 30d + Index: mount-efivars.patch =================================================================== --- mount-efivars.patch (added) +++ mount-efivars.patch (revision 5) @@ -0,0 +1,336 @@ +From f271dd97622b656c1c013d181ea615c671cc2438 Mon Sep 17 00:00:00 2001 +From: "Lee, Chun-Yi" <joeyli.kernel@gmail.com> +Date: Sat, 27 Oct 2012 11:23:22 +0800 +Subject: [PATCH] systemd: mount the EFI variable filesystem +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Add efivarfs to the mount_table in mount-setup.c, so the EFI variable +filesystem will be mounted when systemd executed. + +The EFI variable filesystem will merge in v3.7 or v3.8 linux kernel. + +Cc: Kay Sievers <kay@vrfy.org> +Cc: Lennart Poettering <lennart@poettering.net> +Cc: Mantas Mikulėnas <grawity@gmail.com> +Cc: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> +Cc: Matt Fleming <matt.fleming@intel.com> +Cc: Jeremy Kerr <jeremy.kerr@canonical.com> +Cc: Matthew Garrett <mjg@redhat.com> +Signed-off-by: Lee, Chun-Yi <jlee@suse.com> +--- + src/core/kmod-setup.c | 7 ++++--- + src/core/mount-setup.c | 1 + + 2 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index cc2a2d9..ce8a8e7 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -31,9 +31,10 @@ + #include "kmod-setup.h" + + static const char * const kmod_table[] = { +- "autofs4", "/sys/class/misc/autofs", +- "ipv6", "/sys/module/ipv6", +- "unix", "/proc/net/unix" ++ "autofs4", "/sys/class/misc/autofs", ++ "ipv6", "/sys/module/ipv6", ++ "efivarfs", "/sys/firmware/efi/efivars", ++ "unix", "/proc/net/unix" + }; + + #pragma GCC diagnostic push +diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c +index 0fd112f..9894c7f 100644 +--- a/src/core/mount-setup.c ++++ b/src/core/mount-setup.c +@@ -66,6 +66,7 @@ static const MountPoint mount_table[] = { + { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, + { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, true, true }, + { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, ++ { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, + { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, + { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, false, true }, + { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +-- +1.7.10.4 + +From c1e5704657315b436c0409e8172c1fcb76adccad Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:06:27 +0100 +Subject: [PATCH] shared: add is_efiboot() + +--- + src/shared/util.c | 4 ++++ + src/shared/util.h | 2 ++ + 2 files changed, 6 insertions(+) + +diff --git a/src/shared/util.c b/src/shared/util.c +index 2a8afae..9983695 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -77,6 +77,10 @@ char **saved_argv = NULL; + static volatile unsigned cached_columns = 0; + static volatile unsigned cached_lines = 0; + ++bool is_efiboot(void) { ++ return access("/sys/firmware/efi", F_OK) >= 0; ++} ++ + size_t page_size(void) { + static __thread size_t pgsz = 0; + long r; +diff --git a/src/shared/util.h b/src/shared/util.h +index e387b12..99972cc 100644 +--- a/src/shared/util.h ++++ b/src/shared/util.h +@@ -90,6 +90,8 @@ union dirent_storage { + #define ANSI_HIGHLIGHT_YELLOW_ON "\x1B[1;33m" + #define ANSI_HIGHLIGHT_OFF "\x1B[0m" + ++bool is_efiboot(void); ++ + usec_t now(clockid_t clock); + + dual_timestamp* dual_timestamp_get(dual_timestamp *ts); +-- +1.7.10.4 + +From 1022373284b7562431fb0a6dba45db8af089a0e3 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:54:19 +0100 +Subject: [PATCH] kmod-setup: add conditional module loading callback + +--- + src/core/kmod-setup.c | 32 ++++++++++++++++++++------------ + 1 file changed, 20 insertions(+), 12 deletions(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index ce8a8e7..383a6b2 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -30,11 +30,17 @@ + + #include "kmod-setup.h" + +-static const char * const kmod_table[] = { +- "autofs4", "/sys/class/misc/autofs", +- "ipv6", "/sys/module/ipv6", +- "efivarfs", "/sys/firmware/efi/efivars", +- "unix", "/proc/net/unix" ++typedef struct Kmodule { ++ const char *name; ++ const char *directory; ++ bool (*condition_fn)(void); ++} KModule; ++ ++static const KModule kmod_table[] = { ++ { "autofs4", "/sys/class/misc/autofs", NULL } , ++ { "ipv6", "/sys/module/ipv6", NULL }, ++ { "efivarfs", "/sys/firmware/efi/efivars", NULL }, ++ { "unix", "/proc/net/unix", NULL } , + }; + + #pragma GCC diagnostic push +@@ -42,7 +48,8 @@ static const char * const kmod_table[] = { + static void systemd_kmod_log(void *data, int priority, const char *file, int line, + const char *fn, const char *format, va_list args) + { +- log_metav(priority, file, line, fn, format, args); ++ /* library logging is enabled at debug only */ ++ log_metav(LOG_DEBUG, file, line, fn, format, args); + } + #pragma GCC diagnostic pop + +@@ -53,13 +60,15 @@ int kmod_setup(void) { + int err; + + for (i = 0; i < ELEMENTSOF(kmod_table); i += 2) { ++ if (kmod_table[i].condition_fn && !kmod_table[i].condition_fn()) ++ continue; + +- if (access(kmod_table[i+1], F_OK) >= 0) ++ if (access(kmod_table[i].directory, F_OK) >= 0) + continue; + + log_debug("Your kernel apparently lacks built-in %s support. Might be a good idea to compile it in. " + "We'll now try to work around this by loading the module...", +- kmod_table[i]); ++ kmod_table[i].name); + + if (!ctx) { + ctx = kmod_new(NULL, NULL); +@@ -69,13 +78,12 @@ int kmod_setup(void) { + } + + kmod_set_log_fn(ctx, systemd_kmod_log, NULL); +- + kmod_load_resources(ctx); + } + +- err = kmod_module_new_from_name(ctx, kmod_table[i], &mod); ++ err = kmod_module_new_from_name(ctx, kmod_table[i].name, &mod); + if (err < 0) { +- log_error("Failed to load module '%s'", kmod_table[i]); ++ log_error("Failed to lookup module '%s'", kmod_table[i].name); + continue; + } + +@@ -85,7 +93,7 @@ int kmod_setup(void) { + else if (err == KMOD_PROBE_APPLY_BLACKLIST) + log_info("Module '%s' is blacklisted", kmod_module_get_name(mod)); + else +- log_error("Failed to insert '%s'", kmod_module_get_name(mod)); ++ log_error("Failed to insert module '%s'", kmod_module_get_name(mod)); + + kmod_module_unref(mod); + } +-- +1.7.10.4 + +From 3dfb265083347cb5700dc38f7cc0f479f378e6e9 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:55:23 +0100 +Subject: [PATCH] kmod-setup: mounting efivarfs, *after* we tried to mount it, + is pointless + +The mount() system call, which we issue before loading modules, will trigger +a modprobe by the kernel and block until it returns. Trying to load it again +later, will have exactly the same result as the first time. +--- + src/core/kmod-setup.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index 383a6b2..20ab232 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -39,7 +39,6 @@ typedef struct Kmodule { + static const KModule kmod_table[] = { + { "autofs4", "/sys/class/misc/autofs", NULL } , + { "ipv6", "/sys/module/ipv6", NULL }, +- { "efivarfs", "/sys/firmware/efi/efivars", NULL }, + { "unix", "/proc/net/unix", NULL } , + }; + +-- +1.7.10.4 + +From 6aa220e019f9dffd96590b06b68f937985204109 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 17:03:48 +0100 +Subject: [PATCH] mount-setup: try mounting 'efivarfs' only if the system + bootet with EFI + +--- + TODO | 3 --- + src/core/mount-setup.c | 50 ++++++++++++++++++++++++++++++++---------------- + 2 files changed, 34 insertions(+), 19 deletions(-) + +diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c +index 9894c7f..98614d0 100644 +--- a/src/core/mount-setup.c ++++ b/src/core/mount-setup.c +@@ -46,14 +46,20 @@ + #define TTY_GID 5 + #endif + ++typedef enum MountMode { ++ MNT_NONE = 0, ++ MNT_FATAL = 1 << 0, ++ MNT_IN_CONTAINER = 1 << 1, ++} MountMode; ++ + typedef struct MountPoint { + const char *what; + const char *where; + const char *type; + const char *options; + unsigned long flags; +- bool fatal; +- bool in_container; ++ bool (*condition_fn)(void); ++ MountMode mode; + } MountPoint; + + /* The first three entries we might need before SELinux is up. The +@@ -62,16 +68,26 @@ typedef struct MountPoint { + #define N_EARLY_MOUNT 4 + + static const MountPoint mount_table[] = { +- { "proc", "/proc", "proc", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, +- { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, +- { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, true, true }, +- { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, +- { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, +- { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +- { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, false, true }, +- { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +- { "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME, false, true }, +- { "cgroup", "/sys/fs/cgroup/systemd", "cgroup", "none,name=systemd", MS_NOSUID|MS_NOEXEC|MS_NODEV, false, true }, ++ { "proc", "/proc", "proc", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_NONE }, ++ { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ is_efiboot, MNT_NONE }, ++ { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, ++ NULL, MNT_IN_CONTAINER }, ++ { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_IN_CONTAINER }, ++ { "cgroup", "/sys/fs/cgroup/systemd", "cgroup", "none,name=systemd", MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_IN_CONTAINER }, + }; + + /* These are API file systems that might be mounted by other software, +@@ -119,6 +135,9 @@ static int mount_one(const MountPoint *p, bool relabel) { + + assert(p); + ++ if (p->condition_fn && !p->condition_fn()) ++ return 0; ++ + /* Relabel first, just in case */ + if (relabel) + label_fix(p->where, true, true); +@@ -131,7 +150,7 @@ static int mount_one(const MountPoint *p, bool relabel) { + return 0; + + /* Skip securityfs in a container */ +- if (!p->in_container && detect_container(NULL) > 0) ++ if (!(p->mode & MNT_IN_CONTAINER) && detect_container(NULL) > 0) + return 0; + + /* The access mode here doesn't really matter too much, since +@@ -149,8 +168,8 @@ static int mount_one(const MountPoint *p, bool relabel) { + p->type, + p->flags, + p->options) < 0) { +- log_full(p->fatal ? LOG_ERR : LOG_DEBUG, "Failed to mount %s: %s", p->where, strerror(errno)); +- return p->fatal ? -errno : 0; ++ log_full((p->mode & MNT_FATAL) ? LOG_ERR : LOG_DEBUG, "Failed to mount %s: %s", p->where, strerror(errno)); ++ return (p->mode & MNT_FATAL) ? -errno : 0; + } + + /* Relabel again, since we now mounted something fresh here */ +@@ -289,7 +308,6 @@ int mount_cgroup_controllers(char ***join_controllers) { + p.type = "cgroup"; + p.options = options; + p.flags = MS_NOSUID|MS_NOEXEC|MS_NODEV; +- p.fatal = false; + + r = mount_one(&p, true); + free(controller); +-- +1.7.10.4 + Index: sync-on-shutdown.patch =================================================================== --- sync-on-shutdown.patch (added) +++ sync-on-shutdown.patch (revision 5) @@ -0,0 +1,49 @@ +From 0049f05a8bb82c3e084bacc5945596761d706c55 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering <lennart@poettering.net> +Date: Fri, 16 Nov 2012 01:30:29 +0100 +Subject: [PATCH] shutdown: readd explicit sync() when shutting down + +As it turns out reboot() doesn't actually imply a file system sync, but +only a disk sync. Accordingly, readd explicit sync() invocations +immediately before we invoke reboot(). + +This is much less dramatic than it might sounds as we umount all +disks/read-only remount them anyway before going down. +--- + src/core/service.c | 1 + + src/core/shutdown.c | 7 +++++++ + 2 files changed, 8 insertions(+) + +diff --git a/src/core/service.c b/src/core/service.c +index cf08485..df72aba 100644 +--- a/src/core/service.c ++++ b/src/core/service.c +@@ -2485,6 +2485,7 @@ static int service_start_limit_test(Service *s) { + + case SERVICE_START_LIMIT_REBOOT_IMMEDIATE: + log_warning("%s start request repeated too quickly, rebooting immediately.", UNIT(s)->id); ++ sync(); + reboot(RB_AUTOBOOT); + break; + +diff --git a/src/core/shutdown.c b/src/core/shutdown.c +index cc8c57b..b59aef1 100644 +--- a/src/core/shutdown.c ++++ b/src/core/shutdown.c +@@ -273,6 +273,13 @@ int main(int argc, char *argv[]) { + } + } + ++ /* The kernel will automaticall flush ATA disks and suchlike ++ * on reboot(), but the file systems need to be synce'd ++ * explicitly in advance. So let's do this here, but not ++ * needlessly slow down containers. */ ++ if (!in_container) ++ sync(); ++ + if (cmd == LINUX_REBOOT_CMD_KEXEC) { + + if (!in_container) { +-- +1.7.10.4 + Index: systemd-journald.init =================================================================== --- systemd-journald.init (added) +++ systemd-journald.init (revision 5) @@ -0,0 +1,33 @@ +#! /bin/sh +# +# Copyright (c) 2001-2002 SuSE Linux AG, Nuernberg, Germany. +# All rights reserved. +# +# /etc/init.d/systemd-journald +# +### BEGIN INIT INFO +# Provides: syslog +# Required-Start: $null +# Required-Stop: $null +# Default-Start: 2 3 5 +# Default-Stop: +# Short-Description: compat wrapper for journald +# Description: compat wrapper for journald +### END INIT INFO + +. /etc/rc.status + +rc_reset + +case "$1" in + start|stop|restart) + rc_failed 3 + rc_status -v + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 + ;; +esac + +rc_exit Index: xdm-display-manager.patch =================================================================== --- xdm-display-manager.patch (added) +++ xdm-display-manager.patch (revision 5) @@ -0,0 +1,13 @@ +Index: systemd-195/units/graphical.target +=================================================================== +--- systemd-195.orig/units/graphical.target ++++ systemd-195/units/graphical.target +@@ -11,7 +11,7 @@ Documentation=man:systemd.special(7) + Requires=multi-user.target + After=multi-user.target + Conflicts=rescue.target +-Wants=display-manager.service ++Wants=xdm.service + AllowIsolate=yes + + [Install] OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=312
2012-11-20 13:10:12 +01:00
#systemd
%patch1 -p1
%patch6 -p1
# don't apply when bootstrapping to not modify configure.in
%if ! 0%{?bootstrap}
%patch7 -p1
%endif
%patch8 -p1
%patch10 -p1
%patch13 -p1
%patch15 -p1
%patch16 -p1
%patch22 -p1
%patch23 -p1
%patch24 -p1
%patch31 -p1
%patch33 -p1
%patch36 -p1
%patch38 -p1
%patch53 -p1
%patch56 -p1
%patch59 -p1
%patch60 -p1
%patch61 -p1
%patch62 -p1
- links more manpages for migrated tools (from Christopher Yeleighton). - disable boot.localnet service, ypbind service will do the right thing now (bnc#716746) - add xdm-display-manager.patch: pull xdm.service instead of display-manager.service (needed until xdm initscript is migrated to native systemd service). - Add fix-permissions-btmp.patch: ensure btmp is owned only by root (bnc#777405). - Have the udev package create a tape group, as referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules (DimStar). - Add fix-bad-memory-access.patch: fix crash in journal rotation. - Add fix-dbus-crash.patch: fix D-Bus caused crash. - Add sync-on-shutdown.patch: ensure sync is done when initiating shutdown. - Add mount-efivars.patch: mount efivars if booting on UEFI. - Ship a empty systemd-journald initscript in systemd-logger to stop insserv to complain about missing syslog dependency. - Update 0001-service-Fix-dependencies-added-when-parsing-insserv..patch with bug fixes from Debian. old: Base:System/systemd new: home:fcrozat:branches:Base:System/systemd rev NoneIndex: 0001-service-Fix-dependencies-added-when-parsing-insserv..patch =================================================================== --- 0001-service-Fix-dependencies-added-when-parsing-insserv..patch (revision 311) +++ 0001-service-Fix-dependencies-added-when-parsing-insserv..patch (revision 5) @@ -1,17 +1,35 @@ -From 6620bceb7233a830be3635a4f7a7dc75c13a9c8e Mon Sep 17 00:00:00 2001 -From: Frederic Crozat <fcrozat@suse.com> -Date: Fri, 30 Sep 2011 14:12:45 +0200 -Subject: [PATCH] service: Fix dependencies added when parsing insserv.conf - ---- - src/service.c | 16 +++++++++------- - 1 files changed, 9 insertions(+), 7 deletions(-) - -Index: systemd-41/src/service.c +Index: systemd-195/src/core/service.c =================================================================== ---- systemd-41.orig/src/core/service.c -+++ systemd-41/src/core/service.c -@@ -3210,23 +3210,30 @@ static void sysv_facility_in_insserv_con +--- systemd-195.orig/src/core/service.c ++++ systemd-195/src/core/service.c +@@ -3391,12 +3391,13 @@ static void service_notify_message(Unit + + #ifdef HAVE_SYSV_COMPAT + +-#ifdef TARGET_SUSE +-static void sysv_facility_in_insserv_conf(Manager *mgr) { +- FILE *f=NULL; ++#if defined(TARGET_SUSE) || defined(TARGET_DEBIAN) ++static void sysv_parse_insserv_conf(Manager *mgr, const char* filename) { ++ FILE *f = NULL; + int r; + +- if (!(f = fopen("/etc/insserv.conf", "re"))) { ++ if (!(f = fopen(filename, "re"))) { ++ log_error("Failed to open file %s", filename); + r = errno == ENOENT ? 0 : -errno; + goto finish; + } +@@ -3410,7 +3411,7 @@ static void sysv_facility_in_insserv_con + break; + + r = -errno; +- log_error("Failed to read configuration file '/etc/insserv.conf': %s", strerror(-r)); ++ log_error("Failed to read configuration file '%s': %s", filename, strerror(-r)); + goto finish; + } + +@@ -3425,23 +3426,30 @@ static void sysv_facility_in_insserv_con Unit *u; if (sysv_translate_facility(parsed[0], NULL, &facility) < 0) continue; @@ -29,12 +47,12 @@ STRV_FOREACH (j, parsed+1) { - if (*j[0]=='+') { - e = UNIT_WANTS; -+ if (*j[0]=='+') ++ if (*j[0] == '+') name = *j+1; - } - else { - e = UNIT_REQUIRES; -+ else ++ else name = *j; - } + if (streq(name, "boot.localfs") || @@ -44,9 +62,54 @@ continue; - r = unit_add_two_dependencies_by_name(u, UNIT_BEFORE, e, dep, NULL, true); -+ r = unit_add_dependency_by_name_inverse(u, UNIT_BEFORE, dep, NULL, true); -+ if (*j[0]!='+') ++ r = unit_add_two_dependencies_by_name_inverse(u, UNIT_WANTS, UNIT_BEFORE, dep, NULL, true); ++ if (*j[0] != '+') + r = unit_add_dependency_by_name(u, UNIT_REQUIRES, dep, NULL, true); free(dep); } } +@@ -3454,6 +3462,35 @@ finish: + fclose(f); + + } ++ ++static void sysv_facility_in_insserv_conf(Manager *mgr) { ++ DIR *d =NULL; ++ struct dirent *de; ++ ++#ifdef TARGET_DEBIAN ++ if (!(d = opendir("/etc/insserv.conf.d/"))) ++ if (errno != ENOENT) { ++ log_warning("opendir() failed on /etc/insserv.conf.d/ %s", strerror(errno)); ++ goto finish; ++ } ++ ++ while ((de = readdir(d))) { ++ char *path = NULL; ++ if (ignore_file(de->d_name)) ++ continue; ++ ++ path = join("/etc/insserv.conf.d/", de->d_name, NULL); ++ sysv_parse_insserv_conf(mgr, path); ++ free(path); ++ } ++finish: ++ if (d) ++ closedir(d); ++#endif ++ ++ sysv_parse_insserv_conf(mgr, "/etc/insserv.conf"); ++} ++ + #endif + + static int service_enumerate(Manager *m) { +@@ -3604,7 +3641,7 @@ static int service_enumerate(Manager *m) + + r = 0; + +-#ifdef TARGET_SUSE ++#if defined(TARGET_SUSE) || defined(TARGET_DEBIAN) + sysv_facility_in_insserv_conf (m); + #endif + Index: systemd-mini.changes =================================================================== --- systemd-mini.changes (revision 311) +++ systemd-mini.changes (revision 5) @@ -1,4 +1,35 @@ ------------------------------------------------------------------- +Tue Nov 20 09:36:43 UTC 2012 - fcrozat@suse.com + +- links more manpages for migrated tools (from Christopher + Yeleighton). +- disable boot.localnet service, ypbind service will do the right + thing now (bnc#716746) +- add xdm-display-manager.patch: pull xdm.service instead of + display-manager.service (needed until xdm initscript is migrated + to native systemd service). +- Add fix-permissions-btmp.patch: ensure btmp is owned only by root + (bnc#777405). +- Have the udev package create a tape group, as referenced by + 50-udev-default.rules and 60-persistent-storage-tape.rules + (DimStar). +- Add fix-bad-memory-access.patch: fix crash in journal rotation. +- Add fix-dbus-crash.patch: fix D-Bus caused crash. +- Add sync-on-shutdown.patch: ensure sync is done when initiating + shutdown. +- Add mount-efivars.patch: mount efivars if booting on UEFI. + + +------------------------------------------------------------------- +Thu Nov 15 14:31:28 UTC 2012 - fcrozat@suse.com + +- Ship a empty systemd-journald initscript in systemd-logger to + stop insserv to complain about missing syslog dependency. +- Update + 0001-service-Fix-dependencies-added-when-parsing-insserv..patch + with bug fixes from Debian. + +------------------------------------------------------------------- Wed Nov 14 17:36:05 UTC 2012 - fcrozat@suse.com - /var/log/journal is now only provided by systemd-logger (journal Index: systemd-mini.spec =================================================================== --- systemd-mini.spec (revision 311) +++ systemd-mini.spec (revision 5) @@ -102,6 +102,7 @@ Source5: systemd-insserv_conf Source6: baselibs.conf Source7: libgcrypt.m4 +Source8: systemd-journald.init Source1060: boot.udev Source1061: write_dev_root_rule @@ -128,6 +129,8 @@ Patch56: support-suse-clock-sysconfig.patch Patch59: fix-enable-disable-boot-initscript.patch Patch60: var-run-lock.patch +Patch63: xdm-display-manager.patch +Patch64: fix-permissions-btmp.patch # Upstream First - Policy: # Never add any patches to this package without the upstream commit id @@ -137,6 +140,14 @@ Patch61: fix-logind-pty-seat.patch # PATCH-FIX-UPSTREAM fix-build-glibc217.patch fcrozat@suse.com -- fix build with latest glibc Patch62: fix-build-glibc217.patch +# PATCH-FIX-UPSTREAM fix-bad-memory-access.patch fcrozat@suse.com -- fix bad memory access +Patch65: fix-bad-memory-access.patch +# PATCH-FIX-UPSTREAM fix-dbus-crash.patch fcrozat@suse.com -- fix D-Bus caused crash +Patch66: fix-dbus-crash.patch +# PATCH-FIX-UPSTREAM sync-on-shutdown.patch fcrozat@suse.com -- Sync on shutdown +Patch67: sync-on-shutdown.patch +# PATCH-FIX-UPSTREAM mount-efivars.patch fcrozat@suse.com -- mount efivars if booting under UEFI +Patch68: mount-efivars.patch # udev patches # PATCH-FIX-OPENSUSE 0001-Reinstate-TIMEOUT-handling.patch @@ -151,8 +162,6 @@ # PATCH-FIX-OPENSUSE 0027-udev-fix-sg-autoload-regression.patch Patch1027: 0027-udev-fix-sg-autoload-regression.patch -# systemd patches - %description Systemd is a system and service manager, compatible with SysV and LSB init scripts for Linux. systemd provides aggressive parallelization @@ -313,6 +322,7 @@ %patch1026 -p1 %patch1027 -p1 +#systemd %patch1 -p1 %patch6 -p1 # don't apply when bootstrapping to not modify configure.in @@ -337,6 +347,12 @@ %patch60 -p1 %patch61 -p1 %patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 %build autoreconf -fiv @@ -368,8 +384,14 @@ ln -sf %{_bindir}/systemd-ask-password $RPM_BUILD_ROOT/bin/systemd-ask-password ln -sf %{_bindir}/systemctl $RPM_BUILD_ROOT/bin/systemctl ln -sf %{_prefix}/lib/systemd/systemd-udevd $RPM_BUILD_ROOT/sbin/udevd +%if ! 0%{?bootstrap} +ln -sf systemd-udevd.8 $RPM_BUILD_ROOT/%{_mandir}/man8/udevd.8 +%endif mkdir -p $RPM_BUILD_ROOT/%{_prefix}/usr/lib/firmware/updates ln -sf /lib/firmware $RPM_BUILD_ROOT/usr/lib/firmware +%if ! 0%{?bootstrap} +install -m755 -D %{S:8} $RPM_BUILD_ROOT/etc/init.d/systemd-journald +%endif install -m755 -D %{S:1060} $RPM_BUILD_ROOT/etc/init.d/boot.udev ln -s systemd-udevd.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev.service @@ -378,11 +400,6 @@ mkdir -p $RPM_BUILD_ROOT/lib/systemd/system/basic.target.wants ln -sf ../udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants -#fix manpages -%if ! 0%{?bootstrap} -sed -i -e 's,^\(\.so \)\(.*\.\)\([0-9]\),\1man\3/\2\3,g' %{buildroot}/%{_mandir}/*/* -%endif - #workaround for 716939 chmod 644 %{buildroot}%{_bindir}/systemd-analyze mkdir -p %{buildroot}%{_sysconfdir}/rpm @@ -392,7 +409,7 @@ install -m755 %{S:3} -D %{buildroot}%{_sbindir}/systemd-sysv-convert # do not install, code has been fixed, might be useful in the future -#install -m755 %{S:5} %{buildroot}/lib/systemd/system-generators +#install -m755 %{S:5} %{buildroot}/usr/lib/systemd/system-generators ln -s ../usr/lib/systemd/systemd %{buildroot}/bin/systemd ln -s ../usr/lib/systemd/systemd %{buildroot}/sbin/init ln -s ../usr/bin/systemctl %{buildroot}/sbin/reboot @@ -415,8 +432,7 @@ ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/ldconfig.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/loadmodules.service install -m644 %{S:2} %{buildroot}/%{_prefix}/lib/systemd/system/localfs.service -# need to be implemented in systemd directly -#ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service +ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/proc.service ln -s systemd-fsck-root.service %{buildroot}/%{_prefix}/lib/systemd/system/rootfsck.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/single.service @@ -442,8 +458,12 @@ %endif # legacy links -ln -s loginctl %{buildroot}%{_bindir}/systemd-loginctl -ln -s journalctl %{buildroot}%{_bindir}/systemd-journalctl +for f in loginctl journalctl ; do + ln -s $f %{buildroot}%{_bindir}/systemd-$f +%if ! 0%{?bootstrap} + ln -s $f.1 %{buildroot}%{_mandir}/man1/systemd-$f.1 +%endif +done ln -s /usr/lib/udev %{buildroot}/lib/udev # Create the /var/log/journal directory to change the volatile journal to a persistent one @@ -532,6 +552,8 @@ elif [ ! -e /lib/udev ]; then ln -s /usr/lib/udev /lib/udev fi +# Create "tape" group which is referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules +/usr/sbin/groupadd -r tape 2> /dev/null || : # kill daemon if we are not in a chroot if test -f /proc/1/exe -a -d /proc/1/root ; then if test "$(stat -Lc '%%D-%%i' /)" = "$(stat -Lc '%%D-%%i' /proc/1/root)"; then @@ -724,6 +746,10 @@ %exclude %{_mandir}/man8/telinit.8* %exclude %{_mandir}/man8/runlevel.8* %exclude %{_mandir}/man*/*udev*.[0-9]* + +# Packaged in analyze subpackage +%exclude %{_mandir}/man1/systemd-analyze.1* + %{_mandir}/man1/*.1* %{_mandir}/man3/*.3* %{_mandir}/man5/*.5* @@ -787,7 +813,11 @@ %endif %files analyze +%defattr(-,root,root) %attr(0755,root,root) /usr/bin/systemd-analyze +%if ! 0%{?bootstrap} +%{_mandir}/man1/systemd-analyze.1* +%endif %files -n %{udevpkgname} %defattr(-,root,root) @@ -878,6 +908,7 @@ %defattr(-,root,root) %dir /var/log/journal /var/log/README +/etc/init.d/systemd-journald %endif Index: systemd.changes =================================================================== --- systemd.changes (revision 311) +++ systemd.changes (revision 5) @@ -1,4 +1,35 @@ ------------------------------------------------------------------- +Tue Nov 20 09:36:43 UTC 2012 - fcrozat@suse.com + +- links more manpages for migrated tools (from Christopher + Yeleighton). +- disable boot.localnet service, ypbind service will do the right + thing now (bnc#716746) +- add xdm-display-manager.patch: pull xdm.service instead of + display-manager.service (needed until xdm initscript is migrated + to native systemd service). +- Add fix-permissions-btmp.patch: ensure btmp is owned only by root + (bnc#777405). +- Have the udev package create a tape group, as referenced by + 50-udev-default.rules and 60-persistent-storage-tape.rules + (DimStar). +- Add fix-bad-memory-access.patch: fix crash in journal rotation. +- Add fix-dbus-crash.patch: fix D-Bus caused crash. +- Add sync-on-shutdown.patch: ensure sync is done when initiating + shutdown. +- Add mount-efivars.patch: mount efivars if booting on UEFI. + + +------------------------------------------------------------------- +Thu Nov 15 14:31:28 UTC 2012 - fcrozat@suse.com + +- Ship a empty systemd-journald initscript in systemd-logger to + stop insserv to complain about missing syslog dependency. +- Update + 0001-service-Fix-dependencies-added-when-parsing-insserv..patch + with bug fixes from Debian. + +------------------------------------------------------------------- Wed Nov 14 17:36:05 UTC 2012 - fcrozat@suse.com - /var/log/journal is now only provided by systemd-logger (journal Index: systemd.spec =================================================================== --- systemd.spec (revision 311) +++ systemd.spec (revision 5) @@ -97,6 +97,7 @@ Source5: systemd-insserv_conf Source6: baselibs.conf Source7: libgcrypt.m4 +Source8: systemd-journald.init Source1060: boot.udev Source1061: write_dev_root_rule @@ -123,6 +124,8 @@ Patch56: support-suse-clock-sysconfig.patch Patch59: fix-enable-disable-boot-initscript.patch Patch60: var-run-lock.patch +Patch63: xdm-display-manager.patch +Patch64: fix-permissions-btmp.patch # Upstream First - Policy: # Never add any patches to this package without the upstream commit id @@ -132,6 +135,14 @@ Patch61: fix-logind-pty-seat.patch # PATCH-FIX-UPSTREAM fix-build-glibc217.patch fcrozat@suse.com -- fix build with latest glibc Patch62: fix-build-glibc217.patch +# PATCH-FIX-UPSTREAM fix-bad-memory-access.patch fcrozat@suse.com -- fix bad memory access +Patch65: fix-bad-memory-access.patch +# PATCH-FIX-UPSTREAM fix-dbus-crash.patch fcrozat@suse.com -- fix D-Bus caused crash +Patch66: fix-dbus-crash.patch +# PATCH-FIX-UPSTREAM sync-on-shutdown.patch fcrozat@suse.com -- Sync on shutdown +Patch67: sync-on-shutdown.patch +# PATCH-FIX-UPSTREAM mount-efivars.patch fcrozat@suse.com -- mount efivars if booting under UEFI +Patch68: mount-efivars.patch # udev patches # PATCH-FIX-OPENSUSE 0001-Reinstate-TIMEOUT-handling.patch @@ -146,8 +157,6 @@ # PATCH-FIX-OPENSUSE 0027-udev-fix-sg-autoload-regression.patch Patch1027: 0027-udev-fix-sg-autoload-regression.patch -# systemd patches - %description Systemd is a system and service manager, compatible with SysV and LSB init scripts for Linux. systemd provides aggressive parallelization @@ -308,6 +317,7 @@ %patch1026 -p1 %patch1027 -p1 +#systemd %patch1 -p1 %patch6 -p1 # don't apply when bootstrapping to not modify configure.in @@ -332,6 +342,12 @@ %patch60 -p1 %patch61 -p1 %patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 %build autoreconf -fiv @@ -363,8 +379,14 @@ ln -sf %{_bindir}/systemd-ask-password $RPM_BUILD_ROOT/bin/systemd-ask-password ln -sf %{_bindir}/systemctl $RPM_BUILD_ROOT/bin/systemctl ln -sf %{_prefix}/lib/systemd/systemd-udevd $RPM_BUILD_ROOT/sbin/udevd +%if ! 0%{?bootstrap} +ln -sf systemd-udevd.8 $RPM_BUILD_ROOT/%{_mandir}/man8/udevd.8 +%endif mkdir -p $RPM_BUILD_ROOT/%{_prefix}/usr/lib/firmware/updates ln -sf /lib/firmware $RPM_BUILD_ROOT/usr/lib/firmware +%if ! 0%{?bootstrap} +install -m755 -D %{S:8} $RPM_BUILD_ROOT/etc/init.d/systemd-journald +%endif install -m755 -D %{S:1060} $RPM_BUILD_ROOT/etc/init.d/boot.udev ln -s systemd-udevd.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev.service @@ -373,11 +395,6 @@ mkdir -p $RPM_BUILD_ROOT/lib/systemd/system/basic.target.wants ln -sf ../udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants -#fix manpages -%if ! 0%{?bootstrap} -sed -i -e 's,^\(\.so \)\(.*\.\)\([0-9]\),\1man\3/\2\3,g' %{buildroot}/%{_mandir}/*/* -%endif - #workaround for 716939 chmod 644 %{buildroot}%{_bindir}/systemd-analyze mkdir -p %{buildroot}%{_sysconfdir}/rpm @@ -387,7 +404,7 @@ install -m755 %{S:3} -D %{buildroot}%{_sbindir}/systemd-sysv-convert # do not install, code has been fixed, might be useful in the future -#install -m755 %{S:5} %{buildroot}/lib/systemd/system-generators +#install -m755 %{S:5} %{buildroot}/usr/lib/systemd/system-generators ln -s ../usr/lib/systemd/systemd %{buildroot}/bin/systemd ln -s ../usr/lib/systemd/systemd %{buildroot}/sbin/init ln -s ../usr/bin/systemctl %{buildroot}/sbin/reboot @@ -410,8 +427,7 @@ ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/ldconfig.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/loadmodules.service install -m644 %{S:2} %{buildroot}/%{_prefix}/lib/systemd/system/localfs.service -# need to be implemented in systemd directly -#ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service +ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/proc.service ln -s systemd-fsck-root.service %{buildroot}/%{_prefix}/lib/systemd/system/rootfsck.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/single.service @@ -437,8 +453,12 @@ %endif # legacy links -ln -s loginctl %{buildroot}%{_bindir}/systemd-loginctl -ln -s journalctl %{buildroot}%{_bindir}/systemd-journalctl +for f in loginctl journalctl ; do + ln -s $f %{buildroot}%{_bindir}/systemd-$f +%if ! 0%{?bootstrap} + ln -s $f.1 %{buildroot}%{_mandir}/man1/systemd-$f.1 +%endif +done ln -s /usr/lib/udev %{buildroot}/lib/udev # Create the /var/log/journal directory to change the volatile journal to a persistent one @@ -527,6 +547,8 @@ elif [ ! -e /lib/udev ]; then ln -s /usr/lib/udev /lib/udev fi +# Create "tape" group which is referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules +/usr/sbin/groupadd -r tape 2> /dev/null || : # kill daemon if we are not in a chroot if test -f /proc/1/exe -a -d /proc/1/root ; then if test "$(stat -Lc '%%D-%%i' /)" = "$(stat -Lc '%%D-%%i' /proc/1/root)"; then @@ -719,6 +741,10 @@ %exclude %{_mandir}/man8/telinit.8* %exclude %{_mandir}/man8/runlevel.8* %exclude %{_mandir}/man*/*udev*.[0-9]* + +# Packaged in analyze subpackage +%exclude %{_mandir}/man1/systemd-analyze.1* + %{_mandir}/man1/*.1* %{_mandir}/man3/*.3* %{_mandir}/man5/*.5* @@ -782,7 +808,11 @@ %endif %files analyze +%defattr(-,root,root) %attr(0755,root,root) /usr/bin/systemd-analyze +%if ! 0%{?bootstrap} +%{_mandir}/man1/systemd-analyze.1* +%endif %files -n %{udevpkgname} %defattr(-,root,root) @@ -873,6 +903,7 @@ %defattr(-,root,root) %dir /var/log/journal /var/log/README +/etc/init.d/systemd-journald %endif Index: fix-bad-memory-access.patch =================================================================== --- fix-bad-memory-access.patch (added) +++ fix-bad-memory-access.patch (revision 5) @@ -0,0 +1,23 @@ +From 7d73c1343be02a59b17de0cd34375deeb815d89c Mon Sep 17 00:00:00 2001 +From: Lennart Poettering <lennart@poettering.net> +Date: Tue, 20 Nov 2012 00:19:27 +0100 +Subject: [PATCH] journald: fix bad memory access + +https://bugzilla.redhat.com/show_bug.cgi?id=875653 +--- + src/journal/journald-server.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: systemd-195/src/journal/journald.c +=================================================================== +--- systemd-195.orig/src/journal/journald.c ++++ systemd-195/src/journal/journald.c +@@ -342,7 +342,7 @@ static void server_rotate(Server *s) { + HASHMAP_FOREACH_KEY(f, k, s->user_journals, i) { + r = journal_file_rotate(&f, s->compress, s->seal); + if (r < 0) +- if (f->path) ++ if (f) + log_error("Failed to rotate %s: %s", f->path, strerror(-r)); + else + log_error("Failed to create user journal: %s", strerror(-r)); Index: fix-dbus-crash.patch =================================================================== --- fix-dbus-crash.patch (added) +++ fix-dbus-crash.patch (revision 5) @@ -0,0 +1,32 @@ +From 645a9e5a2bbb06464a3fba1a3501e9d79e5bbad8 Mon Sep 17 00:00:00 2001 +From: Eelco Dolstra <eelco.dolstra@logicblox.com> +Date: Wed, 31 Oct 2012 11:53:56 +0100 +Subject: [PATCH] dbus-manager: fix a fatal dbus abort in + bus_manager_message_handler() + +If ListUnitFiles fails, or an OOM occurs, then dbus_message_unref() +will be called twice on "reply", causing systemd to crash. So remove +the call to dbus_message_unref(); it is unnecessary because of +the cleanup attribute on "reply". + +[zj: modified to leave one dbus_message_unref() alone, per Colin +Walters' comment.] +--- + src/core/dbus-manager.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c +index 2010241..3cf3e90 100644 +--- a/src/core/dbus-manager.c ++++ b/src/core/dbus-manager.c +@@ -1436,7 +1436,6 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, + r = unit_file_get_list(m->running_as == SYSTEMD_SYSTEM ? UNIT_FILE_SYSTEM : UNIT_FILE_USER, NULL, h); + if (r < 0) { + unit_file_list_free(h); +- dbus_message_unref(reply); + return bus_send_error_reply(connection, message, NULL, r); + } + +-- +1.7.10.4 + Index: fix-permissions-btmp.patch =================================================================== --- fix-permissions-btmp.patch (added) +++ fix-permissions-btmp.patch (revision 5) @@ -0,0 +1,13 @@ +Index: systemd-44/tmpfiles.d/systemd.conf +=================================================================== +--- systemd-44.orig/tmpfiles.d/systemd.conf ++++ systemd-44/tmpfiles.d/systemd.conf +@@ -11,7 +11,7 @@ d /run/user 0755 root root 10d + F /run/utmp 0664 root utmp - + + f /var/log/wtmp 0664 root utmp - +-f /var/log/btmp 0600 root utmp - ++f /var/log/btmp 0600 root root - + + d /var/cache/man - - - 30d + Index: mount-efivars.patch =================================================================== --- mount-efivars.patch (added) +++ mount-efivars.patch (revision 5) @@ -0,0 +1,336 @@ +From f271dd97622b656c1c013d181ea615c671cc2438 Mon Sep 17 00:00:00 2001 +From: "Lee, Chun-Yi" <joeyli.kernel@gmail.com> +Date: Sat, 27 Oct 2012 11:23:22 +0800 +Subject: [PATCH] systemd: mount the EFI variable filesystem +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Add efivarfs to the mount_table in mount-setup.c, so the EFI variable +filesystem will be mounted when systemd executed. + +The EFI variable filesystem will merge in v3.7 or v3.8 linux kernel. + +Cc: Kay Sievers <kay@vrfy.org> +Cc: Lennart Poettering <lennart@poettering.net> +Cc: Mantas Mikulėnas <grawity@gmail.com> +Cc: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> +Cc: Matt Fleming <matt.fleming@intel.com> +Cc: Jeremy Kerr <jeremy.kerr@canonical.com> +Cc: Matthew Garrett <mjg@redhat.com> +Signed-off-by: Lee, Chun-Yi <jlee@suse.com> +--- + src/core/kmod-setup.c | 7 ++++--- + src/core/mount-setup.c | 1 + + 2 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index cc2a2d9..ce8a8e7 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -31,9 +31,10 @@ + #include "kmod-setup.h" + + static const char * const kmod_table[] = { +- "autofs4", "/sys/class/misc/autofs", +- "ipv6", "/sys/module/ipv6", +- "unix", "/proc/net/unix" ++ "autofs4", "/sys/class/misc/autofs", ++ "ipv6", "/sys/module/ipv6", ++ "efivarfs", "/sys/firmware/efi/efivars", ++ "unix", "/proc/net/unix" + }; + + #pragma GCC diagnostic push +diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c +index 0fd112f..9894c7f 100644 +--- a/src/core/mount-setup.c ++++ b/src/core/mount-setup.c +@@ -66,6 +66,7 @@ static const MountPoint mount_table[] = { + { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, + { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, true, true }, + { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, ++ { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, + { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, + { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, false, true }, + { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +-- +1.7.10.4 + +From c1e5704657315b436c0409e8172c1fcb76adccad Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:06:27 +0100 +Subject: [PATCH] shared: add is_efiboot() + +--- + src/shared/util.c | 4 ++++ + src/shared/util.h | 2 ++ + 2 files changed, 6 insertions(+) + +diff --git a/src/shared/util.c b/src/shared/util.c +index 2a8afae..9983695 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -77,6 +77,10 @@ char **saved_argv = NULL; + static volatile unsigned cached_columns = 0; + static volatile unsigned cached_lines = 0; + ++bool is_efiboot(void) { ++ return access("/sys/firmware/efi", F_OK) >= 0; ++} ++ + size_t page_size(void) { + static __thread size_t pgsz = 0; + long r; +diff --git a/src/shared/util.h b/src/shared/util.h +index e387b12..99972cc 100644 +--- a/src/shared/util.h ++++ b/src/shared/util.h +@@ -90,6 +90,8 @@ union dirent_storage { + #define ANSI_HIGHLIGHT_YELLOW_ON "\x1B[1;33m" + #define ANSI_HIGHLIGHT_OFF "\x1B[0m" + ++bool is_efiboot(void); ++ + usec_t now(clockid_t clock); + + dual_timestamp* dual_timestamp_get(dual_timestamp *ts); +-- +1.7.10.4 + +From 1022373284b7562431fb0a6dba45db8af089a0e3 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:54:19 +0100 +Subject: [PATCH] kmod-setup: add conditional module loading callback + +--- + src/core/kmod-setup.c | 32 ++++++++++++++++++++------------ + 1 file changed, 20 insertions(+), 12 deletions(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index ce8a8e7..383a6b2 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -30,11 +30,17 @@ + + #include "kmod-setup.h" + +-static const char * const kmod_table[] = { +- "autofs4", "/sys/class/misc/autofs", +- "ipv6", "/sys/module/ipv6", +- "efivarfs", "/sys/firmware/efi/efivars", +- "unix", "/proc/net/unix" ++typedef struct Kmodule { ++ const char *name; ++ const char *directory; ++ bool (*condition_fn)(void); ++} KModule; ++ ++static const KModule kmod_table[] = { ++ { "autofs4", "/sys/class/misc/autofs", NULL } , ++ { "ipv6", "/sys/module/ipv6", NULL }, ++ { "efivarfs", "/sys/firmware/efi/efivars", NULL }, ++ { "unix", "/proc/net/unix", NULL } , + }; + + #pragma GCC diagnostic push +@@ -42,7 +48,8 @@ static const char * const kmod_table[] = { + static void systemd_kmod_log(void *data, int priority, const char *file, int line, + const char *fn, const char *format, va_list args) + { +- log_metav(priority, file, line, fn, format, args); ++ /* library logging is enabled at debug only */ ++ log_metav(LOG_DEBUG, file, line, fn, format, args); + } + #pragma GCC diagnostic pop + +@@ -53,13 +60,15 @@ int kmod_setup(void) { + int err; + + for (i = 0; i < ELEMENTSOF(kmod_table); i += 2) { ++ if (kmod_table[i].condition_fn && !kmod_table[i].condition_fn()) ++ continue; + +- if (access(kmod_table[i+1], F_OK) >= 0) ++ if (access(kmod_table[i].directory, F_OK) >= 0) + continue; + + log_debug("Your kernel apparently lacks built-in %s support. Might be a good idea to compile it in. " + "We'll now try to work around this by loading the module...", +- kmod_table[i]); ++ kmod_table[i].name); + + if (!ctx) { + ctx = kmod_new(NULL, NULL); +@@ -69,13 +78,12 @@ int kmod_setup(void) { + } + + kmod_set_log_fn(ctx, systemd_kmod_log, NULL); +- + kmod_load_resources(ctx); + } + +- err = kmod_module_new_from_name(ctx, kmod_table[i], &mod); ++ err = kmod_module_new_from_name(ctx, kmod_table[i].name, &mod); + if (err < 0) { +- log_error("Failed to load module '%s'", kmod_table[i]); ++ log_error("Failed to lookup module '%s'", kmod_table[i].name); + continue; + } + +@@ -85,7 +93,7 @@ int kmod_setup(void) { + else if (err == KMOD_PROBE_APPLY_BLACKLIST) + log_info("Module '%s' is blacklisted", kmod_module_get_name(mod)); + else +- log_error("Failed to insert '%s'", kmod_module_get_name(mod)); ++ log_error("Failed to insert module '%s'", kmod_module_get_name(mod)); + + kmod_module_unref(mod); + } +-- +1.7.10.4 + +From 3dfb265083347cb5700dc38f7cc0f479f378e6e9 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:55:23 +0100 +Subject: [PATCH] kmod-setup: mounting efivarfs, *after* we tried to mount it, + is pointless + +The mount() system call, which we issue before loading modules, will trigger +a modprobe by the kernel and block until it returns. Trying to load it again +later, will have exactly the same result as the first time. +--- + src/core/kmod-setup.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index 383a6b2..20ab232 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -39,7 +39,6 @@ typedef struct Kmodule { + static const KModule kmod_table[] = { + { "autofs4", "/sys/class/misc/autofs", NULL } , + { "ipv6", "/sys/module/ipv6", NULL }, +- { "efivarfs", "/sys/firmware/efi/efivars", NULL }, + { "unix", "/proc/net/unix", NULL } , + }; + +-- +1.7.10.4 + +From 6aa220e019f9dffd96590b06b68f937985204109 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 17:03:48 +0100 +Subject: [PATCH] mount-setup: try mounting 'efivarfs' only if the system + bootet with EFI + +--- + TODO | 3 --- + src/core/mount-setup.c | 50 ++++++++++++++++++++++++++++++++---------------- + 2 files changed, 34 insertions(+), 19 deletions(-) + +diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c +index 9894c7f..98614d0 100644 +--- a/src/core/mount-setup.c ++++ b/src/core/mount-setup.c +@@ -46,14 +46,20 @@ + #define TTY_GID 5 + #endif + ++typedef enum MountMode { ++ MNT_NONE = 0, ++ MNT_FATAL = 1 << 0, ++ MNT_IN_CONTAINER = 1 << 1, ++} MountMode; ++ + typedef struct MountPoint { + const char *what; + const char *where; + const char *type; + const char *options; + unsigned long flags; +- bool fatal; +- bool in_container; ++ bool (*condition_fn)(void); ++ MountMode mode; + } MountPoint; + + /* The first three entries we might need before SELinux is up. The +@@ -62,16 +68,26 @@ typedef struct MountPoint { + #define N_EARLY_MOUNT 4 + + static const MountPoint mount_table[] = { +- { "proc", "/proc", "proc", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, +- { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, +- { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, true, true }, +- { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, +- { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, +- { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +- { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, false, true }, +- { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +- { "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME, false, true }, +- { "cgroup", "/sys/fs/cgroup/systemd", "cgroup", "none,name=systemd", MS_NOSUID|MS_NOEXEC|MS_NODEV, false, true }, ++ { "proc", "/proc", "proc", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_NONE }, ++ { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ is_efiboot, MNT_NONE }, ++ { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, ++ NULL, MNT_IN_CONTAINER }, ++ { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_IN_CONTAINER }, ++ { "cgroup", "/sys/fs/cgroup/systemd", "cgroup", "none,name=systemd", MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_IN_CONTAINER }, + }; + + /* These are API file systems that might be mounted by other software, +@@ -119,6 +135,9 @@ static int mount_one(const MountPoint *p, bool relabel) { + + assert(p); + ++ if (p->condition_fn && !p->condition_fn()) ++ return 0; ++ + /* Relabel first, just in case */ + if (relabel) + label_fix(p->where, true, true); +@@ -131,7 +150,7 @@ static int mount_one(const MountPoint *p, bool relabel) { + return 0; + + /* Skip securityfs in a container */ +- if (!p->in_container && detect_container(NULL) > 0) ++ if (!(p->mode & MNT_IN_CONTAINER) && detect_container(NULL) > 0) + return 0; + + /* The access mode here doesn't really matter too much, since +@@ -149,8 +168,8 @@ static int mount_one(const MountPoint *p, bool relabel) { + p->type, + p->flags, + p->options) < 0) { +- log_full(p->fatal ? LOG_ERR : LOG_DEBUG, "Failed to mount %s: %s", p->where, strerror(errno)); +- return p->fatal ? -errno : 0; ++ log_full((p->mode & MNT_FATAL) ? LOG_ERR : LOG_DEBUG, "Failed to mount %s: %s", p->where, strerror(errno)); ++ return (p->mode & MNT_FATAL) ? -errno : 0; + } + + /* Relabel again, since we now mounted something fresh here */ +@@ -289,7 +308,6 @@ int mount_cgroup_controllers(char ***join_controllers) { + p.type = "cgroup"; + p.options = options; + p.flags = MS_NOSUID|MS_NOEXEC|MS_NODEV; +- p.fatal = false; + + r = mount_one(&p, true); + free(controller); +-- +1.7.10.4 + Index: sync-on-shutdown.patch =================================================================== --- sync-on-shutdown.patch (added) +++ sync-on-shutdown.patch (revision 5) @@ -0,0 +1,49 @@ +From 0049f05a8bb82c3e084bacc5945596761d706c55 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering <lennart@poettering.net> +Date: Fri, 16 Nov 2012 01:30:29 +0100 +Subject: [PATCH] shutdown: readd explicit sync() when shutting down + +As it turns out reboot() doesn't actually imply a file system sync, but +only a disk sync. Accordingly, readd explicit sync() invocations +immediately before we invoke reboot(). + +This is much less dramatic than it might sounds as we umount all +disks/read-only remount them anyway before going down. +--- + src/core/service.c | 1 + + src/core/shutdown.c | 7 +++++++ + 2 files changed, 8 insertions(+) + +diff --git a/src/core/service.c b/src/core/service.c +index cf08485..df72aba 100644 +--- a/src/core/service.c ++++ b/src/core/service.c +@@ -2485,6 +2485,7 @@ static int service_start_limit_test(Service *s) { + + case SERVICE_START_LIMIT_REBOOT_IMMEDIATE: + log_warning("%s start request repeated too quickly, rebooting immediately.", UNIT(s)->id); ++ sync(); + reboot(RB_AUTOBOOT); + break; + +diff --git a/src/core/shutdown.c b/src/core/shutdown.c +index cc8c57b..b59aef1 100644 +--- a/src/core/shutdown.c ++++ b/src/core/shutdown.c +@@ -273,6 +273,13 @@ int main(int argc, char *argv[]) { + } + } + ++ /* The kernel will automaticall flush ATA disks and suchlike ++ * on reboot(), but the file systems need to be synce'd ++ * explicitly in advance. So let's do this here, but not ++ * needlessly slow down containers. */ ++ if (!in_container) ++ sync(); ++ + if (cmd == LINUX_REBOOT_CMD_KEXEC) { + + if (!in_container) { +-- +1.7.10.4 + Index: systemd-journald.init =================================================================== --- systemd-journald.init (added) +++ systemd-journald.init (revision 5) @@ -0,0 +1,33 @@ +#! /bin/sh +# +# Copyright (c) 2001-2002 SuSE Linux AG, Nuernberg, Germany. +# All rights reserved. +# +# /etc/init.d/systemd-journald +# +### BEGIN INIT INFO +# Provides: syslog +# Required-Start: $null +# Required-Stop: $null +# Default-Start: 2 3 5 +# Default-Stop: +# Short-Description: compat wrapper for journald +# Description: compat wrapper for journald +### END INIT INFO + +. /etc/rc.status + +rc_reset + +case "$1" in + start|stop|restart) + rc_failed 3 + rc_status -v + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 + ;; +esac + +rc_exit Index: xdm-display-manager.patch =================================================================== --- xdm-display-manager.patch (added) +++ xdm-display-manager.patch (revision 5) @@ -0,0 +1,13 @@ +Index: systemd-195/units/graphical.target +=================================================================== +--- systemd-195.orig/units/graphical.target ++++ systemd-195/units/graphical.target +@@ -11,7 +11,7 @@ Documentation=man:systemd.special(7) + Requires=multi-user.target + After=multi-user.target + Conflicts=rescue.target +-Wants=display-manager.service ++Wants=xdm.service + AllowIsolate=yes + + [Install] OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=312
2012-11-20 13:10:12 +01:00
%patch63 -p1
%patch64 -p1
%patch65 -p1
%patch66 -p1
%patch67 -p1
%patch68 -p1
%patch69 -p1
%patch70 -p1
%patch71 -p1
%patch72 -p1
%patch73 -p1
%build
autoreconf -fiv
# prevent pre-generated and distributed files from re-building
find . -name "*.[1-8]" -exec touch '{}' \;
export V=1
# keep split-usr until all packages have moved their systemd rules to /usr
%configure \
--with-distro=suse \
--docdir=%{_docdir}/systemd \
--with-pamlibdir=/%{_lib}/security \
%if 0%{?bootstrap}
--disable-gudev \
%else
--enable-manpages \
--enable-gtk-doc \
%endif
--enable-selinux \
--enable-split-usr \
--disable-static \
CFLAGS="%{optflags}"
make %{?_smp_mflags}
%install
%makeinstall
mkdir -p $RPM_BUILD_ROOT/{sbin,lib,bin}
ln -sf %{_bindir}/udevadm $RPM_BUILD_ROOT/sbin/udevadm
ln -sf %{_bindir}/systemd-ask-password $RPM_BUILD_ROOT/bin/systemd-ask-password
ln -sf %{_bindir}/systemctl $RPM_BUILD_ROOT/bin/systemctl
ln -sf %{_prefix}/lib/systemd/systemd-udevd $RPM_BUILD_ROOT/sbin/udevd
- links more manpages for migrated tools (from Christopher Yeleighton). - disable boot.localnet service, ypbind service will do the right thing now (bnc#716746) - add xdm-display-manager.patch: pull xdm.service instead of display-manager.service (needed until xdm initscript is migrated to native systemd service). - Add fix-permissions-btmp.patch: ensure btmp is owned only by root (bnc#777405). - Have the udev package create a tape group, as referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules (DimStar). - Add fix-bad-memory-access.patch: fix crash in journal rotation. - Add fix-dbus-crash.patch: fix D-Bus caused crash. - Add sync-on-shutdown.patch: ensure sync is done when initiating shutdown. - Add mount-efivars.patch: mount efivars if booting on UEFI. - Ship a empty systemd-journald initscript in systemd-logger to stop insserv to complain about missing syslog dependency. - Update 0001-service-Fix-dependencies-added-when-parsing-insserv..patch with bug fixes from Debian. old: Base:System/systemd new: home:fcrozat:branches:Base:System/systemd rev NoneIndex: 0001-service-Fix-dependencies-added-when-parsing-insserv..patch =================================================================== --- 0001-service-Fix-dependencies-added-when-parsing-insserv..patch (revision 311) +++ 0001-service-Fix-dependencies-added-when-parsing-insserv..patch (revision 5) @@ -1,17 +1,35 @@ -From 6620bceb7233a830be3635a4f7a7dc75c13a9c8e Mon Sep 17 00:00:00 2001 -From: Frederic Crozat <fcrozat@suse.com> -Date: Fri, 30 Sep 2011 14:12:45 +0200 -Subject: [PATCH] service: Fix dependencies added when parsing insserv.conf - ---- - src/service.c | 16 +++++++++------- - 1 files changed, 9 insertions(+), 7 deletions(-) - -Index: systemd-41/src/service.c +Index: systemd-195/src/core/service.c =================================================================== ---- systemd-41.orig/src/core/service.c -+++ systemd-41/src/core/service.c -@@ -3210,23 +3210,30 @@ static void sysv_facility_in_insserv_con +--- systemd-195.orig/src/core/service.c ++++ systemd-195/src/core/service.c +@@ -3391,12 +3391,13 @@ static void service_notify_message(Unit + + #ifdef HAVE_SYSV_COMPAT + +-#ifdef TARGET_SUSE +-static void sysv_facility_in_insserv_conf(Manager *mgr) { +- FILE *f=NULL; ++#if defined(TARGET_SUSE) || defined(TARGET_DEBIAN) ++static void sysv_parse_insserv_conf(Manager *mgr, const char* filename) { ++ FILE *f = NULL; + int r; + +- if (!(f = fopen("/etc/insserv.conf", "re"))) { ++ if (!(f = fopen(filename, "re"))) { ++ log_error("Failed to open file %s", filename); + r = errno == ENOENT ? 0 : -errno; + goto finish; + } +@@ -3410,7 +3411,7 @@ static void sysv_facility_in_insserv_con + break; + + r = -errno; +- log_error("Failed to read configuration file '/etc/insserv.conf': %s", strerror(-r)); ++ log_error("Failed to read configuration file '%s': %s", filename, strerror(-r)); + goto finish; + } + +@@ -3425,23 +3426,30 @@ static void sysv_facility_in_insserv_con Unit *u; if (sysv_translate_facility(parsed[0], NULL, &facility) < 0) continue; @@ -29,12 +47,12 @@ STRV_FOREACH (j, parsed+1) { - if (*j[0]=='+') { - e = UNIT_WANTS; -+ if (*j[0]=='+') ++ if (*j[0] == '+') name = *j+1; - } - else { - e = UNIT_REQUIRES; -+ else ++ else name = *j; - } + if (streq(name, "boot.localfs") || @@ -44,9 +62,54 @@ continue; - r = unit_add_two_dependencies_by_name(u, UNIT_BEFORE, e, dep, NULL, true); -+ r = unit_add_dependency_by_name_inverse(u, UNIT_BEFORE, dep, NULL, true); -+ if (*j[0]!='+') ++ r = unit_add_two_dependencies_by_name_inverse(u, UNIT_WANTS, UNIT_BEFORE, dep, NULL, true); ++ if (*j[0] != '+') + r = unit_add_dependency_by_name(u, UNIT_REQUIRES, dep, NULL, true); free(dep); } } +@@ -3454,6 +3462,35 @@ finish: + fclose(f); + + } ++ ++static void sysv_facility_in_insserv_conf(Manager *mgr) { ++ DIR *d =NULL; ++ struct dirent *de; ++ ++#ifdef TARGET_DEBIAN ++ if (!(d = opendir("/etc/insserv.conf.d/"))) ++ if (errno != ENOENT) { ++ log_warning("opendir() failed on /etc/insserv.conf.d/ %s", strerror(errno)); ++ goto finish; ++ } ++ ++ while ((de = readdir(d))) { ++ char *path = NULL; ++ if (ignore_file(de->d_name)) ++ continue; ++ ++ path = join("/etc/insserv.conf.d/", de->d_name, NULL); ++ sysv_parse_insserv_conf(mgr, path); ++ free(path); ++ } ++finish: ++ if (d) ++ closedir(d); ++#endif ++ ++ sysv_parse_insserv_conf(mgr, "/etc/insserv.conf"); ++} ++ + #endif + + static int service_enumerate(Manager *m) { +@@ -3604,7 +3641,7 @@ static int service_enumerate(Manager *m) + + r = 0; + +-#ifdef TARGET_SUSE ++#if defined(TARGET_SUSE) || defined(TARGET_DEBIAN) + sysv_facility_in_insserv_conf (m); + #endif + Index: systemd-mini.changes =================================================================== --- systemd-mini.changes (revision 311) +++ systemd-mini.changes (revision 5) @@ -1,4 +1,35 @@ ------------------------------------------------------------------- +Tue Nov 20 09:36:43 UTC 2012 - fcrozat@suse.com + +- links more manpages for migrated tools (from Christopher + Yeleighton). +- disable boot.localnet service, ypbind service will do the right + thing now (bnc#716746) +- add xdm-display-manager.patch: pull xdm.service instead of + display-manager.service (needed until xdm initscript is migrated + to native systemd service). +- Add fix-permissions-btmp.patch: ensure btmp is owned only by root + (bnc#777405). +- Have the udev package create a tape group, as referenced by + 50-udev-default.rules and 60-persistent-storage-tape.rules + (DimStar). +- Add fix-bad-memory-access.patch: fix crash in journal rotation. +- Add fix-dbus-crash.patch: fix D-Bus caused crash. +- Add sync-on-shutdown.patch: ensure sync is done when initiating + shutdown. +- Add mount-efivars.patch: mount efivars if booting on UEFI. + + +------------------------------------------------------------------- +Thu Nov 15 14:31:28 UTC 2012 - fcrozat@suse.com + +- Ship a empty systemd-journald initscript in systemd-logger to + stop insserv to complain about missing syslog dependency. +- Update + 0001-service-Fix-dependencies-added-when-parsing-insserv..patch + with bug fixes from Debian. + +------------------------------------------------------------------- Wed Nov 14 17:36:05 UTC 2012 - fcrozat@suse.com - /var/log/journal is now only provided by systemd-logger (journal Index: systemd-mini.spec =================================================================== --- systemd-mini.spec (revision 311) +++ systemd-mini.spec (revision 5) @@ -102,6 +102,7 @@ Source5: systemd-insserv_conf Source6: baselibs.conf Source7: libgcrypt.m4 +Source8: systemd-journald.init Source1060: boot.udev Source1061: write_dev_root_rule @@ -128,6 +129,8 @@ Patch56: support-suse-clock-sysconfig.patch Patch59: fix-enable-disable-boot-initscript.patch Patch60: var-run-lock.patch +Patch63: xdm-display-manager.patch +Patch64: fix-permissions-btmp.patch # Upstream First - Policy: # Never add any patches to this package without the upstream commit id @@ -137,6 +140,14 @@ Patch61: fix-logind-pty-seat.patch # PATCH-FIX-UPSTREAM fix-build-glibc217.patch fcrozat@suse.com -- fix build with latest glibc Patch62: fix-build-glibc217.patch +# PATCH-FIX-UPSTREAM fix-bad-memory-access.patch fcrozat@suse.com -- fix bad memory access +Patch65: fix-bad-memory-access.patch +# PATCH-FIX-UPSTREAM fix-dbus-crash.patch fcrozat@suse.com -- fix D-Bus caused crash +Patch66: fix-dbus-crash.patch +# PATCH-FIX-UPSTREAM sync-on-shutdown.patch fcrozat@suse.com -- Sync on shutdown +Patch67: sync-on-shutdown.patch +# PATCH-FIX-UPSTREAM mount-efivars.patch fcrozat@suse.com -- mount efivars if booting under UEFI +Patch68: mount-efivars.patch # udev patches # PATCH-FIX-OPENSUSE 0001-Reinstate-TIMEOUT-handling.patch @@ -151,8 +162,6 @@ # PATCH-FIX-OPENSUSE 0027-udev-fix-sg-autoload-regression.patch Patch1027: 0027-udev-fix-sg-autoload-regression.patch -# systemd patches - %description Systemd is a system and service manager, compatible with SysV and LSB init scripts for Linux. systemd provides aggressive parallelization @@ -313,6 +322,7 @@ %patch1026 -p1 %patch1027 -p1 +#systemd %patch1 -p1 %patch6 -p1 # don't apply when bootstrapping to not modify configure.in @@ -337,6 +347,12 @@ %patch60 -p1 %patch61 -p1 %patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 %build autoreconf -fiv @@ -368,8 +384,14 @@ ln -sf %{_bindir}/systemd-ask-password $RPM_BUILD_ROOT/bin/systemd-ask-password ln -sf %{_bindir}/systemctl $RPM_BUILD_ROOT/bin/systemctl ln -sf %{_prefix}/lib/systemd/systemd-udevd $RPM_BUILD_ROOT/sbin/udevd +%if ! 0%{?bootstrap} +ln -sf systemd-udevd.8 $RPM_BUILD_ROOT/%{_mandir}/man8/udevd.8 +%endif mkdir -p $RPM_BUILD_ROOT/%{_prefix}/usr/lib/firmware/updates ln -sf /lib/firmware $RPM_BUILD_ROOT/usr/lib/firmware +%if ! 0%{?bootstrap} +install -m755 -D %{S:8} $RPM_BUILD_ROOT/etc/init.d/systemd-journald +%endif install -m755 -D %{S:1060} $RPM_BUILD_ROOT/etc/init.d/boot.udev ln -s systemd-udevd.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev.service @@ -378,11 +400,6 @@ mkdir -p $RPM_BUILD_ROOT/lib/systemd/system/basic.target.wants ln -sf ../udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants -#fix manpages -%if ! 0%{?bootstrap} -sed -i -e 's,^\(\.so \)\(.*\.\)\([0-9]\),\1man\3/\2\3,g' %{buildroot}/%{_mandir}/*/* -%endif - #workaround for 716939 chmod 644 %{buildroot}%{_bindir}/systemd-analyze mkdir -p %{buildroot}%{_sysconfdir}/rpm @@ -392,7 +409,7 @@ install -m755 %{S:3} -D %{buildroot}%{_sbindir}/systemd-sysv-convert # do not install, code has been fixed, might be useful in the future -#install -m755 %{S:5} %{buildroot}/lib/systemd/system-generators +#install -m755 %{S:5} %{buildroot}/usr/lib/systemd/system-generators ln -s ../usr/lib/systemd/systemd %{buildroot}/bin/systemd ln -s ../usr/lib/systemd/systemd %{buildroot}/sbin/init ln -s ../usr/bin/systemctl %{buildroot}/sbin/reboot @@ -415,8 +432,7 @@ ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/ldconfig.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/loadmodules.service install -m644 %{S:2} %{buildroot}/%{_prefix}/lib/systemd/system/localfs.service -# need to be implemented in systemd directly -#ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service +ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/proc.service ln -s systemd-fsck-root.service %{buildroot}/%{_prefix}/lib/systemd/system/rootfsck.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/single.service @@ -442,8 +458,12 @@ %endif # legacy links -ln -s loginctl %{buildroot}%{_bindir}/systemd-loginctl -ln -s journalctl %{buildroot}%{_bindir}/systemd-journalctl +for f in loginctl journalctl ; do + ln -s $f %{buildroot}%{_bindir}/systemd-$f +%if ! 0%{?bootstrap} + ln -s $f.1 %{buildroot}%{_mandir}/man1/systemd-$f.1 +%endif +done ln -s /usr/lib/udev %{buildroot}/lib/udev # Create the /var/log/journal directory to change the volatile journal to a persistent one @@ -532,6 +552,8 @@ elif [ ! -e /lib/udev ]; then ln -s /usr/lib/udev /lib/udev fi +# Create "tape" group which is referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules +/usr/sbin/groupadd -r tape 2> /dev/null || : # kill daemon if we are not in a chroot if test -f /proc/1/exe -a -d /proc/1/root ; then if test "$(stat -Lc '%%D-%%i' /)" = "$(stat -Lc '%%D-%%i' /proc/1/root)"; then @@ -724,6 +746,10 @@ %exclude %{_mandir}/man8/telinit.8* %exclude %{_mandir}/man8/runlevel.8* %exclude %{_mandir}/man*/*udev*.[0-9]* + +# Packaged in analyze subpackage +%exclude %{_mandir}/man1/systemd-analyze.1* + %{_mandir}/man1/*.1* %{_mandir}/man3/*.3* %{_mandir}/man5/*.5* @@ -787,7 +813,11 @@ %endif %files analyze +%defattr(-,root,root) %attr(0755,root,root) /usr/bin/systemd-analyze +%if ! 0%{?bootstrap} +%{_mandir}/man1/systemd-analyze.1* +%endif %files -n %{udevpkgname} %defattr(-,root,root) @@ -878,6 +908,7 @@ %defattr(-,root,root) %dir /var/log/journal /var/log/README +/etc/init.d/systemd-journald %endif Index: systemd.changes =================================================================== --- systemd.changes (revision 311) +++ systemd.changes (revision 5) @@ -1,4 +1,35 @@ ------------------------------------------------------------------- +Tue Nov 20 09:36:43 UTC 2012 - fcrozat@suse.com + +- links more manpages for migrated tools (from Christopher + Yeleighton). +- disable boot.localnet service, ypbind service will do the right + thing now (bnc#716746) +- add xdm-display-manager.patch: pull xdm.service instead of + display-manager.service (needed until xdm initscript is migrated + to native systemd service). +- Add fix-permissions-btmp.patch: ensure btmp is owned only by root + (bnc#777405). +- Have the udev package create a tape group, as referenced by + 50-udev-default.rules and 60-persistent-storage-tape.rules + (DimStar). +- Add fix-bad-memory-access.patch: fix crash in journal rotation. +- Add fix-dbus-crash.patch: fix D-Bus caused crash. +- Add sync-on-shutdown.patch: ensure sync is done when initiating + shutdown. +- Add mount-efivars.patch: mount efivars if booting on UEFI. + + +------------------------------------------------------------------- +Thu Nov 15 14:31:28 UTC 2012 - fcrozat@suse.com + +- Ship a empty systemd-journald initscript in systemd-logger to + stop insserv to complain about missing syslog dependency. +- Update + 0001-service-Fix-dependencies-added-when-parsing-insserv..patch + with bug fixes from Debian. + +------------------------------------------------------------------- Wed Nov 14 17:36:05 UTC 2012 - fcrozat@suse.com - /var/log/journal is now only provided by systemd-logger (journal Index: systemd.spec =================================================================== --- systemd.spec (revision 311) +++ systemd.spec (revision 5) @@ -97,6 +97,7 @@ Source5: systemd-insserv_conf Source6: baselibs.conf Source7: libgcrypt.m4 +Source8: systemd-journald.init Source1060: boot.udev Source1061: write_dev_root_rule @@ -123,6 +124,8 @@ Patch56: support-suse-clock-sysconfig.patch Patch59: fix-enable-disable-boot-initscript.patch Patch60: var-run-lock.patch +Patch63: xdm-display-manager.patch +Patch64: fix-permissions-btmp.patch # Upstream First - Policy: # Never add any patches to this package without the upstream commit id @@ -132,6 +135,14 @@ Patch61: fix-logind-pty-seat.patch # PATCH-FIX-UPSTREAM fix-build-glibc217.patch fcrozat@suse.com -- fix build with latest glibc Patch62: fix-build-glibc217.patch +# PATCH-FIX-UPSTREAM fix-bad-memory-access.patch fcrozat@suse.com -- fix bad memory access +Patch65: fix-bad-memory-access.patch +# PATCH-FIX-UPSTREAM fix-dbus-crash.patch fcrozat@suse.com -- fix D-Bus caused crash +Patch66: fix-dbus-crash.patch +# PATCH-FIX-UPSTREAM sync-on-shutdown.patch fcrozat@suse.com -- Sync on shutdown +Patch67: sync-on-shutdown.patch +# PATCH-FIX-UPSTREAM mount-efivars.patch fcrozat@suse.com -- mount efivars if booting under UEFI +Patch68: mount-efivars.patch # udev patches # PATCH-FIX-OPENSUSE 0001-Reinstate-TIMEOUT-handling.patch @@ -146,8 +157,6 @@ # PATCH-FIX-OPENSUSE 0027-udev-fix-sg-autoload-regression.patch Patch1027: 0027-udev-fix-sg-autoload-regression.patch -# systemd patches - %description Systemd is a system and service manager, compatible with SysV and LSB init scripts for Linux. systemd provides aggressive parallelization @@ -308,6 +317,7 @@ %patch1026 -p1 %patch1027 -p1 +#systemd %patch1 -p1 %patch6 -p1 # don't apply when bootstrapping to not modify configure.in @@ -332,6 +342,12 @@ %patch60 -p1 %patch61 -p1 %patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 %build autoreconf -fiv @@ -363,8 +379,14 @@ ln -sf %{_bindir}/systemd-ask-password $RPM_BUILD_ROOT/bin/systemd-ask-password ln -sf %{_bindir}/systemctl $RPM_BUILD_ROOT/bin/systemctl ln -sf %{_prefix}/lib/systemd/systemd-udevd $RPM_BUILD_ROOT/sbin/udevd +%if ! 0%{?bootstrap} +ln -sf systemd-udevd.8 $RPM_BUILD_ROOT/%{_mandir}/man8/udevd.8 +%endif mkdir -p $RPM_BUILD_ROOT/%{_prefix}/usr/lib/firmware/updates ln -sf /lib/firmware $RPM_BUILD_ROOT/usr/lib/firmware +%if ! 0%{?bootstrap} +install -m755 -D %{S:8} $RPM_BUILD_ROOT/etc/init.d/systemd-journald +%endif install -m755 -D %{S:1060} $RPM_BUILD_ROOT/etc/init.d/boot.udev ln -s systemd-udevd.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev.service @@ -373,11 +395,6 @@ mkdir -p $RPM_BUILD_ROOT/lib/systemd/system/basic.target.wants ln -sf ../udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants -#fix manpages -%if ! 0%{?bootstrap} -sed -i -e 's,^\(\.so \)\(.*\.\)\([0-9]\),\1man\3/\2\3,g' %{buildroot}/%{_mandir}/*/* -%endif - #workaround for 716939 chmod 644 %{buildroot}%{_bindir}/systemd-analyze mkdir -p %{buildroot}%{_sysconfdir}/rpm @@ -387,7 +404,7 @@ install -m755 %{S:3} -D %{buildroot}%{_sbindir}/systemd-sysv-convert # do not install, code has been fixed, might be useful in the future -#install -m755 %{S:5} %{buildroot}/lib/systemd/system-generators +#install -m755 %{S:5} %{buildroot}/usr/lib/systemd/system-generators ln -s ../usr/lib/systemd/systemd %{buildroot}/bin/systemd ln -s ../usr/lib/systemd/systemd %{buildroot}/sbin/init ln -s ../usr/bin/systemctl %{buildroot}/sbin/reboot @@ -410,8 +427,7 @@ ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/ldconfig.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/loadmodules.service install -m644 %{S:2} %{buildroot}/%{_prefix}/lib/systemd/system/localfs.service -# need to be implemented in systemd directly -#ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service +ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/proc.service ln -s systemd-fsck-root.service %{buildroot}/%{_prefix}/lib/systemd/system/rootfsck.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/single.service @@ -437,8 +453,12 @@ %endif # legacy links -ln -s loginctl %{buildroot}%{_bindir}/systemd-loginctl -ln -s journalctl %{buildroot}%{_bindir}/systemd-journalctl +for f in loginctl journalctl ; do + ln -s $f %{buildroot}%{_bindir}/systemd-$f +%if ! 0%{?bootstrap} + ln -s $f.1 %{buildroot}%{_mandir}/man1/systemd-$f.1 +%endif +done ln -s /usr/lib/udev %{buildroot}/lib/udev # Create the /var/log/journal directory to change the volatile journal to a persistent one @@ -527,6 +547,8 @@ elif [ ! -e /lib/udev ]; then ln -s /usr/lib/udev /lib/udev fi +# Create "tape" group which is referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules +/usr/sbin/groupadd -r tape 2> /dev/null || : # kill daemon if we are not in a chroot if test -f /proc/1/exe -a -d /proc/1/root ; then if test "$(stat -Lc '%%D-%%i' /)" = "$(stat -Lc '%%D-%%i' /proc/1/root)"; then @@ -719,6 +741,10 @@ %exclude %{_mandir}/man8/telinit.8* %exclude %{_mandir}/man8/runlevel.8* %exclude %{_mandir}/man*/*udev*.[0-9]* + +# Packaged in analyze subpackage +%exclude %{_mandir}/man1/systemd-analyze.1* + %{_mandir}/man1/*.1* %{_mandir}/man3/*.3* %{_mandir}/man5/*.5* @@ -782,7 +808,11 @@ %endif %files analyze +%defattr(-,root,root) %attr(0755,root,root) /usr/bin/systemd-analyze +%if ! 0%{?bootstrap} +%{_mandir}/man1/systemd-analyze.1* +%endif %files -n %{udevpkgname} %defattr(-,root,root) @@ -873,6 +903,7 @@ %defattr(-,root,root) %dir /var/log/journal /var/log/README +/etc/init.d/systemd-journald %endif Index: fix-bad-memory-access.patch =================================================================== --- fix-bad-memory-access.patch (added) +++ fix-bad-memory-access.patch (revision 5) @@ -0,0 +1,23 @@ +From 7d73c1343be02a59b17de0cd34375deeb815d89c Mon Sep 17 00:00:00 2001 +From: Lennart Poettering <lennart@poettering.net> +Date: Tue, 20 Nov 2012 00:19:27 +0100 +Subject: [PATCH] journald: fix bad memory access + +https://bugzilla.redhat.com/show_bug.cgi?id=875653 +--- + src/journal/journald-server.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: systemd-195/src/journal/journald.c +=================================================================== +--- systemd-195.orig/src/journal/journald.c ++++ systemd-195/src/journal/journald.c +@@ -342,7 +342,7 @@ static void server_rotate(Server *s) { + HASHMAP_FOREACH_KEY(f, k, s->user_journals, i) { + r = journal_file_rotate(&f, s->compress, s->seal); + if (r < 0) +- if (f->path) ++ if (f) + log_error("Failed to rotate %s: %s", f->path, strerror(-r)); + else + log_error("Failed to create user journal: %s", strerror(-r)); Index: fix-dbus-crash.patch =================================================================== --- fix-dbus-crash.patch (added) +++ fix-dbus-crash.patch (revision 5) @@ -0,0 +1,32 @@ +From 645a9e5a2bbb06464a3fba1a3501e9d79e5bbad8 Mon Sep 17 00:00:00 2001 +From: Eelco Dolstra <eelco.dolstra@logicblox.com> +Date: Wed, 31 Oct 2012 11:53:56 +0100 +Subject: [PATCH] dbus-manager: fix a fatal dbus abort in + bus_manager_message_handler() + +If ListUnitFiles fails, or an OOM occurs, then dbus_message_unref() +will be called twice on "reply", causing systemd to crash. So remove +the call to dbus_message_unref(); it is unnecessary because of +the cleanup attribute on "reply". + +[zj: modified to leave one dbus_message_unref() alone, per Colin +Walters' comment.] +--- + src/core/dbus-manager.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c +index 2010241..3cf3e90 100644 +--- a/src/core/dbus-manager.c ++++ b/src/core/dbus-manager.c +@@ -1436,7 +1436,6 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, + r = unit_file_get_list(m->running_as == SYSTEMD_SYSTEM ? UNIT_FILE_SYSTEM : UNIT_FILE_USER, NULL, h); + if (r < 0) { + unit_file_list_free(h); +- dbus_message_unref(reply); + return bus_send_error_reply(connection, message, NULL, r); + } + +-- +1.7.10.4 + Index: fix-permissions-btmp.patch =================================================================== --- fix-permissions-btmp.patch (added) +++ fix-permissions-btmp.patch (revision 5) @@ -0,0 +1,13 @@ +Index: systemd-44/tmpfiles.d/systemd.conf +=================================================================== +--- systemd-44.orig/tmpfiles.d/systemd.conf ++++ systemd-44/tmpfiles.d/systemd.conf +@@ -11,7 +11,7 @@ d /run/user 0755 root root 10d + F /run/utmp 0664 root utmp - + + f /var/log/wtmp 0664 root utmp - +-f /var/log/btmp 0600 root utmp - ++f /var/log/btmp 0600 root root - + + d /var/cache/man - - - 30d + Index: mount-efivars.patch =================================================================== --- mount-efivars.patch (added) +++ mount-efivars.patch (revision 5) @@ -0,0 +1,336 @@ +From f271dd97622b656c1c013d181ea615c671cc2438 Mon Sep 17 00:00:00 2001 +From: "Lee, Chun-Yi" <joeyli.kernel@gmail.com> +Date: Sat, 27 Oct 2012 11:23:22 +0800 +Subject: [PATCH] systemd: mount the EFI variable filesystem +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Add efivarfs to the mount_table in mount-setup.c, so the EFI variable +filesystem will be mounted when systemd executed. + +The EFI variable filesystem will merge in v3.7 or v3.8 linux kernel. + +Cc: Kay Sievers <kay@vrfy.org> +Cc: Lennart Poettering <lennart@poettering.net> +Cc: Mantas Mikulėnas <grawity@gmail.com> +Cc: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> +Cc: Matt Fleming <matt.fleming@intel.com> +Cc: Jeremy Kerr <jeremy.kerr@canonical.com> +Cc: Matthew Garrett <mjg@redhat.com> +Signed-off-by: Lee, Chun-Yi <jlee@suse.com> +--- + src/core/kmod-setup.c | 7 ++++--- + src/core/mount-setup.c | 1 + + 2 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index cc2a2d9..ce8a8e7 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -31,9 +31,10 @@ + #include "kmod-setup.h" + + static const char * const kmod_table[] = { +- "autofs4", "/sys/class/misc/autofs", +- "ipv6", "/sys/module/ipv6", +- "unix", "/proc/net/unix" ++ "autofs4", "/sys/class/misc/autofs", ++ "ipv6", "/sys/module/ipv6", ++ "efivarfs", "/sys/firmware/efi/efivars", ++ "unix", "/proc/net/unix" + }; + + #pragma GCC diagnostic push +diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c +index 0fd112f..9894c7f 100644 +--- a/src/core/mount-setup.c ++++ b/src/core/mount-setup.c +@@ -66,6 +66,7 @@ static const MountPoint mount_table[] = { + { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, + { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, true, true }, + { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, ++ { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, + { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, + { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, false, true }, + { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +-- +1.7.10.4 + +From c1e5704657315b436c0409e8172c1fcb76adccad Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:06:27 +0100 +Subject: [PATCH] shared: add is_efiboot() + +--- + src/shared/util.c | 4 ++++ + src/shared/util.h | 2 ++ + 2 files changed, 6 insertions(+) + +diff --git a/src/shared/util.c b/src/shared/util.c +index 2a8afae..9983695 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -77,6 +77,10 @@ char **saved_argv = NULL; + static volatile unsigned cached_columns = 0; + static volatile unsigned cached_lines = 0; + ++bool is_efiboot(void) { ++ return access("/sys/firmware/efi", F_OK) >= 0; ++} ++ + size_t page_size(void) { + static __thread size_t pgsz = 0; + long r; +diff --git a/src/shared/util.h b/src/shared/util.h +index e387b12..99972cc 100644 +--- a/src/shared/util.h ++++ b/src/shared/util.h +@@ -90,6 +90,8 @@ union dirent_storage { + #define ANSI_HIGHLIGHT_YELLOW_ON "\x1B[1;33m" + #define ANSI_HIGHLIGHT_OFF "\x1B[0m" + ++bool is_efiboot(void); ++ + usec_t now(clockid_t clock); + + dual_timestamp* dual_timestamp_get(dual_timestamp *ts); +-- +1.7.10.4 + +From 1022373284b7562431fb0a6dba45db8af089a0e3 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:54:19 +0100 +Subject: [PATCH] kmod-setup: add conditional module loading callback + +--- + src/core/kmod-setup.c | 32 ++++++++++++++++++++------------ + 1 file changed, 20 insertions(+), 12 deletions(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index ce8a8e7..383a6b2 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -30,11 +30,17 @@ + + #include "kmod-setup.h" + +-static const char * const kmod_table[] = { +- "autofs4", "/sys/class/misc/autofs", +- "ipv6", "/sys/module/ipv6", +- "efivarfs", "/sys/firmware/efi/efivars", +- "unix", "/proc/net/unix" ++typedef struct Kmodule { ++ const char *name; ++ const char *directory; ++ bool (*condition_fn)(void); ++} KModule; ++ ++static const KModule kmod_table[] = { ++ { "autofs4", "/sys/class/misc/autofs", NULL } , ++ { "ipv6", "/sys/module/ipv6", NULL }, ++ { "efivarfs", "/sys/firmware/efi/efivars", NULL }, ++ { "unix", "/proc/net/unix", NULL } , + }; + + #pragma GCC diagnostic push +@@ -42,7 +48,8 @@ static const char * const kmod_table[] = { + static void systemd_kmod_log(void *data, int priority, const char *file, int line, + const char *fn, const char *format, va_list args) + { +- log_metav(priority, file, line, fn, format, args); ++ /* library logging is enabled at debug only */ ++ log_metav(LOG_DEBUG, file, line, fn, format, args); + } + #pragma GCC diagnostic pop + +@@ -53,13 +60,15 @@ int kmod_setup(void) { + int err; + + for (i = 0; i < ELEMENTSOF(kmod_table); i += 2) { ++ if (kmod_table[i].condition_fn && !kmod_table[i].condition_fn()) ++ continue; + +- if (access(kmod_table[i+1], F_OK) >= 0) ++ if (access(kmod_table[i].directory, F_OK) >= 0) + continue; + + log_debug("Your kernel apparently lacks built-in %s support. Might be a good idea to compile it in. " + "We'll now try to work around this by loading the module...", +- kmod_table[i]); ++ kmod_table[i].name); + + if (!ctx) { + ctx = kmod_new(NULL, NULL); +@@ -69,13 +78,12 @@ int kmod_setup(void) { + } + + kmod_set_log_fn(ctx, systemd_kmod_log, NULL); +- + kmod_load_resources(ctx); + } + +- err = kmod_module_new_from_name(ctx, kmod_table[i], &mod); ++ err = kmod_module_new_from_name(ctx, kmod_table[i].name, &mod); + if (err < 0) { +- log_error("Failed to load module '%s'", kmod_table[i]); ++ log_error("Failed to lookup module '%s'", kmod_table[i].name); + continue; + } + +@@ -85,7 +93,7 @@ int kmod_setup(void) { + else if (err == KMOD_PROBE_APPLY_BLACKLIST) + log_info("Module '%s' is blacklisted", kmod_module_get_name(mod)); + else +- log_error("Failed to insert '%s'", kmod_module_get_name(mod)); ++ log_error("Failed to insert module '%s'", kmod_module_get_name(mod)); + + kmod_module_unref(mod); + } +-- +1.7.10.4 + +From 3dfb265083347cb5700dc38f7cc0f479f378e6e9 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:55:23 +0100 +Subject: [PATCH] kmod-setup: mounting efivarfs, *after* we tried to mount it, + is pointless + +The mount() system call, which we issue before loading modules, will trigger +a modprobe by the kernel and block until it returns. Trying to load it again +later, will have exactly the same result as the first time. +--- + src/core/kmod-setup.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index 383a6b2..20ab232 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -39,7 +39,6 @@ typedef struct Kmodule { + static const KModule kmod_table[] = { + { "autofs4", "/sys/class/misc/autofs", NULL } , + { "ipv6", "/sys/module/ipv6", NULL }, +- { "efivarfs", "/sys/firmware/efi/efivars", NULL }, + { "unix", "/proc/net/unix", NULL } , + }; + +-- +1.7.10.4 + +From 6aa220e019f9dffd96590b06b68f937985204109 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 17:03:48 +0100 +Subject: [PATCH] mount-setup: try mounting 'efivarfs' only if the system + bootet with EFI + +--- + TODO | 3 --- + src/core/mount-setup.c | 50 ++++++++++++++++++++++++++++++++---------------- + 2 files changed, 34 insertions(+), 19 deletions(-) + +diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c +index 9894c7f..98614d0 100644 +--- a/src/core/mount-setup.c ++++ b/src/core/mount-setup.c +@@ -46,14 +46,20 @@ + #define TTY_GID 5 + #endif + ++typedef enum MountMode { ++ MNT_NONE = 0, ++ MNT_FATAL = 1 << 0, ++ MNT_IN_CONTAINER = 1 << 1, ++} MountMode; ++ + typedef struct MountPoint { + const char *what; + const char *where; + const char *type; + const char *options; + unsigned long flags; +- bool fatal; +- bool in_container; ++ bool (*condition_fn)(void); ++ MountMode mode; + } MountPoint; + + /* The first three entries we might need before SELinux is up. The +@@ -62,16 +68,26 @@ typedef struct MountPoint { + #define N_EARLY_MOUNT 4 + + static const MountPoint mount_table[] = { +- { "proc", "/proc", "proc", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, +- { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, +- { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, true, true }, +- { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, +- { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, +- { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +- { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, false, true }, +- { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +- { "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME, false, true }, +- { "cgroup", "/sys/fs/cgroup/systemd", "cgroup", "none,name=systemd", MS_NOSUID|MS_NOEXEC|MS_NODEV, false, true }, ++ { "proc", "/proc", "proc", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_NONE }, ++ { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ is_efiboot, MNT_NONE }, ++ { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, ++ NULL, MNT_IN_CONTAINER }, ++ { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_IN_CONTAINER }, ++ { "cgroup", "/sys/fs/cgroup/systemd", "cgroup", "none,name=systemd", MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_IN_CONTAINER }, + }; + + /* These are API file systems that might be mounted by other software, +@@ -119,6 +135,9 @@ static int mount_one(const MountPoint *p, bool relabel) { + + assert(p); + ++ if (p->condition_fn && !p->condition_fn()) ++ return 0; ++ + /* Relabel first, just in case */ + if (relabel) + label_fix(p->where, true, true); +@@ -131,7 +150,7 @@ static int mount_one(const MountPoint *p, bool relabel) { + return 0; + + /* Skip securityfs in a container */ +- if (!p->in_container && detect_container(NULL) > 0) ++ if (!(p->mode & MNT_IN_CONTAINER) && detect_container(NULL) > 0) + return 0; + + /* The access mode here doesn't really matter too much, since +@@ -149,8 +168,8 @@ static int mount_one(const MountPoint *p, bool relabel) { + p->type, + p->flags, + p->options) < 0) { +- log_full(p->fatal ? LOG_ERR : LOG_DEBUG, "Failed to mount %s: %s", p->where, strerror(errno)); +- return p->fatal ? -errno : 0; ++ log_full((p->mode & MNT_FATAL) ? LOG_ERR : LOG_DEBUG, "Failed to mount %s: %s", p->where, strerror(errno)); ++ return (p->mode & MNT_FATAL) ? -errno : 0; + } + + /* Relabel again, since we now mounted something fresh here */ +@@ -289,7 +308,6 @@ int mount_cgroup_controllers(char ***join_controllers) { + p.type = "cgroup"; + p.options = options; + p.flags = MS_NOSUID|MS_NOEXEC|MS_NODEV; +- p.fatal = false; + + r = mount_one(&p, true); + free(controller); +-- +1.7.10.4 + Index: sync-on-shutdown.patch =================================================================== --- sync-on-shutdown.patch (added) +++ sync-on-shutdown.patch (revision 5) @@ -0,0 +1,49 @@ +From 0049f05a8bb82c3e084bacc5945596761d706c55 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering <lennart@poettering.net> +Date: Fri, 16 Nov 2012 01:30:29 +0100 +Subject: [PATCH] shutdown: readd explicit sync() when shutting down + +As it turns out reboot() doesn't actually imply a file system sync, but +only a disk sync. Accordingly, readd explicit sync() invocations +immediately before we invoke reboot(). + +This is much less dramatic than it might sounds as we umount all +disks/read-only remount them anyway before going down. +--- + src/core/service.c | 1 + + src/core/shutdown.c | 7 +++++++ + 2 files changed, 8 insertions(+) + +diff --git a/src/core/service.c b/src/core/service.c +index cf08485..df72aba 100644 +--- a/src/core/service.c ++++ b/src/core/service.c +@@ -2485,6 +2485,7 @@ static int service_start_limit_test(Service *s) { + + case SERVICE_START_LIMIT_REBOOT_IMMEDIATE: + log_warning("%s start request repeated too quickly, rebooting immediately.", UNIT(s)->id); ++ sync(); + reboot(RB_AUTOBOOT); + break; + +diff --git a/src/core/shutdown.c b/src/core/shutdown.c +index cc8c57b..b59aef1 100644 +--- a/src/core/shutdown.c ++++ b/src/core/shutdown.c +@@ -273,6 +273,13 @@ int main(int argc, char *argv[]) { + } + } + ++ /* The kernel will automaticall flush ATA disks and suchlike ++ * on reboot(), but the file systems need to be synce'd ++ * explicitly in advance. So let's do this here, but not ++ * needlessly slow down containers. */ ++ if (!in_container) ++ sync(); ++ + if (cmd == LINUX_REBOOT_CMD_KEXEC) { + + if (!in_container) { +-- +1.7.10.4 + Index: systemd-journald.init =================================================================== --- systemd-journald.init (added) +++ systemd-journald.init (revision 5) @@ -0,0 +1,33 @@ +#! /bin/sh +# +# Copyright (c) 2001-2002 SuSE Linux AG, Nuernberg, Germany. +# All rights reserved. +# +# /etc/init.d/systemd-journald +# +### BEGIN INIT INFO +# Provides: syslog +# Required-Start: $null +# Required-Stop: $null +# Default-Start: 2 3 5 +# Default-Stop: +# Short-Description: compat wrapper for journald +# Description: compat wrapper for journald +### END INIT INFO + +. /etc/rc.status + +rc_reset + +case "$1" in + start|stop|restart) + rc_failed 3 + rc_status -v + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 + ;; +esac + +rc_exit Index: xdm-display-manager.patch =================================================================== --- xdm-display-manager.patch (added) +++ xdm-display-manager.patch (revision 5) @@ -0,0 +1,13 @@ +Index: systemd-195/units/graphical.target +=================================================================== +--- systemd-195.orig/units/graphical.target ++++ systemd-195/units/graphical.target +@@ -11,7 +11,7 @@ Documentation=man:systemd.special(7) + Requires=multi-user.target + After=multi-user.target + Conflicts=rescue.target +-Wants=display-manager.service ++Wants=xdm.service + AllowIsolate=yes + + [Install] OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=312
2012-11-20 13:10:12 +01:00
%if ! 0%{?bootstrap}
ln -sf systemd-udevd.8 $RPM_BUILD_ROOT/%{_mandir}/man8/udevd.8
%endif
mkdir -p $RPM_BUILD_ROOT/%{_prefix}/usr/lib/firmware/updates
ln -sf /lib/firmware $RPM_BUILD_ROOT/usr/lib/firmware
- links more manpages for migrated tools (from Christopher Yeleighton). - disable boot.localnet service, ypbind service will do the right thing now (bnc#716746) - add xdm-display-manager.patch: pull xdm.service instead of display-manager.service (needed until xdm initscript is migrated to native systemd service). - Add fix-permissions-btmp.patch: ensure btmp is owned only by root (bnc#777405). - Have the udev package create a tape group, as referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules (DimStar). - Add fix-bad-memory-access.patch: fix crash in journal rotation. - Add fix-dbus-crash.patch: fix D-Bus caused crash. - Add sync-on-shutdown.patch: ensure sync is done when initiating shutdown. - Add mount-efivars.patch: mount efivars if booting on UEFI. - Ship a empty systemd-journald initscript in systemd-logger to stop insserv to complain about missing syslog dependency. - Update 0001-service-Fix-dependencies-added-when-parsing-insserv..patch with bug fixes from Debian. old: Base:System/systemd new: home:fcrozat:branches:Base:System/systemd rev NoneIndex: 0001-service-Fix-dependencies-added-when-parsing-insserv..patch =================================================================== --- 0001-service-Fix-dependencies-added-when-parsing-insserv..patch (revision 311) +++ 0001-service-Fix-dependencies-added-when-parsing-insserv..patch (revision 5) @@ -1,17 +1,35 @@ -From 6620bceb7233a830be3635a4f7a7dc75c13a9c8e Mon Sep 17 00:00:00 2001 -From: Frederic Crozat <fcrozat@suse.com> -Date: Fri, 30 Sep 2011 14:12:45 +0200 -Subject: [PATCH] service: Fix dependencies added when parsing insserv.conf - ---- - src/service.c | 16 +++++++++------- - 1 files changed, 9 insertions(+), 7 deletions(-) - -Index: systemd-41/src/service.c +Index: systemd-195/src/core/service.c =================================================================== ---- systemd-41.orig/src/core/service.c -+++ systemd-41/src/core/service.c -@@ -3210,23 +3210,30 @@ static void sysv_facility_in_insserv_con +--- systemd-195.orig/src/core/service.c ++++ systemd-195/src/core/service.c +@@ -3391,12 +3391,13 @@ static void service_notify_message(Unit + + #ifdef HAVE_SYSV_COMPAT + +-#ifdef TARGET_SUSE +-static void sysv_facility_in_insserv_conf(Manager *mgr) { +- FILE *f=NULL; ++#if defined(TARGET_SUSE) || defined(TARGET_DEBIAN) ++static void sysv_parse_insserv_conf(Manager *mgr, const char* filename) { ++ FILE *f = NULL; + int r; + +- if (!(f = fopen("/etc/insserv.conf", "re"))) { ++ if (!(f = fopen(filename, "re"))) { ++ log_error("Failed to open file %s", filename); + r = errno == ENOENT ? 0 : -errno; + goto finish; + } +@@ -3410,7 +3411,7 @@ static void sysv_facility_in_insserv_con + break; + + r = -errno; +- log_error("Failed to read configuration file '/etc/insserv.conf': %s", strerror(-r)); ++ log_error("Failed to read configuration file '%s': %s", filename, strerror(-r)); + goto finish; + } + +@@ -3425,23 +3426,30 @@ static void sysv_facility_in_insserv_con Unit *u; if (sysv_translate_facility(parsed[0], NULL, &facility) < 0) continue; @@ -29,12 +47,12 @@ STRV_FOREACH (j, parsed+1) { - if (*j[0]=='+') { - e = UNIT_WANTS; -+ if (*j[0]=='+') ++ if (*j[0] == '+') name = *j+1; - } - else { - e = UNIT_REQUIRES; -+ else ++ else name = *j; - } + if (streq(name, "boot.localfs") || @@ -44,9 +62,54 @@ continue; - r = unit_add_two_dependencies_by_name(u, UNIT_BEFORE, e, dep, NULL, true); -+ r = unit_add_dependency_by_name_inverse(u, UNIT_BEFORE, dep, NULL, true); -+ if (*j[0]!='+') ++ r = unit_add_two_dependencies_by_name_inverse(u, UNIT_WANTS, UNIT_BEFORE, dep, NULL, true); ++ if (*j[0] != '+') + r = unit_add_dependency_by_name(u, UNIT_REQUIRES, dep, NULL, true); free(dep); } } +@@ -3454,6 +3462,35 @@ finish: + fclose(f); + + } ++ ++static void sysv_facility_in_insserv_conf(Manager *mgr) { ++ DIR *d =NULL; ++ struct dirent *de; ++ ++#ifdef TARGET_DEBIAN ++ if (!(d = opendir("/etc/insserv.conf.d/"))) ++ if (errno != ENOENT) { ++ log_warning("opendir() failed on /etc/insserv.conf.d/ %s", strerror(errno)); ++ goto finish; ++ } ++ ++ while ((de = readdir(d))) { ++ char *path = NULL; ++ if (ignore_file(de->d_name)) ++ continue; ++ ++ path = join("/etc/insserv.conf.d/", de->d_name, NULL); ++ sysv_parse_insserv_conf(mgr, path); ++ free(path); ++ } ++finish: ++ if (d) ++ closedir(d); ++#endif ++ ++ sysv_parse_insserv_conf(mgr, "/etc/insserv.conf"); ++} ++ + #endif + + static int service_enumerate(Manager *m) { +@@ -3604,7 +3641,7 @@ static int service_enumerate(Manager *m) + + r = 0; + +-#ifdef TARGET_SUSE ++#if defined(TARGET_SUSE) || defined(TARGET_DEBIAN) + sysv_facility_in_insserv_conf (m); + #endif + Index: systemd-mini.changes =================================================================== --- systemd-mini.changes (revision 311) +++ systemd-mini.changes (revision 5) @@ -1,4 +1,35 @@ ------------------------------------------------------------------- +Tue Nov 20 09:36:43 UTC 2012 - fcrozat@suse.com + +- links more manpages for migrated tools (from Christopher + Yeleighton). +- disable boot.localnet service, ypbind service will do the right + thing now (bnc#716746) +- add xdm-display-manager.patch: pull xdm.service instead of + display-manager.service (needed until xdm initscript is migrated + to native systemd service). +- Add fix-permissions-btmp.patch: ensure btmp is owned only by root + (bnc#777405). +- Have the udev package create a tape group, as referenced by + 50-udev-default.rules and 60-persistent-storage-tape.rules + (DimStar). +- Add fix-bad-memory-access.patch: fix crash in journal rotation. +- Add fix-dbus-crash.patch: fix D-Bus caused crash. +- Add sync-on-shutdown.patch: ensure sync is done when initiating + shutdown. +- Add mount-efivars.patch: mount efivars if booting on UEFI. + + +------------------------------------------------------------------- +Thu Nov 15 14:31:28 UTC 2012 - fcrozat@suse.com + +- Ship a empty systemd-journald initscript in systemd-logger to + stop insserv to complain about missing syslog dependency. +- Update + 0001-service-Fix-dependencies-added-when-parsing-insserv..patch + with bug fixes from Debian. + +------------------------------------------------------------------- Wed Nov 14 17:36:05 UTC 2012 - fcrozat@suse.com - /var/log/journal is now only provided by systemd-logger (journal Index: systemd-mini.spec =================================================================== --- systemd-mini.spec (revision 311) +++ systemd-mini.spec (revision 5) @@ -102,6 +102,7 @@ Source5: systemd-insserv_conf Source6: baselibs.conf Source7: libgcrypt.m4 +Source8: systemd-journald.init Source1060: boot.udev Source1061: write_dev_root_rule @@ -128,6 +129,8 @@ Patch56: support-suse-clock-sysconfig.patch Patch59: fix-enable-disable-boot-initscript.patch Patch60: var-run-lock.patch +Patch63: xdm-display-manager.patch +Patch64: fix-permissions-btmp.patch # Upstream First - Policy: # Never add any patches to this package without the upstream commit id @@ -137,6 +140,14 @@ Patch61: fix-logind-pty-seat.patch # PATCH-FIX-UPSTREAM fix-build-glibc217.patch fcrozat@suse.com -- fix build with latest glibc Patch62: fix-build-glibc217.patch +# PATCH-FIX-UPSTREAM fix-bad-memory-access.patch fcrozat@suse.com -- fix bad memory access +Patch65: fix-bad-memory-access.patch +# PATCH-FIX-UPSTREAM fix-dbus-crash.patch fcrozat@suse.com -- fix D-Bus caused crash +Patch66: fix-dbus-crash.patch +# PATCH-FIX-UPSTREAM sync-on-shutdown.patch fcrozat@suse.com -- Sync on shutdown +Patch67: sync-on-shutdown.patch +# PATCH-FIX-UPSTREAM mount-efivars.patch fcrozat@suse.com -- mount efivars if booting under UEFI +Patch68: mount-efivars.patch # udev patches # PATCH-FIX-OPENSUSE 0001-Reinstate-TIMEOUT-handling.patch @@ -151,8 +162,6 @@ # PATCH-FIX-OPENSUSE 0027-udev-fix-sg-autoload-regression.patch Patch1027: 0027-udev-fix-sg-autoload-regression.patch -# systemd patches - %description Systemd is a system and service manager, compatible with SysV and LSB init scripts for Linux. systemd provides aggressive parallelization @@ -313,6 +322,7 @@ %patch1026 -p1 %patch1027 -p1 +#systemd %patch1 -p1 %patch6 -p1 # don't apply when bootstrapping to not modify configure.in @@ -337,6 +347,12 @@ %patch60 -p1 %patch61 -p1 %patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 %build autoreconf -fiv @@ -368,8 +384,14 @@ ln -sf %{_bindir}/systemd-ask-password $RPM_BUILD_ROOT/bin/systemd-ask-password ln -sf %{_bindir}/systemctl $RPM_BUILD_ROOT/bin/systemctl ln -sf %{_prefix}/lib/systemd/systemd-udevd $RPM_BUILD_ROOT/sbin/udevd +%if ! 0%{?bootstrap} +ln -sf systemd-udevd.8 $RPM_BUILD_ROOT/%{_mandir}/man8/udevd.8 +%endif mkdir -p $RPM_BUILD_ROOT/%{_prefix}/usr/lib/firmware/updates ln -sf /lib/firmware $RPM_BUILD_ROOT/usr/lib/firmware +%if ! 0%{?bootstrap} +install -m755 -D %{S:8} $RPM_BUILD_ROOT/etc/init.d/systemd-journald +%endif install -m755 -D %{S:1060} $RPM_BUILD_ROOT/etc/init.d/boot.udev ln -s systemd-udevd.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev.service @@ -378,11 +400,6 @@ mkdir -p $RPM_BUILD_ROOT/lib/systemd/system/basic.target.wants ln -sf ../udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants -#fix manpages -%if ! 0%{?bootstrap} -sed -i -e 's,^\(\.so \)\(.*\.\)\([0-9]\),\1man\3/\2\3,g' %{buildroot}/%{_mandir}/*/* -%endif - #workaround for 716939 chmod 644 %{buildroot}%{_bindir}/systemd-analyze mkdir -p %{buildroot}%{_sysconfdir}/rpm @@ -392,7 +409,7 @@ install -m755 %{S:3} -D %{buildroot}%{_sbindir}/systemd-sysv-convert # do not install, code has been fixed, might be useful in the future -#install -m755 %{S:5} %{buildroot}/lib/systemd/system-generators +#install -m755 %{S:5} %{buildroot}/usr/lib/systemd/system-generators ln -s ../usr/lib/systemd/systemd %{buildroot}/bin/systemd ln -s ../usr/lib/systemd/systemd %{buildroot}/sbin/init ln -s ../usr/bin/systemctl %{buildroot}/sbin/reboot @@ -415,8 +432,7 @@ ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/ldconfig.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/loadmodules.service install -m644 %{S:2} %{buildroot}/%{_prefix}/lib/systemd/system/localfs.service -# need to be implemented in systemd directly -#ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service +ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/proc.service ln -s systemd-fsck-root.service %{buildroot}/%{_prefix}/lib/systemd/system/rootfsck.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/single.service @@ -442,8 +458,12 @@ %endif # legacy links -ln -s loginctl %{buildroot}%{_bindir}/systemd-loginctl -ln -s journalctl %{buildroot}%{_bindir}/systemd-journalctl +for f in loginctl journalctl ; do + ln -s $f %{buildroot}%{_bindir}/systemd-$f +%if ! 0%{?bootstrap} + ln -s $f.1 %{buildroot}%{_mandir}/man1/systemd-$f.1 +%endif +done ln -s /usr/lib/udev %{buildroot}/lib/udev # Create the /var/log/journal directory to change the volatile journal to a persistent one @@ -532,6 +552,8 @@ elif [ ! -e /lib/udev ]; then ln -s /usr/lib/udev /lib/udev fi +# Create "tape" group which is referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules +/usr/sbin/groupadd -r tape 2> /dev/null || : # kill daemon if we are not in a chroot if test -f /proc/1/exe -a -d /proc/1/root ; then if test "$(stat -Lc '%%D-%%i' /)" = "$(stat -Lc '%%D-%%i' /proc/1/root)"; then @@ -724,6 +746,10 @@ %exclude %{_mandir}/man8/telinit.8* %exclude %{_mandir}/man8/runlevel.8* %exclude %{_mandir}/man*/*udev*.[0-9]* + +# Packaged in analyze subpackage +%exclude %{_mandir}/man1/systemd-analyze.1* + %{_mandir}/man1/*.1* %{_mandir}/man3/*.3* %{_mandir}/man5/*.5* @@ -787,7 +813,11 @@ %endif %files analyze +%defattr(-,root,root) %attr(0755,root,root) /usr/bin/systemd-analyze +%if ! 0%{?bootstrap} +%{_mandir}/man1/systemd-analyze.1* +%endif %files -n %{udevpkgname} %defattr(-,root,root) @@ -878,6 +908,7 @@ %defattr(-,root,root) %dir /var/log/journal /var/log/README +/etc/init.d/systemd-journald %endif Index: systemd.changes =================================================================== --- systemd.changes (revision 311) +++ systemd.changes (revision 5) @@ -1,4 +1,35 @@ ------------------------------------------------------------------- +Tue Nov 20 09:36:43 UTC 2012 - fcrozat@suse.com + +- links more manpages for migrated tools (from Christopher + Yeleighton). +- disable boot.localnet service, ypbind service will do the right + thing now (bnc#716746) +- add xdm-display-manager.patch: pull xdm.service instead of + display-manager.service (needed until xdm initscript is migrated + to native systemd service). +- Add fix-permissions-btmp.patch: ensure btmp is owned only by root + (bnc#777405). +- Have the udev package create a tape group, as referenced by + 50-udev-default.rules and 60-persistent-storage-tape.rules + (DimStar). +- Add fix-bad-memory-access.patch: fix crash in journal rotation. +- Add fix-dbus-crash.patch: fix D-Bus caused crash. +- Add sync-on-shutdown.patch: ensure sync is done when initiating + shutdown. +- Add mount-efivars.patch: mount efivars if booting on UEFI. + + +------------------------------------------------------------------- +Thu Nov 15 14:31:28 UTC 2012 - fcrozat@suse.com + +- Ship a empty systemd-journald initscript in systemd-logger to + stop insserv to complain about missing syslog dependency. +- Update + 0001-service-Fix-dependencies-added-when-parsing-insserv..patch + with bug fixes from Debian. + +------------------------------------------------------------------- Wed Nov 14 17:36:05 UTC 2012 - fcrozat@suse.com - /var/log/journal is now only provided by systemd-logger (journal Index: systemd.spec =================================================================== --- systemd.spec (revision 311) +++ systemd.spec (revision 5) @@ -97,6 +97,7 @@ Source5: systemd-insserv_conf Source6: baselibs.conf Source7: libgcrypt.m4 +Source8: systemd-journald.init Source1060: boot.udev Source1061: write_dev_root_rule @@ -123,6 +124,8 @@ Patch56: support-suse-clock-sysconfig.patch Patch59: fix-enable-disable-boot-initscript.patch Patch60: var-run-lock.patch +Patch63: xdm-display-manager.patch +Patch64: fix-permissions-btmp.patch # Upstream First - Policy: # Never add any patches to this package without the upstream commit id @@ -132,6 +135,14 @@ Patch61: fix-logind-pty-seat.patch # PATCH-FIX-UPSTREAM fix-build-glibc217.patch fcrozat@suse.com -- fix build with latest glibc Patch62: fix-build-glibc217.patch +# PATCH-FIX-UPSTREAM fix-bad-memory-access.patch fcrozat@suse.com -- fix bad memory access +Patch65: fix-bad-memory-access.patch +# PATCH-FIX-UPSTREAM fix-dbus-crash.patch fcrozat@suse.com -- fix D-Bus caused crash +Patch66: fix-dbus-crash.patch +# PATCH-FIX-UPSTREAM sync-on-shutdown.patch fcrozat@suse.com -- Sync on shutdown +Patch67: sync-on-shutdown.patch +# PATCH-FIX-UPSTREAM mount-efivars.patch fcrozat@suse.com -- mount efivars if booting under UEFI +Patch68: mount-efivars.patch # udev patches # PATCH-FIX-OPENSUSE 0001-Reinstate-TIMEOUT-handling.patch @@ -146,8 +157,6 @@ # PATCH-FIX-OPENSUSE 0027-udev-fix-sg-autoload-regression.patch Patch1027: 0027-udev-fix-sg-autoload-regression.patch -# systemd patches - %description Systemd is a system and service manager, compatible with SysV and LSB init scripts for Linux. systemd provides aggressive parallelization @@ -308,6 +317,7 @@ %patch1026 -p1 %patch1027 -p1 +#systemd %patch1 -p1 %patch6 -p1 # don't apply when bootstrapping to not modify configure.in @@ -332,6 +342,12 @@ %patch60 -p1 %patch61 -p1 %patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 %build autoreconf -fiv @@ -363,8 +379,14 @@ ln -sf %{_bindir}/systemd-ask-password $RPM_BUILD_ROOT/bin/systemd-ask-password ln -sf %{_bindir}/systemctl $RPM_BUILD_ROOT/bin/systemctl ln -sf %{_prefix}/lib/systemd/systemd-udevd $RPM_BUILD_ROOT/sbin/udevd +%if ! 0%{?bootstrap} +ln -sf systemd-udevd.8 $RPM_BUILD_ROOT/%{_mandir}/man8/udevd.8 +%endif mkdir -p $RPM_BUILD_ROOT/%{_prefix}/usr/lib/firmware/updates ln -sf /lib/firmware $RPM_BUILD_ROOT/usr/lib/firmware +%if ! 0%{?bootstrap} +install -m755 -D %{S:8} $RPM_BUILD_ROOT/etc/init.d/systemd-journald +%endif install -m755 -D %{S:1060} $RPM_BUILD_ROOT/etc/init.d/boot.udev ln -s systemd-udevd.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev.service @@ -373,11 +395,6 @@ mkdir -p $RPM_BUILD_ROOT/lib/systemd/system/basic.target.wants ln -sf ../udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants -#fix manpages -%if ! 0%{?bootstrap} -sed -i -e 's,^\(\.so \)\(.*\.\)\([0-9]\),\1man\3/\2\3,g' %{buildroot}/%{_mandir}/*/* -%endif - #workaround for 716939 chmod 644 %{buildroot}%{_bindir}/systemd-analyze mkdir -p %{buildroot}%{_sysconfdir}/rpm @@ -387,7 +404,7 @@ install -m755 %{S:3} -D %{buildroot}%{_sbindir}/systemd-sysv-convert # do not install, code has been fixed, might be useful in the future -#install -m755 %{S:5} %{buildroot}/lib/systemd/system-generators +#install -m755 %{S:5} %{buildroot}/usr/lib/systemd/system-generators ln -s ../usr/lib/systemd/systemd %{buildroot}/bin/systemd ln -s ../usr/lib/systemd/systemd %{buildroot}/sbin/init ln -s ../usr/bin/systemctl %{buildroot}/sbin/reboot @@ -410,8 +427,7 @@ ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/ldconfig.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/loadmodules.service install -m644 %{S:2} %{buildroot}/%{_prefix}/lib/systemd/system/localfs.service -# need to be implemented in systemd directly -#ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service +ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/proc.service ln -s systemd-fsck-root.service %{buildroot}/%{_prefix}/lib/systemd/system/rootfsck.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/single.service @@ -437,8 +453,12 @@ %endif # legacy links -ln -s loginctl %{buildroot}%{_bindir}/systemd-loginctl -ln -s journalctl %{buildroot}%{_bindir}/systemd-journalctl +for f in loginctl journalctl ; do + ln -s $f %{buildroot}%{_bindir}/systemd-$f +%if ! 0%{?bootstrap} + ln -s $f.1 %{buildroot}%{_mandir}/man1/systemd-$f.1 +%endif +done ln -s /usr/lib/udev %{buildroot}/lib/udev # Create the /var/log/journal directory to change the volatile journal to a persistent one @@ -527,6 +547,8 @@ elif [ ! -e /lib/udev ]; then ln -s /usr/lib/udev /lib/udev fi +# Create "tape" group which is referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules +/usr/sbin/groupadd -r tape 2> /dev/null || : # kill daemon if we are not in a chroot if test -f /proc/1/exe -a -d /proc/1/root ; then if test "$(stat -Lc '%%D-%%i' /)" = "$(stat -Lc '%%D-%%i' /proc/1/root)"; then @@ -719,6 +741,10 @@ %exclude %{_mandir}/man8/telinit.8* %exclude %{_mandir}/man8/runlevel.8* %exclude %{_mandir}/man*/*udev*.[0-9]* + +# Packaged in analyze subpackage +%exclude %{_mandir}/man1/systemd-analyze.1* + %{_mandir}/man1/*.1* %{_mandir}/man3/*.3* %{_mandir}/man5/*.5* @@ -782,7 +808,11 @@ %endif %files analyze +%defattr(-,root,root) %attr(0755,root,root) /usr/bin/systemd-analyze +%if ! 0%{?bootstrap} +%{_mandir}/man1/systemd-analyze.1* +%endif %files -n %{udevpkgname} %defattr(-,root,root) @@ -873,6 +903,7 @@ %defattr(-,root,root) %dir /var/log/journal /var/log/README +/etc/init.d/systemd-journald %endif Index: fix-bad-memory-access.patch =================================================================== --- fix-bad-memory-access.patch (added) +++ fix-bad-memory-access.patch (revision 5) @@ -0,0 +1,23 @@ +From 7d73c1343be02a59b17de0cd34375deeb815d89c Mon Sep 17 00:00:00 2001 +From: Lennart Poettering <lennart@poettering.net> +Date: Tue, 20 Nov 2012 00:19:27 +0100 +Subject: [PATCH] journald: fix bad memory access + +https://bugzilla.redhat.com/show_bug.cgi?id=875653 +--- + src/journal/journald-server.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: systemd-195/src/journal/journald.c +=================================================================== +--- systemd-195.orig/src/journal/journald.c ++++ systemd-195/src/journal/journald.c +@@ -342,7 +342,7 @@ static void server_rotate(Server *s) { + HASHMAP_FOREACH_KEY(f, k, s->user_journals, i) { + r = journal_file_rotate(&f, s->compress, s->seal); + if (r < 0) +- if (f->path) ++ if (f) + log_error("Failed to rotate %s: %s", f->path, strerror(-r)); + else + log_error("Failed to create user journal: %s", strerror(-r)); Index: fix-dbus-crash.patch =================================================================== --- fix-dbus-crash.patch (added) +++ fix-dbus-crash.patch (revision 5) @@ -0,0 +1,32 @@ +From 645a9e5a2bbb06464a3fba1a3501e9d79e5bbad8 Mon Sep 17 00:00:00 2001 +From: Eelco Dolstra <eelco.dolstra@logicblox.com> +Date: Wed, 31 Oct 2012 11:53:56 +0100 +Subject: [PATCH] dbus-manager: fix a fatal dbus abort in + bus_manager_message_handler() + +If ListUnitFiles fails, or an OOM occurs, then dbus_message_unref() +will be called twice on "reply", causing systemd to crash. So remove +the call to dbus_message_unref(); it is unnecessary because of +the cleanup attribute on "reply". + +[zj: modified to leave one dbus_message_unref() alone, per Colin +Walters' comment.] +--- + src/core/dbus-manager.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c +index 2010241..3cf3e90 100644 +--- a/src/core/dbus-manager.c ++++ b/src/core/dbus-manager.c +@@ -1436,7 +1436,6 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, + r = unit_file_get_list(m->running_as == SYSTEMD_SYSTEM ? UNIT_FILE_SYSTEM : UNIT_FILE_USER, NULL, h); + if (r < 0) { + unit_file_list_free(h); +- dbus_message_unref(reply); + return bus_send_error_reply(connection, message, NULL, r); + } + +-- +1.7.10.4 + Index: fix-permissions-btmp.patch =================================================================== --- fix-permissions-btmp.patch (added) +++ fix-permissions-btmp.patch (revision 5) @@ -0,0 +1,13 @@ +Index: systemd-44/tmpfiles.d/systemd.conf +=================================================================== +--- systemd-44.orig/tmpfiles.d/systemd.conf ++++ systemd-44/tmpfiles.d/systemd.conf +@@ -11,7 +11,7 @@ d /run/user 0755 root root 10d + F /run/utmp 0664 root utmp - + + f /var/log/wtmp 0664 root utmp - +-f /var/log/btmp 0600 root utmp - ++f /var/log/btmp 0600 root root - + + d /var/cache/man - - - 30d + Index: mount-efivars.patch =================================================================== --- mount-efivars.patch (added) +++ mount-efivars.patch (revision 5) @@ -0,0 +1,336 @@ +From f271dd97622b656c1c013d181ea615c671cc2438 Mon Sep 17 00:00:00 2001 +From: "Lee, Chun-Yi" <joeyli.kernel@gmail.com> +Date: Sat, 27 Oct 2012 11:23:22 +0800 +Subject: [PATCH] systemd: mount the EFI variable filesystem +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Add efivarfs to the mount_table in mount-setup.c, so the EFI variable +filesystem will be mounted when systemd executed. + +The EFI variable filesystem will merge in v3.7 or v3.8 linux kernel. + +Cc: Kay Sievers <kay@vrfy.org> +Cc: Lennart Poettering <lennart@poettering.net> +Cc: Mantas Mikulėnas <grawity@gmail.com> +Cc: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> +Cc: Matt Fleming <matt.fleming@intel.com> +Cc: Jeremy Kerr <jeremy.kerr@canonical.com> +Cc: Matthew Garrett <mjg@redhat.com> +Signed-off-by: Lee, Chun-Yi <jlee@suse.com> +--- + src/core/kmod-setup.c | 7 ++++--- + src/core/mount-setup.c | 1 + + 2 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index cc2a2d9..ce8a8e7 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -31,9 +31,10 @@ + #include "kmod-setup.h" + + static const char * const kmod_table[] = { +- "autofs4", "/sys/class/misc/autofs", +- "ipv6", "/sys/module/ipv6", +- "unix", "/proc/net/unix" ++ "autofs4", "/sys/class/misc/autofs", ++ "ipv6", "/sys/module/ipv6", ++ "efivarfs", "/sys/firmware/efi/efivars", ++ "unix", "/proc/net/unix" + }; + + #pragma GCC diagnostic push +diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c +index 0fd112f..9894c7f 100644 +--- a/src/core/mount-setup.c ++++ b/src/core/mount-setup.c +@@ -66,6 +66,7 @@ static const MountPoint mount_table[] = { + { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, + { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, true, true }, + { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, ++ { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, + { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, + { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, false, true }, + { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +-- +1.7.10.4 + +From c1e5704657315b436c0409e8172c1fcb76adccad Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:06:27 +0100 +Subject: [PATCH] shared: add is_efiboot() + +--- + src/shared/util.c | 4 ++++ + src/shared/util.h | 2 ++ + 2 files changed, 6 insertions(+) + +diff --git a/src/shared/util.c b/src/shared/util.c +index 2a8afae..9983695 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -77,6 +77,10 @@ char **saved_argv = NULL; + static volatile unsigned cached_columns = 0; + static volatile unsigned cached_lines = 0; + ++bool is_efiboot(void) { ++ return access("/sys/firmware/efi", F_OK) >= 0; ++} ++ + size_t page_size(void) { + static __thread size_t pgsz = 0; + long r; +diff --git a/src/shared/util.h b/src/shared/util.h +index e387b12..99972cc 100644 +--- a/src/shared/util.h ++++ b/src/shared/util.h +@@ -90,6 +90,8 @@ union dirent_storage { + #define ANSI_HIGHLIGHT_YELLOW_ON "\x1B[1;33m" + #define ANSI_HIGHLIGHT_OFF "\x1B[0m" + ++bool is_efiboot(void); ++ + usec_t now(clockid_t clock); + + dual_timestamp* dual_timestamp_get(dual_timestamp *ts); +-- +1.7.10.4 + +From 1022373284b7562431fb0a6dba45db8af089a0e3 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:54:19 +0100 +Subject: [PATCH] kmod-setup: add conditional module loading callback + +--- + src/core/kmod-setup.c | 32 ++++++++++++++++++++------------ + 1 file changed, 20 insertions(+), 12 deletions(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index ce8a8e7..383a6b2 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -30,11 +30,17 @@ + + #include "kmod-setup.h" + +-static const char * const kmod_table[] = { +- "autofs4", "/sys/class/misc/autofs", +- "ipv6", "/sys/module/ipv6", +- "efivarfs", "/sys/firmware/efi/efivars", +- "unix", "/proc/net/unix" ++typedef struct Kmodule { ++ const char *name; ++ const char *directory; ++ bool (*condition_fn)(void); ++} KModule; ++ ++static const KModule kmod_table[] = { ++ { "autofs4", "/sys/class/misc/autofs", NULL } , ++ { "ipv6", "/sys/module/ipv6", NULL }, ++ { "efivarfs", "/sys/firmware/efi/efivars", NULL }, ++ { "unix", "/proc/net/unix", NULL } , + }; + + #pragma GCC diagnostic push +@@ -42,7 +48,8 @@ static const char * const kmod_table[] = { + static void systemd_kmod_log(void *data, int priority, const char *file, int line, + const char *fn, const char *format, va_list args) + { +- log_metav(priority, file, line, fn, format, args); ++ /* library logging is enabled at debug only */ ++ log_metav(LOG_DEBUG, file, line, fn, format, args); + } + #pragma GCC diagnostic pop + +@@ -53,13 +60,15 @@ int kmod_setup(void) { + int err; + + for (i = 0; i < ELEMENTSOF(kmod_table); i += 2) { ++ if (kmod_table[i].condition_fn && !kmod_table[i].condition_fn()) ++ continue; + +- if (access(kmod_table[i+1], F_OK) >= 0) ++ if (access(kmod_table[i].directory, F_OK) >= 0) + continue; + + log_debug("Your kernel apparently lacks built-in %s support. Might be a good idea to compile it in. " + "We'll now try to work around this by loading the module...", +- kmod_table[i]); ++ kmod_table[i].name); + + if (!ctx) { + ctx = kmod_new(NULL, NULL); +@@ -69,13 +78,12 @@ int kmod_setup(void) { + } + + kmod_set_log_fn(ctx, systemd_kmod_log, NULL); +- + kmod_load_resources(ctx); + } + +- err = kmod_module_new_from_name(ctx, kmod_table[i], &mod); ++ err = kmod_module_new_from_name(ctx, kmod_table[i].name, &mod); + if (err < 0) { +- log_error("Failed to load module '%s'", kmod_table[i]); ++ log_error("Failed to lookup module '%s'", kmod_table[i].name); + continue; + } + +@@ -85,7 +93,7 @@ int kmod_setup(void) { + else if (err == KMOD_PROBE_APPLY_BLACKLIST) + log_info("Module '%s' is blacklisted", kmod_module_get_name(mod)); + else +- log_error("Failed to insert '%s'", kmod_module_get_name(mod)); ++ log_error("Failed to insert module '%s'", kmod_module_get_name(mod)); + + kmod_module_unref(mod); + } +-- +1.7.10.4 + +From 3dfb265083347cb5700dc38f7cc0f479f378e6e9 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:55:23 +0100 +Subject: [PATCH] kmod-setup: mounting efivarfs, *after* we tried to mount it, + is pointless + +The mount() system call, which we issue before loading modules, will trigger +a modprobe by the kernel and block until it returns. Trying to load it again +later, will have exactly the same result as the first time. +--- + src/core/kmod-setup.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index 383a6b2..20ab232 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -39,7 +39,6 @@ typedef struct Kmodule { + static const KModule kmod_table[] = { + { "autofs4", "/sys/class/misc/autofs", NULL } , + { "ipv6", "/sys/module/ipv6", NULL }, +- { "efivarfs", "/sys/firmware/efi/efivars", NULL }, + { "unix", "/proc/net/unix", NULL } , + }; + +-- +1.7.10.4 + +From 6aa220e019f9dffd96590b06b68f937985204109 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 17:03:48 +0100 +Subject: [PATCH] mount-setup: try mounting 'efivarfs' only if the system + bootet with EFI + +--- + TODO | 3 --- + src/core/mount-setup.c | 50 ++++++++++++++++++++++++++++++++---------------- + 2 files changed, 34 insertions(+), 19 deletions(-) + +diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c +index 9894c7f..98614d0 100644 +--- a/src/core/mount-setup.c ++++ b/src/core/mount-setup.c +@@ -46,14 +46,20 @@ + #define TTY_GID 5 + #endif + ++typedef enum MountMode { ++ MNT_NONE = 0, ++ MNT_FATAL = 1 << 0, ++ MNT_IN_CONTAINER = 1 << 1, ++} MountMode; ++ + typedef struct MountPoint { + const char *what; + const char *where; + const char *type; + const char *options; + unsigned long flags; +- bool fatal; +- bool in_container; ++ bool (*condition_fn)(void); ++ MountMode mode; + } MountPoint; + + /* The first three entries we might need before SELinux is up. The +@@ -62,16 +68,26 @@ typedef struct MountPoint { + #define N_EARLY_MOUNT 4 + + static const MountPoint mount_table[] = { +- { "proc", "/proc", "proc", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, +- { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, +- { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, true, true }, +- { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, +- { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, +- { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +- { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, false, true }, +- { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +- { "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME, false, true }, +- { "cgroup", "/sys/fs/cgroup/systemd", "cgroup", "none,name=systemd", MS_NOSUID|MS_NOEXEC|MS_NODEV, false, true }, ++ { "proc", "/proc", "proc", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_NONE }, ++ { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ is_efiboot, MNT_NONE }, ++ { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, ++ NULL, MNT_IN_CONTAINER }, ++ { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_IN_CONTAINER }, ++ { "cgroup", "/sys/fs/cgroup/systemd", "cgroup", "none,name=systemd", MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_IN_CONTAINER }, + }; + + /* These are API file systems that might be mounted by other software, +@@ -119,6 +135,9 @@ static int mount_one(const MountPoint *p, bool relabel) { + + assert(p); + ++ if (p->condition_fn && !p->condition_fn()) ++ return 0; ++ + /* Relabel first, just in case */ + if (relabel) + label_fix(p->where, true, true); +@@ -131,7 +150,7 @@ static int mount_one(const MountPoint *p, bool relabel) { + return 0; + + /* Skip securityfs in a container */ +- if (!p->in_container && detect_container(NULL) > 0) ++ if (!(p->mode & MNT_IN_CONTAINER) && detect_container(NULL) > 0) + return 0; + + /* The access mode here doesn't really matter too much, since +@@ -149,8 +168,8 @@ static int mount_one(const MountPoint *p, bool relabel) { + p->type, + p->flags, + p->options) < 0) { +- log_full(p->fatal ? LOG_ERR : LOG_DEBUG, "Failed to mount %s: %s", p->where, strerror(errno)); +- return p->fatal ? -errno : 0; ++ log_full((p->mode & MNT_FATAL) ? LOG_ERR : LOG_DEBUG, "Failed to mount %s: %s", p->where, strerror(errno)); ++ return (p->mode & MNT_FATAL) ? -errno : 0; + } + + /* Relabel again, since we now mounted something fresh here */ +@@ -289,7 +308,6 @@ int mount_cgroup_controllers(char ***join_controllers) { + p.type = "cgroup"; + p.options = options; + p.flags = MS_NOSUID|MS_NOEXEC|MS_NODEV; +- p.fatal = false; + + r = mount_one(&p, true); + free(controller); +-- +1.7.10.4 + Index: sync-on-shutdown.patch =================================================================== --- sync-on-shutdown.patch (added) +++ sync-on-shutdown.patch (revision 5) @@ -0,0 +1,49 @@ +From 0049f05a8bb82c3e084bacc5945596761d706c55 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering <lennart@poettering.net> +Date: Fri, 16 Nov 2012 01:30:29 +0100 +Subject: [PATCH] shutdown: readd explicit sync() when shutting down + +As it turns out reboot() doesn't actually imply a file system sync, but +only a disk sync. Accordingly, readd explicit sync() invocations +immediately before we invoke reboot(). + +This is much less dramatic than it might sounds as we umount all +disks/read-only remount them anyway before going down. +--- + src/core/service.c | 1 + + src/core/shutdown.c | 7 +++++++ + 2 files changed, 8 insertions(+) + +diff --git a/src/core/service.c b/src/core/service.c +index cf08485..df72aba 100644 +--- a/src/core/service.c ++++ b/src/core/service.c +@@ -2485,6 +2485,7 @@ static int service_start_limit_test(Service *s) { + + case SERVICE_START_LIMIT_REBOOT_IMMEDIATE: + log_warning("%s start request repeated too quickly, rebooting immediately.", UNIT(s)->id); ++ sync(); + reboot(RB_AUTOBOOT); + break; + +diff --git a/src/core/shutdown.c b/src/core/shutdown.c +index cc8c57b..b59aef1 100644 +--- a/src/core/shutdown.c ++++ b/src/core/shutdown.c +@@ -273,6 +273,13 @@ int main(int argc, char *argv[]) { + } + } + ++ /* The kernel will automaticall flush ATA disks and suchlike ++ * on reboot(), but the file systems need to be synce'd ++ * explicitly in advance. So let's do this here, but not ++ * needlessly slow down containers. */ ++ if (!in_container) ++ sync(); ++ + if (cmd == LINUX_REBOOT_CMD_KEXEC) { + + if (!in_container) { +-- +1.7.10.4 + Index: systemd-journald.init =================================================================== --- systemd-journald.init (added) +++ systemd-journald.init (revision 5) @@ -0,0 +1,33 @@ +#! /bin/sh +# +# Copyright (c) 2001-2002 SuSE Linux AG, Nuernberg, Germany. +# All rights reserved. +# +# /etc/init.d/systemd-journald +# +### BEGIN INIT INFO +# Provides: syslog +# Required-Start: $null +# Required-Stop: $null +# Default-Start: 2 3 5 +# Default-Stop: +# Short-Description: compat wrapper for journald +# Description: compat wrapper for journald +### END INIT INFO + +. /etc/rc.status + +rc_reset + +case "$1" in + start|stop|restart) + rc_failed 3 + rc_status -v + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 + ;; +esac + +rc_exit Index: xdm-display-manager.patch =================================================================== --- xdm-display-manager.patch (added) +++ xdm-display-manager.patch (revision 5) @@ -0,0 +1,13 @@ +Index: systemd-195/units/graphical.target +=================================================================== +--- systemd-195.orig/units/graphical.target ++++ systemd-195/units/graphical.target +@@ -11,7 +11,7 @@ Documentation=man:systemd.special(7) + Requires=multi-user.target + After=multi-user.target + Conflicts=rescue.target +-Wants=display-manager.service ++Wants=xdm.service + AllowIsolate=yes + + [Install] OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=312
2012-11-20 13:10:12 +01:00
%if ! 0%{?bootstrap}
install -m755 -D %{S:8} $RPM_BUILD_ROOT/etc/init.d/systemd-journald
%endif
install -m755 -D %{S:1060} $RPM_BUILD_ROOT/etc/init.d/boot.udev
ln -s systemd-udevd.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev.service
sed -ie "s|@@PREFIX@@|%{_bindir}|g" %{S:1061}
install -m755 -D %{S:1061} $RPM_BUILD_ROOT/%{_prefix}/lib/udev/write_dev_root_rule
sed -ie "s|@@PREFIX@@|%{_prefix}/lib/udev|g" %{S:1062}
install -m644 -D %{S:1062} $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev-root-symlink.service
mkdir -p $RPM_BUILD_ROOT/lib/systemd/system/basic.target.wants
ln -sf ../udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants
#workaround for 716939
chmod 644 %{buildroot}%{_bindir}/systemd-analyze
mkdir -p %{buildroot}%{_sysconfdir}/rpm
install -m644 %{S:4} %{buildroot}%{_sysconfdir}/rpm
find %{buildroot} -type f -name '*.la' -exec rm -f {} ';'
mkdir -p %{buildroot}/{sbin,var/lib/systemd/sysv-convert,var/lib/systemd/migrated} %{buildroot}/usr/lib/systemd/{system-generators,user-generators,system-preset,user-preset,system/halt.target.wants,system/kexec.target.wants,system/poweroff.target.wants,system/reboot.target.wants}
install -m755 %{S:3} -D %{buildroot}%{_sbindir}/systemd-sysv-convert
# do not install, code has been fixed, might be useful in the future
- links more manpages for migrated tools (from Christopher Yeleighton). - disable boot.localnet service, ypbind service will do the right thing now (bnc#716746) - add xdm-display-manager.patch: pull xdm.service instead of display-manager.service (needed until xdm initscript is migrated to native systemd service). - Add fix-permissions-btmp.patch: ensure btmp is owned only by root (bnc#777405). - Have the udev package create a tape group, as referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules (DimStar). - Add fix-bad-memory-access.patch: fix crash in journal rotation. - Add fix-dbus-crash.patch: fix D-Bus caused crash. - Add sync-on-shutdown.patch: ensure sync is done when initiating shutdown. - Add mount-efivars.patch: mount efivars if booting on UEFI. - Ship a empty systemd-journald initscript in systemd-logger to stop insserv to complain about missing syslog dependency. - Update 0001-service-Fix-dependencies-added-when-parsing-insserv..patch with bug fixes from Debian. old: Base:System/systemd new: home:fcrozat:branches:Base:System/systemd rev NoneIndex: 0001-service-Fix-dependencies-added-when-parsing-insserv..patch =================================================================== --- 0001-service-Fix-dependencies-added-when-parsing-insserv..patch (revision 311) +++ 0001-service-Fix-dependencies-added-when-parsing-insserv..patch (revision 5) @@ -1,17 +1,35 @@ -From 6620bceb7233a830be3635a4f7a7dc75c13a9c8e Mon Sep 17 00:00:00 2001 -From: Frederic Crozat <fcrozat@suse.com> -Date: Fri, 30 Sep 2011 14:12:45 +0200 -Subject: [PATCH] service: Fix dependencies added when parsing insserv.conf - ---- - src/service.c | 16 +++++++++------- - 1 files changed, 9 insertions(+), 7 deletions(-) - -Index: systemd-41/src/service.c +Index: systemd-195/src/core/service.c =================================================================== ---- systemd-41.orig/src/core/service.c -+++ systemd-41/src/core/service.c -@@ -3210,23 +3210,30 @@ static void sysv_facility_in_insserv_con +--- systemd-195.orig/src/core/service.c ++++ systemd-195/src/core/service.c +@@ -3391,12 +3391,13 @@ static void service_notify_message(Unit + + #ifdef HAVE_SYSV_COMPAT + +-#ifdef TARGET_SUSE +-static void sysv_facility_in_insserv_conf(Manager *mgr) { +- FILE *f=NULL; ++#if defined(TARGET_SUSE) || defined(TARGET_DEBIAN) ++static void sysv_parse_insserv_conf(Manager *mgr, const char* filename) { ++ FILE *f = NULL; + int r; + +- if (!(f = fopen("/etc/insserv.conf", "re"))) { ++ if (!(f = fopen(filename, "re"))) { ++ log_error("Failed to open file %s", filename); + r = errno == ENOENT ? 0 : -errno; + goto finish; + } +@@ -3410,7 +3411,7 @@ static void sysv_facility_in_insserv_con + break; + + r = -errno; +- log_error("Failed to read configuration file '/etc/insserv.conf': %s", strerror(-r)); ++ log_error("Failed to read configuration file '%s': %s", filename, strerror(-r)); + goto finish; + } + +@@ -3425,23 +3426,30 @@ static void sysv_facility_in_insserv_con Unit *u; if (sysv_translate_facility(parsed[0], NULL, &facility) < 0) continue; @@ -29,12 +47,12 @@ STRV_FOREACH (j, parsed+1) { - if (*j[0]=='+') { - e = UNIT_WANTS; -+ if (*j[0]=='+') ++ if (*j[0] == '+') name = *j+1; - } - else { - e = UNIT_REQUIRES; -+ else ++ else name = *j; - } + if (streq(name, "boot.localfs") || @@ -44,9 +62,54 @@ continue; - r = unit_add_two_dependencies_by_name(u, UNIT_BEFORE, e, dep, NULL, true); -+ r = unit_add_dependency_by_name_inverse(u, UNIT_BEFORE, dep, NULL, true); -+ if (*j[0]!='+') ++ r = unit_add_two_dependencies_by_name_inverse(u, UNIT_WANTS, UNIT_BEFORE, dep, NULL, true); ++ if (*j[0] != '+') + r = unit_add_dependency_by_name(u, UNIT_REQUIRES, dep, NULL, true); free(dep); } } +@@ -3454,6 +3462,35 @@ finish: + fclose(f); + + } ++ ++static void sysv_facility_in_insserv_conf(Manager *mgr) { ++ DIR *d =NULL; ++ struct dirent *de; ++ ++#ifdef TARGET_DEBIAN ++ if (!(d = opendir("/etc/insserv.conf.d/"))) ++ if (errno != ENOENT) { ++ log_warning("opendir() failed on /etc/insserv.conf.d/ %s", strerror(errno)); ++ goto finish; ++ } ++ ++ while ((de = readdir(d))) { ++ char *path = NULL; ++ if (ignore_file(de->d_name)) ++ continue; ++ ++ path = join("/etc/insserv.conf.d/", de->d_name, NULL); ++ sysv_parse_insserv_conf(mgr, path); ++ free(path); ++ } ++finish: ++ if (d) ++ closedir(d); ++#endif ++ ++ sysv_parse_insserv_conf(mgr, "/etc/insserv.conf"); ++} ++ + #endif + + static int service_enumerate(Manager *m) { +@@ -3604,7 +3641,7 @@ static int service_enumerate(Manager *m) + + r = 0; + +-#ifdef TARGET_SUSE ++#if defined(TARGET_SUSE) || defined(TARGET_DEBIAN) + sysv_facility_in_insserv_conf (m); + #endif + Index: systemd-mini.changes =================================================================== --- systemd-mini.changes (revision 311) +++ systemd-mini.changes (revision 5) @@ -1,4 +1,35 @@ ------------------------------------------------------------------- +Tue Nov 20 09:36:43 UTC 2012 - fcrozat@suse.com + +- links more manpages for migrated tools (from Christopher + Yeleighton). +- disable boot.localnet service, ypbind service will do the right + thing now (bnc#716746) +- add xdm-display-manager.patch: pull xdm.service instead of + display-manager.service (needed until xdm initscript is migrated + to native systemd service). +- Add fix-permissions-btmp.patch: ensure btmp is owned only by root + (bnc#777405). +- Have the udev package create a tape group, as referenced by + 50-udev-default.rules and 60-persistent-storage-tape.rules + (DimStar). +- Add fix-bad-memory-access.patch: fix crash in journal rotation. +- Add fix-dbus-crash.patch: fix D-Bus caused crash. +- Add sync-on-shutdown.patch: ensure sync is done when initiating + shutdown. +- Add mount-efivars.patch: mount efivars if booting on UEFI. + + +------------------------------------------------------------------- +Thu Nov 15 14:31:28 UTC 2012 - fcrozat@suse.com + +- Ship a empty systemd-journald initscript in systemd-logger to + stop insserv to complain about missing syslog dependency. +- Update + 0001-service-Fix-dependencies-added-when-parsing-insserv..patch + with bug fixes from Debian. + +------------------------------------------------------------------- Wed Nov 14 17:36:05 UTC 2012 - fcrozat@suse.com - /var/log/journal is now only provided by systemd-logger (journal Index: systemd-mini.spec =================================================================== --- systemd-mini.spec (revision 311) +++ systemd-mini.spec (revision 5) @@ -102,6 +102,7 @@ Source5: systemd-insserv_conf Source6: baselibs.conf Source7: libgcrypt.m4 +Source8: systemd-journald.init Source1060: boot.udev Source1061: write_dev_root_rule @@ -128,6 +129,8 @@ Patch56: support-suse-clock-sysconfig.patch Patch59: fix-enable-disable-boot-initscript.patch Patch60: var-run-lock.patch +Patch63: xdm-display-manager.patch +Patch64: fix-permissions-btmp.patch # Upstream First - Policy: # Never add any patches to this package without the upstream commit id @@ -137,6 +140,14 @@ Patch61: fix-logind-pty-seat.patch # PATCH-FIX-UPSTREAM fix-build-glibc217.patch fcrozat@suse.com -- fix build with latest glibc Patch62: fix-build-glibc217.patch +# PATCH-FIX-UPSTREAM fix-bad-memory-access.patch fcrozat@suse.com -- fix bad memory access +Patch65: fix-bad-memory-access.patch +# PATCH-FIX-UPSTREAM fix-dbus-crash.patch fcrozat@suse.com -- fix D-Bus caused crash +Patch66: fix-dbus-crash.patch +# PATCH-FIX-UPSTREAM sync-on-shutdown.patch fcrozat@suse.com -- Sync on shutdown +Patch67: sync-on-shutdown.patch +# PATCH-FIX-UPSTREAM mount-efivars.patch fcrozat@suse.com -- mount efivars if booting under UEFI +Patch68: mount-efivars.patch # udev patches # PATCH-FIX-OPENSUSE 0001-Reinstate-TIMEOUT-handling.patch @@ -151,8 +162,6 @@ # PATCH-FIX-OPENSUSE 0027-udev-fix-sg-autoload-regression.patch Patch1027: 0027-udev-fix-sg-autoload-regression.patch -# systemd patches - %description Systemd is a system and service manager, compatible with SysV and LSB init scripts for Linux. systemd provides aggressive parallelization @@ -313,6 +322,7 @@ %patch1026 -p1 %patch1027 -p1 +#systemd %patch1 -p1 %patch6 -p1 # don't apply when bootstrapping to not modify configure.in @@ -337,6 +347,12 @@ %patch60 -p1 %patch61 -p1 %patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 %build autoreconf -fiv @@ -368,8 +384,14 @@ ln -sf %{_bindir}/systemd-ask-password $RPM_BUILD_ROOT/bin/systemd-ask-password ln -sf %{_bindir}/systemctl $RPM_BUILD_ROOT/bin/systemctl ln -sf %{_prefix}/lib/systemd/systemd-udevd $RPM_BUILD_ROOT/sbin/udevd +%if ! 0%{?bootstrap} +ln -sf systemd-udevd.8 $RPM_BUILD_ROOT/%{_mandir}/man8/udevd.8 +%endif mkdir -p $RPM_BUILD_ROOT/%{_prefix}/usr/lib/firmware/updates ln -sf /lib/firmware $RPM_BUILD_ROOT/usr/lib/firmware +%if ! 0%{?bootstrap} +install -m755 -D %{S:8} $RPM_BUILD_ROOT/etc/init.d/systemd-journald +%endif install -m755 -D %{S:1060} $RPM_BUILD_ROOT/etc/init.d/boot.udev ln -s systemd-udevd.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev.service @@ -378,11 +400,6 @@ mkdir -p $RPM_BUILD_ROOT/lib/systemd/system/basic.target.wants ln -sf ../udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants -#fix manpages -%if ! 0%{?bootstrap} -sed -i -e 's,^\(\.so \)\(.*\.\)\([0-9]\),\1man\3/\2\3,g' %{buildroot}/%{_mandir}/*/* -%endif - #workaround for 716939 chmod 644 %{buildroot}%{_bindir}/systemd-analyze mkdir -p %{buildroot}%{_sysconfdir}/rpm @@ -392,7 +409,7 @@ install -m755 %{S:3} -D %{buildroot}%{_sbindir}/systemd-sysv-convert # do not install, code has been fixed, might be useful in the future -#install -m755 %{S:5} %{buildroot}/lib/systemd/system-generators +#install -m755 %{S:5} %{buildroot}/usr/lib/systemd/system-generators ln -s ../usr/lib/systemd/systemd %{buildroot}/bin/systemd ln -s ../usr/lib/systemd/systemd %{buildroot}/sbin/init ln -s ../usr/bin/systemctl %{buildroot}/sbin/reboot @@ -415,8 +432,7 @@ ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/ldconfig.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/loadmodules.service install -m644 %{S:2} %{buildroot}/%{_prefix}/lib/systemd/system/localfs.service -# need to be implemented in systemd directly -#ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service +ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/proc.service ln -s systemd-fsck-root.service %{buildroot}/%{_prefix}/lib/systemd/system/rootfsck.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/single.service @@ -442,8 +458,12 @@ %endif # legacy links -ln -s loginctl %{buildroot}%{_bindir}/systemd-loginctl -ln -s journalctl %{buildroot}%{_bindir}/systemd-journalctl +for f in loginctl journalctl ; do + ln -s $f %{buildroot}%{_bindir}/systemd-$f +%if ! 0%{?bootstrap} + ln -s $f.1 %{buildroot}%{_mandir}/man1/systemd-$f.1 +%endif +done ln -s /usr/lib/udev %{buildroot}/lib/udev # Create the /var/log/journal directory to change the volatile journal to a persistent one @@ -532,6 +552,8 @@ elif [ ! -e /lib/udev ]; then ln -s /usr/lib/udev /lib/udev fi +# Create "tape" group which is referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules +/usr/sbin/groupadd -r tape 2> /dev/null || : # kill daemon if we are not in a chroot if test -f /proc/1/exe -a -d /proc/1/root ; then if test "$(stat -Lc '%%D-%%i' /)" = "$(stat -Lc '%%D-%%i' /proc/1/root)"; then @@ -724,6 +746,10 @@ %exclude %{_mandir}/man8/telinit.8* %exclude %{_mandir}/man8/runlevel.8* %exclude %{_mandir}/man*/*udev*.[0-9]* + +# Packaged in analyze subpackage +%exclude %{_mandir}/man1/systemd-analyze.1* + %{_mandir}/man1/*.1* %{_mandir}/man3/*.3* %{_mandir}/man5/*.5* @@ -787,7 +813,11 @@ %endif %files analyze +%defattr(-,root,root) %attr(0755,root,root) /usr/bin/systemd-analyze +%if ! 0%{?bootstrap} +%{_mandir}/man1/systemd-analyze.1* +%endif %files -n %{udevpkgname} %defattr(-,root,root) @@ -878,6 +908,7 @@ %defattr(-,root,root) %dir /var/log/journal /var/log/README +/etc/init.d/systemd-journald %endif Index: systemd.changes =================================================================== --- systemd.changes (revision 311) +++ systemd.changes (revision 5) @@ -1,4 +1,35 @@ ------------------------------------------------------------------- +Tue Nov 20 09:36:43 UTC 2012 - fcrozat@suse.com + +- links more manpages for migrated tools (from Christopher + Yeleighton). +- disable boot.localnet service, ypbind service will do the right + thing now (bnc#716746) +- add xdm-display-manager.patch: pull xdm.service instead of + display-manager.service (needed until xdm initscript is migrated + to native systemd service). +- Add fix-permissions-btmp.patch: ensure btmp is owned only by root + (bnc#777405). +- Have the udev package create a tape group, as referenced by + 50-udev-default.rules and 60-persistent-storage-tape.rules + (DimStar). +- Add fix-bad-memory-access.patch: fix crash in journal rotation. +- Add fix-dbus-crash.patch: fix D-Bus caused crash. +- Add sync-on-shutdown.patch: ensure sync is done when initiating + shutdown. +- Add mount-efivars.patch: mount efivars if booting on UEFI. + + +------------------------------------------------------------------- +Thu Nov 15 14:31:28 UTC 2012 - fcrozat@suse.com + +- Ship a empty systemd-journald initscript in systemd-logger to + stop insserv to complain about missing syslog dependency. +- Update + 0001-service-Fix-dependencies-added-when-parsing-insserv..patch + with bug fixes from Debian. + +------------------------------------------------------------------- Wed Nov 14 17:36:05 UTC 2012 - fcrozat@suse.com - /var/log/journal is now only provided by systemd-logger (journal Index: systemd.spec =================================================================== --- systemd.spec (revision 311) +++ systemd.spec (revision 5) @@ -97,6 +97,7 @@ Source5: systemd-insserv_conf Source6: baselibs.conf Source7: libgcrypt.m4 +Source8: systemd-journald.init Source1060: boot.udev Source1061: write_dev_root_rule @@ -123,6 +124,8 @@ Patch56: support-suse-clock-sysconfig.patch Patch59: fix-enable-disable-boot-initscript.patch Patch60: var-run-lock.patch +Patch63: xdm-display-manager.patch +Patch64: fix-permissions-btmp.patch # Upstream First - Policy: # Never add any patches to this package without the upstream commit id @@ -132,6 +135,14 @@ Patch61: fix-logind-pty-seat.patch # PATCH-FIX-UPSTREAM fix-build-glibc217.patch fcrozat@suse.com -- fix build with latest glibc Patch62: fix-build-glibc217.patch +# PATCH-FIX-UPSTREAM fix-bad-memory-access.patch fcrozat@suse.com -- fix bad memory access +Patch65: fix-bad-memory-access.patch +# PATCH-FIX-UPSTREAM fix-dbus-crash.patch fcrozat@suse.com -- fix D-Bus caused crash +Patch66: fix-dbus-crash.patch +# PATCH-FIX-UPSTREAM sync-on-shutdown.patch fcrozat@suse.com -- Sync on shutdown +Patch67: sync-on-shutdown.patch +# PATCH-FIX-UPSTREAM mount-efivars.patch fcrozat@suse.com -- mount efivars if booting under UEFI +Patch68: mount-efivars.patch # udev patches # PATCH-FIX-OPENSUSE 0001-Reinstate-TIMEOUT-handling.patch @@ -146,8 +157,6 @@ # PATCH-FIX-OPENSUSE 0027-udev-fix-sg-autoload-regression.patch Patch1027: 0027-udev-fix-sg-autoload-regression.patch -# systemd patches - %description Systemd is a system and service manager, compatible with SysV and LSB init scripts for Linux. systemd provides aggressive parallelization @@ -308,6 +317,7 @@ %patch1026 -p1 %patch1027 -p1 +#systemd %patch1 -p1 %patch6 -p1 # don't apply when bootstrapping to not modify configure.in @@ -332,6 +342,12 @@ %patch60 -p1 %patch61 -p1 %patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 %build autoreconf -fiv @@ -363,8 +379,14 @@ ln -sf %{_bindir}/systemd-ask-password $RPM_BUILD_ROOT/bin/systemd-ask-password ln -sf %{_bindir}/systemctl $RPM_BUILD_ROOT/bin/systemctl ln -sf %{_prefix}/lib/systemd/systemd-udevd $RPM_BUILD_ROOT/sbin/udevd +%if ! 0%{?bootstrap} +ln -sf systemd-udevd.8 $RPM_BUILD_ROOT/%{_mandir}/man8/udevd.8 +%endif mkdir -p $RPM_BUILD_ROOT/%{_prefix}/usr/lib/firmware/updates ln -sf /lib/firmware $RPM_BUILD_ROOT/usr/lib/firmware +%if ! 0%{?bootstrap} +install -m755 -D %{S:8} $RPM_BUILD_ROOT/etc/init.d/systemd-journald +%endif install -m755 -D %{S:1060} $RPM_BUILD_ROOT/etc/init.d/boot.udev ln -s systemd-udevd.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev.service @@ -373,11 +395,6 @@ mkdir -p $RPM_BUILD_ROOT/lib/systemd/system/basic.target.wants ln -sf ../udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants -#fix manpages -%if ! 0%{?bootstrap} -sed -i -e 's,^\(\.so \)\(.*\.\)\([0-9]\),\1man\3/\2\3,g' %{buildroot}/%{_mandir}/*/* -%endif - #workaround for 716939 chmod 644 %{buildroot}%{_bindir}/systemd-analyze mkdir -p %{buildroot}%{_sysconfdir}/rpm @@ -387,7 +404,7 @@ install -m755 %{S:3} -D %{buildroot}%{_sbindir}/systemd-sysv-convert # do not install, code has been fixed, might be useful in the future -#install -m755 %{S:5} %{buildroot}/lib/systemd/system-generators +#install -m755 %{S:5} %{buildroot}/usr/lib/systemd/system-generators ln -s ../usr/lib/systemd/systemd %{buildroot}/bin/systemd ln -s ../usr/lib/systemd/systemd %{buildroot}/sbin/init ln -s ../usr/bin/systemctl %{buildroot}/sbin/reboot @@ -410,8 +427,7 @@ ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/ldconfig.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/loadmodules.service install -m644 %{S:2} %{buildroot}/%{_prefix}/lib/systemd/system/localfs.service -# need to be implemented in systemd directly -#ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service +ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/proc.service ln -s systemd-fsck-root.service %{buildroot}/%{_prefix}/lib/systemd/system/rootfsck.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/single.service @@ -437,8 +453,12 @@ %endif # legacy links -ln -s loginctl %{buildroot}%{_bindir}/systemd-loginctl -ln -s journalctl %{buildroot}%{_bindir}/systemd-journalctl +for f in loginctl journalctl ; do + ln -s $f %{buildroot}%{_bindir}/systemd-$f +%if ! 0%{?bootstrap} + ln -s $f.1 %{buildroot}%{_mandir}/man1/systemd-$f.1 +%endif +done ln -s /usr/lib/udev %{buildroot}/lib/udev # Create the /var/log/journal directory to change the volatile journal to a persistent one @@ -527,6 +547,8 @@ elif [ ! -e /lib/udev ]; then ln -s /usr/lib/udev /lib/udev fi +# Create "tape" group which is referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules +/usr/sbin/groupadd -r tape 2> /dev/null || : # kill daemon if we are not in a chroot if test -f /proc/1/exe -a -d /proc/1/root ; then if test "$(stat -Lc '%%D-%%i' /)" = "$(stat -Lc '%%D-%%i' /proc/1/root)"; then @@ -719,6 +741,10 @@ %exclude %{_mandir}/man8/telinit.8* %exclude %{_mandir}/man8/runlevel.8* %exclude %{_mandir}/man*/*udev*.[0-9]* + +# Packaged in analyze subpackage +%exclude %{_mandir}/man1/systemd-analyze.1* + %{_mandir}/man1/*.1* %{_mandir}/man3/*.3* %{_mandir}/man5/*.5* @@ -782,7 +808,11 @@ %endif %files analyze +%defattr(-,root,root) %attr(0755,root,root) /usr/bin/systemd-analyze +%if ! 0%{?bootstrap} +%{_mandir}/man1/systemd-analyze.1* +%endif %files -n %{udevpkgname} %defattr(-,root,root) @@ -873,6 +903,7 @@ %defattr(-,root,root) %dir /var/log/journal /var/log/README +/etc/init.d/systemd-journald %endif Index: fix-bad-memory-access.patch =================================================================== --- fix-bad-memory-access.patch (added) +++ fix-bad-memory-access.patch (revision 5) @@ -0,0 +1,23 @@ +From 7d73c1343be02a59b17de0cd34375deeb815d89c Mon Sep 17 00:00:00 2001 +From: Lennart Poettering <lennart@poettering.net> +Date: Tue, 20 Nov 2012 00:19:27 +0100 +Subject: [PATCH] journald: fix bad memory access + +https://bugzilla.redhat.com/show_bug.cgi?id=875653 +--- + src/journal/journald-server.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: systemd-195/src/journal/journald.c +=================================================================== +--- systemd-195.orig/src/journal/journald.c ++++ systemd-195/src/journal/journald.c +@@ -342,7 +342,7 @@ static void server_rotate(Server *s) { + HASHMAP_FOREACH_KEY(f, k, s->user_journals, i) { + r = journal_file_rotate(&f, s->compress, s->seal); + if (r < 0) +- if (f->path) ++ if (f) + log_error("Failed to rotate %s: %s", f->path, strerror(-r)); + else + log_error("Failed to create user journal: %s", strerror(-r)); Index: fix-dbus-crash.patch =================================================================== --- fix-dbus-crash.patch (added) +++ fix-dbus-crash.patch (revision 5) @@ -0,0 +1,32 @@ +From 645a9e5a2bbb06464a3fba1a3501e9d79e5bbad8 Mon Sep 17 00:00:00 2001 +From: Eelco Dolstra <eelco.dolstra@logicblox.com> +Date: Wed, 31 Oct 2012 11:53:56 +0100 +Subject: [PATCH] dbus-manager: fix a fatal dbus abort in + bus_manager_message_handler() + +If ListUnitFiles fails, or an OOM occurs, then dbus_message_unref() +will be called twice on "reply", causing systemd to crash. So remove +the call to dbus_message_unref(); it is unnecessary because of +the cleanup attribute on "reply". + +[zj: modified to leave one dbus_message_unref() alone, per Colin +Walters' comment.] +--- + src/core/dbus-manager.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c +index 2010241..3cf3e90 100644 +--- a/src/core/dbus-manager.c ++++ b/src/core/dbus-manager.c +@@ -1436,7 +1436,6 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, + r = unit_file_get_list(m->running_as == SYSTEMD_SYSTEM ? UNIT_FILE_SYSTEM : UNIT_FILE_USER, NULL, h); + if (r < 0) { + unit_file_list_free(h); +- dbus_message_unref(reply); + return bus_send_error_reply(connection, message, NULL, r); + } + +-- +1.7.10.4 + Index: fix-permissions-btmp.patch =================================================================== --- fix-permissions-btmp.patch (added) +++ fix-permissions-btmp.patch (revision 5) @@ -0,0 +1,13 @@ +Index: systemd-44/tmpfiles.d/systemd.conf +=================================================================== +--- systemd-44.orig/tmpfiles.d/systemd.conf ++++ systemd-44/tmpfiles.d/systemd.conf +@@ -11,7 +11,7 @@ d /run/user 0755 root root 10d + F /run/utmp 0664 root utmp - + + f /var/log/wtmp 0664 root utmp - +-f /var/log/btmp 0600 root utmp - ++f /var/log/btmp 0600 root root - + + d /var/cache/man - - - 30d + Index: mount-efivars.patch =================================================================== --- mount-efivars.patch (added) +++ mount-efivars.patch (revision 5) @@ -0,0 +1,336 @@ +From f271dd97622b656c1c013d181ea615c671cc2438 Mon Sep 17 00:00:00 2001 +From: "Lee, Chun-Yi" <joeyli.kernel@gmail.com> +Date: Sat, 27 Oct 2012 11:23:22 +0800 +Subject: [PATCH] systemd: mount the EFI variable filesystem +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Add efivarfs to the mount_table in mount-setup.c, so the EFI variable +filesystem will be mounted when systemd executed. + +The EFI variable filesystem will merge in v3.7 or v3.8 linux kernel. + +Cc: Kay Sievers <kay@vrfy.org> +Cc: Lennart Poettering <lennart@poettering.net> +Cc: Mantas Mikulėnas <grawity@gmail.com> +Cc: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> +Cc: Matt Fleming <matt.fleming@intel.com> +Cc: Jeremy Kerr <jeremy.kerr@canonical.com> +Cc: Matthew Garrett <mjg@redhat.com> +Signed-off-by: Lee, Chun-Yi <jlee@suse.com> +--- + src/core/kmod-setup.c | 7 ++++--- + src/core/mount-setup.c | 1 + + 2 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index cc2a2d9..ce8a8e7 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -31,9 +31,10 @@ + #include "kmod-setup.h" + + static const char * const kmod_table[] = { +- "autofs4", "/sys/class/misc/autofs", +- "ipv6", "/sys/module/ipv6", +- "unix", "/proc/net/unix" ++ "autofs4", "/sys/class/misc/autofs", ++ "ipv6", "/sys/module/ipv6", ++ "efivarfs", "/sys/firmware/efi/efivars", ++ "unix", "/proc/net/unix" + }; + + #pragma GCC diagnostic push +diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c +index 0fd112f..9894c7f 100644 +--- a/src/core/mount-setup.c ++++ b/src/core/mount-setup.c +@@ -66,6 +66,7 @@ static const MountPoint mount_table[] = { + { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, + { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, true, true }, + { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, ++ { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, + { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, + { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, false, true }, + { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +-- +1.7.10.4 + +From c1e5704657315b436c0409e8172c1fcb76adccad Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:06:27 +0100 +Subject: [PATCH] shared: add is_efiboot() + +--- + src/shared/util.c | 4 ++++ + src/shared/util.h | 2 ++ + 2 files changed, 6 insertions(+) + +diff --git a/src/shared/util.c b/src/shared/util.c +index 2a8afae..9983695 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -77,6 +77,10 @@ char **saved_argv = NULL; + static volatile unsigned cached_columns = 0; + static volatile unsigned cached_lines = 0; + ++bool is_efiboot(void) { ++ return access("/sys/firmware/efi", F_OK) >= 0; ++} ++ + size_t page_size(void) { + static __thread size_t pgsz = 0; + long r; +diff --git a/src/shared/util.h b/src/shared/util.h +index e387b12..99972cc 100644 +--- a/src/shared/util.h ++++ b/src/shared/util.h +@@ -90,6 +90,8 @@ union dirent_storage { + #define ANSI_HIGHLIGHT_YELLOW_ON "\x1B[1;33m" + #define ANSI_HIGHLIGHT_OFF "\x1B[0m" + ++bool is_efiboot(void); ++ + usec_t now(clockid_t clock); + + dual_timestamp* dual_timestamp_get(dual_timestamp *ts); +-- +1.7.10.4 + +From 1022373284b7562431fb0a6dba45db8af089a0e3 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:54:19 +0100 +Subject: [PATCH] kmod-setup: add conditional module loading callback + +--- + src/core/kmod-setup.c | 32 ++++++++++++++++++++------------ + 1 file changed, 20 insertions(+), 12 deletions(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index ce8a8e7..383a6b2 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -30,11 +30,17 @@ + + #include "kmod-setup.h" + +-static const char * const kmod_table[] = { +- "autofs4", "/sys/class/misc/autofs", +- "ipv6", "/sys/module/ipv6", +- "efivarfs", "/sys/firmware/efi/efivars", +- "unix", "/proc/net/unix" ++typedef struct Kmodule { ++ const char *name; ++ const char *directory; ++ bool (*condition_fn)(void); ++} KModule; ++ ++static const KModule kmod_table[] = { ++ { "autofs4", "/sys/class/misc/autofs", NULL } , ++ { "ipv6", "/sys/module/ipv6", NULL }, ++ { "efivarfs", "/sys/firmware/efi/efivars", NULL }, ++ { "unix", "/proc/net/unix", NULL } , + }; + + #pragma GCC diagnostic push +@@ -42,7 +48,8 @@ static const char * const kmod_table[] = { + static void systemd_kmod_log(void *data, int priority, const char *file, int line, + const char *fn, const char *format, va_list args) + { +- log_metav(priority, file, line, fn, format, args); ++ /* library logging is enabled at debug only */ ++ log_metav(LOG_DEBUG, file, line, fn, format, args); + } + #pragma GCC diagnostic pop + +@@ -53,13 +60,15 @@ int kmod_setup(void) { + int err; + + for (i = 0; i < ELEMENTSOF(kmod_table); i += 2) { ++ if (kmod_table[i].condition_fn && !kmod_table[i].condition_fn()) ++ continue; + +- if (access(kmod_table[i+1], F_OK) >= 0) ++ if (access(kmod_table[i].directory, F_OK) >= 0) + continue; + + log_debug("Your kernel apparently lacks built-in %s support. Might be a good idea to compile it in. " + "We'll now try to work around this by loading the module...", +- kmod_table[i]); ++ kmod_table[i].name); + + if (!ctx) { + ctx = kmod_new(NULL, NULL); +@@ -69,13 +78,12 @@ int kmod_setup(void) { + } + + kmod_set_log_fn(ctx, systemd_kmod_log, NULL); +- + kmod_load_resources(ctx); + } + +- err = kmod_module_new_from_name(ctx, kmod_table[i], &mod); ++ err = kmod_module_new_from_name(ctx, kmod_table[i].name, &mod); + if (err < 0) { +- log_error("Failed to load module '%s'", kmod_table[i]); ++ log_error("Failed to lookup module '%s'", kmod_table[i].name); + continue; + } + +@@ -85,7 +93,7 @@ int kmod_setup(void) { + else if (err == KMOD_PROBE_APPLY_BLACKLIST) + log_info("Module '%s' is blacklisted", kmod_module_get_name(mod)); + else +- log_error("Failed to insert '%s'", kmod_module_get_name(mod)); ++ log_error("Failed to insert module '%s'", kmod_module_get_name(mod)); + + kmod_module_unref(mod); + } +-- +1.7.10.4 + +From 3dfb265083347cb5700dc38f7cc0f479f378e6e9 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:55:23 +0100 +Subject: [PATCH] kmod-setup: mounting efivarfs, *after* we tried to mount it, + is pointless + +The mount() system call, which we issue before loading modules, will trigger +a modprobe by the kernel and block until it returns. Trying to load it again +later, will have exactly the same result as the first time. +--- + src/core/kmod-setup.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index 383a6b2..20ab232 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -39,7 +39,6 @@ typedef struct Kmodule { + static const KModule kmod_table[] = { + { "autofs4", "/sys/class/misc/autofs", NULL } , + { "ipv6", "/sys/module/ipv6", NULL }, +- { "efivarfs", "/sys/firmware/efi/efivars", NULL }, + { "unix", "/proc/net/unix", NULL } , + }; + +-- +1.7.10.4 + +From 6aa220e019f9dffd96590b06b68f937985204109 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 17:03:48 +0100 +Subject: [PATCH] mount-setup: try mounting 'efivarfs' only if the system + bootet with EFI + +--- + TODO | 3 --- + src/core/mount-setup.c | 50 ++++++++++++++++++++++++++++++++---------------- + 2 files changed, 34 insertions(+), 19 deletions(-) + +diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c +index 9894c7f..98614d0 100644 +--- a/src/core/mount-setup.c ++++ b/src/core/mount-setup.c +@@ -46,14 +46,20 @@ + #define TTY_GID 5 + #endif + ++typedef enum MountMode { ++ MNT_NONE = 0, ++ MNT_FATAL = 1 << 0, ++ MNT_IN_CONTAINER = 1 << 1, ++} MountMode; ++ + typedef struct MountPoint { + const char *what; + const char *where; + const char *type; + const char *options; + unsigned long flags; +- bool fatal; +- bool in_container; ++ bool (*condition_fn)(void); ++ MountMode mode; + } MountPoint; + + /* The first three entries we might need before SELinux is up. The +@@ -62,16 +68,26 @@ typedef struct MountPoint { + #define N_EARLY_MOUNT 4 + + static const MountPoint mount_table[] = { +- { "proc", "/proc", "proc", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, +- { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, +- { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, true, true }, +- { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, +- { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, +- { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +- { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, false, true }, +- { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +- { "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME, false, true }, +- { "cgroup", "/sys/fs/cgroup/systemd", "cgroup", "none,name=systemd", MS_NOSUID|MS_NOEXEC|MS_NODEV, false, true }, ++ { "proc", "/proc", "proc", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_NONE }, ++ { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ is_efiboot, MNT_NONE }, ++ { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, ++ NULL, MNT_IN_CONTAINER }, ++ { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_IN_CONTAINER }, ++ { "cgroup", "/sys/fs/cgroup/systemd", "cgroup", "none,name=systemd", MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_IN_CONTAINER }, + }; + + /* These are API file systems that might be mounted by other software, +@@ -119,6 +135,9 @@ static int mount_one(const MountPoint *p, bool relabel) { + + assert(p); + ++ if (p->condition_fn && !p->condition_fn()) ++ return 0; ++ + /* Relabel first, just in case */ + if (relabel) + label_fix(p->where, true, true); +@@ -131,7 +150,7 @@ static int mount_one(const MountPoint *p, bool relabel) { + return 0; + + /* Skip securityfs in a container */ +- if (!p->in_container && detect_container(NULL) > 0) ++ if (!(p->mode & MNT_IN_CONTAINER) && detect_container(NULL) > 0) + return 0; + + /* The access mode here doesn't really matter too much, since +@@ -149,8 +168,8 @@ static int mount_one(const MountPoint *p, bool relabel) { + p->type, + p->flags, + p->options) < 0) { +- log_full(p->fatal ? LOG_ERR : LOG_DEBUG, "Failed to mount %s: %s", p->where, strerror(errno)); +- return p->fatal ? -errno : 0; ++ log_full((p->mode & MNT_FATAL) ? LOG_ERR : LOG_DEBUG, "Failed to mount %s: %s", p->where, strerror(errno)); ++ return (p->mode & MNT_FATAL) ? -errno : 0; + } + + /* Relabel again, since we now mounted something fresh here */ +@@ -289,7 +308,6 @@ int mount_cgroup_controllers(char ***join_controllers) { + p.type = "cgroup"; + p.options = options; + p.flags = MS_NOSUID|MS_NOEXEC|MS_NODEV; +- p.fatal = false; + + r = mount_one(&p, true); + free(controller); +-- +1.7.10.4 + Index: sync-on-shutdown.patch =================================================================== --- sync-on-shutdown.patch (added) +++ sync-on-shutdown.patch (revision 5) @@ -0,0 +1,49 @@ +From 0049f05a8bb82c3e084bacc5945596761d706c55 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering <lennart@poettering.net> +Date: Fri, 16 Nov 2012 01:30:29 +0100 +Subject: [PATCH] shutdown: readd explicit sync() when shutting down + +As it turns out reboot() doesn't actually imply a file system sync, but +only a disk sync. Accordingly, readd explicit sync() invocations +immediately before we invoke reboot(). + +This is much less dramatic than it might sounds as we umount all +disks/read-only remount them anyway before going down. +--- + src/core/service.c | 1 + + src/core/shutdown.c | 7 +++++++ + 2 files changed, 8 insertions(+) + +diff --git a/src/core/service.c b/src/core/service.c +index cf08485..df72aba 100644 +--- a/src/core/service.c ++++ b/src/core/service.c +@@ -2485,6 +2485,7 @@ static int service_start_limit_test(Service *s) { + + case SERVICE_START_LIMIT_REBOOT_IMMEDIATE: + log_warning("%s start request repeated too quickly, rebooting immediately.", UNIT(s)->id); ++ sync(); + reboot(RB_AUTOBOOT); + break; + +diff --git a/src/core/shutdown.c b/src/core/shutdown.c +index cc8c57b..b59aef1 100644 +--- a/src/core/shutdown.c ++++ b/src/core/shutdown.c +@@ -273,6 +273,13 @@ int main(int argc, char *argv[]) { + } + } + ++ /* The kernel will automaticall flush ATA disks and suchlike ++ * on reboot(), but the file systems need to be synce'd ++ * explicitly in advance. So let's do this here, but not ++ * needlessly slow down containers. */ ++ if (!in_container) ++ sync(); ++ + if (cmd == LINUX_REBOOT_CMD_KEXEC) { + + if (!in_container) { +-- +1.7.10.4 + Index: systemd-journald.init =================================================================== --- systemd-journald.init (added) +++ systemd-journald.init (revision 5) @@ -0,0 +1,33 @@ +#! /bin/sh +# +# Copyright (c) 2001-2002 SuSE Linux AG, Nuernberg, Germany. +# All rights reserved. +# +# /etc/init.d/systemd-journald +# +### BEGIN INIT INFO +# Provides: syslog +# Required-Start: $null +# Required-Stop: $null +# Default-Start: 2 3 5 +# Default-Stop: +# Short-Description: compat wrapper for journald +# Description: compat wrapper for journald +### END INIT INFO + +. /etc/rc.status + +rc_reset + +case "$1" in + start|stop|restart) + rc_failed 3 + rc_status -v + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 + ;; +esac + +rc_exit Index: xdm-display-manager.patch =================================================================== --- xdm-display-manager.patch (added) +++ xdm-display-manager.patch (revision 5) @@ -0,0 +1,13 @@ +Index: systemd-195/units/graphical.target +=================================================================== +--- systemd-195.orig/units/graphical.target ++++ systemd-195/units/graphical.target +@@ -11,7 +11,7 @@ Documentation=man:systemd.special(7) + Requires=multi-user.target + After=multi-user.target + Conflicts=rescue.target +-Wants=display-manager.service ++Wants=xdm.service + AllowIsolate=yes + + [Install] OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=312
2012-11-20 13:10:12 +01:00
#install -m755 %{S:5} %{buildroot}/usr/lib/systemd/system-generators
ln -s ../usr/lib/systemd/systemd %{buildroot}/bin/systemd
ln -s ../usr/lib/systemd/systemd %{buildroot}/sbin/init
ln -s ../usr/bin/systemctl %{buildroot}/sbin/reboot
ln -s ../usr/bin/systemctl %{buildroot}/sbin/halt
ln -s ../usr/bin/systemctl %{buildroot}/sbin/shutdown
ln -s ../usr/bin/systemctl %{buildroot}/sbin/poweroff
ln -s ../usr/bin/systemctl %{buildroot}/sbin/telinit
ln -s ../usr/bin/systemctl %{buildroot}/sbin/runlevel
rm -rf %{buildroot}/etc/systemd/system/*.target.wants
rm -f %{buildroot}/etc/systemd/system/default.target
# aliases for /etc/init.d/*
ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/cgroup.service
ln -s systemd-tmpfiles-setup.service %{buildroot}/%{_prefix}/lib/systemd/system/cleanup.service
ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/clock.service
ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/crypto.service
ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/crypto-early.service
ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/device-mapper.service
ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/earlysyslog.service
ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/kbd.service
ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/ldconfig.service
ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/loadmodules.service
install -m644 %{S:2} %{buildroot}/%{_prefix}/lib/systemd/system/localfs.service
- links more manpages for migrated tools (from Christopher Yeleighton). - disable boot.localnet service, ypbind service will do the right thing now (bnc#716746) - add xdm-display-manager.patch: pull xdm.service instead of display-manager.service (needed until xdm initscript is migrated to native systemd service). - Add fix-permissions-btmp.patch: ensure btmp is owned only by root (bnc#777405). - Have the udev package create a tape group, as referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules (DimStar). - Add fix-bad-memory-access.patch: fix crash in journal rotation. - Add fix-dbus-crash.patch: fix D-Bus caused crash. - Add sync-on-shutdown.patch: ensure sync is done when initiating shutdown. - Add mount-efivars.patch: mount efivars if booting on UEFI. - Ship a empty systemd-journald initscript in systemd-logger to stop insserv to complain about missing syslog dependency. - Update 0001-service-Fix-dependencies-added-when-parsing-insserv..patch with bug fixes from Debian. old: Base:System/systemd new: home:fcrozat:branches:Base:System/systemd rev NoneIndex: 0001-service-Fix-dependencies-added-when-parsing-insserv..patch =================================================================== --- 0001-service-Fix-dependencies-added-when-parsing-insserv..patch (revision 311) +++ 0001-service-Fix-dependencies-added-when-parsing-insserv..patch (revision 5) @@ -1,17 +1,35 @@ -From 6620bceb7233a830be3635a4f7a7dc75c13a9c8e Mon Sep 17 00:00:00 2001 -From: Frederic Crozat <fcrozat@suse.com> -Date: Fri, 30 Sep 2011 14:12:45 +0200 -Subject: [PATCH] service: Fix dependencies added when parsing insserv.conf - ---- - src/service.c | 16 +++++++++------- - 1 files changed, 9 insertions(+), 7 deletions(-) - -Index: systemd-41/src/service.c +Index: systemd-195/src/core/service.c =================================================================== ---- systemd-41.orig/src/core/service.c -+++ systemd-41/src/core/service.c -@@ -3210,23 +3210,30 @@ static void sysv_facility_in_insserv_con +--- systemd-195.orig/src/core/service.c ++++ systemd-195/src/core/service.c +@@ -3391,12 +3391,13 @@ static void service_notify_message(Unit + + #ifdef HAVE_SYSV_COMPAT + +-#ifdef TARGET_SUSE +-static void sysv_facility_in_insserv_conf(Manager *mgr) { +- FILE *f=NULL; ++#if defined(TARGET_SUSE) || defined(TARGET_DEBIAN) ++static void sysv_parse_insserv_conf(Manager *mgr, const char* filename) { ++ FILE *f = NULL; + int r; + +- if (!(f = fopen("/etc/insserv.conf", "re"))) { ++ if (!(f = fopen(filename, "re"))) { ++ log_error("Failed to open file %s", filename); + r = errno == ENOENT ? 0 : -errno; + goto finish; + } +@@ -3410,7 +3411,7 @@ static void sysv_facility_in_insserv_con + break; + + r = -errno; +- log_error("Failed to read configuration file '/etc/insserv.conf': %s", strerror(-r)); ++ log_error("Failed to read configuration file '%s': %s", filename, strerror(-r)); + goto finish; + } + +@@ -3425,23 +3426,30 @@ static void sysv_facility_in_insserv_con Unit *u; if (sysv_translate_facility(parsed[0], NULL, &facility) < 0) continue; @@ -29,12 +47,12 @@ STRV_FOREACH (j, parsed+1) { - if (*j[0]=='+') { - e = UNIT_WANTS; -+ if (*j[0]=='+') ++ if (*j[0] == '+') name = *j+1; - } - else { - e = UNIT_REQUIRES; -+ else ++ else name = *j; - } + if (streq(name, "boot.localfs") || @@ -44,9 +62,54 @@ continue; - r = unit_add_two_dependencies_by_name(u, UNIT_BEFORE, e, dep, NULL, true); -+ r = unit_add_dependency_by_name_inverse(u, UNIT_BEFORE, dep, NULL, true); -+ if (*j[0]!='+') ++ r = unit_add_two_dependencies_by_name_inverse(u, UNIT_WANTS, UNIT_BEFORE, dep, NULL, true); ++ if (*j[0] != '+') + r = unit_add_dependency_by_name(u, UNIT_REQUIRES, dep, NULL, true); free(dep); } } +@@ -3454,6 +3462,35 @@ finish: + fclose(f); + + } ++ ++static void sysv_facility_in_insserv_conf(Manager *mgr) { ++ DIR *d =NULL; ++ struct dirent *de; ++ ++#ifdef TARGET_DEBIAN ++ if (!(d = opendir("/etc/insserv.conf.d/"))) ++ if (errno != ENOENT) { ++ log_warning("opendir() failed on /etc/insserv.conf.d/ %s", strerror(errno)); ++ goto finish; ++ } ++ ++ while ((de = readdir(d))) { ++ char *path = NULL; ++ if (ignore_file(de->d_name)) ++ continue; ++ ++ path = join("/etc/insserv.conf.d/", de->d_name, NULL); ++ sysv_parse_insserv_conf(mgr, path); ++ free(path); ++ } ++finish: ++ if (d) ++ closedir(d); ++#endif ++ ++ sysv_parse_insserv_conf(mgr, "/etc/insserv.conf"); ++} ++ + #endif + + static int service_enumerate(Manager *m) { +@@ -3604,7 +3641,7 @@ static int service_enumerate(Manager *m) + + r = 0; + +-#ifdef TARGET_SUSE ++#if defined(TARGET_SUSE) || defined(TARGET_DEBIAN) + sysv_facility_in_insserv_conf (m); + #endif + Index: systemd-mini.changes =================================================================== --- systemd-mini.changes (revision 311) +++ systemd-mini.changes (revision 5) @@ -1,4 +1,35 @@ ------------------------------------------------------------------- +Tue Nov 20 09:36:43 UTC 2012 - fcrozat@suse.com + +- links more manpages for migrated tools (from Christopher + Yeleighton). +- disable boot.localnet service, ypbind service will do the right + thing now (bnc#716746) +- add xdm-display-manager.patch: pull xdm.service instead of + display-manager.service (needed until xdm initscript is migrated + to native systemd service). +- Add fix-permissions-btmp.patch: ensure btmp is owned only by root + (bnc#777405). +- Have the udev package create a tape group, as referenced by + 50-udev-default.rules and 60-persistent-storage-tape.rules + (DimStar). +- Add fix-bad-memory-access.patch: fix crash in journal rotation. +- Add fix-dbus-crash.patch: fix D-Bus caused crash. +- Add sync-on-shutdown.patch: ensure sync is done when initiating + shutdown. +- Add mount-efivars.patch: mount efivars if booting on UEFI. + + +------------------------------------------------------------------- +Thu Nov 15 14:31:28 UTC 2012 - fcrozat@suse.com + +- Ship a empty systemd-journald initscript in systemd-logger to + stop insserv to complain about missing syslog dependency. +- Update + 0001-service-Fix-dependencies-added-when-parsing-insserv..patch + with bug fixes from Debian. + +------------------------------------------------------------------- Wed Nov 14 17:36:05 UTC 2012 - fcrozat@suse.com - /var/log/journal is now only provided by systemd-logger (journal Index: systemd-mini.spec =================================================================== --- systemd-mini.spec (revision 311) +++ systemd-mini.spec (revision 5) @@ -102,6 +102,7 @@ Source5: systemd-insserv_conf Source6: baselibs.conf Source7: libgcrypt.m4 +Source8: systemd-journald.init Source1060: boot.udev Source1061: write_dev_root_rule @@ -128,6 +129,8 @@ Patch56: support-suse-clock-sysconfig.patch Patch59: fix-enable-disable-boot-initscript.patch Patch60: var-run-lock.patch +Patch63: xdm-display-manager.patch +Patch64: fix-permissions-btmp.patch # Upstream First - Policy: # Never add any patches to this package without the upstream commit id @@ -137,6 +140,14 @@ Patch61: fix-logind-pty-seat.patch # PATCH-FIX-UPSTREAM fix-build-glibc217.patch fcrozat@suse.com -- fix build with latest glibc Patch62: fix-build-glibc217.patch +# PATCH-FIX-UPSTREAM fix-bad-memory-access.patch fcrozat@suse.com -- fix bad memory access +Patch65: fix-bad-memory-access.patch +# PATCH-FIX-UPSTREAM fix-dbus-crash.patch fcrozat@suse.com -- fix D-Bus caused crash +Patch66: fix-dbus-crash.patch +# PATCH-FIX-UPSTREAM sync-on-shutdown.patch fcrozat@suse.com -- Sync on shutdown +Patch67: sync-on-shutdown.patch +# PATCH-FIX-UPSTREAM mount-efivars.patch fcrozat@suse.com -- mount efivars if booting under UEFI +Patch68: mount-efivars.patch # udev patches # PATCH-FIX-OPENSUSE 0001-Reinstate-TIMEOUT-handling.patch @@ -151,8 +162,6 @@ # PATCH-FIX-OPENSUSE 0027-udev-fix-sg-autoload-regression.patch Patch1027: 0027-udev-fix-sg-autoload-regression.patch -# systemd patches - %description Systemd is a system and service manager, compatible with SysV and LSB init scripts for Linux. systemd provides aggressive parallelization @@ -313,6 +322,7 @@ %patch1026 -p1 %patch1027 -p1 +#systemd %patch1 -p1 %patch6 -p1 # don't apply when bootstrapping to not modify configure.in @@ -337,6 +347,12 @@ %patch60 -p1 %patch61 -p1 %patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 %build autoreconf -fiv @@ -368,8 +384,14 @@ ln -sf %{_bindir}/systemd-ask-password $RPM_BUILD_ROOT/bin/systemd-ask-password ln -sf %{_bindir}/systemctl $RPM_BUILD_ROOT/bin/systemctl ln -sf %{_prefix}/lib/systemd/systemd-udevd $RPM_BUILD_ROOT/sbin/udevd +%if ! 0%{?bootstrap} +ln -sf systemd-udevd.8 $RPM_BUILD_ROOT/%{_mandir}/man8/udevd.8 +%endif mkdir -p $RPM_BUILD_ROOT/%{_prefix}/usr/lib/firmware/updates ln -sf /lib/firmware $RPM_BUILD_ROOT/usr/lib/firmware +%if ! 0%{?bootstrap} +install -m755 -D %{S:8} $RPM_BUILD_ROOT/etc/init.d/systemd-journald +%endif install -m755 -D %{S:1060} $RPM_BUILD_ROOT/etc/init.d/boot.udev ln -s systemd-udevd.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev.service @@ -378,11 +400,6 @@ mkdir -p $RPM_BUILD_ROOT/lib/systemd/system/basic.target.wants ln -sf ../udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants -#fix manpages -%if ! 0%{?bootstrap} -sed -i -e 's,^\(\.so \)\(.*\.\)\([0-9]\),\1man\3/\2\3,g' %{buildroot}/%{_mandir}/*/* -%endif - #workaround for 716939 chmod 644 %{buildroot}%{_bindir}/systemd-analyze mkdir -p %{buildroot}%{_sysconfdir}/rpm @@ -392,7 +409,7 @@ install -m755 %{S:3} -D %{buildroot}%{_sbindir}/systemd-sysv-convert # do not install, code has been fixed, might be useful in the future -#install -m755 %{S:5} %{buildroot}/lib/systemd/system-generators +#install -m755 %{S:5} %{buildroot}/usr/lib/systemd/system-generators ln -s ../usr/lib/systemd/systemd %{buildroot}/bin/systemd ln -s ../usr/lib/systemd/systemd %{buildroot}/sbin/init ln -s ../usr/bin/systemctl %{buildroot}/sbin/reboot @@ -415,8 +432,7 @@ ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/ldconfig.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/loadmodules.service install -m644 %{S:2} %{buildroot}/%{_prefix}/lib/systemd/system/localfs.service -# need to be implemented in systemd directly -#ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service +ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/proc.service ln -s systemd-fsck-root.service %{buildroot}/%{_prefix}/lib/systemd/system/rootfsck.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/single.service @@ -442,8 +458,12 @@ %endif # legacy links -ln -s loginctl %{buildroot}%{_bindir}/systemd-loginctl -ln -s journalctl %{buildroot}%{_bindir}/systemd-journalctl +for f in loginctl journalctl ; do + ln -s $f %{buildroot}%{_bindir}/systemd-$f +%if ! 0%{?bootstrap} + ln -s $f.1 %{buildroot}%{_mandir}/man1/systemd-$f.1 +%endif +done ln -s /usr/lib/udev %{buildroot}/lib/udev # Create the /var/log/journal directory to change the volatile journal to a persistent one @@ -532,6 +552,8 @@ elif [ ! -e /lib/udev ]; then ln -s /usr/lib/udev /lib/udev fi +# Create "tape" group which is referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules +/usr/sbin/groupadd -r tape 2> /dev/null || : # kill daemon if we are not in a chroot if test -f /proc/1/exe -a -d /proc/1/root ; then if test "$(stat -Lc '%%D-%%i' /)" = "$(stat -Lc '%%D-%%i' /proc/1/root)"; then @@ -724,6 +746,10 @@ %exclude %{_mandir}/man8/telinit.8* %exclude %{_mandir}/man8/runlevel.8* %exclude %{_mandir}/man*/*udev*.[0-9]* + +# Packaged in analyze subpackage +%exclude %{_mandir}/man1/systemd-analyze.1* + %{_mandir}/man1/*.1* %{_mandir}/man3/*.3* %{_mandir}/man5/*.5* @@ -787,7 +813,11 @@ %endif %files analyze +%defattr(-,root,root) %attr(0755,root,root) /usr/bin/systemd-analyze +%if ! 0%{?bootstrap} +%{_mandir}/man1/systemd-analyze.1* +%endif %files -n %{udevpkgname} %defattr(-,root,root) @@ -878,6 +908,7 @@ %defattr(-,root,root) %dir /var/log/journal /var/log/README +/etc/init.d/systemd-journald %endif Index: systemd.changes =================================================================== --- systemd.changes (revision 311) +++ systemd.changes (revision 5) @@ -1,4 +1,35 @@ ------------------------------------------------------------------- +Tue Nov 20 09:36:43 UTC 2012 - fcrozat@suse.com + +- links more manpages for migrated tools (from Christopher + Yeleighton). +- disable boot.localnet service, ypbind service will do the right + thing now (bnc#716746) +- add xdm-display-manager.patch: pull xdm.service instead of + display-manager.service (needed until xdm initscript is migrated + to native systemd service). +- Add fix-permissions-btmp.patch: ensure btmp is owned only by root + (bnc#777405). +- Have the udev package create a tape group, as referenced by + 50-udev-default.rules and 60-persistent-storage-tape.rules + (DimStar). +- Add fix-bad-memory-access.patch: fix crash in journal rotation. +- Add fix-dbus-crash.patch: fix D-Bus caused crash. +- Add sync-on-shutdown.patch: ensure sync is done when initiating + shutdown. +- Add mount-efivars.patch: mount efivars if booting on UEFI. + + +------------------------------------------------------------------- +Thu Nov 15 14:31:28 UTC 2012 - fcrozat@suse.com + +- Ship a empty systemd-journald initscript in systemd-logger to + stop insserv to complain about missing syslog dependency. +- Update + 0001-service-Fix-dependencies-added-when-parsing-insserv..patch + with bug fixes from Debian. + +------------------------------------------------------------------- Wed Nov 14 17:36:05 UTC 2012 - fcrozat@suse.com - /var/log/journal is now only provided by systemd-logger (journal Index: systemd.spec =================================================================== --- systemd.spec (revision 311) +++ systemd.spec (revision 5) @@ -97,6 +97,7 @@ Source5: systemd-insserv_conf Source6: baselibs.conf Source7: libgcrypt.m4 +Source8: systemd-journald.init Source1060: boot.udev Source1061: write_dev_root_rule @@ -123,6 +124,8 @@ Patch56: support-suse-clock-sysconfig.patch Patch59: fix-enable-disable-boot-initscript.patch Patch60: var-run-lock.patch +Patch63: xdm-display-manager.patch +Patch64: fix-permissions-btmp.patch # Upstream First - Policy: # Never add any patches to this package without the upstream commit id @@ -132,6 +135,14 @@ Patch61: fix-logind-pty-seat.patch # PATCH-FIX-UPSTREAM fix-build-glibc217.patch fcrozat@suse.com -- fix build with latest glibc Patch62: fix-build-glibc217.patch +# PATCH-FIX-UPSTREAM fix-bad-memory-access.patch fcrozat@suse.com -- fix bad memory access +Patch65: fix-bad-memory-access.patch +# PATCH-FIX-UPSTREAM fix-dbus-crash.patch fcrozat@suse.com -- fix D-Bus caused crash +Patch66: fix-dbus-crash.patch +# PATCH-FIX-UPSTREAM sync-on-shutdown.patch fcrozat@suse.com -- Sync on shutdown +Patch67: sync-on-shutdown.patch +# PATCH-FIX-UPSTREAM mount-efivars.patch fcrozat@suse.com -- mount efivars if booting under UEFI +Patch68: mount-efivars.patch # udev patches # PATCH-FIX-OPENSUSE 0001-Reinstate-TIMEOUT-handling.patch @@ -146,8 +157,6 @@ # PATCH-FIX-OPENSUSE 0027-udev-fix-sg-autoload-regression.patch Patch1027: 0027-udev-fix-sg-autoload-regression.patch -# systemd patches - %description Systemd is a system and service manager, compatible with SysV and LSB init scripts for Linux. systemd provides aggressive parallelization @@ -308,6 +317,7 @@ %patch1026 -p1 %patch1027 -p1 +#systemd %patch1 -p1 %patch6 -p1 # don't apply when bootstrapping to not modify configure.in @@ -332,6 +342,12 @@ %patch60 -p1 %patch61 -p1 %patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 %build autoreconf -fiv @@ -363,8 +379,14 @@ ln -sf %{_bindir}/systemd-ask-password $RPM_BUILD_ROOT/bin/systemd-ask-password ln -sf %{_bindir}/systemctl $RPM_BUILD_ROOT/bin/systemctl ln -sf %{_prefix}/lib/systemd/systemd-udevd $RPM_BUILD_ROOT/sbin/udevd +%if ! 0%{?bootstrap} +ln -sf systemd-udevd.8 $RPM_BUILD_ROOT/%{_mandir}/man8/udevd.8 +%endif mkdir -p $RPM_BUILD_ROOT/%{_prefix}/usr/lib/firmware/updates ln -sf /lib/firmware $RPM_BUILD_ROOT/usr/lib/firmware +%if ! 0%{?bootstrap} +install -m755 -D %{S:8} $RPM_BUILD_ROOT/etc/init.d/systemd-journald +%endif install -m755 -D %{S:1060} $RPM_BUILD_ROOT/etc/init.d/boot.udev ln -s systemd-udevd.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev.service @@ -373,11 +395,6 @@ mkdir -p $RPM_BUILD_ROOT/lib/systemd/system/basic.target.wants ln -sf ../udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants -#fix manpages -%if ! 0%{?bootstrap} -sed -i -e 's,^\(\.so \)\(.*\.\)\([0-9]\),\1man\3/\2\3,g' %{buildroot}/%{_mandir}/*/* -%endif - #workaround for 716939 chmod 644 %{buildroot}%{_bindir}/systemd-analyze mkdir -p %{buildroot}%{_sysconfdir}/rpm @@ -387,7 +404,7 @@ install -m755 %{S:3} -D %{buildroot}%{_sbindir}/systemd-sysv-convert # do not install, code has been fixed, might be useful in the future -#install -m755 %{S:5} %{buildroot}/lib/systemd/system-generators +#install -m755 %{S:5} %{buildroot}/usr/lib/systemd/system-generators ln -s ../usr/lib/systemd/systemd %{buildroot}/bin/systemd ln -s ../usr/lib/systemd/systemd %{buildroot}/sbin/init ln -s ../usr/bin/systemctl %{buildroot}/sbin/reboot @@ -410,8 +427,7 @@ ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/ldconfig.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/loadmodules.service install -m644 %{S:2} %{buildroot}/%{_prefix}/lib/systemd/system/localfs.service -# need to be implemented in systemd directly -#ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service +ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/proc.service ln -s systemd-fsck-root.service %{buildroot}/%{_prefix}/lib/systemd/system/rootfsck.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/single.service @@ -437,8 +453,12 @@ %endif # legacy links -ln -s loginctl %{buildroot}%{_bindir}/systemd-loginctl -ln -s journalctl %{buildroot}%{_bindir}/systemd-journalctl +for f in loginctl journalctl ; do + ln -s $f %{buildroot}%{_bindir}/systemd-$f +%if ! 0%{?bootstrap} + ln -s $f.1 %{buildroot}%{_mandir}/man1/systemd-$f.1 +%endif +done ln -s /usr/lib/udev %{buildroot}/lib/udev # Create the /var/log/journal directory to change the volatile journal to a persistent one @@ -527,6 +547,8 @@ elif [ ! -e /lib/udev ]; then ln -s /usr/lib/udev /lib/udev fi +# Create "tape" group which is referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules +/usr/sbin/groupadd -r tape 2> /dev/null || : # kill daemon if we are not in a chroot if test -f /proc/1/exe -a -d /proc/1/root ; then if test "$(stat -Lc '%%D-%%i' /)" = "$(stat -Lc '%%D-%%i' /proc/1/root)"; then @@ -719,6 +741,10 @@ %exclude %{_mandir}/man8/telinit.8* %exclude %{_mandir}/man8/runlevel.8* %exclude %{_mandir}/man*/*udev*.[0-9]* + +# Packaged in analyze subpackage +%exclude %{_mandir}/man1/systemd-analyze.1* + %{_mandir}/man1/*.1* %{_mandir}/man3/*.3* %{_mandir}/man5/*.5* @@ -782,7 +808,11 @@ %endif %files analyze +%defattr(-,root,root) %attr(0755,root,root) /usr/bin/systemd-analyze +%if ! 0%{?bootstrap} +%{_mandir}/man1/systemd-analyze.1* +%endif %files -n %{udevpkgname} %defattr(-,root,root) @@ -873,6 +903,7 @@ %defattr(-,root,root) %dir /var/log/journal /var/log/README +/etc/init.d/systemd-journald %endif Index: fix-bad-memory-access.patch =================================================================== --- fix-bad-memory-access.patch (added) +++ fix-bad-memory-access.patch (revision 5) @@ -0,0 +1,23 @@ +From 7d73c1343be02a59b17de0cd34375deeb815d89c Mon Sep 17 00:00:00 2001 +From: Lennart Poettering <lennart@poettering.net> +Date: Tue, 20 Nov 2012 00:19:27 +0100 +Subject: [PATCH] journald: fix bad memory access + +https://bugzilla.redhat.com/show_bug.cgi?id=875653 +--- + src/journal/journald-server.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: systemd-195/src/journal/journald.c +=================================================================== +--- systemd-195.orig/src/journal/journald.c ++++ systemd-195/src/journal/journald.c +@@ -342,7 +342,7 @@ static void server_rotate(Server *s) { + HASHMAP_FOREACH_KEY(f, k, s->user_journals, i) { + r = journal_file_rotate(&f, s->compress, s->seal); + if (r < 0) +- if (f->path) ++ if (f) + log_error("Failed to rotate %s: %s", f->path, strerror(-r)); + else + log_error("Failed to create user journal: %s", strerror(-r)); Index: fix-dbus-crash.patch =================================================================== --- fix-dbus-crash.patch (added) +++ fix-dbus-crash.patch (revision 5) @@ -0,0 +1,32 @@ +From 645a9e5a2bbb06464a3fba1a3501e9d79e5bbad8 Mon Sep 17 00:00:00 2001 +From: Eelco Dolstra <eelco.dolstra@logicblox.com> +Date: Wed, 31 Oct 2012 11:53:56 +0100 +Subject: [PATCH] dbus-manager: fix a fatal dbus abort in + bus_manager_message_handler() + +If ListUnitFiles fails, or an OOM occurs, then dbus_message_unref() +will be called twice on "reply", causing systemd to crash. So remove +the call to dbus_message_unref(); it is unnecessary because of +the cleanup attribute on "reply". + +[zj: modified to leave one dbus_message_unref() alone, per Colin +Walters' comment.] +--- + src/core/dbus-manager.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c +index 2010241..3cf3e90 100644 +--- a/src/core/dbus-manager.c ++++ b/src/core/dbus-manager.c +@@ -1436,7 +1436,6 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, + r = unit_file_get_list(m->running_as == SYSTEMD_SYSTEM ? UNIT_FILE_SYSTEM : UNIT_FILE_USER, NULL, h); + if (r < 0) { + unit_file_list_free(h); +- dbus_message_unref(reply); + return bus_send_error_reply(connection, message, NULL, r); + } + +-- +1.7.10.4 + Index: fix-permissions-btmp.patch =================================================================== --- fix-permissions-btmp.patch (added) +++ fix-permissions-btmp.patch (revision 5) @@ -0,0 +1,13 @@ +Index: systemd-44/tmpfiles.d/systemd.conf +=================================================================== +--- systemd-44.orig/tmpfiles.d/systemd.conf ++++ systemd-44/tmpfiles.d/systemd.conf +@@ -11,7 +11,7 @@ d /run/user 0755 root root 10d + F /run/utmp 0664 root utmp - + + f /var/log/wtmp 0664 root utmp - +-f /var/log/btmp 0600 root utmp - ++f /var/log/btmp 0600 root root - + + d /var/cache/man - - - 30d + Index: mount-efivars.patch =================================================================== --- mount-efivars.patch (added) +++ mount-efivars.patch (revision 5) @@ -0,0 +1,336 @@ +From f271dd97622b656c1c013d181ea615c671cc2438 Mon Sep 17 00:00:00 2001 +From: "Lee, Chun-Yi" <joeyli.kernel@gmail.com> +Date: Sat, 27 Oct 2012 11:23:22 +0800 +Subject: [PATCH] systemd: mount the EFI variable filesystem +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Add efivarfs to the mount_table in mount-setup.c, so the EFI variable +filesystem will be mounted when systemd executed. + +The EFI variable filesystem will merge in v3.7 or v3.8 linux kernel. + +Cc: Kay Sievers <kay@vrfy.org> +Cc: Lennart Poettering <lennart@poettering.net> +Cc: Mantas Mikulėnas <grawity@gmail.com> +Cc: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> +Cc: Matt Fleming <matt.fleming@intel.com> +Cc: Jeremy Kerr <jeremy.kerr@canonical.com> +Cc: Matthew Garrett <mjg@redhat.com> +Signed-off-by: Lee, Chun-Yi <jlee@suse.com> +--- + src/core/kmod-setup.c | 7 ++++--- + src/core/mount-setup.c | 1 + + 2 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index cc2a2d9..ce8a8e7 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -31,9 +31,10 @@ + #include "kmod-setup.h" + + static const char * const kmod_table[] = { +- "autofs4", "/sys/class/misc/autofs", +- "ipv6", "/sys/module/ipv6", +- "unix", "/proc/net/unix" ++ "autofs4", "/sys/class/misc/autofs", ++ "ipv6", "/sys/module/ipv6", ++ "efivarfs", "/sys/firmware/efi/efivars", ++ "unix", "/proc/net/unix" + }; + + #pragma GCC diagnostic push +diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c +index 0fd112f..9894c7f 100644 +--- a/src/core/mount-setup.c ++++ b/src/core/mount-setup.c +@@ -66,6 +66,7 @@ static const MountPoint mount_table[] = { + { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, + { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, true, true }, + { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, ++ { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, + { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, + { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, false, true }, + { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +-- +1.7.10.4 + +From c1e5704657315b436c0409e8172c1fcb76adccad Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:06:27 +0100 +Subject: [PATCH] shared: add is_efiboot() + +--- + src/shared/util.c | 4 ++++ + src/shared/util.h | 2 ++ + 2 files changed, 6 insertions(+) + +diff --git a/src/shared/util.c b/src/shared/util.c +index 2a8afae..9983695 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -77,6 +77,10 @@ char **saved_argv = NULL; + static volatile unsigned cached_columns = 0; + static volatile unsigned cached_lines = 0; + ++bool is_efiboot(void) { ++ return access("/sys/firmware/efi", F_OK) >= 0; ++} ++ + size_t page_size(void) { + static __thread size_t pgsz = 0; + long r; +diff --git a/src/shared/util.h b/src/shared/util.h +index e387b12..99972cc 100644 +--- a/src/shared/util.h ++++ b/src/shared/util.h +@@ -90,6 +90,8 @@ union dirent_storage { + #define ANSI_HIGHLIGHT_YELLOW_ON "\x1B[1;33m" + #define ANSI_HIGHLIGHT_OFF "\x1B[0m" + ++bool is_efiboot(void); ++ + usec_t now(clockid_t clock); + + dual_timestamp* dual_timestamp_get(dual_timestamp *ts); +-- +1.7.10.4 + +From 1022373284b7562431fb0a6dba45db8af089a0e3 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:54:19 +0100 +Subject: [PATCH] kmod-setup: add conditional module loading callback + +--- + src/core/kmod-setup.c | 32 ++++++++++++++++++++------------ + 1 file changed, 20 insertions(+), 12 deletions(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index ce8a8e7..383a6b2 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -30,11 +30,17 @@ + + #include "kmod-setup.h" + +-static const char * const kmod_table[] = { +- "autofs4", "/sys/class/misc/autofs", +- "ipv6", "/sys/module/ipv6", +- "efivarfs", "/sys/firmware/efi/efivars", +- "unix", "/proc/net/unix" ++typedef struct Kmodule { ++ const char *name; ++ const char *directory; ++ bool (*condition_fn)(void); ++} KModule; ++ ++static const KModule kmod_table[] = { ++ { "autofs4", "/sys/class/misc/autofs", NULL } , ++ { "ipv6", "/sys/module/ipv6", NULL }, ++ { "efivarfs", "/sys/firmware/efi/efivars", NULL }, ++ { "unix", "/proc/net/unix", NULL } , + }; + + #pragma GCC diagnostic push +@@ -42,7 +48,8 @@ static const char * const kmod_table[] = { + static void systemd_kmod_log(void *data, int priority, const char *file, int line, + const char *fn, const char *format, va_list args) + { +- log_metav(priority, file, line, fn, format, args); ++ /* library logging is enabled at debug only */ ++ log_metav(LOG_DEBUG, file, line, fn, format, args); + } + #pragma GCC diagnostic pop + +@@ -53,13 +60,15 @@ int kmod_setup(void) { + int err; + + for (i = 0; i < ELEMENTSOF(kmod_table); i += 2) { ++ if (kmod_table[i].condition_fn && !kmod_table[i].condition_fn()) ++ continue; + +- if (access(kmod_table[i+1], F_OK) >= 0) ++ if (access(kmod_table[i].directory, F_OK) >= 0) + continue; + + log_debug("Your kernel apparently lacks built-in %s support. Might be a good idea to compile it in. " + "We'll now try to work around this by loading the module...", +- kmod_table[i]); ++ kmod_table[i].name); + + if (!ctx) { + ctx = kmod_new(NULL, NULL); +@@ -69,13 +78,12 @@ int kmod_setup(void) { + } + + kmod_set_log_fn(ctx, systemd_kmod_log, NULL); +- + kmod_load_resources(ctx); + } + +- err = kmod_module_new_from_name(ctx, kmod_table[i], &mod); ++ err = kmod_module_new_from_name(ctx, kmod_table[i].name, &mod); + if (err < 0) { +- log_error("Failed to load module '%s'", kmod_table[i]); ++ log_error("Failed to lookup module '%s'", kmod_table[i].name); + continue; + } + +@@ -85,7 +93,7 @@ int kmod_setup(void) { + else if (err == KMOD_PROBE_APPLY_BLACKLIST) + log_info("Module '%s' is blacklisted", kmod_module_get_name(mod)); + else +- log_error("Failed to insert '%s'", kmod_module_get_name(mod)); ++ log_error("Failed to insert module '%s'", kmod_module_get_name(mod)); + + kmod_module_unref(mod); + } +-- +1.7.10.4 + +From 3dfb265083347cb5700dc38f7cc0f479f378e6e9 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:55:23 +0100 +Subject: [PATCH] kmod-setup: mounting efivarfs, *after* we tried to mount it, + is pointless + +The mount() system call, which we issue before loading modules, will trigger +a modprobe by the kernel and block until it returns. Trying to load it again +later, will have exactly the same result as the first time. +--- + src/core/kmod-setup.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index 383a6b2..20ab232 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -39,7 +39,6 @@ typedef struct Kmodule { + static const KModule kmod_table[] = { + { "autofs4", "/sys/class/misc/autofs", NULL } , + { "ipv6", "/sys/module/ipv6", NULL }, +- { "efivarfs", "/sys/firmware/efi/efivars", NULL }, + { "unix", "/proc/net/unix", NULL } , + }; + +-- +1.7.10.4 + +From 6aa220e019f9dffd96590b06b68f937985204109 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 17:03:48 +0100 +Subject: [PATCH] mount-setup: try mounting 'efivarfs' only if the system + bootet with EFI + +--- + TODO | 3 --- + src/core/mount-setup.c | 50 ++++++++++++++++++++++++++++++++---------------- + 2 files changed, 34 insertions(+), 19 deletions(-) + +diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c +index 9894c7f..98614d0 100644 +--- a/src/core/mount-setup.c ++++ b/src/core/mount-setup.c +@@ -46,14 +46,20 @@ + #define TTY_GID 5 + #endif + ++typedef enum MountMode { ++ MNT_NONE = 0, ++ MNT_FATAL = 1 << 0, ++ MNT_IN_CONTAINER = 1 << 1, ++} MountMode; ++ + typedef struct MountPoint { + const char *what; + const char *where; + const char *type; + const char *options; + unsigned long flags; +- bool fatal; +- bool in_container; ++ bool (*condition_fn)(void); ++ MountMode mode; + } MountPoint; + + /* The first three entries we might need before SELinux is up. The +@@ -62,16 +68,26 @@ typedef struct MountPoint { + #define N_EARLY_MOUNT 4 + + static const MountPoint mount_table[] = { +- { "proc", "/proc", "proc", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, +- { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, +- { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, true, true }, +- { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, +- { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, +- { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +- { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, false, true }, +- { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +- { "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME, false, true }, +- { "cgroup", "/sys/fs/cgroup/systemd", "cgroup", "none,name=systemd", MS_NOSUID|MS_NOEXEC|MS_NODEV, false, true }, ++ { "proc", "/proc", "proc", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_NONE }, ++ { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ is_efiboot, MNT_NONE }, ++ { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, ++ NULL, MNT_IN_CONTAINER }, ++ { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_IN_CONTAINER }, ++ { "cgroup", "/sys/fs/cgroup/systemd", "cgroup", "none,name=systemd", MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_IN_CONTAINER }, + }; + + /* These are API file systems that might be mounted by other software, +@@ -119,6 +135,9 @@ static int mount_one(const MountPoint *p, bool relabel) { + + assert(p); + ++ if (p->condition_fn && !p->condition_fn()) ++ return 0; ++ + /* Relabel first, just in case */ + if (relabel) + label_fix(p->where, true, true); +@@ -131,7 +150,7 @@ static int mount_one(const MountPoint *p, bool relabel) { + return 0; + + /* Skip securityfs in a container */ +- if (!p->in_container && detect_container(NULL) > 0) ++ if (!(p->mode & MNT_IN_CONTAINER) && detect_container(NULL) > 0) + return 0; + + /* The access mode here doesn't really matter too much, since +@@ -149,8 +168,8 @@ static int mount_one(const MountPoint *p, bool relabel) { + p->type, + p->flags, + p->options) < 0) { +- log_full(p->fatal ? LOG_ERR : LOG_DEBUG, "Failed to mount %s: %s", p->where, strerror(errno)); +- return p->fatal ? -errno : 0; ++ log_full((p->mode & MNT_FATAL) ? LOG_ERR : LOG_DEBUG, "Failed to mount %s: %s", p->where, strerror(errno)); ++ return (p->mode & MNT_FATAL) ? -errno : 0; + } + + /* Relabel again, since we now mounted something fresh here */ +@@ -289,7 +308,6 @@ int mount_cgroup_controllers(char ***join_controllers) { + p.type = "cgroup"; + p.options = options; + p.flags = MS_NOSUID|MS_NOEXEC|MS_NODEV; +- p.fatal = false; + + r = mount_one(&p, true); + free(controller); +-- +1.7.10.4 + Index: sync-on-shutdown.patch =================================================================== --- sync-on-shutdown.patch (added) +++ sync-on-shutdown.patch (revision 5) @@ -0,0 +1,49 @@ +From 0049f05a8bb82c3e084bacc5945596761d706c55 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering <lennart@poettering.net> +Date: Fri, 16 Nov 2012 01:30:29 +0100 +Subject: [PATCH] shutdown: readd explicit sync() when shutting down + +As it turns out reboot() doesn't actually imply a file system sync, but +only a disk sync. Accordingly, readd explicit sync() invocations +immediately before we invoke reboot(). + +This is much less dramatic than it might sounds as we umount all +disks/read-only remount them anyway before going down. +--- + src/core/service.c | 1 + + src/core/shutdown.c | 7 +++++++ + 2 files changed, 8 insertions(+) + +diff --git a/src/core/service.c b/src/core/service.c +index cf08485..df72aba 100644 +--- a/src/core/service.c ++++ b/src/core/service.c +@@ -2485,6 +2485,7 @@ static int service_start_limit_test(Service *s) { + + case SERVICE_START_LIMIT_REBOOT_IMMEDIATE: + log_warning("%s start request repeated too quickly, rebooting immediately.", UNIT(s)->id); ++ sync(); + reboot(RB_AUTOBOOT); + break; + +diff --git a/src/core/shutdown.c b/src/core/shutdown.c +index cc8c57b..b59aef1 100644 +--- a/src/core/shutdown.c ++++ b/src/core/shutdown.c +@@ -273,6 +273,13 @@ int main(int argc, char *argv[]) { + } + } + ++ /* The kernel will automaticall flush ATA disks and suchlike ++ * on reboot(), but the file systems need to be synce'd ++ * explicitly in advance. So let's do this here, but not ++ * needlessly slow down containers. */ ++ if (!in_container) ++ sync(); ++ + if (cmd == LINUX_REBOOT_CMD_KEXEC) { + + if (!in_container) { +-- +1.7.10.4 + Index: systemd-journald.init =================================================================== --- systemd-journald.init (added) +++ systemd-journald.init (revision 5) @@ -0,0 +1,33 @@ +#! /bin/sh +# +# Copyright (c) 2001-2002 SuSE Linux AG, Nuernberg, Germany. +# All rights reserved. +# +# /etc/init.d/systemd-journald +# +### BEGIN INIT INFO +# Provides: syslog +# Required-Start: $null +# Required-Stop: $null +# Default-Start: 2 3 5 +# Default-Stop: +# Short-Description: compat wrapper for journald +# Description: compat wrapper for journald +### END INIT INFO + +. /etc/rc.status + +rc_reset + +case "$1" in + start|stop|restart) + rc_failed 3 + rc_status -v + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 + ;; +esac + +rc_exit Index: xdm-display-manager.patch =================================================================== --- xdm-display-manager.patch (added) +++ xdm-display-manager.patch (revision 5) @@ -0,0 +1,13 @@ +Index: systemd-195/units/graphical.target +=================================================================== +--- systemd-195.orig/units/graphical.target ++++ systemd-195/units/graphical.target +@@ -11,7 +11,7 @@ Documentation=man:systemd.special(7) + Requires=multi-user.target + After=multi-user.target + Conflicts=rescue.target +-Wants=display-manager.service ++Wants=xdm.service + AllowIsolate=yes + + [Install] OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=312
2012-11-20 13:10:12 +01:00
ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service
ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/proc.service
ln -s systemd-fsck-root.service %{buildroot}/%{_prefix}/lib/systemd/system/rootfsck.service
ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/single.service
ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/swap.service
ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/startpreload.service
ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/stoppreload.service
ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/earlyxdm.service
ln -s systemd-sysctl.service %{buildroot}/%{_prefix}/lib/systemd/system/sysctl.service
ln -s systemd-random-seed-load.service %{buildroot}/%{_prefix}/lib/systemd/system/random.service
# don't mount /tmp as tmpfs for now
rm %{buildroot}/%{_prefix}/lib/systemd/system/local-fs.target.wants/tmp.mount
# To avoid making life hard for Factory developers, don't package the
# kernel.core_pattern setting until systemd-coredump is a part of an actual
# systemd release and it's made clear how to get the core dumps out of the
# journal.
rm -f %{buildroot}%{_libdir}/../lib/sysctl.d/coredump.conf
# remove README file for now
rm -f %{buildroot}/etc/init.d/README
%if 0%{?bootstrap}
rm -f %{buildroot}/var/log/README
%endif
# legacy links
- links more manpages for migrated tools (from Christopher Yeleighton). - disable boot.localnet service, ypbind service will do the right thing now (bnc#716746) - add xdm-display-manager.patch: pull xdm.service instead of display-manager.service (needed until xdm initscript is migrated to native systemd service). - Add fix-permissions-btmp.patch: ensure btmp is owned only by root (bnc#777405). - Have the udev package create a tape group, as referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules (DimStar). - Add fix-bad-memory-access.patch: fix crash in journal rotation. - Add fix-dbus-crash.patch: fix D-Bus caused crash. - Add sync-on-shutdown.patch: ensure sync is done when initiating shutdown. - Add mount-efivars.patch: mount efivars if booting on UEFI. - Ship a empty systemd-journald initscript in systemd-logger to stop insserv to complain about missing syslog dependency. - Update 0001-service-Fix-dependencies-added-when-parsing-insserv..patch with bug fixes from Debian. old: Base:System/systemd new: home:fcrozat:branches:Base:System/systemd rev NoneIndex: 0001-service-Fix-dependencies-added-when-parsing-insserv..patch =================================================================== --- 0001-service-Fix-dependencies-added-when-parsing-insserv..patch (revision 311) +++ 0001-service-Fix-dependencies-added-when-parsing-insserv..patch (revision 5) @@ -1,17 +1,35 @@ -From 6620bceb7233a830be3635a4f7a7dc75c13a9c8e Mon Sep 17 00:00:00 2001 -From: Frederic Crozat <fcrozat@suse.com> -Date: Fri, 30 Sep 2011 14:12:45 +0200 -Subject: [PATCH] service: Fix dependencies added when parsing insserv.conf - ---- - src/service.c | 16 +++++++++------- - 1 files changed, 9 insertions(+), 7 deletions(-) - -Index: systemd-41/src/service.c +Index: systemd-195/src/core/service.c =================================================================== ---- systemd-41.orig/src/core/service.c -+++ systemd-41/src/core/service.c -@@ -3210,23 +3210,30 @@ static void sysv_facility_in_insserv_con +--- systemd-195.orig/src/core/service.c ++++ systemd-195/src/core/service.c +@@ -3391,12 +3391,13 @@ static void service_notify_message(Unit + + #ifdef HAVE_SYSV_COMPAT + +-#ifdef TARGET_SUSE +-static void sysv_facility_in_insserv_conf(Manager *mgr) { +- FILE *f=NULL; ++#if defined(TARGET_SUSE) || defined(TARGET_DEBIAN) ++static void sysv_parse_insserv_conf(Manager *mgr, const char* filename) { ++ FILE *f = NULL; + int r; + +- if (!(f = fopen("/etc/insserv.conf", "re"))) { ++ if (!(f = fopen(filename, "re"))) { ++ log_error("Failed to open file %s", filename); + r = errno == ENOENT ? 0 : -errno; + goto finish; + } +@@ -3410,7 +3411,7 @@ static void sysv_facility_in_insserv_con + break; + + r = -errno; +- log_error("Failed to read configuration file '/etc/insserv.conf': %s", strerror(-r)); ++ log_error("Failed to read configuration file '%s': %s", filename, strerror(-r)); + goto finish; + } + +@@ -3425,23 +3426,30 @@ static void sysv_facility_in_insserv_con Unit *u; if (sysv_translate_facility(parsed[0], NULL, &facility) < 0) continue; @@ -29,12 +47,12 @@ STRV_FOREACH (j, parsed+1) { - if (*j[0]=='+') { - e = UNIT_WANTS; -+ if (*j[0]=='+') ++ if (*j[0] == '+') name = *j+1; - } - else { - e = UNIT_REQUIRES; -+ else ++ else name = *j; - } + if (streq(name, "boot.localfs") || @@ -44,9 +62,54 @@ continue; - r = unit_add_two_dependencies_by_name(u, UNIT_BEFORE, e, dep, NULL, true); -+ r = unit_add_dependency_by_name_inverse(u, UNIT_BEFORE, dep, NULL, true); -+ if (*j[0]!='+') ++ r = unit_add_two_dependencies_by_name_inverse(u, UNIT_WANTS, UNIT_BEFORE, dep, NULL, true); ++ if (*j[0] != '+') + r = unit_add_dependency_by_name(u, UNIT_REQUIRES, dep, NULL, true); free(dep); } } +@@ -3454,6 +3462,35 @@ finish: + fclose(f); + + } ++ ++static void sysv_facility_in_insserv_conf(Manager *mgr) { ++ DIR *d =NULL; ++ struct dirent *de; ++ ++#ifdef TARGET_DEBIAN ++ if (!(d = opendir("/etc/insserv.conf.d/"))) ++ if (errno != ENOENT) { ++ log_warning("opendir() failed on /etc/insserv.conf.d/ %s", strerror(errno)); ++ goto finish; ++ } ++ ++ while ((de = readdir(d))) { ++ char *path = NULL; ++ if (ignore_file(de->d_name)) ++ continue; ++ ++ path = join("/etc/insserv.conf.d/", de->d_name, NULL); ++ sysv_parse_insserv_conf(mgr, path); ++ free(path); ++ } ++finish: ++ if (d) ++ closedir(d); ++#endif ++ ++ sysv_parse_insserv_conf(mgr, "/etc/insserv.conf"); ++} ++ + #endif + + static int service_enumerate(Manager *m) { +@@ -3604,7 +3641,7 @@ static int service_enumerate(Manager *m) + + r = 0; + +-#ifdef TARGET_SUSE ++#if defined(TARGET_SUSE) || defined(TARGET_DEBIAN) + sysv_facility_in_insserv_conf (m); + #endif + Index: systemd-mini.changes =================================================================== --- systemd-mini.changes (revision 311) +++ systemd-mini.changes (revision 5) @@ -1,4 +1,35 @@ ------------------------------------------------------------------- +Tue Nov 20 09:36:43 UTC 2012 - fcrozat@suse.com + +- links more manpages for migrated tools (from Christopher + Yeleighton). +- disable boot.localnet service, ypbind service will do the right + thing now (bnc#716746) +- add xdm-display-manager.patch: pull xdm.service instead of + display-manager.service (needed until xdm initscript is migrated + to native systemd service). +- Add fix-permissions-btmp.patch: ensure btmp is owned only by root + (bnc#777405). +- Have the udev package create a tape group, as referenced by + 50-udev-default.rules and 60-persistent-storage-tape.rules + (DimStar). +- Add fix-bad-memory-access.patch: fix crash in journal rotation. +- Add fix-dbus-crash.patch: fix D-Bus caused crash. +- Add sync-on-shutdown.patch: ensure sync is done when initiating + shutdown. +- Add mount-efivars.patch: mount efivars if booting on UEFI. + + +------------------------------------------------------------------- +Thu Nov 15 14:31:28 UTC 2012 - fcrozat@suse.com + +- Ship a empty systemd-journald initscript in systemd-logger to + stop insserv to complain about missing syslog dependency. +- Update + 0001-service-Fix-dependencies-added-when-parsing-insserv..patch + with bug fixes from Debian. + +------------------------------------------------------------------- Wed Nov 14 17:36:05 UTC 2012 - fcrozat@suse.com - /var/log/journal is now only provided by systemd-logger (journal Index: systemd-mini.spec =================================================================== --- systemd-mini.spec (revision 311) +++ systemd-mini.spec (revision 5) @@ -102,6 +102,7 @@ Source5: systemd-insserv_conf Source6: baselibs.conf Source7: libgcrypt.m4 +Source8: systemd-journald.init Source1060: boot.udev Source1061: write_dev_root_rule @@ -128,6 +129,8 @@ Patch56: support-suse-clock-sysconfig.patch Patch59: fix-enable-disable-boot-initscript.patch Patch60: var-run-lock.patch +Patch63: xdm-display-manager.patch +Patch64: fix-permissions-btmp.patch # Upstream First - Policy: # Never add any patches to this package without the upstream commit id @@ -137,6 +140,14 @@ Patch61: fix-logind-pty-seat.patch # PATCH-FIX-UPSTREAM fix-build-glibc217.patch fcrozat@suse.com -- fix build with latest glibc Patch62: fix-build-glibc217.patch +# PATCH-FIX-UPSTREAM fix-bad-memory-access.patch fcrozat@suse.com -- fix bad memory access +Patch65: fix-bad-memory-access.patch +# PATCH-FIX-UPSTREAM fix-dbus-crash.patch fcrozat@suse.com -- fix D-Bus caused crash +Patch66: fix-dbus-crash.patch +# PATCH-FIX-UPSTREAM sync-on-shutdown.patch fcrozat@suse.com -- Sync on shutdown +Patch67: sync-on-shutdown.patch +# PATCH-FIX-UPSTREAM mount-efivars.patch fcrozat@suse.com -- mount efivars if booting under UEFI +Patch68: mount-efivars.patch # udev patches # PATCH-FIX-OPENSUSE 0001-Reinstate-TIMEOUT-handling.patch @@ -151,8 +162,6 @@ # PATCH-FIX-OPENSUSE 0027-udev-fix-sg-autoload-regression.patch Patch1027: 0027-udev-fix-sg-autoload-regression.patch -# systemd patches - %description Systemd is a system and service manager, compatible with SysV and LSB init scripts for Linux. systemd provides aggressive parallelization @@ -313,6 +322,7 @@ %patch1026 -p1 %patch1027 -p1 +#systemd %patch1 -p1 %patch6 -p1 # don't apply when bootstrapping to not modify configure.in @@ -337,6 +347,12 @@ %patch60 -p1 %patch61 -p1 %patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 %build autoreconf -fiv @@ -368,8 +384,14 @@ ln -sf %{_bindir}/systemd-ask-password $RPM_BUILD_ROOT/bin/systemd-ask-password ln -sf %{_bindir}/systemctl $RPM_BUILD_ROOT/bin/systemctl ln -sf %{_prefix}/lib/systemd/systemd-udevd $RPM_BUILD_ROOT/sbin/udevd +%if ! 0%{?bootstrap} +ln -sf systemd-udevd.8 $RPM_BUILD_ROOT/%{_mandir}/man8/udevd.8 +%endif mkdir -p $RPM_BUILD_ROOT/%{_prefix}/usr/lib/firmware/updates ln -sf /lib/firmware $RPM_BUILD_ROOT/usr/lib/firmware +%if ! 0%{?bootstrap} +install -m755 -D %{S:8} $RPM_BUILD_ROOT/etc/init.d/systemd-journald +%endif install -m755 -D %{S:1060} $RPM_BUILD_ROOT/etc/init.d/boot.udev ln -s systemd-udevd.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev.service @@ -378,11 +400,6 @@ mkdir -p $RPM_BUILD_ROOT/lib/systemd/system/basic.target.wants ln -sf ../udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants -#fix manpages -%if ! 0%{?bootstrap} -sed -i -e 's,^\(\.so \)\(.*\.\)\([0-9]\),\1man\3/\2\3,g' %{buildroot}/%{_mandir}/*/* -%endif - #workaround for 716939 chmod 644 %{buildroot}%{_bindir}/systemd-analyze mkdir -p %{buildroot}%{_sysconfdir}/rpm @@ -392,7 +409,7 @@ install -m755 %{S:3} -D %{buildroot}%{_sbindir}/systemd-sysv-convert # do not install, code has been fixed, might be useful in the future -#install -m755 %{S:5} %{buildroot}/lib/systemd/system-generators +#install -m755 %{S:5} %{buildroot}/usr/lib/systemd/system-generators ln -s ../usr/lib/systemd/systemd %{buildroot}/bin/systemd ln -s ../usr/lib/systemd/systemd %{buildroot}/sbin/init ln -s ../usr/bin/systemctl %{buildroot}/sbin/reboot @@ -415,8 +432,7 @@ ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/ldconfig.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/loadmodules.service install -m644 %{S:2} %{buildroot}/%{_prefix}/lib/systemd/system/localfs.service -# need to be implemented in systemd directly -#ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service +ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/proc.service ln -s systemd-fsck-root.service %{buildroot}/%{_prefix}/lib/systemd/system/rootfsck.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/single.service @@ -442,8 +458,12 @@ %endif # legacy links -ln -s loginctl %{buildroot}%{_bindir}/systemd-loginctl -ln -s journalctl %{buildroot}%{_bindir}/systemd-journalctl +for f in loginctl journalctl ; do + ln -s $f %{buildroot}%{_bindir}/systemd-$f +%if ! 0%{?bootstrap} + ln -s $f.1 %{buildroot}%{_mandir}/man1/systemd-$f.1 +%endif +done ln -s /usr/lib/udev %{buildroot}/lib/udev # Create the /var/log/journal directory to change the volatile journal to a persistent one @@ -532,6 +552,8 @@ elif [ ! -e /lib/udev ]; then ln -s /usr/lib/udev /lib/udev fi +# Create "tape" group which is referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules +/usr/sbin/groupadd -r tape 2> /dev/null || : # kill daemon if we are not in a chroot if test -f /proc/1/exe -a -d /proc/1/root ; then if test "$(stat -Lc '%%D-%%i' /)" = "$(stat -Lc '%%D-%%i' /proc/1/root)"; then @@ -724,6 +746,10 @@ %exclude %{_mandir}/man8/telinit.8* %exclude %{_mandir}/man8/runlevel.8* %exclude %{_mandir}/man*/*udev*.[0-9]* + +# Packaged in analyze subpackage +%exclude %{_mandir}/man1/systemd-analyze.1* + %{_mandir}/man1/*.1* %{_mandir}/man3/*.3* %{_mandir}/man5/*.5* @@ -787,7 +813,11 @@ %endif %files analyze +%defattr(-,root,root) %attr(0755,root,root) /usr/bin/systemd-analyze +%if ! 0%{?bootstrap} +%{_mandir}/man1/systemd-analyze.1* +%endif %files -n %{udevpkgname} %defattr(-,root,root) @@ -878,6 +908,7 @@ %defattr(-,root,root) %dir /var/log/journal /var/log/README +/etc/init.d/systemd-journald %endif Index: systemd.changes =================================================================== --- systemd.changes (revision 311) +++ systemd.changes (revision 5) @@ -1,4 +1,35 @@ ------------------------------------------------------------------- +Tue Nov 20 09:36:43 UTC 2012 - fcrozat@suse.com + +- links more manpages for migrated tools (from Christopher + Yeleighton). +- disable boot.localnet service, ypbind service will do the right + thing now (bnc#716746) +- add xdm-display-manager.patch: pull xdm.service instead of + display-manager.service (needed until xdm initscript is migrated + to native systemd service). +- Add fix-permissions-btmp.patch: ensure btmp is owned only by root + (bnc#777405). +- Have the udev package create a tape group, as referenced by + 50-udev-default.rules and 60-persistent-storage-tape.rules + (DimStar). +- Add fix-bad-memory-access.patch: fix crash in journal rotation. +- Add fix-dbus-crash.patch: fix D-Bus caused crash. +- Add sync-on-shutdown.patch: ensure sync is done when initiating + shutdown. +- Add mount-efivars.patch: mount efivars if booting on UEFI. + + +------------------------------------------------------------------- +Thu Nov 15 14:31:28 UTC 2012 - fcrozat@suse.com + +- Ship a empty systemd-journald initscript in systemd-logger to + stop insserv to complain about missing syslog dependency. +- Update + 0001-service-Fix-dependencies-added-when-parsing-insserv..patch + with bug fixes from Debian. + +------------------------------------------------------------------- Wed Nov 14 17:36:05 UTC 2012 - fcrozat@suse.com - /var/log/journal is now only provided by systemd-logger (journal Index: systemd.spec =================================================================== --- systemd.spec (revision 311) +++ systemd.spec (revision 5) @@ -97,6 +97,7 @@ Source5: systemd-insserv_conf Source6: baselibs.conf Source7: libgcrypt.m4 +Source8: systemd-journald.init Source1060: boot.udev Source1061: write_dev_root_rule @@ -123,6 +124,8 @@ Patch56: support-suse-clock-sysconfig.patch Patch59: fix-enable-disable-boot-initscript.patch Patch60: var-run-lock.patch +Patch63: xdm-display-manager.patch +Patch64: fix-permissions-btmp.patch # Upstream First - Policy: # Never add any patches to this package without the upstream commit id @@ -132,6 +135,14 @@ Patch61: fix-logind-pty-seat.patch # PATCH-FIX-UPSTREAM fix-build-glibc217.patch fcrozat@suse.com -- fix build with latest glibc Patch62: fix-build-glibc217.patch +# PATCH-FIX-UPSTREAM fix-bad-memory-access.patch fcrozat@suse.com -- fix bad memory access +Patch65: fix-bad-memory-access.patch +# PATCH-FIX-UPSTREAM fix-dbus-crash.patch fcrozat@suse.com -- fix D-Bus caused crash +Patch66: fix-dbus-crash.patch +# PATCH-FIX-UPSTREAM sync-on-shutdown.patch fcrozat@suse.com -- Sync on shutdown +Patch67: sync-on-shutdown.patch +# PATCH-FIX-UPSTREAM mount-efivars.patch fcrozat@suse.com -- mount efivars if booting under UEFI +Patch68: mount-efivars.patch # udev patches # PATCH-FIX-OPENSUSE 0001-Reinstate-TIMEOUT-handling.patch @@ -146,8 +157,6 @@ # PATCH-FIX-OPENSUSE 0027-udev-fix-sg-autoload-regression.patch Patch1027: 0027-udev-fix-sg-autoload-regression.patch -# systemd patches - %description Systemd is a system and service manager, compatible with SysV and LSB init scripts for Linux. systemd provides aggressive parallelization @@ -308,6 +317,7 @@ %patch1026 -p1 %patch1027 -p1 +#systemd %patch1 -p1 %patch6 -p1 # don't apply when bootstrapping to not modify configure.in @@ -332,6 +342,12 @@ %patch60 -p1 %patch61 -p1 %patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 %build autoreconf -fiv @@ -363,8 +379,14 @@ ln -sf %{_bindir}/systemd-ask-password $RPM_BUILD_ROOT/bin/systemd-ask-password ln -sf %{_bindir}/systemctl $RPM_BUILD_ROOT/bin/systemctl ln -sf %{_prefix}/lib/systemd/systemd-udevd $RPM_BUILD_ROOT/sbin/udevd +%if ! 0%{?bootstrap} +ln -sf systemd-udevd.8 $RPM_BUILD_ROOT/%{_mandir}/man8/udevd.8 +%endif mkdir -p $RPM_BUILD_ROOT/%{_prefix}/usr/lib/firmware/updates ln -sf /lib/firmware $RPM_BUILD_ROOT/usr/lib/firmware +%if ! 0%{?bootstrap} +install -m755 -D %{S:8} $RPM_BUILD_ROOT/etc/init.d/systemd-journald +%endif install -m755 -D %{S:1060} $RPM_BUILD_ROOT/etc/init.d/boot.udev ln -s systemd-udevd.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev.service @@ -373,11 +395,6 @@ mkdir -p $RPM_BUILD_ROOT/lib/systemd/system/basic.target.wants ln -sf ../udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants -#fix manpages -%if ! 0%{?bootstrap} -sed -i -e 's,^\(\.so \)\(.*\.\)\([0-9]\),\1man\3/\2\3,g' %{buildroot}/%{_mandir}/*/* -%endif - #workaround for 716939 chmod 644 %{buildroot}%{_bindir}/systemd-analyze mkdir -p %{buildroot}%{_sysconfdir}/rpm @@ -387,7 +404,7 @@ install -m755 %{S:3} -D %{buildroot}%{_sbindir}/systemd-sysv-convert # do not install, code has been fixed, might be useful in the future -#install -m755 %{S:5} %{buildroot}/lib/systemd/system-generators +#install -m755 %{S:5} %{buildroot}/usr/lib/systemd/system-generators ln -s ../usr/lib/systemd/systemd %{buildroot}/bin/systemd ln -s ../usr/lib/systemd/systemd %{buildroot}/sbin/init ln -s ../usr/bin/systemctl %{buildroot}/sbin/reboot @@ -410,8 +427,7 @@ ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/ldconfig.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/loadmodules.service install -m644 %{S:2} %{buildroot}/%{_prefix}/lib/systemd/system/localfs.service -# need to be implemented in systemd directly -#ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service +ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/proc.service ln -s systemd-fsck-root.service %{buildroot}/%{_prefix}/lib/systemd/system/rootfsck.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/single.service @@ -437,8 +453,12 @@ %endif # legacy links -ln -s loginctl %{buildroot}%{_bindir}/systemd-loginctl -ln -s journalctl %{buildroot}%{_bindir}/systemd-journalctl +for f in loginctl journalctl ; do + ln -s $f %{buildroot}%{_bindir}/systemd-$f +%if ! 0%{?bootstrap} + ln -s $f.1 %{buildroot}%{_mandir}/man1/systemd-$f.1 +%endif +done ln -s /usr/lib/udev %{buildroot}/lib/udev # Create the /var/log/journal directory to change the volatile journal to a persistent one @@ -527,6 +547,8 @@ elif [ ! -e /lib/udev ]; then ln -s /usr/lib/udev /lib/udev fi +# Create "tape" group which is referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules +/usr/sbin/groupadd -r tape 2> /dev/null || : # kill daemon if we are not in a chroot if test -f /proc/1/exe -a -d /proc/1/root ; then if test "$(stat -Lc '%%D-%%i' /)" = "$(stat -Lc '%%D-%%i' /proc/1/root)"; then @@ -719,6 +741,10 @@ %exclude %{_mandir}/man8/telinit.8* %exclude %{_mandir}/man8/runlevel.8* %exclude %{_mandir}/man*/*udev*.[0-9]* + +# Packaged in analyze subpackage +%exclude %{_mandir}/man1/systemd-analyze.1* + %{_mandir}/man1/*.1* %{_mandir}/man3/*.3* %{_mandir}/man5/*.5* @@ -782,7 +808,11 @@ %endif %files analyze +%defattr(-,root,root) %attr(0755,root,root) /usr/bin/systemd-analyze +%if ! 0%{?bootstrap} +%{_mandir}/man1/systemd-analyze.1* +%endif %files -n %{udevpkgname} %defattr(-,root,root) @@ -873,6 +903,7 @@ %defattr(-,root,root) %dir /var/log/journal /var/log/README +/etc/init.d/systemd-journald %endif Index: fix-bad-memory-access.patch =================================================================== --- fix-bad-memory-access.patch (added) +++ fix-bad-memory-access.patch (revision 5) @@ -0,0 +1,23 @@ +From 7d73c1343be02a59b17de0cd34375deeb815d89c Mon Sep 17 00:00:00 2001 +From: Lennart Poettering <lennart@poettering.net> +Date: Tue, 20 Nov 2012 00:19:27 +0100 +Subject: [PATCH] journald: fix bad memory access + +https://bugzilla.redhat.com/show_bug.cgi?id=875653 +--- + src/journal/journald-server.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: systemd-195/src/journal/journald.c +=================================================================== +--- systemd-195.orig/src/journal/journald.c ++++ systemd-195/src/journal/journald.c +@@ -342,7 +342,7 @@ static void server_rotate(Server *s) { + HASHMAP_FOREACH_KEY(f, k, s->user_journals, i) { + r = journal_file_rotate(&f, s->compress, s->seal); + if (r < 0) +- if (f->path) ++ if (f) + log_error("Failed to rotate %s: %s", f->path, strerror(-r)); + else + log_error("Failed to create user journal: %s", strerror(-r)); Index: fix-dbus-crash.patch =================================================================== --- fix-dbus-crash.patch (added) +++ fix-dbus-crash.patch (revision 5) @@ -0,0 +1,32 @@ +From 645a9e5a2bbb06464a3fba1a3501e9d79e5bbad8 Mon Sep 17 00:00:00 2001 +From: Eelco Dolstra <eelco.dolstra@logicblox.com> +Date: Wed, 31 Oct 2012 11:53:56 +0100 +Subject: [PATCH] dbus-manager: fix a fatal dbus abort in + bus_manager_message_handler() + +If ListUnitFiles fails, or an OOM occurs, then dbus_message_unref() +will be called twice on "reply", causing systemd to crash. So remove +the call to dbus_message_unref(); it is unnecessary because of +the cleanup attribute on "reply". + +[zj: modified to leave one dbus_message_unref() alone, per Colin +Walters' comment.] +--- + src/core/dbus-manager.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c +index 2010241..3cf3e90 100644 +--- a/src/core/dbus-manager.c ++++ b/src/core/dbus-manager.c +@@ -1436,7 +1436,6 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, + r = unit_file_get_list(m->running_as == SYSTEMD_SYSTEM ? UNIT_FILE_SYSTEM : UNIT_FILE_USER, NULL, h); + if (r < 0) { + unit_file_list_free(h); +- dbus_message_unref(reply); + return bus_send_error_reply(connection, message, NULL, r); + } + +-- +1.7.10.4 + Index: fix-permissions-btmp.patch =================================================================== --- fix-permissions-btmp.patch (added) +++ fix-permissions-btmp.patch (revision 5) @@ -0,0 +1,13 @@ +Index: systemd-44/tmpfiles.d/systemd.conf +=================================================================== +--- systemd-44.orig/tmpfiles.d/systemd.conf ++++ systemd-44/tmpfiles.d/systemd.conf +@@ -11,7 +11,7 @@ d /run/user 0755 root root 10d + F /run/utmp 0664 root utmp - + + f /var/log/wtmp 0664 root utmp - +-f /var/log/btmp 0600 root utmp - ++f /var/log/btmp 0600 root root - + + d /var/cache/man - - - 30d + Index: mount-efivars.patch =================================================================== --- mount-efivars.patch (added) +++ mount-efivars.patch (revision 5) @@ -0,0 +1,336 @@ +From f271dd97622b656c1c013d181ea615c671cc2438 Mon Sep 17 00:00:00 2001 +From: "Lee, Chun-Yi" <joeyli.kernel@gmail.com> +Date: Sat, 27 Oct 2012 11:23:22 +0800 +Subject: [PATCH] systemd: mount the EFI variable filesystem +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Add efivarfs to the mount_table in mount-setup.c, so the EFI variable +filesystem will be mounted when systemd executed. + +The EFI variable filesystem will merge in v3.7 or v3.8 linux kernel. + +Cc: Kay Sievers <kay@vrfy.org> +Cc: Lennart Poettering <lennart@poettering.net> +Cc: Mantas Mikulėnas <grawity@gmail.com> +Cc: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> +Cc: Matt Fleming <matt.fleming@intel.com> +Cc: Jeremy Kerr <jeremy.kerr@canonical.com> +Cc: Matthew Garrett <mjg@redhat.com> +Signed-off-by: Lee, Chun-Yi <jlee@suse.com> +--- + src/core/kmod-setup.c | 7 ++++--- + src/core/mount-setup.c | 1 + + 2 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index cc2a2d9..ce8a8e7 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -31,9 +31,10 @@ + #include "kmod-setup.h" + + static const char * const kmod_table[] = { +- "autofs4", "/sys/class/misc/autofs", +- "ipv6", "/sys/module/ipv6", +- "unix", "/proc/net/unix" ++ "autofs4", "/sys/class/misc/autofs", ++ "ipv6", "/sys/module/ipv6", ++ "efivarfs", "/sys/firmware/efi/efivars", ++ "unix", "/proc/net/unix" + }; + + #pragma GCC diagnostic push +diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c +index 0fd112f..9894c7f 100644 +--- a/src/core/mount-setup.c ++++ b/src/core/mount-setup.c +@@ -66,6 +66,7 @@ static const MountPoint mount_table[] = { + { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, + { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, true, true }, + { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, ++ { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, + { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, + { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, false, true }, + { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +-- +1.7.10.4 + +From c1e5704657315b436c0409e8172c1fcb76adccad Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:06:27 +0100 +Subject: [PATCH] shared: add is_efiboot() + +--- + src/shared/util.c | 4 ++++ + src/shared/util.h | 2 ++ + 2 files changed, 6 insertions(+) + +diff --git a/src/shared/util.c b/src/shared/util.c +index 2a8afae..9983695 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -77,6 +77,10 @@ char **saved_argv = NULL; + static volatile unsigned cached_columns = 0; + static volatile unsigned cached_lines = 0; + ++bool is_efiboot(void) { ++ return access("/sys/firmware/efi", F_OK) >= 0; ++} ++ + size_t page_size(void) { + static __thread size_t pgsz = 0; + long r; +diff --git a/src/shared/util.h b/src/shared/util.h +index e387b12..99972cc 100644 +--- a/src/shared/util.h ++++ b/src/shared/util.h +@@ -90,6 +90,8 @@ union dirent_storage { + #define ANSI_HIGHLIGHT_YELLOW_ON "\x1B[1;33m" + #define ANSI_HIGHLIGHT_OFF "\x1B[0m" + ++bool is_efiboot(void); ++ + usec_t now(clockid_t clock); + + dual_timestamp* dual_timestamp_get(dual_timestamp *ts); +-- +1.7.10.4 + +From 1022373284b7562431fb0a6dba45db8af089a0e3 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:54:19 +0100 +Subject: [PATCH] kmod-setup: add conditional module loading callback + +--- + src/core/kmod-setup.c | 32 ++++++++++++++++++++------------ + 1 file changed, 20 insertions(+), 12 deletions(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index ce8a8e7..383a6b2 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -30,11 +30,17 @@ + + #include "kmod-setup.h" + +-static const char * const kmod_table[] = { +- "autofs4", "/sys/class/misc/autofs", +- "ipv6", "/sys/module/ipv6", +- "efivarfs", "/sys/firmware/efi/efivars", +- "unix", "/proc/net/unix" ++typedef struct Kmodule { ++ const char *name; ++ const char *directory; ++ bool (*condition_fn)(void); ++} KModule; ++ ++static const KModule kmod_table[] = { ++ { "autofs4", "/sys/class/misc/autofs", NULL } , ++ { "ipv6", "/sys/module/ipv6", NULL }, ++ { "efivarfs", "/sys/firmware/efi/efivars", NULL }, ++ { "unix", "/proc/net/unix", NULL } , + }; + + #pragma GCC diagnostic push +@@ -42,7 +48,8 @@ static const char * const kmod_table[] = { + static void systemd_kmod_log(void *data, int priority, const char *file, int line, + const char *fn, const char *format, va_list args) + { +- log_metav(priority, file, line, fn, format, args); ++ /* library logging is enabled at debug only */ ++ log_metav(LOG_DEBUG, file, line, fn, format, args); + } + #pragma GCC diagnostic pop + +@@ -53,13 +60,15 @@ int kmod_setup(void) { + int err; + + for (i = 0; i < ELEMENTSOF(kmod_table); i += 2) { ++ if (kmod_table[i].condition_fn && !kmod_table[i].condition_fn()) ++ continue; + +- if (access(kmod_table[i+1], F_OK) >= 0) ++ if (access(kmod_table[i].directory, F_OK) >= 0) + continue; + + log_debug("Your kernel apparently lacks built-in %s support. Might be a good idea to compile it in. " + "We'll now try to work around this by loading the module...", +- kmod_table[i]); ++ kmod_table[i].name); + + if (!ctx) { + ctx = kmod_new(NULL, NULL); +@@ -69,13 +78,12 @@ int kmod_setup(void) { + } + + kmod_set_log_fn(ctx, systemd_kmod_log, NULL); +- + kmod_load_resources(ctx); + } + +- err = kmod_module_new_from_name(ctx, kmod_table[i], &mod); ++ err = kmod_module_new_from_name(ctx, kmod_table[i].name, &mod); + if (err < 0) { +- log_error("Failed to load module '%s'", kmod_table[i]); ++ log_error("Failed to lookup module '%s'", kmod_table[i].name); + continue; + } + +@@ -85,7 +93,7 @@ int kmod_setup(void) { + else if (err == KMOD_PROBE_APPLY_BLACKLIST) + log_info("Module '%s' is blacklisted", kmod_module_get_name(mod)); + else +- log_error("Failed to insert '%s'", kmod_module_get_name(mod)); ++ log_error("Failed to insert module '%s'", kmod_module_get_name(mod)); + + kmod_module_unref(mod); + } +-- +1.7.10.4 + +From 3dfb265083347cb5700dc38f7cc0f479f378e6e9 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:55:23 +0100 +Subject: [PATCH] kmod-setup: mounting efivarfs, *after* we tried to mount it, + is pointless + +The mount() system call, which we issue before loading modules, will trigger +a modprobe by the kernel and block until it returns. Trying to load it again +later, will have exactly the same result as the first time. +--- + src/core/kmod-setup.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index 383a6b2..20ab232 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -39,7 +39,6 @@ typedef struct Kmodule { + static const KModule kmod_table[] = { + { "autofs4", "/sys/class/misc/autofs", NULL } , + { "ipv6", "/sys/module/ipv6", NULL }, +- { "efivarfs", "/sys/firmware/efi/efivars", NULL }, + { "unix", "/proc/net/unix", NULL } , + }; + +-- +1.7.10.4 + +From 6aa220e019f9dffd96590b06b68f937985204109 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 17:03:48 +0100 +Subject: [PATCH] mount-setup: try mounting 'efivarfs' only if the system + bootet with EFI + +--- + TODO | 3 --- + src/core/mount-setup.c | 50 ++++++++++++++++++++++++++++++++---------------- + 2 files changed, 34 insertions(+), 19 deletions(-) + +diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c +index 9894c7f..98614d0 100644 +--- a/src/core/mount-setup.c ++++ b/src/core/mount-setup.c +@@ -46,14 +46,20 @@ + #define TTY_GID 5 + #endif + ++typedef enum MountMode { ++ MNT_NONE = 0, ++ MNT_FATAL = 1 << 0, ++ MNT_IN_CONTAINER = 1 << 1, ++} MountMode; ++ + typedef struct MountPoint { + const char *what; + const char *where; + const char *type; + const char *options; + unsigned long flags; +- bool fatal; +- bool in_container; ++ bool (*condition_fn)(void); ++ MountMode mode; + } MountPoint; + + /* The first three entries we might need before SELinux is up. The +@@ -62,16 +68,26 @@ typedef struct MountPoint { + #define N_EARLY_MOUNT 4 + + static const MountPoint mount_table[] = { +- { "proc", "/proc", "proc", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, +- { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, +- { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, true, true }, +- { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, +- { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, +- { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +- { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, false, true }, +- { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +- { "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME, false, true }, +- { "cgroup", "/sys/fs/cgroup/systemd", "cgroup", "none,name=systemd", MS_NOSUID|MS_NOEXEC|MS_NODEV, false, true }, ++ { "proc", "/proc", "proc", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_NONE }, ++ { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ is_efiboot, MNT_NONE }, ++ { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, ++ NULL, MNT_IN_CONTAINER }, ++ { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_IN_CONTAINER }, ++ { "cgroup", "/sys/fs/cgroup/systemd", "cgroup", "none,name=systemd", MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_IN_CONTAINER }, + }; + + /* These are API file systems that might be mounted by other software, +@@ -119,6 +135,9 @@ static int mount_one(const MountPoint *p, bool relabel) { + + assert(p); + ++ if (p->condition_fn && !p->condition_fn()) ++ return 0; ++ + /* Relabel first, just in case */ + if (relabel) + label_fix(p->where, true, true); +@@ -131,7 +150,7 @@ static int mount_one(const MountPoint *p, bool relabel) { + return 0; + + /* Skip securityfs in a container */ +- if (!p->in_container && detect_container(NULL) > 0) ++ if (!(p->mode & MNT_IN_CONTAINER) && detect_container(NULL) > 0) + return 0; + + /* The access mode here doesn't really matter too much, since +@@ -149,8 +168,8 @@ static int mount_one(const MountPoint *p, bool relabel) { + p->type, + p->flags, + p->options) < 0) { +- log_full(p->fatal ? LOG_ERR : LOG_DEBUG, "Failed to mount %s: %s", p->where, strerror(errno)); +- return p->fatal ? -errno : 0; ++ log_full((p->mode & MNT_FATAL) ? LOG_ERR : LOG_DEBUG, "Failed to mount %s: %s", p->where, strerror(errno)); ++ return (p->mode & MNT_FATAL) ? -errno : 0; + } + + /* Relabel again, since we now mounted something fresh here */ +@@ -289,7 +308,6 @@ int mount_cgroup_controllers(char ***join_controllers) { + p.type = "cgroup"; + p.options = options; + p.flags = MS_NOSUID|MS_NOEXEC|MS_NODEV; +- p.fatal = false; + + r = mount_one(&p, true); + free(controller); +-- +1.7.10.4 + Index: sync-on-shutdown.patch =================================================================== --- sync-on-shutdown.patch (added) +++ sync-on-shutdown.patch (revision 5) @@ -0,0 +1,49 @@ +From 0049f05a8bb82c3e084bacc5945596761d706c55 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering <lennart@poettering.net> +Date: Fri, 16 Nov 2012 01:30:29 +0100 +Subject: [PATCH] shutdown: readd explicit sync() when shutting down + +As it turns out reboot() doesn't actually imply a file system sync, but +only a disk sync. Accordingly, readd explicit sync() invocations +immediately before we invoke reboot(). + +This is much less dramatic than it might sounds as we umount all +disks/read-only remount them anyway before going down. +--- + src/core/service.c | 1 + + src/core/shutdown.c | 7 +++++++ + 2 files changed, 8 insertions(+) + +diff --git a/src/core/service.c b/src/core/service.c +index cf08485..df72aba 100644 +--- a/src/core/service.c ++++ b/src/core/service.c +@@ -2485,6 +2485,7 @@ static int service_start_limit_test(Service *s) { + + case SERVICE_START_LIMIT_REBOOT_IMMEDIATE: + log_warning("%s start request repeated too quickly, rebooting immediately.", UNIT(s)->id); ++ sync(); + reboot(RB_AUTOBOOT); + break; + +diff --git a/src/core/shutdown.c b/src/core/shutdown.c +index cc8c57b..b59aef1 100644 +--- a/src/core/shutdown.c ++++ b/src/core/shutdown.c +@@ -273,6 +273,13 @@ int main(int argc, char *argv[]) { + } + } + ++ /* The kernel will automaticall flush ATA disks and suchlike ++ * on reboot(), but the file systems need to be synce'd ++ * explicitly in advance. So let's do this here, but not ++ * needlessly slow down containers. */ ++ if (!in_container) ++ sync(); ++ + if (cmd == LINUX_REBOOT_CMD_KEXEC) { + + if (!in_container) { +-- +1.7.10.4 + Index: systemd-journald.init =================================================================== --- systemd-journald.init (added) +++ systemd-journald.init (revision 5) @@ -0,0 +1,33 @@ +#! /bin/sh +# +# Copyright (c) 2001-2002 SuSE Linux AG, Nuernberg, Germany. +# All rights reserved. +# +# /etc/init.d/systemd-journald +# +### BEGIN INIT INFO +# Provides: syslog +# Required-Start: $null +# Required-Stop: $null +# Default-Start: 2 3 5 +# Default-Stop: +# Short-Description: compat wrapper for journald +# Description: compat wrapper for journald +### END INIT INFO + +. /etc/rc.status + +rc_reset + +case "$1" in + start|stop|restart) + rc_failed 3 + rc_status -v + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 + ;; +esac + +rc_exit Index: xdm-display-manager.patch =================================================================== --- xdm-display-manager.patch (added) +++ xdm-display-manager.patch (revision 5) @@ -0,0 +1,13 @@ +Index: systemd-195/units/graphical.target +=================================================================== +--- systemd-195.orig/units/graphical.target ++++ systemd-195/units/graphical.target +@@ -11,7 +11,7 @@ Documentation=man:systemd.special(7) + Requires=multi-user.target + After=multi-user.target + Conflicts=rescue.target +-Wants=display-manager.service ++Wants=xdm.service + AllowIsolate=yes + + [Install] OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=312
2012-11-20 13:10:12 +01:00
for f in loginctl journalctl ; do
ln -s $f %{buildroot}%{_bindir}/systemd-$f
%if ! 0%{?bootstrap}
ln -s $f.1 %{buildroot}%{_mandir}/man1/systemd-$f.1
%endif
done
ln -s /usr/lib/udev %{buildroot}/lib/udev
# Create the /var/log/journal directory to change the volatile journal to a persistent one
mkdir -p %{buildroot}/var/log/journal
# Make sure the NTP units dir exists
mkdir -p %{buildroot}%{_prefix}/lib/systemd/ntp-units.d/
# Make sure the shutdown/sleep drop-in dirs exist
mkdir -p %{buildroot}%{_prefix}/lib/systemd/system-shutdown/
mkdir -p %{buildroot}%{_prefix}/lib/systemd/system-sleep/
# Make sure these directories are properly owned
mkdir -p %{buildroot}%{_prefix}/lib/systemd/system/default.target.wants
mkdir -p %{buildroot}%{_prefix}/lib/systemd/system/dbus.target.wants
mkdir -p %{buildroot}%{_prefix}/lib/systemd/system/syslog.target.wants
%fdupes -s %{buildroot}%{_mandir}
- Update to version 39: + New systemd-cgtop tool to show control groups by their resource usage. + Linking against libacl for ACLs is optional again. + If a group "adm" exists, journal files are automatically owned by them, thus allow members of this group full access to the system journal as well as all user journals. + The journal now stores the SELinux context of the logging client for all entries. + Add C++ inclusion guards to all public headers. + New output mode "cat" in the journal to print only text messages, without any meta data like date or time. + Include tiny X server wrapper as a temporary stop-gap to teach XOrg udev display enumeration (until XOrg supports udev hotplugging for display devices). + Add new systemd-cat tool for executing arbitrary programs with STDERR/STDOUT connected to the journal. Can also act as BSD logger replacement, and does so by default. + Optionally store all locally generated coredumps in the journal along with meta data. + systemd-tmpfiles learnt four new commands: n, L, c, b, for writing short strings to files (for usage for /sys), and for creating symlinks, character and block device nodes. + New unit file option ControlGroupPersistent= to make cgroups persistent. + Support multiple local RTCs in a sane way. + No longer monopolize IO when replaying readahead data on rotating disks. + Don't show kernel threads in systemd-cgls anymore, unless requested with new -k switch. OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=234
2012-01-25 15:08:16 +01:00
%pre
getent group adm >/dev/null || groupadd -r adm
exit 0
%post
/usr/sbin/pam-config -a --systemd >/dev/null 2>&1 || :
/sbin/ldconfig
/usr/bin/systemd-machine-id-setup >/dev/null 2>&1 || :
/usr/lib/systemd/systemd-random-seed save >/dev/null 2>&1 || :
/usr/bin/systemctl daemon-reexec >/dev/null 2>&1 || :
# Try to read default runlevel from the old inittab if it exists
if [ ! -e /etc/systemd/system/default.target -a -e /etc/inittab ]; then
runlevel=$(awk -F ':' '$3 == "initdefault" && $1 !~ "^#" { print $2 }' /etc/inittab 2> /dev/null)
if [ -n "$runlevel" ] ; then
/bin/ln -sf /usr/lib/systemd/system/runlevel$runlevel.target /etc/systemd/system/default.target 2>&1 || :
fi
fi
# Create default config in /etc at first install.
# Later package updates should not overwrite these settings.
if [ "$1" -eq 1 ]; then
# Enable these services by default.
/usr/bin/systemctl enable \
getty@.service \
systemd-readahead-collect.service \
systemd-readahead-replay.service \
remote-fs.target >/dev/null 2>&1 || :
fi
%triggerpostun -- systemd < 194
# migrate any symlink which may refer to the old path
for f in $(find /etc/systemd/system -type l -xtype l); do
new_target="/usr$(readlink $f)"
[ -f "$new_target" ] && ln -s -f $new_target $f || :
done
%postun
/sbin/ldconfig
if [ $1 -ge 1 ]; then
/usr/bin/systemctl daemon-reload >/dev/null 2>&1 || :
/usr/bin/systemctl try-restart systemd-logind.service >/dev/null 2>&1 || :
fi
if [ $1 -eq 0 ]; then
/usr/sbin/pam-config -d --systemd >/dev/null 2>&1 || :
fi
%preun
if [ $1 -eq 0 ]; then
/usr/bin/systemctl disable \
getty@.service \
systemd-readahead-collect.service \
systemd-readahead-replay.service \
remote-fs.target >/dev/null 2>&1 || :
rm -f /etc/systemd/system/default.target 2>&1 || :
fi
%pretrans -n %{udevpkgname} -p <lua>
if posix.stat("/lib/udev") and not posix.stat("/usr/lib/udev") then
posix.symlink("/lib/udev", "/usr/lib/udev")
end
%pre -n %{udevpkgname}
if test -L /usr/lib/udev -a /lib/udev -ef /usr/lib/udev ; then
rm /usr/lib/udev
mv /lib/udev /usr/lib
ln -s /usr/lib/udev /lib/udev
elif [ ! -e /lib/udev ]; then
ln -s /usr/lib/udev /lib/udev
fi
- links more manpages for migrated tools (from Christopher Yeleighton). - disable boot.localnet service, ypbind service will do the right thing now (bnc#716746) - add xdm-display-manager.patch: pull xdm.service instead of display-manager.service (needed until xdm initscript is migrated to native systemd service). - Add fix-permissions-btmp.patch: ensure btmp is owned only by root (bnc#777405). - Have the udev package create a tape group, as referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules (DimStar). - Add fix-bad-memory-access.patch: fix crash in journal rotation. - Add fix-dbus-crash.patch: fix D-Bus caused crash. - Add sync-on-shutdown.patch: ensure sync is done when initiating shutdown. - Add mount-efivars.patch: mount efivars if booting on UEFI. - Ship a empty systemd-journald initscript in systemd-logger to stop insserv to complain about missing syslog dependency. - Update 0001-service-Fix-dependencies-added-when-parsing-insserv..patch with bug fixes from Debian. old: Base:System/systemd new: home:fcrozat:branches:Base:System/systemd rev NoneIndex: 0001-service-Fix-dependencies-added-when-parsing-insserv..patch =================================================================== --- 0001-service-Fix-dependencies-added-when-parsing-insserv..patch (revision 311) +++ 0001-service-Fix-dependencies-added-when-parsing-insserv..patch (revision 5) @@ -1,17 +1,35 @@ -From 6620bceb7233a830be3635a4f7a7dc75c13a9c8e Mon Sep 17 00:00:00 2001 -From: Frederic Crozat <fcrozat@suse.com> -Date: Fri, 30 Sep 2011 14:12:45 +0200 -Subject: [PATCH] service: Fix dependencies added when parsing insserv.conf - ---- - src/service.c | 16 +++++++++------- - 1 files changed, 9 insertions(+), 7 deletions(-) - -Index: systemd-41/src/service.c +Index: systemd-195/src/core/service.c =================================================================== ---- systemd-41.orig/src/core/service.c -+++ systemd-41/src/core/service.c -@@ -3210,23 +3210,30 @@ static void sysv_facility_in_insserv_con +--- systemd-195.orig/src/core/service.c ++++ systemd-195/src/core/service.c +@@ -3391,12 +3391,13 @@ static void service_notify_message(Unit + + #ifdef HAVE_SYSV_COMPAT + +-#ifdef TARGET_SUSE +-static void sysv_facility_in_insserv_conf(Manager *mgr) { +- FILE *f=NULL; ++#if defined(TARGET_SUSE) || defined(TARGET_DEBIAN) ++static void sysv_parse_insserv_conf(Manager *mgr, const char* filename) { ++ FILE *f = NULL; + int r; + +- if (!(f = fopen("/etc/insserv.conf", "re"))) { ++ if (!(f = fopen(filename, "re"))) { ++ log_error("Failed to open file %s", filename); + r = errno == ENOENT ? 0 : -errno; + goto finish; + } +@@ -3410,7 +3411,7 @@ static void sysv_facility_in_insserv_con + break; + + r = -errno; +- log_error("Failed to read configuration file '/etc/insserv.conf': %s", strerror(-r)); ++ log_error("Failed to read configuration file '%s': %s", filename, strerror(-r)); + goto finish; + } + +@@ -3425,23 +3426,30 @@ static void sysv_facility_in_insserv_con Unit *u; if (sysv_translate_facility(parsed[0], NULL, &facility) < 0) continue; @@ -29,12 +47,12 @@ STRV_FOREACH (j, parsed+1) { - if (*j[0]=='+') { - e = UNIT_WANTS; -+ if (*j[0]=='+') ++ if (*j[0] == '+') name = *j+1; - } - else { - e = UNIT_REQUIRES; -+ else ++ else name = *j; - } + if (streq(name, "boot.localfs") || @@ -44,9 +62,54 @@ continue; - r = unit_add_two_dependencies_by_name(u, UNIT_BEFORE, e, dep, NULL, true); -+ r = unit_add_dependency_by_name_inverse(u, UNIT_BEFORE, dep, NULL, true); -+ if (*j[0]!='+') ++ r = unit_add_two_dependencies_by_name_inverse(u, UNIT_WANTS, UNIT_BEFORE, dep, NULL, true); ++ if (*j[0] != '+') + r = unit_add_dependency_by_name(u, UNIT_REQUIRES, dep, NULL, true); free(dep); } } +@@ -3454,6 +3462,35 @@ finish: + fclose(f); + + } ++ ++static void sysv_facility_in_insserv_conf(Manager *mgr) { ++ DIR *d =NULL; ++ struct dirent *de; ++ ++#ifdef TARGET_DEBIAN ++ if (!(d = opendir("/etc/insserv.conf.d/"))) ++ if (errno != ENOENT) { ++ log_warning("opendir() failed on /etc/insserv.conf.d/ %s", strerror(errno)); ++ goto finish; ++ } ++ ++ while ((de = readdir(d))) { ++ char *path = NULL; ++ if (ignore_file(de->d_name)) ++ continue; ++ ++ path = join("/etc/insserv.conf.d/", de->d_name, NULL); ++ sysv_parse_insserv_conf(mgr, path); ++ free(path); ++ } ++finish: ++ if (d) ++ closedir(d); ++#endif ++ ++ sysv_parse_insserv_conf(mgr, "/etc/insserv.conf"); ++} ++ + #endif + + static int service_enumerate(Manager *m) { +@@ -3604,7 +3641,7 @@ static int service_enumerate(Manager *m) + + r = 0; + +-#ifdef TARGET_SUSE ++#if defined(TARGET_SUSE) || defined(TARGET_DEBIAN) + sysv_facility_in_insserv_conf (m); + #endif + Index: systemd-mini.changes =================================================================== --- systemd-mini.changes (revision 311) +++ systemd-mini.changes (revision 5) @@ -1,4 +1,35 @@ ------------------------------------------------------------------- +Tue Nov 20 09:36:43 UTC 2012 - fcrozat@suse.com + +- links more manpages for migrated tools (from Christopher + Yeleighton). +- disable boot.localnet service, ypbind service will do the right + thing now (bnc#716746) +- add xdm-display-manager.patch: pull xdm.service instead of + display-manager.service (needed until xdm initscript is migrated + to native systemd service). +- Add fix-permissions-btmp.patch: ensure btmp is owned only by root + (bnc#777405). +- Have the udev package create a tape group, as referenced by + 50-udev-default.rules and 60-persistent-storage-tape.rules + (DimStar). +- Add fix-bad-memory-access.patch: fix crash in journal rotation. +- Add fix-dbus-crash.patch: fix D-Bus caused crash. +- Add sync-on-shutdown.patch: ensure sync is done when initiating + shutdown. +- Add mount-efivars.patch: mount efivars if booting on UEFI. + + +------------------------------------------------------------------- +Thu Nov 15 14:31:28 UTC 2012 - fcrozat@suse.com + +- Ship a empty systemd-journald initscript in systemd-logger to + stop insserv to complain about missing syslog dependency. +- Update + 0001-service-Fix-dependencies-added-when-parsing-insserv..patch + with bug fixes from Debian. + +------------------------------------------------------------------- Wed Nov 14 17:36:05 UTC 2012 - fcrozat@suse.com - /var/log/journal is now only provided by systemd-logger (journal Index: systemd-mini.spec =================================================================== --- systemd-mini.spec (revision 311) +++ systemd-mini.spec (revision 5) @@ -102,6 +102,7 @@ Source5: systemd-insserv_conf Source6: baselibs.conf Source7: libgcrypt.m4 +Source8: systemd-journald.init Source1060: boot.udev Source1061: write_dev_root_rule @@ -128,6 +129,8 @@ Patch56: support-suse-clock-sysconfig.patch Patch59: fix-enable-disable-boot-initscript.patch Patch60: var-run-lock.patch +Patch63: xdm-display-manager.patch +Patch64: fix-permissions-btmp.patch # Upstream First - Policy: # Never add any patches to this package without the upstream commit id @@ -137,6 +140,14 @@ Patch61: fix-logind-pty-seat.patch # PATCH-FIX-UPSTREAM fix-build-glibc217.patch fcrozat@suse.com -- fix build with latest glibc Patch62: fix-build-glibc217.patch +# PATCH-FIX-UPSTREAM fix-bad-memory-access.patch fcrozat@suse.com -- fix bad memory access +Patch65: fix-bad-memory-access.patch +# PATCH-FIX-UPSTREAM fix-dbus-crash.patch fcrozat@suse.com -- fix D-Bus caused crash +Patch66: fix-dbus-crash.patch +# PATCH-FIX-UPSTREAM sync-on-shutdown.patch fcrozat@suse.com -- Sync on shutdown +Patch67: sync-on-shutdown.patch +# PATCH-FIX-UPSTREAM mount-efivars.patch fcrozat@suse.com -- mount efivars if booting under UEFI +Patch68: mount-efivars.patch # udev patches # PATCH-FIX-OPENSUSE 0001-Reinstate-TIMEOUT-handling.patch @@ -151,8 +162,6 @@ # PATCH-FIX-OPENSUSE 0027-udev-fix-sg-autoload-regression.patch Patch1027: 0027-udev-fix-sg-autoload-regression.patch -# systemd patches - %description Systemd is a system and service manager, compatible with SysV and LSB init scripts for Linux. systemd provides aggressive parallelization @@ -313,6 +322,7 @@ %patch1026 -p1 %patch1027 -p1 +#systemd %patch1 -p1 %patch6 -p1 # don't apply when bootstrapping to not modify configure.in @@ -337,6 +347,12 @@ %patch60 -p1 %patch61 -p1 %patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 %build autoreconf -fiv @@ -368,8 +384,14 @@ ln -sf %{_bindir}/systemd-ask-password $RPM_BUILD_ROOT/bin/systemd-ask-password ln -sf %{_bindir}/systemctl $RPM_BUILD_ROOT/bin/systemctl ln -sf %{_prefix}/lib/systemd/systemd-udevd $RPM_BUILD_ROOT/sbin/udevd +%if ! 0%{?bootstrap} +ln -sf systemd-udevd.8 $RPM_BUILD_ROOT/%{_mandir}/man8/udevd.8 +%endif mkdir -p $RPM_BUILD_ROOT/%{_prefix}/usr/lib/firmware/updates ln -sf /lib/firmware $RPM_BUILD_ROOT/usr/lib/firmware +%if ! 0%{?bootstrap} +install -m755 -D %{S:8} $RPM_BUILD_ROOT/etc/init.d/systemd-journald +%endif install -m755 -D %{S:1060} $RPM_BUILD_ROOT/etc/init.d/boot.udev ln -s systemd-udevd.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev.service @@ -378,11 +400,6 @@ mkdir -p $RPM_BUILD_ROOT/lib/systemd/system/basic.target.wants ln -sf ../udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants -#fix manpages -%if ! 0%{?bootstrap} -sed -i -e 's,^\(\.so \)\(.*\.\)\([0-9]\),\1man\3/\2\3,g' %{buildroot}/%{_mandir}/*/* -%endif - #workaround for 716939 chmod 644 %{buildroot}%{_bindir}/systemd-analyze mkdir -p %{buildroot}%{_sysconfdir}/rpm @@ -392,7 +409,7 @@ install -m755 %{S:3} -D %{buildroot}%{_sbindir}/systemd-sysv-convert # do not install, code has been fixed, might be useful in the future -#install -m755 %{S:5} %{buildroot}/lib/systemd/system-generators +#install -m755 %{S:5} %{buildroot}/usr/lib/systemd/system-generators ln -s ../usr/lib/systemd/systemd %{buildroot}/bin/systemd ln -s ../usr/lib/systemd/systemd %{buildroot}/sbin/init ln -s ../usr/bin/systemctl %{buildroot}/sbin/reboot @@ -415,8 +432,7 @@ ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/ldconfig.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/loadmodules.service install -m644 %{S:2} %{buildroot}/%{_prefix}/lib/systemd/system/localfs.service -# need to be implemented in systemd directly -#ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service +ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/proc.service ln -s systemd-fsck-root.service %{buildroot}/%{_prefix}/lib/systemd/system/rootfsck.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/single.service @@ -442,8 +458,12 @@ %endif # legacy links -ln -s loginctl %{buildroot}%{_bindir}/systemd-loginctl -ln -s journalctl %{buildroot}%{_bindir}/systemd-journalctl +for f in loginctl journalctl ; do + ln -s $f %{buildroot}%{_bindir}/systemd-$f +%if ! 0%{?bootstrap} + ln -s $f.1 %{buildroot}%{_mandir}/man1/systemd-$f.1 +%endif +done ln -s /usr/lib/udev %{buildroot}/lib/udev # Create the /var/log/journal directory to change the volatile journal to a persistent one @@ -532,6 +552,8 @@ elif [ ! -e /lib/udev ]; then ln -s /usr/lib/udev /lib/udev fi +# Create "tape" group which is referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules +/usr/sbin/groupadd -r tape 2> /dev/null || : # kill daemon if we are not in a chroot if test -f /proc/1/exe -a -d /proc/1/root ; then if test "$(stat -Lc '%%D-%%i' /)" = "$(stat -Lc '%%D-%%i' /proc/1/root)"; then @@ -724,6 +746,10 @@ %exclude %{_mandir}/man8/telinit.8* %exclude %{_mandir}/man8/runlevel.8* %exclude %{_mandir}/man*/*udev*.[0-9]* + +# Packaged in analyze subpackage +%exclude %{_mandir}/man1/systemd-analyze.1* + %{_mandir}/man1/*.1* %{_mandir}/man3/*.3* %{_mandir}/man5/*.5* @@ -787,7 +813,11 @@ %endif %files analyze +%defattr(-,root,root) %attr(0755,root,root) /usr/bin/systemd-analyze +%if ! 0%{?bootstrap} +%{_mandir}/man1/systemd-analyze.1* +%endif %files -n %{udevpkgname} %defattr(-,root,root) @@ -878,6 +908,7 @@ %defattr(-,root,root) %dir /var/log/journal /var/log/README +/etc/init.d/systemd-journald %endif Index: systemd.changes =================================================================== --- systemd.changes (revision 311) +++ systemd.changes (revision 5) @@ -1,4 +1,35 @@ ------------------------------------------------------------------- +Tue Nov 20 09:36:43 UTC 2012 - fcrozat@suse.com + +- links more manpages for migrated tools (from Christopher + Yeleighton). +- disable boot.localnet service, ypbind service will do the right + thing now (bnc#716746) +- add xdm-display-manager.patch: pull xdm.service instead of + display-manager.service (needed until xdm initscript is migrated + to native systemd service). +- Add fix-permissions-btmp.patch: ensure btmp is owned only by root + (bnc#777405). +- Have the udev package create a tape group, as referenced by + 50-udev-default.rules and 60-persistent-storage-tape.rules + (DimStar). +- Add fix-bad-memory-access.patch: fix crash in journal rotation. +- Add fix-dbus-crash.patch: fix D-Bus caused crash. +- Add sync-on-shutdown.patch: ensure sync is done when initiating + shutdown. +- Add mount-efivars.patch: mount efivars if booting on UEFI. + + +------------------------------------------------------------------- +Thu Nov 15 14:31:28 UTC 2012 - fcrozat@suse.com + +- Ship a empty systemd-journald initscript in systemd-logger to + stop insserv to complain about missing syslog dependency. +- Update + 0001-service-Fix-dependencies-added-when-parsing-insserv..patch + with bug fixes from Debian. + +------------------------------------------------------------------- Wed Nov 14 17:36:05 UTC 2012 - fcrozat@suse.com - /var/log/journal is now only provided by systemd-logger (journal Index: systemd.spec =================================================================== --- systemd.spec (revision 311) +++ systemd.spec (revision 5) @@ -97,6 +97,7 @@ Source5: systemd-insserv_conf Source6: baselibs.conf Source7: libgcrypt.m4 +Source8: systemd-journald.init Source1060: boot.udev Source1061: write_dev_root_rule @@ -123,6 +124,8 @@ Patch56: support-suse-clock-sysconfig.patch Patch59: fix-enable-disable-boot-initscript.patch Patch60: var-run-lock.patch +Patch63: xdm-display-manager.patch +Patch64: fix-permissions-btmp.patch # Upstream First - Policy: # Never add any patches to this package without the upstream commit id @@ -132,6 +135,14 @@ Patch61: fix-logind-pty-seat.patch # PATCH-FIX-UPSTREAM fix-build-glibc217.patch fcrozat@suse.com -- fix build with latest glibc Patch62: fix-build-glibc217.patch +# PATCH-FIX-UPSTREAM fix-bad-memory-access.patch fcrozat@suse.com -- fix bad memory access +Patch65: fix-bad-memory-access.patch +# PATCH-FIX-UPSTREAM fix-dbus-crash.patch fcrozat@suse.com -- fix D-Bus caused crash +Patch66: fix-dbus-crash.patch +# PATCH-FIX-UPSTREAM sync-on-shutdown.patch fcrozat@suse.com -- Sync on shutdown +Patch67: sync-on-shutdown.patch +# PATCH-FIX-UPSTREAM mount-efivars.patch fcrozat@suse.com -- mount efivars if booting under UEFI +Patch68: mount-efivars.patch # udev patches # PATCH-FIX-OPENSUSE 0001-Reinstate-TIMEOUT-handling.patch @@ -146,8 +157,6 @@ # PATCH-FIX-OPENSUSE 0027-udev-fix-sg-autoload-regression.patch Patch1027: 0027-udev-fix-sg-autoload-regression.patch -# systemd patches - %description Systemd is a system and service manager, compatible with SysV and LSB init scripts for Linux. systemd provides aggressive parallelization @@ -308,6 +317,7 @@ %patch1026 -p1 %patch1027 -p1 +#systemd %patch1 -p1 %patch6 -p1 # don't apply when bootstrapping to not modify configure.in @@ -332,6 +342,12 @@ %patch60 -p1 %patch61 -p1 %patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 %build autoreconf -fiv @@ -363,8 +379,14 @@ ln -sf %{_bindir}/systemd-ask-password $RPM_BUILD_ROOT/bin/systemd-ask-password ln -sf %{_bindir}/systemctl $RPM_BUILD_ROOT/bin/systemctl ln -sf %{_prefix}/lib/systemd/systemd-udevd $RPM_BUILD_ROOT/sbin/udevd +%if ! 0%{?bootstrap} +ln -sf systemd-udevd.8 $RPM_BUILD_ROOT/%{_mandir}/man8/udevd.8 +%endif mkdir -p $RPM_BUILD_ROOT/%{_prefix}/usr/lib/firmware/updates ln -sf /lib/firmware $RPM_BUILD_ROOT/usr/lib/firmware +%if ! 0%{?bootstrap} +install -m755 -D %{S:8} $RPM_BUILD_ROOT/etc/init.d/systemd-journald +%endif install -m755 -D %{S:1060} $RPM_BUILD_ROOT/etc/init.d/boot.udev ln -s systemd-udevd.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev.service @@ -373,11 +395,6 @@ mkdir -p $RPM_BUILD_ROOT/lib/systemd/system/basic.target.wants ln -sf ../udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants -#fix manpages -%if ! 0%{?bootstrap} -sed -i -e 's,^\(\.so \)\(.*\.\)\([0-9]\),\1man\3/\2\3,g' %{buildroot}/%{_mandir}/*/* -%endif - #workaround for 716939 chmod 644 %{buildroot}%{_bindir}/systemd-analyze mkdir -p %{buildroot}%{_sysconfdir}/rpm @@ -387,7 +404,7 @@ install -m755 %{S:3} -D %{buildroot}%{_sbindir}/systemd-sysv-convert # do not install, code has been fixed, might be useful in the future -#install -m755 %{S:5} %{buildroot}/lib/systemd/system-generators +#install -m755 %{S:5} %{buildroot}/usr/lib/systemd/system-generators ln -s ../usr/lib/systemd/systemd %{buildroot}/bin/systemd ln -s ../usr/lib/systemd/systemd %{buildroot}/sbin/init ln -s ../usr/bin/systemctl %{buildroot}/sbin/reboot @@ -410,8 +427,7 @@ ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/ldconfig.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/loadmodules.service install -m644 %{S:2} %{buildroot}/%{_prefix}/lib/systemd/system/localfs.service -# need to be implemented in systemd directly -#ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service +ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/proc.service ln -s systemd-fsck-root.service %{buildroot}/%{_prefix}/lib/systemd/system/rootfsck.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/single.service @@ -437,8 +453,12 @@ %endif # legacy links -ln -s loginctl %{buildroot}%{_bindir}/systemd-loginctl -ln -s journalctl %{buildroot}%{_bindir}/systemd-journalctl +for f in loginctl journalctl ; do + ln -s $f %{buildroot}%{_bindir}/systemd-$f +%if ! 0%{?bootstrap} + ln -s $f.1 %{buildroot}%{_mandir}/man1/systemd-$f.1 +%endif +done ln -s /usr/lib/udev %{buildroot}/lib/udev # Create the /var/log/journal directory to change the volatile journal to a persistent one @@ -527,6 +547,8 @@ elif [ ! -e /lib/udev ]; then ln -s /usr/lib/udev /lib/udev fi +# Create "tape" group which is referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules +/usr/sbin/groupadd -r tape 2> /dev/null || : # kill daemon if we are not in a chroot if test -f /proc/1/exe -a -d /proc/1/root ; then if test "$(stat -Lc '%%D-%%i' /)" = "$(stat -Lc '%%D-%%i' /proc/1/root)"; then @@ -719,6 +741,10 @@ %exclude %{_mandir}/man8/telinit.8* %exclude %{_mandir}/man8/runlevel.8* %exclude %{_mandir}/man*/*udev*.[0-9]* + +# Packaged in analyze subpackage +%exclude %{_mandir}/man1/systemd-analyze.1* + %{_mandir}/man1/*.1* %{_mandir}/man3/*.3* %{_mandir}/man5/*.5* @@ -782,7 +808,11 @@ %endif %files analyze +%defattr(-,root,root) %attr(0755,root,root) /usr/bin/systemd-analyze +%if ! 0%{?bootstrap} +%{_mandir}/man1/systemd-analyze.1* +%endif %files -n %{udevpkgname} %defattr(-,root,root) @@ -873,6 +903,7 @@ %defattr(-,root,root) %dir /var/log/journal /var/log/README +/etc/init.d/systemd-journald %endif Index: fix-bad-memory-access.patch =================================================================== --- fix-bad-memory-access.patch (added) +++ fix-bad-memory-access.patch (revision 5) @@ -0,0 +1,23 @@ +From 7d73c1343be02a59b17de0cd34375deeb815d89c Mon Sep 17 00:00:00 2001 +From: Lennart Poettering <lennart@poettering.net> +Date: Tue, 20 Nov 2012 00:19:27 +0100 +Subject: [PATCH] journald: fix bad memory access + +https://bugzilla.redhat.com/show_bug.cgi?id=875653 +--- + src/journal/journald-server.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: systemd-195/src/journal/journald.c +=================================================================== +--- systemd-195.orig/src/journal/journald.c ++++ systemd-195/src/journal/journald.c +@@ -342,7 +342,7 @@ static void server_rotate(Server *s) { + HASHMAP_FOREACH_KEY(f, k, s->user_journals, i) { + r = journal_file_rotate(&f, s->compress, s->seal); + if (r < 0) +- if (f->path) ++ if (f) + log_error("Failed to rotate %s: %s", f->path, strerror(-r)); + else + log_error("Failed to create user journal: %s", strerror(-r)); Index: fix-dbus-crash.patch =================================================================== --- fix-dbus-crash.patch (added) +++ fix-dbus-crash.patch (revision 5) @@ -0,0 +1,32 @@ +From 645a9e5a2bbb06464a3fba1a3501e9d79e5bbad8 Mon Sep 17 00:00:00 2001 +From: Eelco Dolstra <eelco.dolstra@logicblox.com> +Date: Wed, 31 Oct 2012 11:53:56 +0100 +Subject: [PATCH] dbus-manager: fix a fatal dbus abort in + bus_manager_message_handler() + +If ListUnitFiles fails, or an OOM occurs, then dbus_message_unref() +will be called twice on "reply", causing systemd to crash. So remove +the call to dbus_message_unref(); it is unnecessary because of +the cleanup attribute on "reply". + +[zj: modified to leave one dbus_message_unref() alone, per Colin +Walters' comment.] +--- + src/core/dbus-manager.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c +index 2010241..3cf3e90 100644 +--- a/src/core/dbus-manager.c ++++ b/src/core/dbus-manager.c +@@ -1436,7 +1436,6 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, + r = unit_file_get_list(m->running_as == SYSTEMD_SYSTEM ? UNIT_FILE_SYSTEM : UNIT_FILE_USER, NULL, h); + if (r < 0) { + unit_file_list_free(h); +- dbus_message_unref(reply); + return bus_send_error_reply(connection, message, NULL, r); + } + +-- +1.7.10.4 + Index: fix-permissions-btmp.patch =================================================================== --- fix-permissions-btmp.patch (added) +++ fix-permissions-btmp.patch (revision 5) @@ -0,0 +1,13 @@ +Index: systemd-44/tmpfiles.d/systemd.conf +=================================================================== +--- systemd-44.orig/tmpfiles.d/systemd.conf ++++ systemd-44/tmpfiles.d/systemd.conf +@@ -11,7 +11,7 @@ d /run/user 0755 root root 10d + F /run/utmp 0664 root utmp - + + f /var/log/wtmp 0664 root utmp - +-f /var/log/btmp 0600 root utmp - ++f /var/log/btmp 0600 root root - + + d /var/cache/man - - - 30d + Index: mount-efivars.patch =================================================================== --- mount-efivars.patch (added) +++ mount-efivars.patch (revision 5) @@ -0,0 +1,336 @@ +From f271dd97622b656c1c013d181ea615c671cc2438 Mon Sep 17 00:00:00 2001 +From: "Lee, Chun-Yi" <joeyli.kernel@gmail.com> +Date: Sat, 27 Oct 2012 11:23:22 +0800 +Subject: [PATCH] systemd: mount the EFI variable filesystem +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Add efivarfs to the mount_table in mount-setup.c, so the EFI variable +filesystem will be mounted when systemd executed. + +The EFI variable filesystem will merge in v3.7 or v3.8 linux kernel. + +Cc: Kay Sievers <kay@vrfy.org> +Cc: Lennart Poettering <lennart@poettering.net> +Cc: Mantas Mikulėnas <grawity@gmail.com> +Cc: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> +Cc: Matt Fleming <matt.fleming@intel.com> +Cc: Jeremy Kerr <jeremy.kerr@canonical.com> +Cc: Matthew Garrett <mjg@redhat.com> +Signed-off-by: Lee, Chun-Yi <jlee@suse.com> +--- + src/core/kmod-setup.c | 7 ++++--- + src/core/mount-setup.c | 1 + + 2 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index cc2a2d9..ce8a8e7 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -31,9 +31,10 @@ + #include "kmod-setup.h" + + static const char * const kmod_table[] = { +- "autofs4", "/sys/class/misc/autofs", +- "ipv6", "/sys/module/ipv6", +- "unix", "/proc/net/unix" ++ "autofs4", "/sys/class/misc/autofs", ++ "ipv6", "/sys/module/ipv6", ++ "efivarfs", "/sys/firmware/efi/efivars", ++ "unix", "/proc/net/unix" + }; + + #pragma GCC diagnostic push +diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c +index 0fd112f..9894c7f 100644 +--- a/src/core/mount-setup.c ++++ b/src/core/mount-setup.c +@@ -66,6 +66,7 @@ static const MountPoint mount_table[] = { + { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, + { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, true, true }, + { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, ++ { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, + { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, + { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, false, true }, + { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +-- +1.7.10.4 + +From c1e5704657315b436c0409e8172c1fcb76adccad Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:06:27 +0100 +Subject: [PATCH] shared: add is_efiboot() + +--- + src/shared/util.c | 4 ++++ + src/shared/util.h | 2 ++ + 2 files changed, 6 insertions(+) + +diff --git a/src/shared/util.c b/src/shared/util.c +index 2a8afae..9983695 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -77,6 +77,10 @@ char **saved_argv = NULL; + static volatile unsigned cached_columns = 0; + static volatile unsigned cached_lines = 0; + ++bool is_efiboot(void) { ++ return access("/sys/firmware/efi", F_OK) >= 0; ++} ++ + size_t page_size(void) { + static __thread size_t pgsz = 0; + long r; +diff --git a/src/shared/util.h b/src/shared/util.h +index e387b12..99972cc 100644 +--- a/src/shared/util.h ++++ b/src/shared/util.h +@@ -90,6 +90,8 @@ union dirent_storage { + #define ANSI_HIGHLIGHT_YELLOW_ON "\x1B[1;33m" + #define ANSI_HIGHLIGHT_OFF "\x1B[0m" + ++bool is_efiboot(void); ++ + usec_t now(clockid_t clock); + + dual_timestamp* dual_timestamp_get(dual_timestamp *ts); +-- +1.7.10.4 + +From 1022373284b7562431fb0a6dba45db8af089a0e3 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:54:19 +0100 +Subject: [PATCH] kmod-setup: add conditional module loading callback + +--- + src/core/kmod-setup.c | 32 ++++++++++++++++++++------------ + 1 file changed, 20 insertions(+), 12 deletions(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index ce8a8e7..383a6b2 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -30,11 +30,17 @@ + + #include "kmod-setup.h" + +-static const char * const kmod_table[] = { +- "autofs4", "/sys/class/misc/autofs", +- "ipv6", "/sys/module/ipv6", +- "efivarfs", "/sys/firmware/efi/efivars", +- "unix", "/proc/net/unix" ++typedef struct Kmodule { ++ const char *name; ++ const char *directory; ++ bool (*condition_fn)(void); ++} KModule; ++ ++static const KModule kmod_table[] = { ++ { "autofs4", "/sys/class/misc/autofs", NULL } , ++ { "ipv6", "/sys/module/ipv6", NULL }, ++ { "efivarfs", "/sys/firmware/efi/efivars", NULL }, ++ { "unix", "/proc/net/unix", NULL } , + }; + + #pragma GCC diagnostic push +@@ -42,7 +48,8 @@ static const char * const kmod_table[] = { + static void systemd_kmod_log(void *data, int priority, const char *file, int line, + const char *fn, const char *format, va_list args) + { +- log_metav(priority, file, line, fn, format, args); ++ /* library logging is enabled at debug only */ ++ log_metav(LOG_DEBUG, file, line, fn, format, args); + } + #pragma GCC diagnostic pop + +@@ -53,13 +60,15 @@ int kmod_setup(void) { + int err; + + for (i = 0; i < ELEMENTSOF(kmod_table); i += 2) { ++ if (kmod_table[i].condition_fn && !kmod_table[i].condition_fn()) ++ continue; + +- if (access(kmod_table[i+1], F_OK) >= 0) ++ if (access(kmod_table[i].directory, F_OK) >= 0) + continue; + + log_debug("Your kernel apparently lacks built-in %s support. Might be a good idea to compile it in. " + "We'll now try to work around this by loading the module...", +- kmod_table[i]); ++ kmod_table[i].name); + + if (!ctx) { + ctx = kmod_new(NULL, NULL); +@@ -69,13 +78,12 @@ int kmod_setup(void) { + } + + kmod_set_log_fn(ctx, systemd_kmod_log, NULL); +- + kmod_load_resources(ctx); + } + +- err = kmod_module_new_from_name(ctx, kmod_table[i], &mod); ++ err = kmod_module_new_from_name(ctx, kmod_table[i].name, &mod); + if (err < 0) { +- log_error("Failed to load module '%s'", kmod_table[i]); ++ log_error("Failed to lookup module '%s'", kmod_table[i].name); + continue; + } + +@@ -85,7 +93,7 @@ int kmod_setup(void) { + else if (err == KMOD_PROBE_APPLY_BLACKLIST) + log_info("Module '%s' is blacklisted", kmod_module_get_name(mod)); + else +- log_error("Failed to insert '%s'", kmod_module_get_name(mod)); ++ log_error("Failed to insert module '%s'", kmod_module_get_name(mod)); + + kmod_module_unref(mod); + } +-- +1.7.10.4 + +From 3dfb265083347cb5700dc38f7cc0f479f378e6e9 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:55:23 +0100 +Subject: [PATCH] kmod-setup: mounting efivarfs, *after* we tried to mount it, + is pointless + +The mount() system call, which we issue before loading modules, will trigger +a modprobe by the kernel and block until it returns. Trying to load it again +later, will have exactly the same result as the first time. +--- + src/core/kmod-setup.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index 383a6b2..20ab232 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -39,7 +39,6 @@ typedef struct Kmodule { + static const KModule kmod_table[] = { + { "autofs4", "/sys/class/misc/autofs", NULL } , + { "ipv6", "/sys/module/ipv6", NULL }, +- { "efivarfs", "/sys/firmware/efi/efivars", NULL }, + { "unix", "/proc/net/unix", NULL } , + }; + +-- +1.7.10.4 + +From 6aa220e019f9dffd96590b06b68f937985204109 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 17:03:48 +0100 +Subject: [PATCH] mount-setup: try mounting 'efivarfs' only if the system + bootet with EFI + +--- + TODO | 3 --- + src/core/mount-setup.c | 50 ++++++++++++++++++++++++++++++++---------------- + 2 files changed, 34 insertions(+), 19 deletions(-) + +diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c +index 9894c7f..98614d0 100644 +--- a/src/core/mount-setup.c ++++ b/src/core/mount-setup.c +@@ -46,14 +46,20 @@ + #define TTY_GID 5 + #endif + ++typedef enum MountMode { ++ MNT_NONE = 0, ++ MNT_FATAL = 1 << 0, ++ MNT_IN_CONTAINER = 1 << 1, ++} MountMode; ++ + typedef struct MountPoint { + const char *what; + const char *where; + const char *type; + const char *options; + unsigned long flags; +- bool fatal; +- bool in_container; ++ bool (*condition_fn)(void); ++ MountMode mode; + } MountPoint; + + /* The first three entries we might need before SELinux is up. The +@@ -62,16 +68,26 @@ typedef struct MountPoint { + #define N_EARLY_MOUNT 4 + + static const MountPoint mount_table[] = { +- { "proc", "/proc", "proc", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, +- { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, +- { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, true, true }, +- { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, +- { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, +- { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +- { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, false, true }, +- { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +- { "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME, false, true }, +- { "cgroup", "/sys/fs/cgroup/systemd", "cgroup", "none,name=systemd", MS_NOSUID|MS_NOEXEC|MS_NODEV, false, true }, ++ { "proc", "/proc", "proc", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_NONE }, ++ { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ is_efiboot, MNT_NONE }, ++ { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, ++ NULL, MNT_IN_CONTAINER }, ++ { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_IN_CONTAINER }, ++ { "cgroup", "/sys/fs/cgroup/systemd", "cgroup", "none,name=systemd", MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_IN_CONTAINER }, + }; + + /* These are API file systems that might be mounted by other software, +@@ -119,6 +135,9 @@ static int mount_one(const MountPoint *p, bool relabel) { + + assert(p); + ++ if (p->condition_fn && !p->condition_fn()) ++ return 0; ++ + /* Relabel first, just in case */ + if (relabel) + label_fix(p->where, true, true); +@@ -131,7 +150,7 @@ static int mount_one(const MountPoint *p, bool relabel) { + return 0; + + /* Skip securityfs in a container */ +- if (!p->in_container && detect_container(NULL) > 0) ++ if (!(p->mode & MNT_IN_CONTAINER) && detect_container(NULL) > 0) + return 0; + + /* The access mode here doesn't really matter too much, since +@@ -149,8 +168,8 @@ static int mount_one(const MountPoint *p, bool relabel) { + p->type, + p->flags, + p->options) < 0) { +- log_full(p->fatal ? LOG_ERR : LOG_DEBUG, "Failed to mount %s: %s", p->where, strerror(errno)); +- return p->fatal ? -errno : 0; ++ log_full((p->mode & MNT_FATAL) ? LOG_ERR : LOG_DEBUG, "Failed to mount %s: %s", p->where, strerror(errno)); ++ return (p->mode & MNT_FATAL) ? -errno : 0; + } + + /* Relabel again, since we now mounted something fresh here */ +@@ -289,7 +308,6 @@ int mount_cgroup_controllers(char ***join_controllers) { + p.type = "cgroup"; + p.options = options; + p.flags = MS_NOSUID|MS_NOEXEC|MS_NODEV; +- p.fatal = false; + + r = mount_one(&p, true); + free(controller); +-- +1.7.10.4 + Index: sync-on-shutdown.patch =================================================================== --- sync-on-shutdown.patch (added) +++ sync-on-shutdown.patch (revision 5) @@ -0,0 +1,49 @@ +From 0049f05a8bb82c3e084bacc5945596761d706c55 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering <lennart@poettering.net> +Date: Fri, 16 Nov 2012 01:30:29 +0100 +Subject: [PATCH] shutdown: readd explicit sync() when shutting down + +As it turns out reboot() doesn't actually imply a file system sync, but +only a disk sync. Accordingly, readd explicit sync() invocations +immediately before we invoke reboot(). + +This is much less dramatic than it might sounds as we umount all +disks/read-only remount them anyway before going down. +--- + src/core/service.c | 1 + + src/core/shutdown.c | 7 +++++++ + 2 files changed, 8 insertions(+) + +diff --git a/src/core/service.c b/src/core/service.c +index cf08485..df72aba 100644 +--- a/src/core/service.c ++++ b/src/core/service.c +@@ -2485,6 +2485,7 @@ static int service_start_limit_test(Service *s) { + + case SERVICE_START_LIMIT_REBOOT_IMMEDIATE: + log_warning("%s start request repeated too quickly, rebooting immediately.", UNIT(s)->id); ++ sync(); + reboot(RB_AUTOBOOT); + break; + +diff --git a/src/core/shutdown.c b/src/core/shutdown.c +index cc8c57b..b59aef1 100644 +--- a/src/core/shutdown.c ++++ b/src/core/shutdown.c +@@ -273,6 +273,13 @@ int main(int argc, char *argv[]) { + } + } + ++ /* The kernel will automaticall flush ATA disks and suchlike ++ * on reboot(), but the file systems need to be synce'd ++ * explicitly in advance. So let's do this here, but not ++ * needlessly slow down containers. */ ++ if (!in_container) ++ sync(); ++ + if (cmd == LINUX_REBOOT_CMD_KEXEC) { + + if (!in_container) { +-- +1.7.10.4 + Index: systemd-journald.init =================================================================== --- systemd-journald.init (added) +++ systemd-journald.init (revision 5) @@ -0,0 +1,33 @@ +#! /bin/sh +# +# Copyright (c) 2001-2002 SuSE Linux AG, Nuernberg, Germany. +# All rights reserved. +# +# /etc/init.d/systemd-journald +# +### BEGIN INIT INFO +# Provides: syslog +# Required-Start: $null +# Required-Stop: $null +# Default-Start: 2 3 5 +# Default-Stop: +# Short-Description: compat wrapper for journald +# Description: compat wrapper for journald +### END INIT INFO + +. /etc/rc.status + +rc_reset + +case "$1" in + start|stop|restart) + rc_failed 3 + rc_status -v + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 + ;; +esac + +rc_exit Index: xdm-display-manager.patch =================================================================== --- xdm-display-manager.patch (added) +++ xdm-display-manager.patch (revision 5) @@ -0,0 +1,13 @@ +Index: systemd-195/units/graphical.target +=================================================================== +--- systemd-195.orig/units/graphical.target ++++ systemd-195/units/graphical.target +@@ -11,7 +11,7 @@ Documentation=man:systemd.special(7) + Requires=multi-user.target + After=multi-user.target + Conflicts=rescue.target +-Wants=display-manager.service ++Wants=xdm.service + AllowIsolate=yes + + [Install] OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=312
2012-11-20 13:10:12 +01:00
# Create "tape" group which is referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules
/usr/sbin/groupadd -r tape 2> /dev/null || :
# kill daemon if we are not in a chroot
if test -f /proc/1/exe -a -d /proc/1/root ; then
if test "$(stat -Lc '%%D-%%i' /)" = "$(stat -Lc '%%D-%%i' /proc/1/root)"; then
systemctl stop systemd-udevd-control.socket systemd-udevd-kernel.socket systemd-udevd.service udev.service udev-control.socket udev-kernel.socket >/dev/null 2>&1 || :
udevadm control --exit 2>&1 || :
fi
fi
%post -n %{udevpkgname}
%{fillup_and_insserv -Y boot.udev}
# add KERNEL name match to existing persistent net rules
sed -ri '/KERNEL/ ! { s/NAME="(eth|wlan|ath)([0-9]+)"/KERNEL=="\1*", NAME="\1\2"/}' \
/etc/udev/rules.d/70-persistent-net.rules >/dev/null 2>&1 || :
# cleanup old stuff
rm -f /etc/sysconfig/udev
rm -f /etc/udev/rules.d/20-cdrom.rules
rm -f /etc/udev/rules.d/55-cdrom.rules
rm -f /etc/udev/rules.d/65-cdrom.rules
systemctl daemon-reload >/dev/null 2>&1 || :
# start daemon if we are not in a chroot
if test -f /proc/1/exe -a -d /proc/1/root; then
if test "$(stat -Lc '%%D-%%i' /)" = "$(stat -Lc '%%D-%%i' /proc/1/root)"; then
if ! systemctl start systemd-udevd.service >/dev/null 2>&1; then
/usr/lib/systemd/systemd-udevd --daemon >/dev/null 2>&1 || :
fi
fi
fi
if [ "${YAST_IS_RUNNING}" != "instsys" ]; then
if [ -e /var/lib/no_initrd_recreation_by_suspend ]; then
echo "Skipping recreation of existing initial ramdisks, due"
echo "to presence of /var/lib/no_initrd_recreation_by_suspend"
elif [ -x /sbin/mkinitrd ]; then
[ -x /sbin/mkinitrd_setup ] && /sbin/mkinitrd_setup
/sbin/mkinitrd || :
fi
fi
%postun -n %{udevpkgname}
%insserv_cleanup
systemctl daemon-reload >/dev/null 2>&1 || :
if [ "${YAST_IS_RUNNING}" != "instsys" ]; then
if [ -e /var/lib/no_initrd_recreation_by_suspend ]; then
echo "Skipping recreation of existing initial ramdisks, due"
echo "to presence of /var/lib/no_initrd_recreation_by_suspend"
elif [ -x /sbin/mkinitrd ]; then
[ -x /sbin/mkinitrd_setup ] && /sbin/mkinitrd_setup
/sbin/mkinitrd || :
fi
fi
%post -n lib%{udevpkgname}%{udev_major} -p /sbin/ldconfig
%postun -n lib%{udevpkgname}%{udev_major} -p /sbin/ldconfig
%if ! 0%{?bootstrap}
%post -n libgudev-1_0-0 -p /sbin/ldconfig
%postun -n libgudev-1_0-0 -p /sbin/ldconfig
%endif
%clean
# rm -rf %{buildroot}
%files
%defattr(-,root,root)
/bin/systemd
/bin/systemd-ask-password
/bin/systemctl
%{_bindir}/hostnamectl
%{_bindir}/localectl
%{_bindir}/systemctl
%{_bindir}/systemd-coredumpctl
%{_bindir}/systemd-delta
%{_bindir}/systemd-notify
%{_bindir}/systemd-journalctl
%{_bindir}/journalctl
%{_bindir}/systemd-ask-password
%{_bindir}/loginctl
%{_bindir}/systemd-loginctl
%{_bindir}/systemd-inhibit
%{_bindir}/systemd-tty-ask-password-agent
%{_bindir}/systemd-tmpfiles
%{_bindir}/systemd-machine-id-setup
%{_bindir}/systemd-nspawn
%{_bindir}/systemd-stdio-bridge
%{_bindir}/systemd-detect-virt
%{_bindir}/timedatectl
%{_sbindir}/systemd-sysv-convert
%{_libdir}/libsystemd-daemon.so.*
%{_libdir}/libsystemd-login.so.*
%{_libdir}/libsystemd-id128.so.*
%{_libdir}/libsystemd-journal.so.*
%{_bindir}/systemd-cgls
- Update to version 39: + New systemd-cgtop tool to show control groups by their resource usage. + Linking against libacl for ACLs is optional again. + If a group "adm" exists, journal files are automatically owned by them, thus allow members of this group full access to the system journal as well as all user journals. + The journal now stores the SELinux context of the logging client for all entries. + Add C++ inclusion guards to all public headers. + New output mode "cat" in the journal to print only text messages, without any meta data like date or time. + Include tiny X server wrapper as a temporary stop-gap to teach XOrg udev display enumeration (until XOrg supports udev hotplugging for display devices). + Add new systemd-cat tool for executing arbitrary programs with STDERR/STDOUT connected to the journal. Can also act as BSD logger replacement, and does so by default. + Optionally store all locally generated coredumps in the journal along with meta data. + systemd-tmpfiles learnt four new commands: n, L, c, b, for writing short strings to files (for usage for /sys), and for creating symlinks, character and block device nodes. + New unit file option ControlGroupPersistent= to make cgroups persistent. + Support multiple local RTCs in a sane way. + No longer monopolize IO when replaying readahead data on rotating disks. + Don't show kernel threads in systemd-cgls anymore, unless requested with new -k switch. OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=234
2012-01-25 15:08:16 +01:00
%{_bindir}/systemd-cgtop
%{_bindir}/systemd-cat
%dir %{_prefix}/lib/systemd
%dir %{_prefix}/lib/systemd/user
%dir %{_prefix}/lib/systemd/system
%exclude %{_prefix}/lib/systemd/system/systemd-udev*.*
%exclude %{_prefix}/lib/systemd/system/udev.service
%exclude %{_prefix}/lib/systemd/system/udev-root-symlink.service
%exclude %{_prefix}/lib/systemd/system/*.target.wants/systemd-udev*.*
%exclude %{_prefix}/lib/systemd/system/basic.target.wants/udev-root-symlink.service
%{_prefix}/lib/systemd/system/*.automount
%{_prefix}/lib/systemd/system/*.service
%{_prefix}/lib/systemd/system/*.target
%{_prefix}/lib/systemd/system/*.mount
%{_prefix}/lib/systemd/system/*.timer
%{_prefix}/lib/systemd/system/*.socket
%{_prefix}/lib/systemd/system/*.wants
%{_prefix}/lib/systemd/system/*.path
%{_prefix}/lib/systemd/user/*.target
%{_prefix}/lib/systemd/user/*.service
%exclude %{_prefix}/lib/systemd/systemd-udevd
%{_prefix}/lib/systemd/systemd-*
%{_prefix}/lib/systemd/systemd
%dir %{_prefix}/lib/systemd/system-shutdown
%dir %{_prefix}/lib/systemd/system-preset
%dir %{_prefix}/lib/systemd/user-preset
%dir %{_prefix}/lib/systemd/system-generators
%dir %{_prefix}/lib/systemd/user-generators
%dir %{_prefix}/lib/systemd/ntp-units.d/
%dir %{_prefix}/lib/systemd/system-shutdown/
%dir %{_prefix}/lib/systemd/system-sleep/
%dir %{_prefix}/lib/systemd/system/default.target.wants
%dir %{_prefix}/lib/systemd/system/dbus.target.wants
%dir %{_prefix}/lib/systemd/system/syslog.target.wants
%if ! 0%{?bootstrap}
%{_prefix}/lib/systemd/system-generators/systemd-cryptsetup-generator
%endif
%{_prefix}/lib/systemd/system-generators/systemd-getty-generator
%{_prefix}/lib/systemd/system-generators/systemd-rc-local-generator
%{_prefix}/lib/systemd/system-generators/systemd-fstab-generator
%{_prefix}/lib/systemd/system-generators/systemd-system-update-generator
/%{_lib}/security/pam_systemd.so
%dir %{_libexecdir}/modules-load.d
%dir %{_sysconfdir}/modules-load.d
%dir %{_libexecdir}/tmpfiles.d
%dir %{_sysconfdir}/tmpfiles.d
%{_libexecdir}/tmpfiles.d/*.conf
%dir %{_libexecdir}/binfmt.d
%dir %{_sysconfdir}/binfmt.d
%dir %{_libexecdir}/sysctl.d
%dir %{_sysconfdir}/sysctl.d
%dir %{_sysconfdir}/systemd
%dir %{_sysconfdir}/systemd/system
%dir %{_sysconfdir}/systemd/user
%dir %{_sysconfdir}/xdg/systemd
%dir %{_sysconfdir}/xdg/systemd/user
%config(noreplace) %{_sysconfdir}/systemd/system.conf
%config(noreplace) %{_sysconfdir}/systemd/logind.conf
%config(noreplace) %{_sysconfdir}/systemd/journald.conf
%config(noreplace) %{_sysconfdir}/systemd/user.conf
%config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.freedesktop.locale1.conf
%config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.freedesktop.login1.conf
%config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.freedesktop.systemd1.conf
%config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.freedesktop.hostname1.conf
%config(noreplace) %{_sysconfdir}/dbus-1/system.d/org.freedesktop.timedate1.conf
%{_datadir}/dbus-1/interfaces/org.freedesktop.hostname1.xml
%{_datadir}/dbus-1/interfaces/org.freedesktop.locale1.xml
%{_datadir}/dbus-1/interfaces/org.freedesktop.systemd1.*.xml
%{_datadir}/dbus-1/interfaces/org.freedesktop.timedate1.xml
%{_datadir}/dbus-1/services/org.freedesktop.systemd1.service
%{_datadir}/dbus-1/system-services/org.freedesktop.systemd1.service
%{_datadir}/dbus-1/system-services/org.freedesktop.locale1.service
%{_datadir}/dbus-1/system-services/org.freedesktop.login1.service
%{_datadir}/dbus-1/system-services/org.freedesktop.hostname1.service
%{_datadir}/dbus-1/system-services/org.freedesktop.timedate1.service
%dir %{_datadir}/polkit-1
%dir %{_datadir}/polkit-1/actions
%{_datadir}/polkit-1/actions/org.freedesktop.systemd1.policy
%{_datadir}/polkit-1/actions/org.freedesktop.hostname1.policy
%{_datadir}/polkit-1/actions/org.freedesktop.locale1.policy
%{_datadir}/polkit-1/actions/org.freedesktop.timedate1.policy
%{_datadir}/polkit-1/actions/org.freedesktop.login1.policy
%{_datadir}/systemd
%if ! 0%{?bootstrap}
# Packaged in sysvinit subpackage
%exclude %{_mandir}/man1/init.1*
%exclude %{_mandir}/man8/halt.8*
%exclude %{_mandir}/man8/reboot.8*
%exclude %{_mandir}/man8/shutdown.8*
%exclude %{_mandir}/man8/poweroff.8*
%exclude %{_mandir}/man8/telinit.8*
%exclude %{_mandir}/man8/runlevel.8*
%exclude %{_mandir}/man*/*udev*.[0-9]*
- links more manpages for migrated tools (from Christopher Yeleighton). - disable boot.localnet service, ypbind service will do the right thing now (bnc#716746) - add xdm-display-manager.patch: pull xdm.service instead of display-manager.service (needed until xdm initscript is migrated to native systemd service). - Add fix-permissions-btmp.patch: ensure btmp is owned only by root (bnc#777405). - Have the udev package create a tape group, as referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules (DimStar). - Add fix-bad-memory-access.patch: fix crash in journal rotation. - Add fix-dbus-crash.patch: fix D-Bus caused crash. - Add sync-on-shutdown.patch: ensure sync is done when initiating shutdown. - Add mount-efivars.patch: mount efivars if booting on UEFI. - Ship a empty systemd-journald initscript in systemd-logger to stop insserv to complain about missing syslog dependency. - Update 0001-service-Fix-dependencies-added-when-parsing-insserv..patch with bug fixes from Debian. old: Base:System/systemd new: home:fcrozat:branches:Base:System/systemd rev NoneIndex: 0001-service-Fix-dependencies-added-when-parsing-insserv..patch =================================================================== --- 0001-service-Fix-dependencies-added-when-parsing-insserv..patch (revision 311) +++ 0001-service-Fix-dependencies-added-when-parsing-insserv..patch (revision 5) @@ -1,17 +1,35 @@ -From 6620bceb7233a830be3635a4f7a7dc75c13a9c8e Mon Sep 17 00:00:00 2001 -From: Frederic Crozat <fcrozat@suse.com> -Date: Fri, 30 Sep 2011 14:12:45 +0200 -Subject: [PATCH] service: Fix dependencies added when parsing insserv.conf - ---- - src/service.c | 16 +++++++++------- - 1 files changed, 9 insertions(+), 7 deletions(-) - -Index: systemd-41/src/service.c +Index: systemd-195/src/core/service.c =================================================================== ---- systemd-41.orig/src/core/service.c -+++ systemd-41/src/core/service.c -@@ -3210,23 +3210,30 @@ static void sysv_facility_in_insserv_con +--- systemd-195.orig/src/core/service.c ++++ systemd-195/src/core/service.c +@@ -3391,12 +3391,13 @@ static void service_notify_message(Unit + + #ifdef HAVE_SYSV_COMPAT + +-#ifdef TARGET_SUSE +-static void sysv_facility_in_insserv_conf(Manager *mgr) { +- FILE *f=NULL; ++#if defined(TARGET_SUSE) || defined(TARGET_DEBIAN) ++static void sysv_parse_insserv_conf(Manager *mgr, const char* filename) { ++ FILE *f = NULL; + int r; + +- if (!(f = fopen("/etc/insserv.conf", "re"))) { ++ if (!(f = fopen(filename, "re"))) { ++ log_error("Failed to open file %s", filename); + r = errno == ENOENT ? 0 : -errno; + goto finish; + } +@@ -3410,7 +3411,7 @@ static void sysv_facility_in_insserv_con + break; + + r = -errno; +- log_error("Failed to read configuration file '/etc/insserv.conf': %s", strerror(-r)); ++ log_error("Failed to read configuration file '%s': %s", filename, strerror(-r)); + goto finish; + } + +@@ -3425,23 +3426,30 @@ static void sysv_facility_in_insserv_con Unit *u; if (sysv_translate_facility(parsed[0], NULL, &facility) < 0) continue; @@ -29,12 +47,12 @@ STRV_FOREACH (j, parsed+1) { - if (*j[0]=='+') { - e = UNIT_WANTS; -+ if (*j[0]=='+') ++ if (*j[0] == '+') name = *j+1; - } - else { - e = UNIT_REQUIRES; -+ else ++ else name = *j; - } + if (streq(name, "boot.localfs") || @@ -44,9 +62,54 @@ continue; - r = unit_add_two_dependencies_by_name(u, UNIT_BEFORE, e, dep, NULL, true); -+ r = unit_add_dependency_by_name_inverse(u, UNIT_BEFORE, dep, NULL, true); -+ if (*j[0]!='+') ++ r = unit_add_two_dependencies_by_name_inverse(u, UNIT_WANTS, UNIT_BEFORE, dep, NULL, true); ++ if (*j[0] != '+') + r = unit_add_dependency_by_name(u, UNIT_REQUIRES, dep, NULL, true); free(dep); } } +@@ -3454,6 +3462,35 @@ finish: + fclose(f); + + } ++ ++static void sysv_facility_in_insserv_conf(Manager *mgr) { ++ DIR *d =NULL; ++ struct dirent *de; ++ ++#ifdef TARGET_DEBIAN ++ if (!(d = opendir("/etc/insserv.conf.d/"))) ++ if (errno != ENOENT) { ++ log_warning("opendir() failed on /etc/insserv.conf.d/ %s", strerror(errno)); ++ goto finish; ++ } ++ ++ while ((de = readdir(d))) { ++ char *path = NULL; ++ if (ignore_file(de->d_name)) ++ continue; ++ ++ path = join("/etc/insserv.conf.d/", de->d_name, NULL); ++ sysv_parse_insserv_conf(mgr, path); ++ free(path); ++ } ++finish: ++ if (d) ++ closedir(d); ++#endif ++ ++ sysv_parse_insserv_conf(mgr, "/etc/insserv.conf"); ++} ++ + #endif + + static int service_enumerate(Manager *m) { +@@ -3604,7 +3641,7 @@ static int service_enumerate(Manager *m) + + r = 0; + +-#ifdef TARGET_SUSE ++#if defined(TARGET_SUSE) || defined(TARGET_DEBIAN) + sysv_facility_in_insserv_conf (m); + #endif + Index: systemd-mini.changes =================================================================== --- systemd-mini.changes (revision 311) +++ systemd-mini.changes (revision 5) @@ -1,4 +1,35 @@ ------------------------------------------------------------------- +Tue Nov 20 09:36:43 UTC 2012 - fcrozat@suse.com + +- links more manpages for migrated tools (from Christopher + Yeleighton). +- disable boot.localnet service, ypbind service will do the right + thing now (bnc#716746) +- add xdm-display-manager.patch: pull xdm.service instead of + display-manager.service (needed until xdm initscript is migrated + to native systemd service). +- Add fix-permissions-btmp.patch: ensure btmp is owned only by root + (bnc#777405). +- Have the udev package create a tape group, as referenced by + 50-udev-default.rules and 60-persistent-storage-tape.rules + (DimStar). +- Add fix-bad-memory-access.patch: fix crash in journal rotation. +- Add fix-dbus-crash.patch: fix D-Bus caused crash. +- Add sync-on-shutdown.patch: ensure sync is done when initiating + shutdown. +- Add mount-efivars.patch: mount efivars if booting on UEFI. + + +------------------------------------------------------------------- +Thu Nov 15 14:31:28 UTC 2012 - fcrozat@suse.com + +- Ship a empty systemd-journald initscript in systemd-logger to + stop insserv to complain about missing syslog dependency. +- Update + 0001-service-Fix-dependencies-added-when-parsing-insserv..patch + with bug fixes from Debian. + +------------------------------------------------------------------- Wed Nov 14 17:36:05 UTC 2012 - fcrozat@suse.com - /var/log/journal is now only provided by systemd-logger (journal Index: systemd-mini.spec =================================================================== --- systemd-mini.spec (revision 311) +++ systemd-mini.spec (revision 5) @@ -102,6 +102,7 @@ Source5: systemd-insserv_conf Source6: baselibs.conf Source7: libgcrypt.m4 +Source8: systemd-journald.init Source1060: boot.udev Source1061: write_dev_root_rule @@ -128,6 +129,8 @@ Patch56: support-suse-clock-sysconfig.patch Patch59: fix-enable-disable-boot-initscript.patch Patch60: var-run-lock.patch +Patch63: xdm-display-manager.patch +Patch64: fix-permissions-btmp.patch # Upstream First - Policy: # Never add any patches to this package without the upstream commit id @@ -137,6 +140,14 @@ Patch61: fix-logind-pty-seat.patch # PATCH-FIX-UPSTREAM fix-build-glibc217.patch fcrozat@suse.com -- fix build with latest glibc Patch62: fix-build-glibc217.patch +# PATCH-FIX-UPSTREAM fix-bad-memory-access.patch fcrozat@suse.com -- fix bad memory access +Patch65: fix-bad-memory-access.patch +# PATCH-FIX-UPSTREAM fix-dbus-crash.patch fcrozat@suse.com -- fix D-Bus caused crash +Patch66: fix-dbus-crash.patch +# PATCH-FIX-UPSTREAM sync-on-shutdown.patch fcrozat@suse.com -- Sync on shutdown +Patch67: sync-on-shutdown.patch +# PATCH-FIX-UPSTREAM mount-efivars.patch fcrozat@suse.com -- mount efivars if booting under UEFI +Patch68: mount-efivars.patch # udev patches # PATCH-FIX-OPENSUSE 0001-Reinstate-TIMEOUT-handling.patch @@ -151,8 +162,6 @@ # PATCH-FIX-OPENSUSE 0027-udev-fix-sg-autoload-regression.patch Patch1027: 0027-udev-fix-sg-autoload-regression.patch -# systemd patches - %description Systemd is a system and service manager, compatible with SysV and LSB init scripts for Linux. systemd provides aggressive parallelization @@ -313,6 +322,7 @@ %patch1026 -p1 %patch1027 -p1 +#systemd %patch1 -p1 %patch6 -p1 # don't apply when bootstrapping to not modify configure.in @@ -337,6 +347,12 @@ %patch60 -p1 %patch61 -p1 %patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 %build autoreconf -fiv @@ -368,8 +384,14 @@ ln -sf %{_bindir}/systemd-ask-password $RPM_BUILD_ROOT/bin/systemd-ask-password ln -sf %{_bindir}/systemctl $RPM_BUILD_ROOT/bin/systemctl ln -sf %{_prefix}/lib/systemd/systemd-udevd $RPM_BUILD_ROOT/sbin/udevd +%if ! 0%{?bootstrap} +ln -sf systemd-udevd.8 $RPM_BUILD_ROOT/%{_mandir}/man8/udevd.8 +%endif mkdir -p $RPM_BUILD_ROOT/%{_prefix}/usr/lib/firmware/updates ln -sf /lib/firmware $RPM_BUILD_ROOT/usr/lib/firmware +%if ! 0%{?bootstrap} +install -m755 -D %{S:8} $RPM_BUILD_ROOT/etc/init.d/systemd-journald +%endif install -m755 -D %{S:1060} $RPM_BUILD_ROOT/etc/init.d/boot.udev ln -s systemd-udevd.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev.service @@ -378,11 +400,6 @@ mkdir -p $RPM_BUILD_ROOT/lib/systemd/system/basic.target.wants ln -sf ../udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants -#fix manpages -%if ! 0%{?bootstrap} -sed -i -e 's,^\(\.so \)\(.*\.\)\([0-9]\),\1man\3/\2\3,g' %{buildroot}/%{_mandir}/*/* -%endif - #workaround for 716939 chmod 644 %{buildroot}%{_bindir}/systemd-analyze mkdir -p %{buildroot}%{_sysconfdir}/rpm @@ -392,7 +409,7 @@ install -m755 %{S:3} -D %{buildroot}%{_sbindir}/systemd-sysv-convert # do not install, code has been fixed, might be useful in the future -#install -m755 %{S:5} %{buildroot}/lib/systemd/system-generators +#install -m755 %{S:5} %{buildroot}/usr/lib/systemd/system-generators ln -s ../usr/lib/systemd/systemd %{buildroot}/bin/systemd ln -s ../usr/lib/systemd/systemd %{buildroot}/sbin/init ln -s ../usr/bin/systemctl %{buildroot}/sbin/reboot @@ -415,8 +432,7 @@ ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/ldconfig.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/loadmodules.service install -m644 %{S:2} %{buildroot}/%{_prefix}/lib/systemd/system/localfs.service -# need to be implemented in systemd directly -#ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service +ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/proc.service ln -s systemd-fsck-root.service %{buildroot}/%{_prefix}/lib/systemd/system/rootfsck.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/single.service @@ -442,8 +458,12 @@ %endif # legacy links -ln -s loginctl %{buildroot}%{_bindir}/systemd-loginctl -ln -s journalctl %{buildroot}%{_bindir}/systemd-journalctl +for f in loginctl journalctl ; do + ln -s $f %{buildroot}%{_bindir}/systemd-$f +%if ! 0%{?bootstrap} + ln -s $f.1 %{buildroot}%{_mandir}/man1/systemd-$f.1 +%endif +done ln -s /usr/lib/udev %{buildroot}/lib/udev # Create the /var/log/journal directory to change the volatile journal to a persistent one @@ -532,6 +552,8 @@ elif [ ! -e /lib/udev ]; then ln -s /usr/lib/udev /lib/udev fi +# Create "tape" group which is referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules +/usr/sbin/groupadd -r tape 2> /dev/null || : # kill daemon if we are not in a chroot if test -f /proc/1/exe -a -d /proc/1/root ; then if test "$(stat -Lc '%%D-%%i' /)" = "$(stat -Lc '%%D-%%i' /proc/1/root)"; then @@ -724,6 +746,10 @@ %exclude %{_mandir}/man8/telinit.8* %exclude %{_mandir}/man8/runlevel.8* %exclude %{_mandir}/man*/*udev*.[0-9]* + +# Packaged in analyze subpackage +%exclude %{_mandir}/man1/systemd-analyze.1* + %{_mandir}/man1/*.1* %{_mandir}/man3/*.3* %{_mandir}/man5/*.5* @@ -787,7 +813,11 @@ %endif %files analyze +%defattr(-,root,root) %attr(0755,root,root) /usr/bin/systemd-analyze +%if ! 0%{?bootstrap} +%{_mandir}/man1/systemd-analyze.1* +%endif %files -n %{udevpkgname} %defattr(-,root,root) @@ -878,6 +908,7 @@ %defattr(-,root,root) %dir /var/log/journal /var/log/README +/etc/init.d/systemd-journald %endif Index: systemd.changes =================================================================== --- systemd.changes (revision 311) +++ systemd.changes (revision 5) @@ -1,4 +1,35 @@ ------------------------------------------------------------------- +Tue Nov 20 09:36:43 UTC 2012 - fcrozat@suse.com + +- links more manpages for migrated tools (from Christopher + Yeleighton). +- disable boot.localnet service, ypbind service will do the right + thing now (bnc#716746) +- add xdm-display-manager.patch: pull xdm.service instead of + display-manager.service (needed until xdm initscript is migrated + to native systemd service). +- Add fix-permissions-btmp.patch: ensure btmp is owned only by root + (bnc#777405). +- Have the udev package create a tape group, as referenced by + 50-udev-default.rules and 60-persistent-storage-tape.rules + (DimStar). +- Add fix-bad-memory-access.patch: fix crash in journal rotation. +- Add fix-dbus-crash.patch: fix D-Bus caused crash. +- Add sync-on-shutdown.patch: ensure sync is done when initiating + shutdown. +- Add mount-efivars.patch: mount efivars if booting on UEFI. + + +------------------------------------------------------------------- +Thu Nov 15 14:31:28 UTC 2012 - fcrozat@suse.com + +- Ship a empty systemd-journald initscript in systemd-logger to + stop insserv to complain about missing syslog dependency. +- Update + 0001-service-Fix-dependencies-added-when-parsing-insserv..patch + with bug fixes from Debian. + +------------------------------------------------------------------- Wed Nov 14 17:36:05 UTC 2012 - fcrozat@suse.com - /var/log/journal is now only provided by systemd-logger (journal Index: systemd.spec =================================================================== --- systemd.spec (revision 311) +++ systemd.spec (revision 5) @@ -97,6 +97,7 @@ Source5: systemd-insserv_conf Source6: baselibs.conf Source7: libgcrypt.m4 +Source8: systemd-journald.init Source1060: boot.udev Source1061: write_dev_root_rule @@ -123,6 +124,8 @@ Patch56: support-suse-clock-sysconfig.patch Patch59: fix-enable-disable-boot-initscript.patch Patch60: var-run-lock.patch +Patch63: xdm-display-manager.patch +Patch64: fix-permissions-btmp.patch # Upstream First - Policy: # Never add any patches to this package without the upstream commit id @@ -132,6 +135,14 @@ Patch61: fix-logind-pty-seat.patch # PATCH-FIX-UPSTREAM fix-build-glibc217.patch fcrozat@suse.com -- fix build with latest glibc Patch62: fix-build-glibc217.patch +# PATCH-FIX-UPSTREAM fix-bad-memory-access.patch fcrozat@suse.com -- fix bad memory access +Patch65: fix-bad-memory-access.patch +# PATCH-FIX-UPSTREAM fix-dbus-crash.patch fcrozat@suse.com -- fix D-Bus caused crash +Patch66: fix-dbus-crash.patch +# PATCH-FIX-UPSTREAM sync-on-shutdown.patch fcrozat@suse.com -- Sync on shutdown +Patch67: sync-on-shutdown.patch +# PATCH-FIX-UPSTREAM mount-efivars.patch fcrozat@suse.com -- mount efivars if booting under UEFI +Patch68: mount-efivars.patch # udev patches # PATCH-FIX-OPENSUSE 0001-Reinstate-TIMEOUT-handling.patch @@ -146,8 +157,6 @@ # PATCH-FIX-OPENSUSE 0027-udev-fix-sg-autoload-regression.patch Patch1027: 0027-udev-fix-sg-autoload-regression.patch -# systemd patches - %description Systemd is a system and service manager, compatible with SysV and LSB init scripts for Linux. systemd provides aggressive parallelization @@ -308,6 +317,7 @@ %patch1026 -p1 %patch1027 -p1 +#systemd %patch1 -p1 %patch6 -p1 # don't apply when bootstrapping to not modify configure.in @@ -332,6 +342,12 @@ %patch60 -p1 %patch61 -p1 %patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 %build autoreconf -fiv @@ -363,8 +379,14 @@ ln -sf %{_bindir}/systemd-ask-password $RPM_BUILD_ROOT/bin/systemd-ask-password ln -sf %{_bindir}/systemctl $RPM_BUILD_ROOT/bin/systemctl ln -sf %{_prefix}/lib/systemd/systemd-udevd $RPM_BUILD_ROOT/sbin/udevd +%if ! 0%{?bootstrap} +ln -sf systemd-udevd.8 $RPM_BUILD_ROOT/%{_mandir}/man8/udevd.8 +%endif mkdir -p $RPM_BUILD_ROOT/%{_prefix}/usr/lib/firmware/updates ln -sf /lib/firmware $RPM_BUILD_ROOT/usr/lib/firmware +%if ! 0%{?bootstrap} +install -m755 -D %{S:8} $RPM_BUILD_ROOT/etc/init.d/systemd-journald +%endif install -m755 -D %{S:1060} $RPM_BUILD_ROOT/etc/init.d/boot.udev ln -s systemd-udevd.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev.service @@ -373,11 +395,6 @@ mkdir -p $RPM_BUILD_ROOT/lib/systemd/system/basic.target.wants ln -sf ../udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants -#fix manpages -%if ! 0%{?bootstrap} -sed -i -e 's,^\(\.so \)\(.*\.\)\([0-9]\),\1man\3/\2\3,g' %{buildroot}/%{_mandir}/*/* -%endif - #workaround for 716939 chmod 644 %{buildroot}%{_bindir}/systemd-analyze mkdir -p %{buildroot}%{_sysconfdir}/rpm @@ -387,7 +404,7 @@ install -m755 %{S:3} -D %{buildroot}%{_sbindir}/systemd-sysv-convert # do not install, code has been fixed, might be useful in the future -#install -m755 %{S:5} %{buildroot}/lib/systemd/system-generators +#install -m755 %{S:5} %{buildroot}/usr/lib/systemd/system-generators ln -s ../usr/lib/systemd/systemd %{buildroot}/bin/systemd ln -s ../usr/lib/systemd/systemd %{buildroot}/sbin/init ln -s ../usr/bin/systemctl %{buildroot}/sbin/reboot @@ -410,8 +427,7 @@ ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/ldconfig.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/loadmodules.service install -m644 %{S:2} %{buildroot}/%{_prefix}/lib/systemd/system/localfs.service -# need to be implemented in systemd directly -#ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service +ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/proc.service ln -s systemd-fsck-root.service %{buildroot}/%{_prefix}/lib/systemd/system/rootfsck.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/single.service @@ -437,8 +453,12 @@ %endif # legacy links -ln -s loginctl %{buildroot}%{_bindir}/systemd-loginctl -ln -s journalctl %{buildroot}%{_bindir}/systemd-journalctl +for f in loginctl journalctl ; do + ln -s $f %{buildroot}%{_bindir}/systemd-$f +%if ! 0%{?bootstrap} + ln -s $f.1 %{buildroot}%{_mandir}/man1/systemd-$f.1 +%endif +done ln -s /usr/lib/udev %{buildroot}/lib/udev # Create the /var/log/journal directory to change the volatile journal to a persistent one @@ -527,6 +547,8 @@ elif [ ! -e /lib/udev ]; then ln -s /usr/lib/udev /lib/udev fi +# Create "tape" group which is referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules +/usr/sbin/groupadd -r tape 2> /dev/null || : # kill daemon if we are not in a chroot if test -f /proc/1/exe -a -d /proc/1/root ; then if test "$(stat -Lc '%%D-%%i' /)" = "$(stat -Lc '%%D-%%i' /proc/1/root)"; then @@ -719,6 +741,10 @@ %exclude %{_mandir}/man8/telinit.8* %exclude %{_mandir}/man8/runlevel.8* %exclude %{_mandir}/man*/*udev*.[0-9]* + +# Packaged in analyze subpackage +%exclude %{_mandir}/man1/systemd-analyze.1* + %{_mandir}/man1/*.1* %{_mandir}/man3/*.3* %{_mandir}/man5/*.5* @@ -782,7 +808,11 @@ %endif %files analyze +%defattr(-,root,root) %attr(0755,root,root) /usr/bin/systemd-analyze +%if ! 0%{?bootstrap} +%{_mandir}/man1/systemd-analyze.1* +%endif %files -n %{udevpkgname} %defattr(-,root,root) @@ -873,6 +903,7 @@ %defattr(-,root,root) %dir /var/log/journal /var/log/README +/etc/init.d/systemd-journald %endif Index: fix-bad-memory-access.patch =================================================================== --- fix-bad-memory-access.patch (added) +++ fix-bad-memory-access.patch (revision 5) @@ -0,0 +1,23 @@ +From 7d73c1343be02a59b17de0cd34375deeb815d89c Mon Sep 17 00:00:00 2001 +From: Lennart Poettering <lennart@poettering.net> +Date: Tue, 20 Nov 2012 00:19:27 +0100 +Subject: [PATCH] journald: fix bad memory access + +https://bugzilla.redhat.com/show_bug.cgi?id=875653 +--- + src/journal/journald-server.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: systemd-195/src/journal/journald.c +=================================================================== +--- systemd-195.orig/src/journal/journald.c ++++ systemd-195/src/journal/journald.c +@@ -342,7 +342,7 @@ static void server_rotate(Server *s) { + HASHMAP_FOREACH_KEY(f, k, s->user_journals, i) { + r = journal_file_rotate(&f, s->compress, s->seal); + if (r < 0) +- if (f->path) ++ if (f) + log_error("Failed to rotate %s: %s", f->path, strerror(-r)); + else + log_error("Failed to create user journal: %s", strerror(-r)); Index: fix-dbus-crash.patch =================================================================== --- fix-dbus-crash.patch (added) +++ fix-dbus-crash.patch (revision 5) @@ -0,0 +1,32 @@ +From 645a9e5a2bbb06464a3fba1a3501e9d79e5bbad8 Mon Sep 17 00:00:00 2001 +From: Eelco Dolstra <eelco.dolstra@logicblox.com> +Date: Wed, 31 Oct 2012 11:53:56 +0100 +Subject: [PATCH] dbus-manager: fix a fatal dbus abort in + bus_manager_message_handler() + +If ListUnitFiles fails, or an OOM occurs, then dbus_message_unref() +will be called twice on "reply", causing systemd to crash. So remove +the call to dbus_message_unref(); it is unnecessary because of +the cleanup attribute on "reply". + +[zj: modified to leave one dbus_message_unref() alone, per Colin +Walters' comment.] +--- + src/core/dbus-manager.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c +index 2010241..3cf3e90 100644 +--- a/src/core/dbus-manager.c ++++ b/src/core/dbus-manager.c +@@ -1436,7 +1436,6 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, + r = unit_file_get_list(m->running_as == SYSTEMD_SYSTEM ? UNIT_FILE_SYSTEM : UNIT_FILE_USER, NULL, h); + if (r < 0) { + unit_file_list_free(h); +- dbus_message_unref(reply); + return bus_send_error_reply(connection, message, NULL, r); + } + +-- +1.7.10.4 + Index: fix-permissions-btmp.patch =================================================================== --- fix-permissions-btmp.patch (added) +++ fix-permissions-btmp.patch (revision 5) @@ -0,0 +1,13 @@ +Index: systemd-44/tmpfiles.d/systemd.conf +=================================================================== +--- systemd-44.orig/tmpfiles.d/systemd.conf ++++ systemd-44/tmpfiles.d/systemd.conf +@@ -11,7 +11,7 @@ d /run/user 0755 root root 10d + F /run/utmp 0664 root utmp - + + f /var/log/wtmp 0664 root utmp - +-f /var/log/btmp 0600 root utmp - ++f /var/log/btmp 0600 root root - + + d /var/cache/man - - - 30d + Index: mount-efivars.patch =================================================================== --- mount-efivars.patch (added) +++ mount-efivars.patch (revision 5) @@ -0,0 +1,336 @@ +From f271dd97622b656c1c013d181ea615c671cc2438 Mon Sep 17 00:00:00 2001 +From: "Lee, Chun-Yi" <joeyli.kernel@gmail.com> +Date: Sat, 27 Oct 2012 11:23:22 +0800 +Subject: [PATCH] systemd: mount the EFI variable filesystem +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Add efivarfs to the mount_table in mount-setup.c, so the EFI variable +filesystem will be mounted when systemd executed. + +The EFI variable filesystem will merge in v3.7 or v3.8 linux kernel. + +Cc: Kay Sievers <kay@vrfy.org> +Cc: Lennart Poettering <lennart@poettering.net> +Cc: Mantas Mikulėnas <grawity@gmail.com> +Cc: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> +Cc: Matt Fleming <matt.fleming@intel.com> +Cc: Jeremy Kerr <jeremy.kerr@canonical.com> +Cc: Matthew Garrett <mjg@redhat.com> +Signed-off-by: Lee, Chun-Yi <jlee@suse.com> +--- + src/core/kmod-setup.c | 7 ++++--- + src/core/mount-setup.c | 1 + + 2 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index cc2a2d9..ce8a8e7 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -31,9 +31,10 @@ + #include "kmod-setup.h" + + static const char * const kmod_table[] = { +- "autofs4", "/sys/class/misc/autofs", +- "ipv6", "/sys/module/ipv6", +- "unix", "/proc/net/unix" ++ "autofs4", "/sys/class/misc/autofs", ++ "ipv6", "/sys/module/ipv6", ++ "efivarfs", "/sys/firmware/efi/efivars", ++ "unix", "/proc/net/unix" + }; + + #pragma GCC diagnostic push +diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c +index 0fd112f..9894c7f 100644 +--- a/src/core/mount-setup.c ++++ b/src/core/mount-setup.c +@@ -66,6 +66,7 @@ static const MountPoint mount_table[] = { + { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, + { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, true, true }, + { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, ++ { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, + { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, + { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, false, true }, + { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +-- +1.7.10.4 + +From c1e5704657315b436c0409e8172c1fcb76adccad Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:06:27 +0100 +Subject: [PATCH] shared: add is_efiboot() + +--- + src/shared/util.c | 4 ++++ + src/shared/util.h | 2 ++ + 2 files changed, 6 insertions(+) + +diff --git a/src/shared/util.c b/src/shared/util.c +index 2a8afae..9983695 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -77,6 +77,10 @@ char **saved_argv = NULL; + static volatile unsigned cached_columns = 0; + static volatile unsigned cached_lines = 0; + ++bool is_efiboot(void) { ++ return access("/sys/firmware/efi", F_OK) >= 0; ++} ++ + size_t page_size(void) { + static __thread size_t pgsz = 0; + long r; +diff --git a/src/shared/util.h b/src/shared/util.h +index e387b12..99972cc 100644 +--- a/src/shared/util.h ++++ b/src/shared/util.h +@@ -90,6 +90,8 @@ union dirent_storage { + #define ANSI_HIGHLIGHT_YELLOW_ON "\x1B[1;33m" + #define ANSI_HIGHLIGHT_OFF "\x1B[0m" + ++bool is_efiboot(void); ++ + usec_t now(clockid_t clock); + + dual_timestamp* dual_timestamp_get(dual_timestamp *ts); +-- +1.7.10.4 + +From 1022373284b7562431fb0a6dba45db8af089a0e3 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:54:19 +0100 +Subject: [PATCH] kmod-setup: add conditional module loading callback + +--- + src/core/kmod-setup.c | 32 ++++++++++++++++++++------------ + 1 file changed, 20 insertions(+), 12 deletions(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index ce8a8e7..383a6b2 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -30,11 +30,17 @@ + + #include "kmod-setup.h" + +-static const char * const kmod_table[] = { +- "autofs4", "/sys/class/misc/autofs", +- "ipv6", "/sys/module/ipv6", +- "efivarfs", "/sys/firmware/efi/efivars", +- "unix", "/proc/net/unix" ++typedef struct Kmodule { ++ const char *name; ++ const char *directory; ++ bool (*condition_fn)(void); ++} KModule; ++ ++static const KModule kmod_table[] = { ++ { "autofs4", "/sys/class/misc/autofs", NULL } , ++ { "ipv6", "/sys/module/ipv6", NULL }, ++ { "efivarfs", "/sys/firmware/efi/efivars", NULL }, ++ { "unix", "/proc/net/unix", NULL } , + }; + + #pragma GCC diagnostic push +@@ -42,7 +48,8 @@ static const char * const kmod_table[] = { + static void systemd_kmod_log(void *data, int priority, const char *file, int line, + const char *fn, const char *format, va_list args) + { +- log_metav(priority, file, line, fn, format, args); ++ /* library logging is enabled at debug only */ ++ log_metav(LOG_DEBUG, file, line, fn, format, args); + } + #pragma GCC diagnostic pop + +@@ -53,13 +60,15 @@ int kmod_setup(void) { + int err; + + for (i = 0; i < ELEMENTSOF(kmod_table); i += 2) { ++ if (kmod_table[i].condition_fn && !kmod_table[i].condition_fn()) ++ continue; + +- if (access(kmod_table[i+1], F_OK) >= 0) ++ if (access(kmod_table[i].directory, F_OK) >= 0) + continue; + + log_debug("Your kernel apparently lacks built-in %s support. Might be a good idea to compile it in. " + "We'll now try to work around this by loading the module...", +- kmod_table[i]); ++ kmod_table[i].name); + + if (!ctx) { + ctx = kmod_new(NULL, NULL); +@@ -69,13 +78,12 @@ int kmod_setup(void) { + } + + kmod_set_log_fn(ctx, systemd_kmod_log, NULL); +- + kmod_load_resources(ctx); + } + +- err = kmod_module_new_from_name(ctx, kmod_table[i], &mod); ++ err = kmod_module_new_from_name(ctx, kmod_table[i].name, &mod); + if (err < 0) { +- log_error("Failed to load module '%s'", kmod_table[i]); ++ log_error("Failed to lookup module '%s'", kmod_table[i].name); + continue; + } + +@@ -85,7 +93,7 @@ int kmod_setup(void) { + else if (err == KMOD_PROBE_APPLY_BLACKLIST) + log_info("Module '%s' is blacklisted", kmod_module_get_name(mod)); + else +- log_error("Failed to insert '%s'", kmod_module_get_name(mod)); ++ log_error("Failed to insert module '%s'", kmod_module_get_name(mod)); + + kmod_module_unref(mod); + } +-- +1.7.10.4 + +From 3dfb265083347cb5700dc38f7cc0f479f378e6e9 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:55:23 +0100 +Subject: [PATCH] kmod-setup: mounting efivarfs, *after* we tried to mount it, + is pointless + +The mount() system call, which we issue before loading modules, will trigger +a modprobe by the kernel and block until it returns. Trying to load it again +later, will have exactly the same result as the first time. +--- + src/core/kmod-setup.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index 383a6b2..20ab232 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -39,7 +39,6 @@ typedef struct Kmodule { + static const KModule kmod_table[] = { + { "autofs4", "/sys/class/misc/autofs", NULL } , + { "ipv6", "/sys/module/ipv6", NULL }, +- { "efivarfs", "/sys/firmware/efi/efivars", NULL }, + { "unix", "/proc/net/unix", NULL } , + }; + +-- +1.7.10.4 + +From 6aa220e019f9dffd96590b06b68f937985204109 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 17:03:48 +0100 +Subject: [PATCH] mount-setup: try mounting 'efivarfs' only if the system + bootet with EFI + +--- + TODO | 3 --- + src/core/mount-setup.c | 50 ++++++++++++++++++++++++++++++++---------------- + 2 files changed, 34 insertions(+), 19 deletions(-) + +diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c +index 9894c7f..98614d0 100644 +--- a/src/core/mount-setup.c ++++ b/src/core/mount-setup.c +@@ -46,14 +46,20 @@ + #define TTY_GID 5 + #endif + ++typedef enum MountMode { ++ MNT_NONE = 0, ++ MNT_FATAL = 1 << 0, ++ MNT_IN_CONTAINER = 1 << 1, ++} MountMode; ++ + typedef struct MountPoint { + const char *what; + const char *where; + const char *type; + const char *options; + unsigned long flags; +- bool fatal; +- bool in_container; ++ bool (*condition_fn)(void); ++ MountMode mode; + } MountPoint; + + /* The first three entries we might need before SELinux is up. The +@@ -62,16 +68,26 @@ typedef struct MountPoint { + #define N_EARLY_MOUNT 4 + + static const MountPoint mount_table[] = { +- { "proc", "/proc", "proc", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, +- { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, +- { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, true, true }, +- { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, +- { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, +- { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +- { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, false, true }, +- { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +- { "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME, false, true }, +- { "cgroup", "/sys/fs/cgroup/systemd", "cgroup", "none,name=systemd", MS_NOSUID|MS_NOEXEC|MS_NODEV, false, true }, ++ { "proc", "/proc", "proc", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_NONE }, ++ { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ is_efiboot, MNT_NONE }, ++ { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, ++ NULL, MNT_IN_CONTAINER }, ++ { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_IN_CONTAINER }, ++ { "cgroup", "/sys/fs/cgroup/systemd", "cgroup", "none,name=systemd", MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_IN_CONTAINER }, + }; + + /* These are API file systems that might be mounted by other software, +@@ -119,6 +135,9 @@ static int mount_one(const MountPoint *p, bool relabel) { + + assert(p); + ++ if (p->condition_fn && !p->condition_fn()) ++ return 0; ++ + /* Relabel first, just in case */ + if (relabel) + label_fix(p->where, true, true); +@@ -131,7 +150,7 @@ static int mount_one(const MountPoint *p, bool relabel) { + return 0; + + /* Skip securityfs in a container */ +- if (!p->in_container && detect_container(NULL) > 0) ++ if (!(p->mode & MNT_IN_CONTAINER) && detect_container(NULL) > 0) + return 0; + + /* The access mode here doesn't really matter too much, since +@@ -149,8 +168,8 @@ static int mount_one(const MountPoint *p, bool relabel) { + p->type, + p->flags, + p->options) < 0) { +- log_full(p->fatal ? LOG_ERR : LOG_DEBUG, "Failed to mount %s: %s", p->where, strerror(errno)); +- return p->fatal ? -errno : 0; ++ log_full((p->mode & MNT_FATAL) ? LOG_ERR : LOG_DEBUG, "Failed to mount %s: %s", p->where, strerror(errno)); ++ return (p->mode & MNT_FATAL) ? -errno : 0; + } + + /* Relabel again, since we now mounted something fresh here */ +@@ -289,7 +308,6 @@ int mount_cgroup_controllers(char ***join_controllers) { + p.type = "cgroup"; + p.options = options; + p.flags = MS_NOSUID|MS_NOEXEC|MS_NODEV; +- p.fatal = false; + + r = mount_one(&p, true); + free(controller); +-- +1.7.10.4 + Index: sync-on-shutdown.patch =================================================================== --- sync-on-shutdown.patch (added) +++ sync-on-shutdown.patch (revision 5) @@ -0,0 +1,49 @@ +From 0049f05a8bb82c3e084bacc5945596761d706c55 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering <lennart@poettering.net> +Date: Fri, 16 Nov 2012 01:30:29 +0100 +Subject: [PATCH] shutdown: readd explicit sync() when shutting down + +As it turns out reboot() doesn't actually imply a file system sync, but +only a disk sync. Accordingly, readd explicit sync() invocations +immediately before we invoke reboot(). + +This is much less dramatic than it might sounds as we umount all +disks/read-only remount them anyway before going down. +--- + src/core/service.c | 1 + + src/core/shutdown.c | 7 +++++++ + 2 files changed, 8 insertions(+) + +diff --git a/src/core/service.c b/src/core/service.c +index cf08485..df72aba 100644 +--- a/src/core/service.c ++++ b/src/core/service.c +@@ -2485,6 +2485,7 @@ static int service_start_limit_test(Service *s) { + + case SERVICE_START_LIMIT_REBOOT_IMMEDIATE: + log_warning("%s start request repeated too quickly, rebooting immediately.", UNIT(s)->id); ++ sync(); + reboot(RB_AUTOBOOT); + break; + +diff --git a/src/core/shutdown.c b/src/core/shutdown.c +index cc8c57b..b59aef1 100644 +--- a/src/core/shutdown.c ++++ b/src/core/shutdown.c +@@ -273,6 +273,13 @@ int main(int argc, char *argv[]) { + } + } + ++ /* The kernel will automaticall flush ATA disks and suchlike ++ * on reboot(), but the file systems need to be synce'd ++ * explicitly in advance. So let's do this here, but not ++ * needlessly slow down containers. */ ++ if (!in_container) ++ sync(); ++ + if (cmd == LINUX_REBOOT_CMD_KEXEC) { + + if (!in_container) { +-- +1.7.10.4 + Index: systemd-journald.init =================================================================== --- systemd-journald.init (added) +++ systemd-journald.init (revision 5) @@ -0,0 +1,33 @@ +#! /bin/sh +# +# Copyright (c) 2001-2002 SuSE Linux AG, Nuernberg, Germany. +# All rights reserved. +# +# /etc/init.d/systemd-journald +# +### BEGIN INIT INFO +# Provides: syslog +# Required-Start: $null +# Required-Stop: $null +# Default-Start: 2 3 5 +# Default-Stop: +# Short-Description: compat wrapper for journald +# Description: compat wrapper for journald +### END INIT INFO + +. /etc/rc.status + +rc_reset + +case "$1" in + start|stop|restart) + rc_failed 3 + rc_status -v + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 + ;; +esac + +rc_exit Index: xdm-display-manager.patch =================================================================== --- xdm-display-manager.patch (added) +++ xdm-display-manager.patch (revision 5) @@ -0,0 +1,13 @@ +Index: systemd-195/units/graphical.target +=================================================================== +--- systemd-195.orig/units/graphical.target ++++ systemd-195/units/graphical.target +@@ -11,7 +11,7 @@ Documentation=man:systemd.special(7) + Requires=multi-user.target + After=multi-user.target + Conflicts=rescue.target +-Wants=display-manager.service ++Wants=xdm.service + AllowIsolate=yes + + [Install] OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=312
2012-11-20 13:10:12 +01:00
# Packaged in analyze subpackage
%exclude %{_mandir}/man1/systemd-analyze.1*
%{_mandir}/man1/*.1*
%{_mandir}/man3/*.3*
%{_mandir}/man5/*.5*
%{_mandir}/man7/*.7*
%{_mandir}/man8/*.8*
%endif
%{_docdir}/systemd
%{_prefix}/lib/udev/rules.d/70-uaccess.rules
%{_prefix}/lib/udev/rules.d/71-seat.rules
%{_prefix}/lib/udev/rules.d/73-seat-late.rules
%if ! 0%{?bootstrap}
%{_prefix}/lib/udev/rules.d/73-seat-numlock.rules
%endif
%{_prefix}/lib/udev/rules.d/99-systemd.rules
%if ! 0%{?bootstrap}
%{_prefix}/lib/udev/numlock-on
%endif
%dir %{_sysconfdir}/bash_completion.d
%{_sysconfdir}/bash_completion.d/systemd-bash-completion.sh
%{_sysconfdir}/rpm/macros.systemd
%dir /var/lib/systemd
%dir /var/lib/systemd/sysv-convert
%dir /var/lib/systemd/migrated
%files devel
%defattr(-,root,root,-)
%{_libdir}/libsystemd-daemon.so
%{_libdir}/libsystemd-login.so
%{_libdir}/libsystemd-id128.so
%{_libdir}/libsystemd-journal.so
%dir %{_includedir}/systemd
%{_includedir}/systemd/sd-login.h
%{_includedir}/systemd/sd-daemon.h
%{_includedir}/systemd/sd-id128.h
%{_includedir}/systemd/sd-journal.h
%{_includedir}/systemd/sd-messages.h
%{_includedir}/systemd/sd-shutdown.h
%{_datadir}/pkgconfig/systemd.pc
%{_libdir}/pkgconfig/libsystemd-daemon.pc
%{_libdir}/pkgconfig/libsystemd-login.pc
%{_libdir}/pkgconfig/libsystemd-id128.pc
%{_libdir}/pkgconfig/libsystemd-journal.pc
%files sysvinit
%defattr(-,root,root,-)
/sbin/init
/sbin/reboot
/sbin/halt
/sbin/shutdown
/sbin/poweroff
/sbin/telinit
/sbin/runlevel
%if ! 0%{?bootstrap}
%{_mandir}/man1/init.1*
%{_mandir}/man8/halt.8*
%{_mandir}/man8/reboot.8*
%{_mandir}/man8/shutdown.8*
%{_mandir}/man8/poweroff.8*
%{_mandir}/man8/telinit.8*
%{_mandir}/man8/runlevel.8*
%endif
%files analyze
- links more manpages for migrated tools (from Christopher Yeleighton). - disable boot.localnet service, ypbind service will do the right thing now (bnc#716746) - add xdm-display-manager.patch: pull xdm.service instead of display-manager.service (needed until xdm initscript is migrated to native systemd service). - Add fix-permissions-btmp.patch: ensure btmp is owned only by root (bnc#777405). - Have the udev package create a tape group, as referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules (DimStar). - Add fix-bad-memory-access.patch: fix crash in journal rotation. - Add fix-dbus-crash.patch: fix D-Bus caused crash. - Add sync-on-shutdown.patch: ensure sync is done when initiating shutdown. - Add mount-efivars.patch: mount efivars if booting on UEFI. - Ship a empty systemd-journald initscript in systemd-logger to stop insserv to complain about missing syslog dependency. - Update 0001-service-Fix-dependencies-added-when-parsing-insserv..patch with bug fixes from Debian. old: Base:System/systemd new: home:fcrozat:branches:Base:System/systemd rev NoneIndex: 0001-service-Fix-dependencies-added-when-parsing-insserv..patch =================================================================== --- 0001-service-Fix-dependencies-added-when-parsing-insserv..patch (revision 311) +++ 0001-service-Fix-dependencies-added-when-parsing-insserv..patch (revision 5) @@ -1,17 +1,35 @@ -From 6620bceb7233a830be3635a4f7a7dc75c13a9c8e Mon Sep 17 00:00:00 2001 -From: Frederic Crozat <fcrozat@suse.com> -Date: Fri, 30 Sep 2011 14:12:45 +0200 -Subject: [PATCH] service: Fix dependencies added when parsing insserv.conf - ---- - src/service.c | 16 +++++++++------- - 1 files changed, 9 insertions(+), 7 deletions(-) - -Index: systemd-41/src/service.c +Index: systemd-195/src/core/service.c =================================================================== ---- systemd-41.orig/src/core/service.c -+++ systemd-41/src/core/service.c -@@ -3210,23 +3210,30 @@ static void sysv_facility_in_insserv_con +--- systemd-195.orig/src/core/service.c ++++ systemd-195/src/core/service.c +@@ -3391,12 +3391,13 @@ static void service_notify_message(Unit + + #ifdef HAVE_SYSV_COMPAT + +-#ifdef TARGET_SUSE +-static void sysv_facility_in_insserv_conf(Manager *mgr) { +- FILE *f=NULL; ++#if defined(TARGET_SUSE) || defined(TARGET_DEBIAN) ++static void sysv_parse_insserv_conf(Manager *mgr, const char* filename) { ++ FILE *f = NULL; + int r; + +- if (!(f = fopen("/etc/insserv.conf", "re"))) { ++ if (!(f = fopen(filename, "re"))) { ++ log_error("Failed to open file %s", filename); + r = errno == ENOENT ? 0 : -errno; + goto finish; + } +@@ -3410,7 +3411,7 @@ static void sysv_facility_in_insserv_con + break; + + r = -errno; +- log_error("Failed to read configuration file '/etc/insserv.conf': %s", strerror(-r)); ++ log_error("Failed to read configuration file '%s': %s", filename, strerror(-r)); + goto finish; + } + +@@ -3425,23 +3426,30 @@ static void sysv_facility_in_insserv_con Unit *u; if (sysv_translate_facility(parsed[0], NULL, &facility) < 0) continue; @@ -29,12 +47,12 @@ STRV_FOREACH (j, parsed+1) { - if (*j[0]=='+') { - e = UNIT_WANTS; -+ if (*j[0]=='+') ++ if (*j[0] == '+') name = *j+1; - } - else { - e = UNIT_REQUIRES; -+ else ++ else name = *j; - } + if (streq(name, "boot.localfs") || @@ -44,9 +62,54 @@ continue; - r = unit_add_two_dependencies_by_name(u, UNIT_BEFORE, e, dep, NULL, true); -+ r = unit_add_dependency_by_name_inverse(u, UNIT_BEFORE, dep, NULL, true); -+ if (*j[0]!='+') ++ r = unit_add_two_dependencies_by_name_inverse(u, UNIT_WANTS, UNIT_BEFORE, dep, NULL, true); ++ if (*j[0] != '+') + r = unit_add_dependency_by_name(u, UNIT_REQUIRES, dep, NULL, true); free(dep); } } +@@ -3454,6 +3462,35 @@ finish: + fclose(f); + + } ++ ++static void sysv_facility_in_insserv_conf(Manager *mgr) { ++ DIR *d =NULL; ++ struct dirent *de; ++ ++#ifdef TARGET_DEBIAN ++ if (!(d = opendir("/etc/insserv.conf.d/"))) ++ if (errno != ENOENT) { ++ log_warning("opendir() failed on /etc/insserv.conf.d/ %s", strerror(errno)); ++ goto finish; ++ } ++ ++ while ((de = readdir(d))) { ++ char *path = NULL; ++ if (ignore_file(de->d_name)) ++ continue; ++ ++ path = join("/etc/insserv.conf.d/", de->d_name, NULL); ++ sysv_parse_insserv_conf(mgr, path); ++ free(path); ++ } ++finish: ++ if (d) ++ closedir(d); ++#endif ++ ++ sysv_parse_insserv_conf(mgr, "/etc/insserv.conf"); ++} ++ + #endif + + static int service_enumerate(Manager *m) { +@@ -3604,7 +3641,7 @@ static int service_enumerate(Manager *m) + + r = 0; + +-#ifdef TARGET_SUSE ++#if defined(TARGET_SUSE) || defined(TARGET_DEBIAN) + sysv_facility_in_insserv_conf (m); + #endif + Index: systemd-mini.changes =================================================================== --- systemd-mini.changes (revision 311) +++ systemd-mini.changes (revision 5) @@ -1,4 +1,35 @@ ------------------------------------------------------------------- +Tue Nov 20 09:36:43 UTC 2012 - fcrozat@suse.com + +- links more manpages for migrated tools (from Christopher + Yeleighton). +- disable boot.localnet service, ypbind service will do the right + thing now (bnc#716746) +- add xdm-display-manager.patch: pull xdm.service instead of + display-manager.service (needed until xdm initscript is migrated + to native systemd service). +- Add fix-permissions-btmp.patch: ensure btmp is owned only by root + (bnc#777405). +- Have the udev package create a tape group, as referenced by + 50-udev-default.rules and 60-persistent-storage-tape.rules + (DimStar). +- Add fix-bad-memory-access.patch: fix crash in journal rotation. +- Add fix-dbus-crash.patch: fix D-Bus caused crash. +- Add sync-on-shutdown.patch: ensure sync is done when initiating + shutdown. +- Add mount-efivars.patch: mount efivars if booting on UEFI. + + +------------------------------------------------------------------- +Thu Nov 15 14:31:28 UTC 2012 - fcrozat@suse.com + +- Ship a empty systemd-journald initscript in systemd-logger to + stop insserv to complain about missing syslog dependency. +- Update + 0001-service-Fix-dependencies-added-when-parsing-insserv..patch + with bug fixes from Debian. + +------------------------------------------------------------------- Wed Nov 14 17:36:05 UTC 2012 - fcrozat@suse.com - /var/log/journal is now only provided by systemd-logger (journal Index: systemd-mini.spec =================================================================== --- systemd-mini.spec (revision 311) +++ systemd-mini.spec (revision 5) @@ -102,6 +102,7 @@ Source5: systemd-insserv_conf Source6: baselibs.conf Source7: libgcrypt.m4 +Source8: systemd-journald.init Source1060: boot.udev Source1061: write_dev_root_rule @@ -128,6 +129,8 @@ Patch56: support-suse-clock-sysconfig.patch Patch59: fix-enable-disable-boot-initscript.patch Patch60: var-run-lock.patch +Patch63: xdm-display-manager.patch +Patch64: fix-permissions-btmp.patch # Upstream First - Policy: # Never add any patches to this package without the upstream commit id @@ -137,6 +140,14 @@ Patch61: fix-logind-pty-seat.patch # PATCH-FIX-UPSTREAM fix-build-glibc217.patch fcrozat@suse.com -- fix build with latest glibc Patch62: fix-build-glibc217.patch +# PATCH-FIX-UPSTREAM fix-bad-memory-access.patch fcrozat@suse.com -- fix bad memory access +Patch65: fix-bad-memory-access.patch +# PATCH-FIX-UPSTREAM fix-dbus-crash.patch fcrozat@suse.com -- fix D-Bus caused crash +Patch66: fix-dbus-crash.patch +# PATCH-FIX-UPSTREAM sync-on-shutdown.patch fcrozat@suse.com -- Sync on shutdown +Patch67: sync-on-shutdown.patch +# PATCH-FIX-UPSTREAM mount-efivars.patch fcrozat@suse.com -- mount efivars if booting under UEFI +Patch68: mount-efivars.patch # udev patches # PATCH-FIX-OPENSUSE 0001-Reinstate-TIMEOUT-handling.patch @@ -151,8 +162,6 @@ # PATCH-FIX-OPENSUSE 0027-udev-fix-sg-autoload-regression.patch Patch1027: 0027-udev-fix-sg-autoload-regression.patch -# systemd patches - %description Systemd is a system and service manager, compatible with SysV and LSB init scripts for Linux. systemd provides aggressive parallelization @@ -313,6 +322,7 @@ %patch1026 -p1 %patch1027 -p1 +#systemd %patch1 -p1 %patch6 -p1 # don't apply when bootstrapping to not modify configure.in @@ -337,6 +347,12 @@ %patch60 -p1 %patch61 -p1 %patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 %build autoreconf -fiv @@ -368,8 +384,14 @@ ln -sf %{_bindir}/systemd-ask-password $RPM_BUILD_ROOT/bin/systemd-ask-password ln -sf %{_bindir}/systemctl $RPM_BUILD_ROOT/bin/systemctl ln -sf %{_prefix}/lib/systemd/systemd-udevd $RPM_BUILD_ROOT/sbin/udevd +%if ! 0%{?bootstrap} +ln -sf systemd-udevd.8 $RPM_BUILD_ROOT/%{_mandir}/man8/udevd.8 +%endif mkdir -p $RPM_BUILD_ROOT/%{_prefix}/usr/lib/firmware/updates ln -sf /lib/firmware $RPM_BUILD_ROOT/usr/lib/firmware +%if ! 0%{?bootstrap} +install -m755 -D %{S:8} $RPM_BUILD_ROOT/etc/init.d/systemd-journald +%endif install -m755 -D %{S:1060} $RPM_BUILD_ROOT/etc/init.d/boot.udev ln -s systemd-udevd.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev.service @@ -378,11 +400,6 @@ mkdir -p $RPM_BUILD_ROOT/lib/systemd/system/basic.target.wants ln -sf ../udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants -#fix manpages -%if ! 0%{?bootstrap} -sed -i -e 's,^\(\.so \)\(.*\.\)\([0-9]\),\1man\3/\2\3,g' %{buildroot}/%{_mandir}/*/* -%endif - #workaround for 716939 chmod 644 %{buildroot}%{_bindir}/systemd-analyze mkdir -p %{buildroot}%{_sysconfdir}/rpm @@ -392,7 +409,7 @@ install -m755 %{S:3} -D %{buildroot}%{_sbindir}/systemd-sysv-convert # do not install, code has been fixed, might be useful in the future -#install -m755 %{S:5} %{buildroot}/lib/systemd/system-generators +#install -m755 %{S:5} %{buildroot}/usr/lib/systemd/system-generators ln -s ../usr/lib/systemd/systemd %{buildroot}/bin/systemd ln -s ../usr/lib/systemd/systemd %{buildroot}/sbin/init ln -s ../usr/bin/systemctl %{buildroot}/sbin/reboot @@ -415,8 +432,7 @@ ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/ldconfig.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/loadmodules.service install -m644 %{S:2} %{buildroot}/%{_prefix}/lib/systemd/system/localfs.service -# need to be implemented in systemd directly -#ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service +ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/proc.service ln -s systemd-fsck-root.service %{buildroot}/%{_prefix}/lib/systemd/system/rootfsck.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/single.service @@ -442,8 +458,12 @@ %endif # legacy links -ln -s loginctl %{buildroot}%{_bindir}/systemd-loginctl -ln -s journalctl %{buildroot}%{_bindir}/systemd-journalctl +for f in loginctl journalctl ; do + ln -s $f %{buildroot}%{_bindir}/systemd-$f +%if ! 0%{?bootstrap} + ln -s $f.1 %{buildroot}%{_mandir}/man1/systemd-$f.1 +%endif +done ln -s /usr/lib/udev %{buildroot}/lib/udev # Create the /var/log/journal directory to change the volatile journal to a persistent one @@ -532,6 +552,8 @@ elif [ ! -e /lib/udev ]; then ln -s /usr/lib/udev /lib/udev fi +# Create "tape" group which is referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules +/usr/sbin/groupadd -r tape 2> /dev/null || : # kill daemon if we are not in a chroot if test -f /proc/1/exe -a -d /proc/1/root ; then if test "$(stat -Lc '%%D-%%i' /)" = "$(stat -Lc '%%D-%%i' /proc/1/root)"; then @@ -724,6 +746,10 @@ %exclude %{_mandir}/man8/telinit.8* %exclude %{_mandir}/man8/runlevel.8* %exclude %{_mandir}/man*/*udev*.[0-9]* + +# Packaged in analyze subpackage +%exclude %{_mandir}/man1/systemd-analyze.1* + %{_mandir}/man1/*.1* %{_mandir}/man3/*.3* %{_mandir}/man5/*.5* @@ -787,7 +813,11 @@ %endif %files analyze +%defattr(-,root,root) %attr(0755,root,root) /usr/bin/systemd-analyze +%if ! 0%{?bootstrap} +%{_mandir}/man1/systemd-analyze.1* +%endif %files -n %{udevpkgname} %defattr(-,root,root) @@ -878,6 +908,7 @@ %defattr(-,root,root) %dir /var/log/journal /var/log/README +/etc/init.d/systemd-journald %endif Index: systemd.changes =================================================================== --- systemd.changes (revision 311) +++ systemd.changes (revision 5) @@ -1,4 +1,35 @@ ------------------------------------------------------------------- +Tue Nov 20 09:36:43 UTC 2012 - fcrozat@suse.com + +- links more manpages for migrated tools (from Christopher + Yeleighton). +- disable boot.localnet service, ypbind service will do the right + thing now (bnc#716746) +- add xdm-display-manager.patch: pull xdm.service instead of + display-manager.service (needed until xdm initscript is migrated + to native systemd service). +- Add fix-permissions-btmp.patch: ensure btmp is owned only by root + (bnc#777405). +- Have the udev package create a tape group, as referenced by + 50-udev-default.rules and 60-persistent-storage-tape.rules + (DimStar). +- Add fix-bad-memory-access.patch: fix crash in journal rotation. +- Add fix-dbus-crash.patch: fix D-Bus caused crash. +- Add sync-on-shutdown.patch: ensure sync is done when initiating + shutdown. +- Add mount-efivars.patch: mount efivars if booting on UEFI. + + +------------------------------------------------------------------- +Thu Nov 15 14:31:28 UTC 2012 - fcrozat@suse.com + +- Ship a empty systemd-journald initscript in systemd-logger to + stop insserv to complain about missing syslog dependency. +- Update + 0001-service-Fix-dependencies-added-when-parsing-insserv..patch + with bug fixes from Debian. + +------------------------------------------------------------------- Wed Nov 14 17:36:05 UTC 2012 - fcrozat@suse.com - /var/log/journal is now only provided by systemd-logger (journal Index: systemd.spec =================================================================== --- systemd.spec (revision 311) +++ systemd.spec (revision 5) @@ -97,6 +97,7 @@ Source5: systemd-insserv_conf Source6: baselibs.conf Source7: libgcrypt.m4 +Source8: systemd-journald.init Source1060: boot.udev Source1061: write_dev_root_rule @@ -123,6 +124,8 @@ Patch56: support-suse-clock-sysconfig.patch Patch59: fix-enable-disable-boot-initscript.patch Patch60: var-run-lock.patch +Patch63: xdm-display-manager.patch +Patch64: fix-permissions-btmp.patch # Upstream First - Policy: # Never add any patches to this package without the upstream commit id @@ -132,6 +135,14 @@ Patch61: fix-logind-pty-seat.patch # PATCH-FIX-UPSTREAM fix-build-glibc217.patch fcrozat@suse.com -- fix build with latest glibc Patch62: fix-build-glibc217.patch +# PATCH-FIX-UPSTREAM fix-bad-memory-access.patch fcrozat@suse.com -- fix bad memory access +Patch65: fix-bad-memory-access.patch +# PATCH-FIX-UPSTREAM fix-dbus-crash.patch fcrozat@suse.com -- fix D-Bus caused crash +Patch66: fix-dbus-crash.patch +# PATCH-FIX-UPSTREAM sync-on-shutdown.patch fcrozat@suse.com -- Sync on shutdown +Patch67: sync-on-shutdown.patch +# PATCH-FIX-UPSTREAM mount-efivars.patch fcrozat@suse.com -- mount efivars if booting under UEFI +Patch68: mount-efivars.patch # udev patches # PATCH-FIX-OPENSUSE 0001-Reinstate-TIMEOUT-handling.patch @@ -146,8 +157,6 @@ # PATCH-FIX-OPENSUSE 0027-udev-fix-sg-autoload-regression.patch Patch1027: 0027-udev-fix-sg-autoload-regression.patch -# systemd patches - %description Systemd is a system and service manager, compatible with SysV and LSB init scripts for Linux. systemd provides aggressive parallelization @@ -308,6 +317,7 @@ %patch1026 -p1 %patch1027 -p1 +#systemd %patch1 -p1 %patch6 -p1 # don't apply when bootstrapping to not modify configure.in @@ -332,6 +342,12 @@ %patch60 -p1 %patch61 -p1 %patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 %build autoreconf -fiv @@ -363,8 +379,14 @@ ln -sf %{_bindir}/systemd-ask-password $RPM_BUILD_ROOT/bin/systemd-ask-password ln -sf %{_bindir}/systemctl $RPM_BUILD_ROOT/bin/systemctl ln -sf %{_prefix}/lib/systemd/systemd-udevd $RPM_BUILD_ROOT/sbin/udevd +%if ! 0%{?bootstrap} +ln -sf systemd-udevd.8 $RPM_BUILD_ROOT/%{_mandir}/man8/udevd.8 +%endif mkdir -p $RPM_BUILD_ROOT/%{_prefix}/usr/lib/firmware/updates ln -sf /lib/firmware $RPM_BUILD_ROOT/usr/lib/firmware +%if ! 0%{?bootstrap} +install -m755 -D %{S:8} $RPM_BUILD_ROOT/etc/init.d/systemd-journald +%endif install -m755 -D %{S:1060} $RPM_BUILD_ROOT/etc/init.d/boot.udev ln -s systemd-udevd.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev.service @@ -373,11 +395,6 @@ mkdir -p $RPM_BUILD_ROOT/lib/systemd/system/basic.target.wants ln -sf ../udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants -#fix manpages -%if ! 0%{?bootstrap} -sed -i -e 's,^\(\.so \)\(.*\.\)\([0-9]\),\1man\3/\2\3,g' %{buildroot}/%{_mandir}/*/* -%endif - #workaround for 716939 chmod 644 %{buildroot}%{_bindir}/systemd-analyze mkdir -p %{buildroot}%{_sysconfdir}/rpm @@ -387,7 +404,7 @@ install -m755 %{S:3} -D %{buildroot}%{_sbindir}/systemd-sysv-convert # do not install, code has been fixed, might be useful in the future -#install -m755 %{S:5} %{buildroot}/lib/systemd/system-generators +#install -m755 %{S:5} %{buildroot}/usr/lib/systemd/system-generators ln -s ../usr/lib/systemd/systemd %{buildroot}/bin/systemd ln -s ../usr/lib/systemd/systemd %{buildroot}/sbin/init ln -s ../usr/bin/systemctl %{buildroot}/sbin/reboot @@ -410,8 +427,7 @@ ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/ldconfig.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/loadmodules.service install -m644 %{S:2} %{buildroot}/%{_prefix}/lib/systemd/system/localfs.service -# need to be implemented in systemd directly -#ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service +ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/proc.service ln -s systemd-fsck-root.service %{buildroot}/%{_prefix}/lib/systemd/system/rootfsck.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/single.service @@ -437,8 +453,12 @@ %endif # legacy links -ln -s loginctl %{buildroot}%{_bindir}/systemd-loginctl -ln -s journalctl %{buildroot}%{_bindir}/systemd-journalctl +for f in loginctl journalctl ; do + ln -s $f %{buildroot}%{_bindir}/systemd-$f +%if ! 0%{?bootstrap} + ln -s $f.1 %{buildroot}%{_mandir}/man1/systemd-$f.1 +%endif +done ln -s /usr/lib/udev %{buildroot}/lib/udev # Create the /var/log/journal directory to change the volatile journal to a persistent one @@ -527,6 +547,8 @@ elif [ ! -e /lib/udev ]; then ln -s /usr/lib/udev /lib/udev fi +# Create "tape" group which is referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules +/usr/sbin/groupadd -r tape 2> /dev/null || : # kill daemon if we are not in a chroot if test -f /proc/1/exe -a -d /proc/1/root ; then if test "$(stat -Lc '%%D-%%i' /)" = "$(stat -Lc '%%D-%%i' /proc/1/root)"; then @@ -719,6 +741,10 @@ %exclude %{_mandir}/man8/telinit.8* %exclude %{_mandir}/man8/runlevel.8* %exclude %{_mandir}/man*/*udev*.[0-9]* + +# Packaged in analyze subpackage +%exclude %{_mandir}/man1/systemd-analyze.1* + %{_mandir}/man1/*.1* %{_mandir}/man3/*.3* %{_mandir}/man5/*.5* @@ -782,7 +808,11 @@ %endif %files analyze +%defattr(-,root,root) %attr(0755,root,root) /usr/bin/systemd-analyze +%if ! 0%{?bootstrap} +%{_mandir}/man1/systemd-analyze.1* +%endif %files -n %{udevpkgname} %defattr(-,root,root) @@ -873,6 +903,7 @@ %defattr(-,root,root) %dir /var/log/journal /var/log/README +/etc/init.d/systemd-journald %endif Index: fix-bad-memory-access.patch =================================================================== --- fix-bad-memory-access.patch (added) +++ fix-bad-memory-access.patch (revision 5) @@ -0,0 +1,23 @@ +From 7d73c1343be02a59b17de0cd34375deeb815d89c Mon Sep 17 00:00:00 2001 +From: Lennart Poettering <lennart@poettering.net> +Date: Tue, 20 Nov 2012 00:19:27 +0100 +Subject: [PATCH] journald: fix bad memory access + +https://bugzilla.redhat.com/show_bug.cgi?id=875653 +--- + src/journal/journald-server.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: systemd-195/src/journal/journald.c +=================================================================== +--- systemd-195.orig/src/journal/journald.c ++++ systemd-195/src/journal/journald.c +@@ -342,7 +342,7 @@ static void server_rotate(Server *s) { + HASHMAP_FOREACH_KEY(f, k, s->user_journals, i) { + r = journal_file_rotate(&f, s->compress, s->seal); + if (r < 0) +- if (f->path) ++ if (f) + log_error("Failed to rotate %s: %s", f->path, strerror(-r)); + else + log_error("Failed to create user journal: %s", strerror(-r)); Index: fix-dbus-crash.patch =================================================================== --- fix-dbus-crash.patch (added) +++ fix-dbus-crash.patch (revision 5) @@ -0,0 +1,32 @@ +From 645a9e5a2bbb06464a3fba1a3501e9d79e5bbad8 Mon Sep 17 00:00:00 2001 +From: Eelco Dolstra <eelco.dolstra@logicblox.com> +Date: Wed, 31 Oct 2012 11:53:56 +0100 +Subject: [PATCH] dbus-manager: fix a fatal dbus abort in + bus_manager_message_handler() + +If ListUnitFiles fails, or an OOM occurs, then dbus_message_unref() +will be called twice on "reply", causing systemd to crash. So remove +the call to dbus_message_unref(); it is unnecessary because of +the cleanup attribute on "reply". + +[zj: modified to leave one dbus_message_unref() alone, per Colin +Walters' comment.] +--- + src/core/dbus-manager.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c +index 2010241..3cf3e90 100644 +--- a/src/core/dbus-manager.c ++++ b/src/core/dbus-manager.c +@@ -1436,7 +1436,6 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, + r = unit_file_get_list(m->running_as == SYSTEMD_SYSTEM ? UNIT_FILE_SYSTEM : UNIT_FILE_USER, NULL, h); + if (r < 0) { + unit_file_list_free(h); +- dbus_message_unref(reply); + return bus_send_error_reply(connection, message, NULL, r); + } + +-- +1.7.10.4 + Index: fix-permissions-btmp.patch =================================================================== --- fix-permissions-btmp.patch (added) +++ fix-permissions-btmp.patch (revision 5) @@ -0,0 +1,13 @@ +Index: systemd-44/tmpfiles.d/systemd.conf +=================================================================== +--- systemd-44.orig/tmpfiles.d/systemd.conf ++++ systemd-44/tmpfiles.d/systemd.conf +@@ -11,7 +11,7 @@ d /run/user 0755 root root 10d + F /run/utmp 0664 root utmp - + + f /var/log/wtmp 0664 root utmp - +-f /var/log/btmp 0600 root utmp - ++f /var/log/btmp 0600 root root - + + d /var/cache/man - - - 30d + Index: mount-efivars.patch =================================================================== --- mount-efivars.patch (added) +++ mount-efivars.patch (revision 5) @@ -0,0 +1,336 @@ +From f271dd97622b656c1c013d181ea615c671cc2438 Mon Sep 17 00:00:00 2001 +From: "Lee, Chun-Yi" <joeyli.kernel@gmail.com> +Date: Sat, 27 Oct 2012 11:23:22 +0800 +Subject: [PATCH] systemd: mount the EFI variable filesystem +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Add efivarfs to the mount_table in mount-setup.c, so the EFI variable +filesystem will be mounted when systemd executed. + +The EFI variable filesystem will merge in v3.7 or v3.8 linux kernel. + +Cc: Kay Sievers <kay@vrfy.org> +Cc: Lennart Poettering <lennart@poettering.net> +Cc: Mantas Mikulėnas <grawity@gmail.com> +Cc: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> +Cc: Matt Fleming <matt.fleming@intel.com> +Cc: Jeremy Kerr <jeremy.kerr@canonical.com> +Cc: Matthew Garrett <mjg@redhat.com> +Signed-off-by: Lee, Chun-Yi <jlee@suse.com> +--- + src/core/kmod-setup.c | 7 ++++--- + src/core/mount-setup.c | 1 + + 2 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index cc2a2d9..ce8a8e7 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -31,9 +31,10 @@ + #include "kmod-setup.h" + + static const char * const kmod_table[] = { +- "autofs4", "/sys/class/misc/autofs", +- "ipv6", "/sys/module/ipv6", +- "unix", "/proc/net/unix" ++ "autofs4", "/sys/class/misc/autofs", ++ "ipv6", "/sys/module/ipv6", ++ "efivarfs", "/sys/firmware/efi/efivars", ++ "unix", "/proc/net/unix" + }; + + #pragma GCC diagnostic push +diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c +index 0fd112f..9894c7f 100644 +--- a/src/core/mount-setup.c ++++ b/src/core/mount-setup.c +@@ -66,6 +66,7 @@ static const MountPoint mount_table[] = { + { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, + { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, true, true }, + { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, ++ { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, + { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, + { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, false, true }, + { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +-- +1.7.10.4 + +From c1e5704657315b436c0409e8172c1fcb76adccad Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:06:27 +0100 +Subject: [PATCH] shared: add is_efiboot() + +--- + src/shared/util.c | 4 ++++ + src/shared/util.h | 2 ++ + 2 files changed, 6 insertions(+) + +diff --git a/src/shared/util.c b/src/shared/util.c +index 2a8afae..9983695 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -77,6 +77,10 @@ char **saved_argv = NULL; + static volatile unsigned cached_columns = 0; + static volatile unsigned cached_lines = 0; + ++bool is_efiboot(void) { ++ return access("/sys/firmware/efi", F_OK) >= 0; ++} ++ + size_t page_size(void) { + static __thread size_t pgsz = 0; + long r; +diff --git a/src/shared/util.h b/src/shared/util.h +index e387b12..99972cc 100644 +--- a/src/shared/util.h ++++ b/src/shared/util.h +@@ -90,6 +90,8 @@ union dirent_storage { + #define ANSI_HIGHLIGHT_YELLOW_ON "\x1B[1;33m" + #define ANSI_HIGHLIGHT_OFF "\x1B[0m" + ++bool is_efiboot(void); ++ + usec_t now(clockid_t clock); + + dual_timestamp* dual_timestamp_get(dual_timestamp *ts); +-- +1.7.10.4 + +From 1022373284b7562431fb0a6dba45db8af089a0e3 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:54:19 +0100 +Subject: [PATCH] kmod-setup: add conditional module loading callback + +--- + src/core/kmod-setup.c | 32 ++++++++++++++++++++------------ + 1 file changed, 20 insertions(+), 12 deletions(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index ce8a8e7..383a6b2 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -30,11 +30,17 @@ + + #include "kmod-setup.h" + +-static const char * const kmod_table[] = { +- "autofs4", "/sys/class/misc/autofs", +- "ipv6", "/sys/module/ipv6", +- "efivarfs", "/sys/firmware/efi/efivars", +- "unix", "/proc/net/unix" ++typedef struct Kmodule { ++ const char *name; ++ const char *directory; ++ bool (*condition_fn)(void); ++} KModule; ++ ++static const KModule kmod_table[] = { ++ { "autofs4", "/sys/class/misc/autofs", NULL } , ++ { "ipv6", "/sys/module/ipv6", NULL }, ++ { "efivarfs", "/sys/firmware/efi/efivars", NULL }, ++ { "unix", "/proc/net/unix", NULL } , + }; + + #pragma GCC diagnostic push +@@ -42,7 +48,8 @@ static const char * const kmod_table[] = { + static void systemd_kmod_log(void *data, int priority, const char *file, int line, + const char *fn, const char *format, va_list args) + { +- log_metav(priority, file, line, fn, format, args); ++ /* library logging is enabled at debug only */ ++ log_metav(LOG_DEBUG, file, line, fn, format, args); + } + #pragma GCC diagnostic pop + +@@ -53,13 +60,15 @@ int kmod_setup(void) { + int err; + + for (i = 0; i < ELEMENTSOF(kmod_table); i += 2) { ++ if (kmod_table[i].condition_fn && !kmod_table[i].condition_fn()) ++ continue; + +- if (access(kmod_table[i+1], F_OK) >= 0) ++ if (access(kmod_table[i].directory, F_OK) >= 0) + continue; + + log_debug("Your kernel apparently lacks built-in %s support. Might be a good idea to compile it in. " + "We'll now try to work around this by loading the module...", +- kmod_table[i]); ++ kmod_table[i].name); + + if (!ctx) { + ctx = kmod_new(NULL, NULL); +@@ -69,13 +78,12 @@ int kmod_setup(void) { + } + + kmod_set_log_fn(ctx, systemd_kmod_log, NULL); +- + kmod_load_resources(ctx); + } + +- err = kmod_module_new_from_name(ctx, kmod_table[i], &mod); ++ err = kmod_module_new_from_name(ctx, kmod_table[i].name, &mod); + if (err < 0) { +- log_error("Failed to load module '%s'", kmod_table[i]); ++ log_error("Failed to lookup module '%s'", kmod_table[i].name); + continue; + } + +@@ -85,7 +93,7 @@ int kmod_setup(void) { + else if (err == KMOD_PROBE_APPLY_BLACKLIST) + log_info("Module '%s' is blacklisted", kmod_module_get_name(mod)); + else +- log_error("Failed to insert '%s'", kmod_module_get_name(mod)); ++ log_error("Failed to insert module '%s'", kmod_module_get_name(mod)); + + kmod_module_unref(mod); + } +-- +1.7.10.4 + +From 3dfb265083347cb5700dc38f7cc0f479f378e6e9 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:55:23 +0100 +Subject: [PATCH] kmod-setup: mounting efivarfs, *after* we tried to mount it, + is pointless + +The mount() system call, which we issue before loading modules, will trigger +a modprobe by the kernel and block until it returns. Trying to load it again +later, will have exactly the same result as the first time. +--- + src/core/kmod-setup.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index 383a6b2..20ab232 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -39,7 +39,6 @@ typedef struct Kmodule { + static const KModule kmod_table[] = { + { "autofs4", "/sys/class/misc/autofs", NULL } , + { "ipv6", "/sys/module/ipv6", NULL }, +- { "efivarfs", "/sys/firmware/efi/efivars", NULL }, + { "unix", "/proc/net/unix", NULL } , + }; + +-- +1.7.10.4 + +From 6aa220e019f9dffd96590b06b68f937985204109 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 17:03:48 +0100 +Subject: [PATCH] mount-setup: try mounting 'efivarfs' only if the system + bootet with EFI + +--- + TODO | 3 --- + src/core/mount-setup.c | 50 ++++++++++++++++++++++++++++++++---------------- + 2 files changed, 34 insertions(+), 19 deletions(-) + +diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c +index 9894c7f..98614d0 100644 +--- a/src/core/mount-setup.c ++++ b/src/core/mount-setup.c +@@ -46,14 +46,20 @@ + #define TTY_GID 5 + #endif + ++typedef enum MountMode { ++ MNT_NONE = 0, ++ MNT_FATAL = 1 << 0, ++ MNT_IN_CONTAINER = 1 << 1, ++} MountMode; ++ + typedef struct MountPoint { + const char *what; + const char *where; + const char *type; + const char *options; + unsigned long flags; +- bool fatal; +- bool in_container; ++ bool (*condition_fn)(void); ++ MountMode mode; + } MountPoint; + + /* The first three entries we might need before SELinux is up. The +@@ -62,16 +68,26 @@ typedef struct MountPoint { + #define N_EARLY_MOUNT 4 + + static const MountPoint mount_table[] = { +- { "proc", "/proc", "proc", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, +- { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, +- { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, true, true }, +- { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, +- { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, +- { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +- { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, false, true }, +- { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +- { "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME, false, true }, +- { "cgroup", "/sys/fs/cgroup/systemd", "cgroup", "none,name=systemd", MS_NOSUID|MS_NOEXEC|MS_NODEV, false, true }, ++ { "proc", "/proc", "proc", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_NONE }, ++ { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ is_efiboot, MNT_NONE }, ++ { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, ++ NULL, MNT_IN_CONTAINER }, ++ { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_IN_CONTAINER }, ++ { "cgroup", "/sys/fs/cgroup/systemd", "cgroup", "none,name=systemd", MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_IN_CONTAINER }, + }; + + /* These are API file systems that might be mounted by other software, +@@ -119,6 +135,9 @@ static int mount_one(const MountPoint *p, bool relabel) { + + assert(p); + ++ if (p->condition_fn && !p->condition_fn()) ++ return 0; ++ + /* Relabel first, just in case */ + if (relabel) + label_fix(p->where, true, true); +@@ -131,7 +150,7 @@ static int mount_one(const MountPoint *p, bool relabel) { + return 0; + + /* Skip securityfs in a container */ +- if (!p->in_container && detect_container(NULL) > 0) ++ if (!(p->mode & MNT_IN_CONTAINER) && detect_container(NULL) > 0) + return 0; + + /* The access mode here doesn't really matter too much, since +@@ -149,8 +168,8 @@ static int mount_one(const MountPoint *p, bool relabel) { + p->type, + p->flags, + p->options) < 0) { +- log_full(p->fatal ? LOG_ERR : LOG_DEBUG, "Failed to mount %s: %s", p->where, strerror(errno)); +- return p->fatal ? -errno : 0; ++ log_full((p->mode & MNT_FATAL) ? LOG_ERR : LOG_DEBUG, "Failed to mount %s: %s", p->where, strerror(errno)); ++ return (p->mode & MNT_FATAL) ? -errno : 0; + } + + /* Relabel again, since we now mounted something fresh here */ +@@ -289,7 +308,6 @@ int mount_cgroup_controllers(char ***join_controllers) { + p.type = "cgroup"; + p.options = options; + p.flags = MS_NOSUID|MS_NOEXEC|MS_NODEV; +- p.fatal = false; + + r = mount_one(&p, true); + free(controller); +-- +1.7.10.4 + Index: sync-on-shutdown.patch =================================================================== --- sync-on-shutdown.patch (added) +++ sync-on-shutdown.patch (revision 5) @@ -0,0 +1,49 @@ +From 0049f05a8bb82c3e084bacc5945596761d706c55 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering <lennart@poettering.net> +Date: Fri, 16 Nov 2012 01:30:29 +0100 +Subject: [PATCH] shutdown: readd explicit sync() when shutting down + +As it turns out reboot() doesn't actually imply a file system sync, but +only a disk sync. Accordingly, readd explicit sync() invocations +immediately before we invoke reboot(). + +This is much less dramatic than it might sounds as we umount all +disks/read-only remount them anyway before going down. +--- + src/core/service.c | 1 + + src/core/shutdown.c | 7 +++++++ + 2 files changed, 8 insertions(+) + +diff --git a/src/core/service.c b/src/core/service.c +index cf08485..df72aba 100644 +--- a/src/core/service.c ++++ b/src/core/service.c +@@ -2485,6 +2485,7 @@ static int service_start_limit_test(Service *s) { + + case SERVICE_START_LIMIT_REBOOT_IMMEDIATE: + log_warning("%s start request repeated too quickly, rebooting immediately.", UNIT(s)->id); ++ sync(); + reboot(RB_AUTOBOOT); + break; + +diff --git a/src/core/shutdown.c b/src/core/shutdown.c +index cc8c57b..b59aef1 100644 +--- a/src/core/shutdown.c ++++ b/src/core/shutdown.c +@@ -273,6 +273,13 @@ int main(int argc, char *argv[]) { + } + } + ++ /* The kernel will automaticall flush ATA disks and suchlike ++ * on reboot(), but the file systems need to be synce'd ++ * explicitly in advance. So let's do this here, but not ++ * needlessly slow down containers. */ ++ if (!in_container) ++ sync(); ++ + if (cmd == LINUX_REBOOT_CMD_KEXEC) { + + if (!in_container) { +-- +1.7.10.4 + Index: systemd-journald.init =================================================================== --- systemd-journald.init (added) +++ systemd-journald.init (revision 5) @@ -0,0 +1,33 @@ +#! /bin/sh +# +# Copyright (c) 2001-2002 SuSE Linux AG, Nuernberg, Germany. +# All rights reserved. +# +# /etc/init.d/systemd-journald +# +### BEGIN INIT INFO +# Provides: syslog +# Required-Start: $null +# Required-Stop: $null +# Default-Start: 2 3 5 +# Default-Stop: +# Short-Description: compat wrapper for journald +# Description: compat wrapper for journald +### END INIT INFO + +. /etc/rc.status + +rc_reset + +case "$1" in + start|stop|restart) + rc_failed 3 + rc_status -v + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 + ;; +esac + +rc_exit Index: xdm-display-manager.patch =================================================================== --- xdm-display-manager.patch (added) +++ xdm-display-manager.patch (revision 5) @@ -0,0 +1,13 @@ +Index: systemd-195/units/graphical.target +=================================================================== +--- systemd-195.orig/units/graphical.target ++++ systemd-195/units/graphical.target +@@ -11,7 +11,7 @@ Documentation=man:systemd.special(7) + Requires=multi-user.target + After=multi-user.target + Conflicts=rescue.target +-Wants=display-manager.service ++Wants=xdm.service + AllowIsolate=yes + + [Install] OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=312
2012-11-20 13:10:12 +01:00
%defattr(-,root,root)
%attr(0755,root,root) /usr/bin/systemd-analyze
- links more manpages for migrated tools (from Christopher Yeleighton). - disable boot.localnet service, ypbind service will do the right thing now (bnc#716746) - add xdm-display-manager.patch: pull xdm.service instead of display-manager.service (needed until xdm initscript is migrated to native systemd service). - Add fix-permissions-btmp.patch: ensure btmp is owned only by root (bnc#777405). - Have the udev package create a tape group, as referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules (DimStar). - Add fix-bad-memory-access.patch: fix crash in journal rotation. - Add fix-dbus-crash.patch: fix D-Bus caused crash. - Add sync-on-shutdown.patch: ensure sync is done when initiating shutdown. - Add mount-efivars.patch: mount efivars if booting on UEFI. - Ship a empty systemd-journald initscript in systemd-logger to stop insserv to complain about missing syslog dependency. - Update 0001-service-Fix-dependencies-added-when-parsing-insserv..patch with bug fixes from Debian. old: Base:System/systemd new: home:fcrozat:branches:Base:System/systemd rev NoneIndex: 0001-service-Fix-dependencies-added-when-parsing-insserv..patch =================================================================== --- 0001-service-Fix-dependencies-added-when-parsing-insserv..patch (revision 311) +++ 0001-service-Fix-dependencies-added-when-parsing-insserv..patch (revision 5) @@ -1,17 +1,35 @@ -From 6620bceb7233a830be3635a4f7a7dc75c13a9c8e Mon Sep 17 00:00:00 2001 -From: Frederic Crozat <fcrozat@suse.com> -Date: Fri, 30 Sep 2011 14:12:45 +0200 -Subject: [PATCH] service: Fix dependencies added when parsing insserv.conf - ---- - src/service.c | 16 +++++++++------- - 1 files changed, 9 insertions(+), 7 deletions(-) - -Index: systemd-41/src/service.c +Index: systemd-195/src/core/service.c =================================================================== ---- systemd-41.orig/src/core/service.c -+++ systemd-41/src/core/service.c -@@ -3210,23 +3210,30 @@ static void sysv_facility_in_insserv_con +--- systemd-195.orig/src/core/service.c ++++ systemd-195/src/core/service.c +@@ -3391,12 +3391,13 @@ static void service_notify_message(Unit + + #ifdef HAVE_SYSV_COMPAT + +-#ifdef TARGET_SUSE +-static void sysv_facility_in_insserv_conf(Manager *mgr) { +- FILE *f=NULL; ++#if defined(TARGET_SUSE) || defined(TARGET_DEBIAN) ++static void sysv_parse_insserv_conf(Manager *mgr, const char* filename) { ++ FILE *f = NULL; + int r; + +- if (!(f = fopen("/etc/insserv.conf", "re"))) { ++ if (!(f = fopen(filename, "re"))) { ++ log_error("Failed to open file %s", filename); + r = errno == ENOENT ? 0 : -errno; + goto finish; + } +@@ -3410,7 +3411,7 @@ static void sysv_facility_in_insserv_con + break; + + r = -errno; +- log_error("Failed to read configuration file '/etc/insserv.conf': %s", strerror(-r)); ++ log_error("Failed to read configuration file '%s': %s", filename, strerror(-r)); + goto finish; + } + +@@ -3425,23 +3426,30 @@ static void sysv_facility_in_insserv_con Unit *u; if (sysv_translate_facility(parsed[0], NULL, &facility) < 0) continue; @@ -29,12 +47,12 @@ STRV_FOREACH (j, parsed+1) { - if (*j[0]=='+') { - e = UNIT_WANTS; -+ if (*j[0]=='+') ++ if (*j[0] == '+') name = *j+1; - } - else { - e = UNIT_REQUIRES; -+ else ++ else name = *j; - } + if (streq(name, "boot.localfs") || @@ -44,9 +62,54 @@ continue; - r = unit_add_two_dependencies_by_name(u, UNIT_BEFORE, e, dep, NULL, true); -+ r = unit_add_dependency_by_name_inverse(u, UNIT_BEFORE, dep, NULL, true); -+ if (*j[0]!='+') ++ r = unit_add_two_dependencies_by_name_inverse(u, UNIT_WANTS, UNIT_BEFORE, dep, NULL, true); ++ if (*j[0] != '+') + r = unit_add_dependency_by_name(u, UNIT_REQUIRES, dep, NULL, true); free(dep); } } +@@ -3454,6 +3462,35 @@ finish: + fclose(f); + + } ++ ++static void sysv_facility_in_insserv_conf(Manager *mgr) { ++ DIR *d =NULL; ++ struct dirent *de; ++ ++#ifdef TARGET_DEBIAN ++ if (!(d = opendir("/etc/insserv.conf.d/"))) ++ if (errno != ENOENT) { ++ log_warning("opendir() failed on /etc/insserv.conf.d/ %s", strerror(errno)); ++ goto finish; ++ } ++ ++ while ((de = readdir(d))) { ++ char *path = NULL; ++ if (ignore_file(de->d_name)) ++ continue; ++ ++ path = join("/etc/insserv.conf.d/", de->d_name, NULL); ++ sysv_parse_insserv_conf(mgr, path); ++ free(path); ++ } ++finish: ++ if (d) ++ closedir(d); ++#endif ++ ++ sysv_parse_insserv_conf(mgr, "/etc/insserv.conf"); ++} ++ + #endif + + static int service_enumerate(Manager *m) { +@@ -3604,7 +3641,7 @@ static int service_enumerate(Manager *m) + + r = 0; + +-#ifdef TARGET_SUSE ++#if defined(TARGET_SUSE) || defined(TARGET_DEBIAN) + sysv_facility_in_insserv_conf (m); + #endif + Index: systemd-mini.changes =================================================================== --- systemd-mini.changes (revision 311) +++ systemd-mini.changes (revision 5) @@ -1,4 +1,35 @@ ------------------------------------------------------------------- +Tue Nov 20 09:36:43 UTC 2012 - fcrozat@suse.com + +- links more manpages for migrated tools (from Christopher + Yeleighton). +- disable boot.localnet service, ypbind service will do the right + thing now (bnc#716746) +- add xdm-display-manager.patch: pull xdm.service instead of + display-manager.service (needed until xdm initscript is migrated + to native systemd service). +- Add fix-permissions-btmp.patch: ensure btmp is owned only by root + (bnc#777405). +- Have the udev package create a tape group, as referenced by + 50-udev-default.rules and 60-persistent-storage-tape.rules + (DimStar). +- Add fix-bad-memory-access.patch: fix crash in journal rotation. +- Add fix-dbus-crash.patch: fix D-Bus caused crash. +- Add sync-on-shutdown.patch: ensure sync is done when initiating + shutdown. +- Add mount-efivars.patch: mount efivars if booting on UEFI. + + +------------------------------------------------------------------- +Thu Nov 15 14:31:28 UTC 2012 - fcrozat@suse.com + +- Ship a empty systemd-journald initscript in systemd-logger to + stop insserv to complain about missing syslog dependency. +- Update + 0001-service-Fix-dependencies-added-when-parsing-insserv..patch + with bug fixes from Debian. + +------------------------------------------------------------------- Wed Nov 14 17:36:05 UTC 2012 - fcrozat@suse.com - /var/log/journal is now only provided by systemd-logger (journal Index: systemd-mini.spec =================================================================== --- systemd-mini.spec (revision 311) +++ systemd-mini.spec (revision 5) @@ -102,6 +102,7 @@ Source5: systemd-insserv_conf Source6: baselibs.conf Source7: libgcrypt.m4 +Source8: systemd-journald.init Source1060: boot.udev Source1061: write_dev_root_rule @@ -128,6 +129,8 @@ Patch56: support-suse-clock-sysconfig.patch Patch59: fix-enable-disable-boot-initscript.patch Patch60: var-run-lock.patch +Patch63: xdm-display-manager.patch +Patch64: fix-permissions-btmp.patch # Upstream First - Policy: # Never add any patches to this package without the upstream commit id @@ -137,6 +140,14 @@ Patch61: fix-logind-pty-seat.patch # PATCH-FIX-UPSTREAM fix-build-glibc217.patch fcrozat@suse.com -- fix build with latest glibc Patch62: fix-build-glibc217.patch +# PATCH-FIX-UPSTREAM fix-bad-memory-access.patch fcrozat@suse.com -- fix bad memory access +Patch65: fix-bad-memory-access.patch +# PATCH-FIX-UPSTREAM fix-dbus-crash.patch fcrozat@suse.com -- fix D-Bus caused crash +Patch66: fix-dbus-crash.patch +# PATCH-FIX-UPSTREAM sync-on-shutdown.patch fcrozat@suse.com -- Sync on shutdown +Patch67: sync-on-shutdown.patch +# PATCH-FIX-UPSTREAM mount-efivars.patch fcrozat@suse.com -- mount efivars if booting under UEFI +Patch68: mount-efivars.patch # udev patches # PATCH-FIX-OPENSUSE 0001-Reinstate-TIMEOUT-handling.patch @@ -151,8 +162,6 @@ # PATCH-FIX-OPENSUSE 0027-udev-fix-sg-autoload-regression.patch Patch1027: 0027-udev-fix-sg-autoload-regression.patch -# systemd patches - %description Systemd is a system and service manager, compatible with SysV and LSB init scripts for Linux. systemd provides aggressive parallelization @@ -313,6 +322,7 @@ %patch1026 -p1 %patch1027 -p1 +#systemd %patch1 -p1 %patch6 -p1 # don't apply when bootstrapping to not modify configure.in @@ -337,6 +347,12 @@ %patch60 -p1 %patch61 -p1 %patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 %build autoreconf -fiv @@ -368,8 +384,14 @@ ln -sf %{_bindir}/systemd-ask-password $RPM_BUILD_ROOT/bin/systemd-ask-password ln -sf %{_bindir}/systemctl $RPM_BUILD_ROOT/bin/systemctl ln -sf %{_prefix}/lib/systemd/systemd-udevd $RPM_BUILD_ROOT/sbin/udevd +%if ! 0%{?bootstrap} +ln -sf systemd-udevd.8 $RPM_BUILD_ROOT/%{_mandir}/man8/udevd.8 +%endif mkdir -p $RPM_BUILD_ROOT/%{_prefix}/usr/lib/firmware/updates ln -sf /lib/firmware $RPM_BUILD_ROOT/usr/lib/firmware +%if ! 0%{?bootstrap} +install -m755 -D %{S:8} $RPM_BUILD_ROOT/etc/init.d/systemd-journald +%endif install -m755 -D %{S:1060} $RPM_BUILD_ROOT/etc/init.d/boot.udev ln -s systemd-udevd.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev.service @@ -378,11 +400,6 @@ mkdir -p $RPM_BUILD_ROOT/lib/systemd/system/basic.target.wants ln -sf ../udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants -#fix manpages -%if ! 0%{?bootstrap} -sed -i -e 's,^\(\.so \)\(.*\.\)\([0-9]\),\1man\3/\2\3,g' %{buildroot}/%{_mandir}/*/* -%endif - #workaround for 716939 chmod 644 %{buildroot}%{_bindir}/systemd-analyze mkdir -p %{buildroot}%{_sysconfdir}/rpm @@ -392,7 +409,7 @@ install -m755 %{S:3} -D %{buildroot}%{_sbindir}/systemd-sysv-convert # do not install, code has been fixed, might be useful in the future -#install -m755 %{S:5} %{buildroot}/lib/systemd/system-generators +#install -m755 %{S:5} %{buildroot}/usr/lib/systemd/system-generators ln -s ../usr/lib/systemd/systemd %{buildroot}/bin/systemd ln -s ../usr/lib/systemd/systemd %{buildroot}/sbin/init ln -s ../usr/bin/systemctl %{buildroot}/sbin/reboot @@ -415,8 +432,7 @@ ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/ldconfig.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/loadmodules.service install -m644 %{S:2} %{buildroot}/%{_prefix}/lib/systemd/system/localfs.service -# need to be implemented in systemd directly -#ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service +ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/proc.service ln -s systemd-fsck-root.service %{buildroot}/%{_prefix}/lib/systemd/system/rootfsck.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/single.service @@ -442,8 +458,12 @@ %endif # legacy links -ln -s loginctl %{buildroot}%{_bindir}/systemd-loginctl -ln -s journalctl %{buildroot}%{_bindir}/systemd-journalctl +for f in loginctl journalctl ; do + ln -s $f %{buildroot}%{_bindir}/systemd-$f +%if ! 0%{?bootstrap} + ln -s $f.1 %{buildroot}%{_mandir}/man1/systemd-$f.1 +%endif +done ln -s /usr/lib/udev %{buildroot}/lib/udev # Create the /var/log/journal directory to change the volatile journal to a persistent one @@ -532,6 +552,8 @@ elif [ ! -e /lib/udev ]; then ln -s /usr/lib/udev /lib/udev fi +# Create "tape" group which is referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules +/usr/sbin/groupadd -r tape 2> /dev/null || : # kill daemon if we are not in a chroot if test -f /proc/1/exe -a -d /proc/1/root ; then if test "$(stat -Lc '%%D-%%i' /)" = "$(stat -Lc '%%D-%%i' /proc/1/root)"; then @@ -724,6 +746,10 @@ %exclude %{_mandir}/man8/telinit.8* %exclude %{_mandir}/man8/runlevel.8* %exclude %{_mandir}/man*/*udev*.[0-9]* + +# Packaged in analyze subpackage +%exclude %{_mandir}/man1/systemd-analyze.1* + %{_mandir}/man1/*.1* %{_mandir}/man3/*.3* %{_mandir}/man5/*.5* @@ -787,7 +813,11 @@ %endif %files analyze +%defattr(-,root,root) %attr(0755,root,root) /usr/bin/systemd-analyze +%if ! 0%{?bootstrap} +%{_mandir}/man1/systemd-analyze.1* +%endif %files -n %{udevpkgname} %defattr(-,root,root) @@ -878,6 +908,7 @@ %defattr(-,root,root) %dir /var/log/journal /var/log/README +/etc/init.d/systemd-journald %endif Index: systemd.changes =================================================================== --- systemd.changes (revision 311) +++ systemd.changes (revision 5) @@ -1,4 +1,35 @@ ------------------------------------------------------------------- +Tue Nov 20 09:36:43 UTC 2012 - fcrozat@suse.com + +- links more manpages for migrated tools (from Christopher + Yeleighton). +- disable boot.localnet service, ypbind service will do the right + thing now (bnc#716746) +- add xdm-display-manager.patch: pull xdm.service instead of + display-manager.service (needed until xdm initscript is migrated + to native systemd service). +- Add fix-permissions-btmp.patch: ensure btmp is owned only by root + (bnc#777405). +- Have the udev package create a tape group, as referenced by + 50-udev-default.rules and 60-persistent-storage-tape.rules + (DimStar). +- Add fix-bad-memory-access.patch: fix crash in journal rotation. +- Add fix-dbus-crash.patch: fix D-Bus caused crash. +- Add sync-on-shutdown.patch: ensure sync is done when initiating + shutdown. +- Add mount-efivars.patch: mount efivars if booting on UEFI. + + +------------------------------------------------------------------- +Thu Nov 15 14:31:28 UTC 2012 - fcrozat@suse.com + +- Ship a empty systemd-journald initscript in systemd-logger to + stop insserv to complain about missing syslog dependency. +- Update + 0001-service-Fix-dependencies-added-when-parsing-insserv..patch + with bug fixes from Debian. + +------------------------------------------------------------------- Wed Nov 14 17:36:05 UTC 2012 - fcrozat@suse.com - /var/log/journal is now only provided by systemd-logger (journal Index: systemd.spec =================================================================== --- systemd.spec (revision 311) +++ systemd.spec (revision 5) @@ -97,6 +97,7 @@ Source5: systemd-insserv_conf Source6: baselibs.conf Source7: libgcrypt.m4 +Source8: systemd-journald.init Source1060: boot.udev Source1061: write_dev_root_rule @@ -123,6 +124,8 @@ Patch56: support-suse-clock-sysconfig.patch Patch59: fix-enable-disable-boot-initscript.patch Patch60: var-run-lock.patch +Patch63: xdm-display-manager.patch +Patch64: fix-permissions-btmp.patch # Upstream First - Policy: # Never add any patches to this package without the upstream commit id @@ -132,6 +135,14 @@ Patch61: fix-logind-pty-seat.patch # PATCH-FIX-UPSTREAM fix-build-glibc217.patch fcrozat@suse.com -- fix build with latest glibc Patch62: fix-build-glibc217.patch +# PATCH-FIX-UPSTREAM fix-bad-memory-access.patch fcrozat@suse.com -- fix bad memory access +Patch65: fix-bad-memory-access.patch +# PATCH-FIX-UPSTREAM fix-dbus-crash.patch fcrozat@suse.com -- fix D-Bus caused crash +Patch66: fix-dbus-crash.patch +# PATCH-FIX-UPSTREAM sync-on-shutdown.patch fcrozat@suse.com -- Sync on shutdown +Patch67: sync-on-shutdown.patch +# PATCH-FIX-UPSTREAM mount-efivars.patch fcrozat@suse.com -- mount efivars if booting under UEFI +Patch68: mount-efivars.patch # udev patches # PATCH-FIX-OPENSUSE 0001-Reinstate-TIMEOUT-handling.patch @@ -146,8 +157,6 @@ # PATCH-FIX-OPENSUSE 0027-udev-fix-sg-autoload-regression.patch Patch1027: 0027-udev-fix-sg-autoload-regression.patch -# systemd patches - %description Systemd is a system and service manager, compatible with SysV and LSB init scripts for Linux. systemd provides aggressive parallelization @@ -308,6 +317,7 @@ %patch1026 -p1 %patch1027 -p1 +#systemd %patch1 -p1 %patch6 -p1 # don't apply when bootstrapping to not modify configure.in @@ -332,6 +342,12 @@ %patch60 -p1 %patch61 -p1 %patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 %build autoreconf -fiv @@ -363,8 +379,14 @@ ln -sf %{_bindir}/systemd-ask-password $RPM_BUILD_ROOT/bin/systemd-ask-password ln -sf %{_bindir}/systemctl $RPM_BUILD_ROOT/bin/systemctl ln -sf %{_prefix}/lib/systemd/systemd-udevd $RPM_BUILD_ROOT/sbin/udevd +%if ! 0%{?bootstrap} +ln -sf systemd-udevd.8 $RPM_BUILD_ROOT/%{_mandir}/man8/udevd.8 +%endif mkdir -p $RPM_BUILD_ROOT/%{_prefix}/usr/lib/firmware/updates ln -sf /lib/firmware $RPM_BUILD_ROOT/usr/lib/firmware +%if ! 0%{?bootstrap} +install -m755 -D %{S:8} $RPM_BUILD_ROOT/etc/init.d/systemd-journald +%endif install -m755 -D %{S:1060} $RPM_BUILD_ROOT/etc/init.d/boot.udev ln -s systemd-udevd.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev.service @@ -373,11 +395,6 @@ mkdir -p $RPM_BUILD_ROOT/lib/systemd/system/basic.target.wants ln -sf ../udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants -#fix manpages -%if ! 0%{?bootstrap} -sed -i -e 's,^\(\.so \)\(.*\.\)\([0-9]\),\1man\3/\2\3,g' %{buildroot}/%{_mandir}/*/* -%endif - #workaround for 716939 chmod 644 %{buildroot}%{_bindir}/systemd-analyze mkdir -p %{buildroot}%{_sysconfdir}/rpm @@ -387,7 +404,7 @@ install -m755 %{S:3} -D %{buildroot}%{_sbindir}/systemd-sysv-convert # do not install, code has been fixed, might be useful in the future -#install -m755 %{S:5} %{buildroot}/lib/systemd/system-generators +#install -m755 %{S:5} %{buildroot}/usr/lib/systemd/system-generators ln -s ../usr/lib/systemd/systemd %{buildroot}/bin/systemd ln -s ../usr/lib/systemd/systemd %{buildroot}/sbin/init ln -s ../usr/bin/systemctl %{buildroot}/sbin/reboot @@ -410,8 +427,7 @@ ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/ldconfig.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/loadmodules.service install -m644 %{S:2} %{buildroot}/%{_prefix}/lib/systemd/system/localfs.service -# need to be implemented in systemd directly -#ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service +ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/proc.service ln -s systemd-fsck-root.service %{buildroot}/%{_prefix}/lib/systemd/system/rootfsck.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/single.service @@ -437,8 +453,12 @@ %endif # legacy links -ln -s loginctl %{buildroot}%{_bindir}/systemd-loginctl -ln -s journalctl %{buildroot}%{_bindir}/systemd-journalctl +for f in loginctl journalctl ; do + ln -s $f %{buildroot}%{_bindir}/systemd-$f +%if ! 0%{?bootstrap} + ln -s $f.1 %{buildroot}%{_mandir}/man1/systemd-$f.1 +%endif +done ln -s /usr/lib/udev %{buildroot}/lib/udev # Create the /var/log/journal directory to change the volatile journal to a persistent one @@ -527,6 +547,8 @@ elif [ ! -e /lib/udev ]; then ln -s /usr/lib/udev /lib/udev fi +# Create "tape" group which is referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules +/usr/sbin/groupadd -r tape 2> /dev/null || : # kill daemon if we are not in a chroot if test -f /proc/1/exe -a -d /proc/1/root ; then if test "$(stat -Lc '%%D-%%i' /)" = "$(stat -Lc '%%D-%%i' /proc/1/root)"; then @@ -719,6 +741,10 @@ %exclude %{_mandir}/man8/telinit.8* %exclude %{_mandir}/man8/runlevel.8* %exclude %{_mandir}/man*/*udev*.[0-9]* + +# Packaged in analyze subpackage +%exclude %{_mandir}/man1/systemd-analyze.1* + %{_mandir}/man1/*.1* %{_mandir}/man3/*.3* %{_mandir}/man5/*.5* @@ -782,7 +808,11 @@ %endif %files analyze +%defattr(-,root,root) %attr(0755,root,root) /usr/bin/systemd-analyze +%if ! 0%{?bootstrap} +%{_mandir}/man1/systemd-analyze.1* +%endif %files -n %{udevpkgname} %defattr(-,root,root) @@ -873,6 +903,7 @@ %defattr(-,root,root) %dir /var/log/journal /var/log/README +/etc/init.d/systemd-journald %endif Index: fix-bad-memory-access.patch =================================================================== --- fix-bad-memory-access.patch (added) +++ fix-bad-memory-access.patch (revision 5) @@ -0,0 +1,23 @@ +From 7d73c1343be02a59b17de0cd34375deeb815d89c Mon Sep 17 00:00:00 2001 +From: Lennart Poettering <lennart@poettering.net> +Date: Tue, 20 Nov 2012 00:19:27 +0100 +Subject: [PATCH] journald: fix bad memory access + +https://bugzilla.redhat.com/show_bug.cgi?id=875653 +--- + src/journal/journald-server.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: systemd-195/src/journal/journald.c +=================================================================== +--- systemd-195.orig/src/journal/journald.c ++++ systemd-195/src/journal/journald.c +@@ -342,7 +342,7 @@ static void server_rotate(Server *s) { + HASHMAP_FOREACH_KEY(f, k, s->user_journals, i) { + r = journal_file_rotate(&f, s->compress, s->seal); + if (r < 0) +- if (f->path) ++ if (f) + log_error("Failed to rotate %s: %s", f->path, strerror(-r)); + else + log_error("Failed to create user journal: %s", strerror(-r)); Index: fix-dbus-crash.patch =================================================================== --- fix-dbus-crash.patch (added) +++ fix-dbus-crash.patch (revision 5) @@ -0,0 +1,32 @@ +From 645a9e5a2bbb06464a3fba1a3501e9d79e5bbad8 Mon Sep 17 00:00:00 2001 +From: Eelco Dolstra <eelco.dolstra@logicblox.com> +Date: Wed, 31 Oct 2012 11:53:56 +0100 +Subject: [PATCH] dbus-manager: fix a fatal dbus abort in + bus_manager_message_handler() + +If ListUnitFiles fails, or an OOM occurs, then dbus_message_unref() +will be called twice on "reply", causing systemd to crash. So remove +the call to dbus_message_unref(); it is unnecessary because of +the cleanup attribute on "reply". + +[zj: modified to leave one dbus_message_unref() alone, per Colin +Walters' comment.] +--- + src/core/dbus-manager.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c +index 2010241..3cf3e90 100644 +--- a/src/core/dbus-manager.c ++++ b/src/core/dbus-manager.c +@@ -1436,7 +1436,6 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, + r = unit_file_get_list(m->running_as == SYSTEMD_SYSTEM ? UNIT_FILE_SYSTEM : UNIT_FILE_USER, NULL, h); + if (r < 0) { + unit_file_list_free(h); +- dbus_message_unref(reply); + return bus_send_error_reply(connection, message, NULL, r); + } + +-- +1.7.10.4 + Index: fix-permissions-btmp.patch =================================================================== --- fix-permissions-btmp.patch (added) +++ fix-permissions-btmp.patch (revision 5) @@ -0,0 +1,13 @@ +Index: systemd-44/tmpfiles.d/systemd.conf +=================================================================== +--- systemd-44.orig/tmpfiles.d/systemd.conf ++++ systemd-44/tmpfiles.d/systemd.conf +@@ -11,7 +11,7 @@ d /run/user 0755 root root 10d + F /run/utmp 0664 root utmp - + + f /var/log/wtmp 0664 root utmp - +-f /var/log/btmp 0600 root utmp - ++f /var/log/btmp 0600 root root - + + d /var/cache/man - - - 30d + Index: mount-efivars.patch =================================================================== --- mount-efivars.patch (added) +++ mount-efivars.patch (revision 5) @@ -0,0 +1,336 @@ +From f271dd97622b656c1c013d181ea615c671cc2438 Mon Sep 17 00:00:00 2001 +From: "Lee, Chun-Yi" <joeyli.kernel@gmail.com> +Date: Sat, 27 Oct 2012 11:23:22 +0800 +Subject: [PATCH] systemd: mount the EFI variable filesystem +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Add efivarfs to the mount_table in mount-setup.c, so the EFI variable +filesystem will be mounted when systemd executed. + +The EFI variable filesystem will merge in v3.7 or v3.8 linux kernel. + +Cc: Kay Sievers <kay@vrfy.org> +Cc: Lennart Poettering <lennart@poettering.net> +Cc: Mantas Mikulėnas <grawity@gmail.com> +Cc: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> +Cc: Matt Fleming <matt.fleming@intel.com> +Cc: Jeremy Kerr <jeremy.kerr@canonical.com> +Cc: Matthew Garrett <mjg@redhat.com> +Signed-off-by: Lee, Chun-Yi <jlee@suse.com> +--- + src/core/kmod-setup.c | 7 ++++--- + src/core/mount-setup.c | 1 + + 2 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index cc2a2d9..ce8a8e7 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -31,9 +31,10 @@ + #include "kmod-setup.h" + + static const char * const kmod_table[] = { +- "autofs4", "/sys/class/misc/autofs", +- "ipv6", "/sys/module/ipv6", +- "unix", "/proc/net/unix" ++ "autofs4", "/sys/class/misc/autofs", ++ "ipv6", "/sys/module/ipv6", ++ "efivarfs", "/sys/firmware/efi/efivars", ++ "unix", "/proc/net/unix" + }; + + #pragma GCC diagnostic push +diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c +index 0fd112f..9894c7f 100644 +--- a/src/core/mount-setup.c ++++ b/src/core/mount-setup.c +@@ -66,6 +66,7 @@ static const MountPoint mount_table[] = { + { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, + { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, true, true }, + { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, ++ { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, + { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, + { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, false, true }, + { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +-- +1.7.10.4 + +From c1e5704657315b436c0409e8172c1fcb76adccad Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:06:27 +0100 +Subject: [PATCH] shared: add is_efiboot() + +--- + src/shared/util.c | 4 ++++ + src/shared/util.h | 2 ++ + 2 files changed, 6 insertions(+) + +diff --git a/src/shared/util.c b/src/shared/util.c +index 2a8afae..9983695 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -77,6 +77,10 @@ char **saved_argv = NULL; + static volatile unsigned cached_columns = 0; + static volatile unsigned cached_lines = 0; + ++bool is_efiboot(void) { ++ return access("/sys/firmware/efi", F_OK) >= 0; ++} ++ + size_t page_size(void) { + static __thread size_t pgsz = 0; + long r; +diff --git a/src/shared/util.h b/src/shared/util.h +index e387b12..99972cc 100644 +--- a/src/shared/util.h ++++ b/src/shared/util.h +@@ -90,6 +90,8 @@ union dirent_storage { + #define ANSI_HIGHLIGHT_YELLOW_ON "\x1B[1;33m" + #define ANSI_HIGHLIGHT_OFF "\x1B[0m" + ++bool is_efiboot(void); ++ + usec_t now(clockid_t clock); + + dual_timestamp* dual_timestamp_get(dual_timestamp *ts); +-- +1.7.10.4 + +From 1022373284b7562431fb0a6dba45db8af089a0e3 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:54:19 +0100 +Subject: [PATCH] kmod-setup: add conditional module loading callback + +--- + src/core/kmod-setup.c | 32 ++++++++++++++++++++------------ + 1 file changed, 20 insertions(+), 12 deletions(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index ce8a8e7..383a6b2 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -30,11 +30,17 @@ + + #include "kmod-setup.h" + +-static const char * const kmod_table[] = { +- "autofs4", "/sys/class/misc/autofs", +- "ipv6", "/sys/module/ipv6", +- "efivarfs", "/sys/firmware/efi/efivars", +- "unix", "/proc/net/unix" ++typedef struct Kmodule { ++ const char *name; ++ const char *directory; ++ bool (*condition_fn)(void); ++} KModule; ++ ++static const KModule kmod_table[] = { ++ { "autofs4", "/sys/class/misc/autofs", NULL } , ++ { "ipv6", "/sys/module/ipv6", NULL }, ++ { "efivarfs", "/sys/firmware/efi/efivars", NULL }, ++ { "unix", "/proc/net/unix", NULL } , + }; + + #pragma GCC diagnostic push +@@ -42,7 +48,8 @@ static const char * const kmod_table[] = { + static void systemd_kmod_log(void *data, int priority, const char *file, int line, + const char *fn, const char *format, va_list args) + { +- log_metav(priority, file, line, fn, format, args); ++ /* library logging is enabled at debug only */ ++ log_metav(LOG_DEBUG, file, line, fn, format, args); + } + #pragma GCC diagnostic pop + +@@ -53,13 +60,15 @@ int kmod_setup(void) { + int err; + + for (i = 0; i < ELEMENTSOF(kmod_table); i += 2) { ++ if (kmod_table[i].condition_fn && !kmod_table[i].condition_fn()) ++ continue; + +- if (access(kmod_table[i+1], F_OK) >= 0) ++ if (access(kmod_table[i].directory, F_OK) >= 0) + continue; + + log_debug("Your kernel apparently lacks built-in %s support. Might be a good idea to compile it in. " + "We'll now try to work around this by loading the module...", +- kmod_table[i]); ++ kmod_table[i].name); + + if (!ctx) { + ctx = kmod_new(NULL, NULL); +@@ -69,13 +78,12 @@ int kmod_setup(void) { + } + + kmod_set_log_fn(ctx, systemd_kmod_log, NULL); +- + kmod_load_resources(ctx); + } + +- err = kmod_module_new_from_name(ctx, kmod_table[i], &mod); ++ err = kmod_module_new_from_name(ctx, kmod_table[i].name, &mod); + if (err < 0) { +- log_error("Failed to load module '%s'", kmod_table[i]); ++ log_error("Failed to lookup module '%s'", kmod_table[i].name); + continue; + } + +@@ -85,7 +93,7 @@ int kmod_setup(void) { + else if (err == KMOD_PROBE_APPLY_BLACKLIST) + log_info("Module '%s' is blacklisted", kmod_module_get_name(mod)); + else +- log_error("Failed to insert '%s'", kmod_module_get_name(mod)); ++ log_error("Failed to insert module '%s'", kmod_module_get_name(mod)); + + kmod_module_unref(mod); + } +-- +1.7.10.4 + +From 3dfb265083347cb5700dc38f7cc0f479f378e6e9 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:55:23 +0100 +Subject: [PATCH] kmod-setup: mounting efivarfs, *after* we tried to mount it, + is pointless + +The mount() system call, which we issue before loading modules, will trigger +a modprobe by the kernel and block until it returns. Trying to load it again +later, will have exactly the same result as the first time. +--- + src/core/kmod-setup.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index 383a6b2..20ab232 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -39,7 +39,6 @@ typedef struct Kmodule { + static const KModule kmod_table[] = { + { "autofs4", "/sys/class/misc/autofs", NULL } , + { "ipv6", "/sys/module/ipv6", NULL }, +- { "efivarfs", "/sys/firmware/efi/efivars", NULL }, + { "unix", "/proc/net/unix", NULL } , + }; + +-- +1.7.10.4 + +From 6aa220e019f9dffd96590b06b68f937985204109 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 17:03:48 +0100 +Subject: [PATCH] mount-setup: try mounting 'efivarfs' only if the system + bootet with EFI + +--- + TODO | 3 --- + src/core/mount-setup.c | 50 ++++++++++++++++++++++++++++++++---------------- + 2 files changed, 34 insertions(+), 19 deletions(-) + +diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c +index 9894c7f..98614d0 100644 +--- a/src/core/mount-setup.c ++++ b/src/core/mount-setup.c +@@ -46,14 +46,20 @@ + #define TTY_GID 5 + #endif + ++typedef enum MountMode { ++ MNT_NONE = 0, ++ MNT_FATAL = 1 << 0, ++ MNT_IN_CONTAINER = 1 << 1, ++} MountMode; ++ + typedef struct MountPoint { + const char *what; + const char *where; + const char *type; + const char *options; + unsigned long flags; +- bool fatal; +- bool in_container; ++ bool (*condition_fn)(void); ++ MountMode mode; + } MountPoint; + + /* The first three entries we might need before SELinux is up. The +@@ -62,16 +68,26 @@ typedef struct MountPoint { + #define N_EARLY_MOUNT 4 + + static const MountPoint mount_table[] = { +- { "proc", "/proc", "proc", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, +- { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, +- { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, true, true }, +- { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, +- { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, +- { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +- { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, false, true }, +- { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +- { "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME, false, true }, +- { "cgroup", "/sys/fs/cgroup/systemd", "cgroup", "none,name=systemd", MS_NOSUID|MS_NOEXEC|MS_NODEV, false, true }, ++ { "proc", "/proc", "proc", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_NONE }, ++ { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ is_efiboot, MNT_NONE }, ++ { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, ++ NULL, MNT_IN_CONTAINER }, ++ { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_IN_CONTAINER }, ++ { "cgroup", "/sys/fs/cgroup/systemd", "cgroup", "none,name=systemd", MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_IN_CONTAINER }, + }; + + /* These are API file systems that might be mounted by other software, +@@ -119,6 +135,9 @@ static int mount_one(const MountPoint *p, bool relabel) { + + assert(p); + ++ if (p->condition_fn && !p->condition_fn()) ++ return 0; ++ + /* Relabel first, just in case */ + if (relabel) + label_fix(p->where, true, true); +@@ -131,7 +150,7 @@ static int mount_one(const MountPoint *p, bool relabel) { + return 0; + + /* Skip securityfs in a container */ +- if (!p->in_container && detect_container(NULL) > 0) ++ if (!(p->mode & MNT_IN_CONTAINER) && detect_container(NULL) > 0) + return 0; + + /* The access mode here doesn't really matter too much, since +@@ -149,8 +168,8 @@ static int mount_one(const MountPoint *p, bool relabel) { + p->type, + p->flags, + p->options) < 0) { +- log_full(p->fatal ? LOG_ERR : LOG_DEBUG, "Failed to mount %s: %s", p->where, strerror(errno)); +- return p->fatal ? -errno : 0; ++ log_full((p->mode & MNT_FATAL) ? LOG_ERR : LOG_DEBUG, "Failed to mount %s: %s", p->where, strerror(errno)); ++ return (p->mode & MNT_FATAL) ? -errno : 0; + } + + /* Relabel again, since we now mounted something fresh here */ +@@ -289,7 +308,6 @@ int mount_cgroup_controllers(char ***join_controllers) { + p.type = "cgroup"; + p.options = options; + p.flags = MS_NOSUID|MS_NOEXEC|MS_NODEV; +- p.fatal = false; + + r = mount_one(&p, true); + free(controller); +-- +1.7.10.4 + Index: sync-on-shutdown.patch =================================================================== --- sync-on-shutdown.patch (added) +++ sync-on-shutdown.patch (revision 5) @@ -0,0 +1,49 @@ +From 0049f05a8bb82c3e084bacc5945596761d706c55 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering <lennart@poettering.net> +Date: Fri, 16 Nov 2012 01:30:29 +0100 +Subject: [PATCH] shutdown: readd explicit sync() when shutting down + +As it turns out reboot() doesn't actually imply a file system sync, but +only a disk sync. Accordingly, readd explicit sync() invocations +immediately before we invoke reboot(). + +This is much less dramatic than it might sounds as we umount all +disks/read-only remount them anyway before going down. +--- + src/core/service.c | 1 + + src/core/shutdown.c | 7 +++++++ + 2 files changed, 8 insertions(+) + +diff --git a/src/core/service.c b/src/core/service.c +index cf08485..df72aba 100644 +--- a/src/core/service.c ++++ b/src/core/service.c +@@ -2485,6 +2485,7 @@ static int service_start_limit_test(Service *s) { + + case SERVICE_START_LIMIT_REBOOT_IMMEDIATE: + log_warning("%s start request repeated too quickly, rebooting immediately.", UNIT(s)->id); ++ sync(); + reboot(RB_AUTOBOOT); + break; + +diff --git a/src/core/shutdown.c b/src/core/shutdown.c +index cc8c57b..b59aef1 100644 +--- a/src/core/shutdown.c ++++ b/src/core/shutdown.c +@@ -273,6 +273,13 @@ int main(int argc, char *argv[]) { + } + } + ++ /* The kernel will automaticall flush ATA disks and suchlike ++ * on reboot(), but the file systems need to be synce'd ++ * explicitly in advance. So let's do this here, but not ++ * needlessly slow down containers. */ ++ if (!in_container) ++ sync(); ++ + if (cmd == LINUX_REBOOT_CMD_KEXEC) { + + if (!in_container) { +-- +1.7.10.4 + Index: systemd-journald.init =================================================================== --- systemd-journald.init (added) +++ systemd-journald.init (revision 5) @@ -0,0 +1,33 @@ +#! /bin/sh +# +# Copyright (c) 2001-2002 SuSE Linux AG, Nuernberg, Germany. +# All rights reserved. +# +# /etc/init.d/systemd-journald +# +### BEGIN INIT INFO +# Provides: syslog +# Required-Start: $null +# Required-Stop: $null +# Default-Start: 2 3 5 +# Default-Stop: +# Short-Description: compat wrapper for journald +# Description: compat wrapper for journald +### END INIT INFO + +. /etc/rc.status + +rc_reset + +case "$1" in + start|stop|restart) + rc_failed 3 + rc_status -v + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 + ;; +esac + +rc_exit Index: xdm-display-manager.patch =================================================================== --- xdm-display-manager.patch (added) +++ xdm-display-manager.patch (revision 5) @@ -0,0 +1,13 @@ +Index: systemd-195/units/graphical.target +=================================================================== +--- systemd-195.orig/units/graphical.target ++++ systemd-195/units/graphical.target +@@ -11,7 +11,7 @@ Documentation=man:systemd.special(7) + Requires=multi-user.target + After=multi-user.target + Conflicts=rescue.target +-Wants=display-manager.service ++Wants=xdm.service + AllowIsolate=yes + + [Install] OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=312
2012-11-20 13:10:12 +01:00
%if ! 0%{?bootstrap}
%{_mandir}/man1/systemd-analyze.1*
%endif
%files -n %{udevpkgname}
%defattr(-,root,root)
/sbin/udevd
/sbin/udevadm
# keep for compatibility
%ghost /lib/udev
%{_bindir}/udevadm
%{_prefix}/lib/firmware
%dir %{_prefix}/lib/udev/
%{_prefix}/lib/udev/accelerometer
%{_prefix}/lib/udev/ata_id
%{_prefix}/lib/udev/cdrom_id
%{_prefix}/lib/udev/collect
%{_prefix}/lib/udev/findkeyboards
%{_prefix}/lib/udev/keymap
%{_prefix}/lib/udev/mtd_probe
%{_prefix}/lib/udev/scsi_id
%{_prefix}/lib/udev/v4l_id
%{_prefix}/lib/udev/write_dev_root_rule
%dir %{_prefix}/lib/udev/keymaps
%{_prefix}/lib/udev/keymaps/*
%{_prefix}/lib/udev/keyboard-force-release.sh
%dir %{_prefix}/lib/udev/rules.d/
%exclude %{_prefix}/lib/udev/rules.d/70-uaccess.rules
%exclude %{_prefix}/lib/udev/rules.d/71-seat.rules
%exclude %{_prefix}/lib/udev/rules.d/73-seat-late.rules
%exclude %{_prefix}/lib/udev/rules.d/73-seat-numlock.rules
%exclude %{_prefix}/lib/udev/rules.d/99-systemd.rules
%{_prefix}/lib/udev/rules.d/*.rules
%{_sysconfdir}/init.d/boot.udev
%dir %{_sysconfdir}/udev/
%dir %{_sysconfdir}/udev/rules.d/
%config(noreplace) %{_sysconfdir}/udev/udev.conf
%if ! 0%{?bootstrap}
%{_mandir}/man?/*udev*.[0-9]*
%endif
%dir %{_prefix}/lib/systemd/system
%{_prefix}/lib/systemd/systemd-udevd
%{_prefix}/lib/systemd/system/udev-root-symlink.service
%{_prefix}/lib/systemd/system/*udev*.service
%{_prefix}/lib/systemd/system/systemd-udevd*.socket
%dir %{_prefix}/lib/systemd/system/sysinit.target.wants
%{_prefix}/lib/systemd/system/sysinit.target.wants/systemd-udev*.service
%dir %{_prefix}/lib/systemd/system/sockets.target.wants
%{_prefix}/lib/systemd/system/sockets.target.wants/systemd-udev*.socket
%files -n lib%{udevpkgname}%{udev_major}
%defattr(-,root,root)
%{_libdir}/libudev.so.*
%files -n lib%{udevpkgname}-devel
%defattr(-,root,root)
%{_includedir}/libudev.h
%{_libdir}/libudev.so
%{_datadir}/pkgconfig/udev.pc
%{_libdir}/pkgconfig/libudev.pc
%if ! 0%{?bootstrap}
%dir %{_datadir}/gtk-doc
%dir %{_datadir}/gtk-doc/html
%dir %{_datadir}/gtk-doc/html/libudev
%{_datadir}/gtk-doc/html/libudev/*
%endif
%if ! 0%{?bootstrap}
%files -n libgudev-1_0-0
%defattr(-,root,root)
%{_libdir}/libgudev-1.0.so.*
%files -n typelib-1_0-GUdev-1_0
%defattr(-,root,root)
%{_libdir}/girepository-1.0/GUdev-1.0.typelib
%files -n libgudev-1_0-devel
%defattr(-,root,root)
%dir %{_includedir}/gudev-1.0
%dir %{_includedir}/gudev-1.0/gudev
%{_includedir}/gudev-1.0/gudev/*.h
%{_libdir}/libgudev-1.0.so
%{_libdir}/pkgconfig/gudev-1.0.pc
%dir %{_datadir}/gtk-doc
%dir %{_datadir}/gtk-doc/html
%dir %{_datadir}/gtk-doc/html/gudev
%{_datadir}/gtk-doc/html/gudev/*
%{_datadir}/gir-1.0/GUdev-1.0.gir
%files logger
%defattr(-,root,root)
%dir /var/log/journal
/var/log/README
- links more manpages for migrated tools (from Christopher Yeleighton). - disable boot.localnet service, ypbind service will do the right thing now (bnc#716746) - add xdm-display-manager.patch: pull xdm.service instead of display-manager.service (needed until xdm initscript is migrated to native systemd service). - Add fix-permissions-btmp.patch: ensure btmp is owned only by root (bnc#777405). - Have the udev package create a tape group, as referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules (DimStar). - Add fix-bad-memory-access.patch: fix crash in journal rotation. - Add fix-dbus-crash.patch: fix D-Bus caused crash. - Add sync-on-shutdown.patch: ensure sync is done when initiating shutdown. - Add mount-efivars.patch: mount efivars if booting on UEFI. - Ship a empty systemd-journald initscript in systemd-logger to stop insserv to complain about missing syslog dependency. - Update 0001-service-Fix-dependencies-added-when-parsing-insserv..patch with bug fixes from Debian. old: Base:System/systemd new: home:fcrozat:branches:Base:System/systemd rev NoneIndex: 0001-service-Fix-dependencies-added-when-parsing-insserv..patch =================================================================== --- 0001-service-Fix-dependencies-added-when-parsing-insserv..patch (revision 311) +++ 0001-service-Fix-dependencies-added-when-parsing-insserv..patch (revision 5) @@ -1,17 +1,35 @@ -From 6620bceb7233a830be3635a4f7a7dc75c13a9c8e Mon Sep 17 00:00:00 2001 -From: Frederic Crozat <fcrozat@suse.com> -Date: Fri, 30 Sep 2011 14:12:45 +0200 -Subject: [PATCH] service: Fix dependencies added when parsing insserv.conf - ---- - src/service.c | 16 +++++++++------- - 1 files changed, 9 insertions(+), 7 deletions(-) - -Index: systemd-41/src/service.c +Index: systemd-195/src/core/service.c =================================================================== ---- systemd-41.orig/src/core/service.c -+++ systemd-41/src/core/service.c -@@ -3210,23 +3210,30 @@ static void sysv_facility_in_insserv_con +--- systemd-195.orig/src/core/service.c ++++ systemd-195/src/core/service.c +@@ -3391,12 +3391,13 @@ static void service_notify_message(Unit + + #ifdef HAVE_SYSV_COMPAT + +-#ifdef TARGET_SUSE +-static void sysv_facility_in_insserv_conf(Manager *mgr) { +- FILE *f=NULL; ++#if defined(TARGET_SUSE) || defined(TARGET_DEBIAN) ++static void sysv_parse_insserv_conf(Manager *mgr, const char* filename) { ++ FILE *f = NULL; + int r; + +- if (!(f = fopen("/etc/insserv.conf", "re"))) { ++ if (!(f = fopen(filename, "re"))) { ++ log_error("Failed to open file %s", filename); + r = errno == ENOENT ? 0 : -errno; + goto finish; + } +@@ -3410,7 +3411,7 @@ static void sysv_facility_in_insserv_con + break; + + r = -errno; +- log_error("Failed to read configuration file '/etc/insserv.conf': %s", strerror(-r)); ++ log_error("Failed to read configuration file '%s': %s", filename, strerror(-r)); + goto finish; + } + +@@ -3425,23 +3426,30 @@ static void sysv_facility_in_insserv_con Unit *u; if (sysv_translate_facility(parsed[0], NULL, &facility) < 0) continue; @@ -29,12 +47,12 @@ STRV_FOREACH (j, parsed+1) { - if (*j[0]=='+') { - e = UNIT_WANTS; -+ if (*j[0]=='+') ++ if (*j[0] == '+') name = *j+1; - } - else { - e = UNIT_REQUIRES; -+ else ++ else name = *j; - } + if (streq(name, "boot.localfs") || @@ -44,9 +62,54 @@ continue; - r = unit_add_two_dependencies_by_name(u, UNIT_BEFORE, e, dep, NULL, true); -+ r = unit_add_dependency_by_name_inverse(u, UNIT_BEFORE, dep, NULL, true); -+ if (*j[0]!='+') ++ r = unit_add_two_dependencies_by_name_inverse(u, UNIT_WANTS, UNIT_BEFORE, dep, NULL, true); ++ if (*j[0] != '+') + r = unit_add_dependency_by_name(u, UNIT_REQUIRES, dep, NULL, true); free(dep); } } +@@ -3454,6 +3462,35 @@ finish: + fclose(f); + + } ++ ++static void sysv_facility_in_insserv_conf(Manager *mgr) { ++ DIR *d =NULL; ++ struct dirent *de; ++ ++#ifdef TARGET_DEBIAN ++ if (!(d = opendir("/etc/insserv.conf.d/"))) ++ if (errno != ENOENT) { ++ log_warning("opendir() failed on /etc/insserv.conf.d/ %s", strerror(errno)); ++ goto finish; ++ } ++ ++ while ((de = readdir(d))) { ++ char *path = NULL; ++ if (ignore_file(de->d_name)) ++ continue; ++ ++ path = join("/etc/insserv.conf.d/", de->d_name, NULL); ++ sysv_parse_insserv_conf(mgr, path); ++ free(path); ++ } ++finish: ++ if (d) ++ closedir(d); ++#endif ++ ++ sysv_parse_insserv_conf(mgr, "/etc/insserv.conf"); ++} ++ + #endif + + static int service_enumerate(Manager *m) { +@@ -3604,7 +3641,7 @@ static int service_enumerate(Manager *m) + + r = 0; + +-#ifdef TARGET_SUSE ++#if defined(TARGET_SUSE) || defined(TARGET_DEBIAN) + sysv_facility_in_insserv_conf (m); + #endif + Index: systemd-mini.changes =================================================================== --- systemd-mini.changes (revision 311) +++ systemd-mini.changes (revision 5) @@ -1,4 +1,35 @@ ------------------------------------------------------------------- +Tue Nov 20 09:36:43 UTC 2012 - fcrozat@suse.com + +- links more manpages for migrated tools (from Christopher + Yeleighton). +- disable boot.localnet service, ypbind service will do the right + thing now (bnc#716746) +- add xdm-display-manager.patch: pull xdm.service instead of + display-manager.service (needed until xdm initscript is migrated + to native systemd service). +- Add fix-permissions-btmp.patch: ensure btmp is owned only by root + (bnc#777405). +- Have the udev package create a tape group, as referenced by + 50-udev-default.rules and 60-persistent-storage-tape.rules + (DimStar). +- Add fix-bad-memory-access.patch: fix crash in journal rotation. +- Add fix-dbus-crash.patch: fix D-Bus caused crash. +- Add sync-on-shutdown.patch: ensure sync is done when initiating + shutdown. +- Add mount-efivars.patch: mount efivars if booting on UEFI. + + +------------------------------------------------------------------- +Thu Nov 15 14:31:28 UTC 2012 - fcrozat@suse.com + +- Ship a empty systemd-journald initscript in systemd-logger to + stop insserv to complain about missing syslog dependency. +- Update + 0001-service-Fix-dependencies-added-when-parsing-insserv..patch + with bug fixes from Debian. + +------------------------------------------------------------------- Wed Nov 14 17:36:05 UTC 2012 - fcrozat@suse.com - /var/log/journal is now only provided by systemd-logger (journal Index: systemd-mini.spec =================================================================== --- systemd-mini.spec (revision 311) +++ systemd-mini.spec (revision 5) @@ -102,6 +102,7 @@ Source5: systemd-insserv_conf Source6: baselibs.conf Source7: libgcrypt.m4 +Source8: systemd-journald.init Source1060: boot.udev Source1061: write_dev_root_rule @@ -128,6 +129,8 @@ Patch56: support-suse-clock-sysconfig.patch Patch59: fix-enable-disable-boot-initscript.patch Patch60: var-run-lock.patch +Patch63: xdm-display-manager.patch +Patch64: fix-permissions-btmp.patch # Upstream First - Policy: # Never add any patches to this package without the upstream commit id @@ -137,6 +140,14 @@ Patch61: fix-logind-pty-seat.patch # PATCH-FIX-UPSTREAM fix-build-glibc217.patch fcrozat@suse.com -- fix build with latest glibc Patch62: fix-build-glibc217.patch +# PATCH-FIX-UPSTREAM fix-bad-memory-access.patch fcrozat@suse.com -- fix bad memory access +Patch65: fix-bad-memory-access.patch +# PATCH-FIX-UPSTREAM fix-dbus-crash.patch fcrozat@suse.com -- fix D-Bus caused crash +Patch66: fix-dbus-crash.patch +# PATCH-FIX-UPSTREAM sync-on-shutdown.patch fcrozat@suse.com -- Sync on shutdown +Patch67: sync-on-shutdown.patch +# PATCH-FIX-UPSTREAM mount-efivars.patch fcrozat@suse.com -- mount efivars if booting under UEFI +Patch68: mount-efivars.patch # udev patches # PATCH-FIX-OPENSUSE 0001-Reinstate-TIMEOUT-handling.patch @@ -151,8 +162,6 @@ # PATCH-FIX-OPENSUSE 0027-udev-fix-sg-autoload-regression.patch Patch1027: 0027-udev-fix-sg-autoload-regression.patch -# systemd patches - %description Systemd is a system and service manager, compatible with SysV and LSB init scripts for Linux. systemd provides aggressive parallelization @@ -313,6 +322,7 @@ %patch1026 -p1 %patch1027 -p1 +#systemd %patch1 -p1 %patch6 -p1 # don't apply when bootstrapping to not modify configure.in @@ -337,6 +347,12 @@ %patch60 -p1 %patch61 -p1 %patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 %build autoreconf -fiv @@ -368,8 +384,14 @@ ln -sf %{_bindir}/systemd-ask-password $RPM_BUILD_ROOT/bin/systemd-ask-password ln -sf %{_bindir}/systemctl $RPM_BUILD_ROOT/bin/systemctl ln -sf %{_prefix}/lib/systemd/systemd-udevd $RPM_BUILD_ROOT/sbin/udevd +%if ! 0%{?bootstrap} +ln -sf systemd-udevd.8 $RPM_BUILD_ROOT/%{_mandir}/man8/udevd.8 +%endif mkdir -p $RPM_BUILD_ROOT/%{_prefix}/usr/lib/firmware/updates ln -sf /lib/firmware $RPM_BUILD_ROOT/usr/lib/firmware +%if ! 0%{?bootstrap} +install -m755 -D %{S:8} $RPM_BUILD_ROOT/etc/init.d/systemd-journald +%endif install -m755 -D %{S:1060} $RPM_BUILD_ROOT/etc/init.d/boot.udev ln -s systemd-udevd.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev.service @@ -378,11 +400,6 @@ mkdir -p $RPM_BUILD_ROOT/lib/systemd/system/basic.target.wants ln -sf ../udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants -#fix manpages -%if ! 0%{?bootstrap} -sed -i -e 's,^\(\.so \)\(.*\.\)\([0-9]\),\1man\3/\2\3,g' %{buildroot}/%{_mandir}/*/* -%endif - #workaround for 716939 chmod 644 %{buildroot}%{_bindir}/systemd-analyze mkdir -p %{buildroot}%{_sysconfdir}/rpm @@ -392,7 +409,7 @@ install -m755 %{S:3} -D %{buildroot}%{_sbindir}/systemd-sysv-convert # do not install, code has been fixed, might be useful in the future -#install -m755 %{S:5} %{buildroot}/lib/systemd/system-generators +#install -m755 %{S:5} %{buildroot}/usr/lib/systemd/system-generators ln -s ../usr/lib/systemd/systemd %{buildroot}/bin/systemd ln -s ../usr/lib/systemd/systemd %{buildroot}/sbin/init ln -s ../usr/bin/systemctl %{buildroot}/sbin/reboot @@ -415,8 +432,7 @@ ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/ldconfig.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/loadmodules.service install -m644 %{S:2} %{buildroot}/%{_prefix}/lib/systemd/system/localfs.service -# need to be implemented in systemd directly -#ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service +ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/proc.service ln -s systemd-fsck-root.service %{buildroot}/%{_prefix}/lib/systemd/system/rootfsck.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/single.service @@ -442,8 +458,12 @@ %endif # legacy links -ln -s loginctl %{buildroot}%{_bindir}/systemd-loginctl -ln -s journalctl %{buildroot}%{_bindir}/systemd-journalctl +for f in loginctl journalctl ; do + ln -s $f %{buildroot}%{_bindir}/systemd-$f +%if ! 0%{?bootstrap} + ln -s $f.1 %{buildroot}%{_mandir}/man1/systemd-$f.1 +%endif +done ln -s /usr/lib/udev %{buildroot}/lib/udev # Create the /var/log/journal directory to change the volatile journal to a persistent one @@ -532,6 +552,8 @@ elif [ ! -e /lib/udev ]; then ln -s /usr/lib/udev /lib/udev fi +# Create "tape" group which is referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules +/usr/sbin/groupadd -r tape 2> /dev/null || : # kill daemon if we are not in a chroot if test -f /proc/1/exe -a -d /proc/1/root ; then if test "$(stat -Lc '%%D-%%i' /)" = "$(stat -Lc '%%D-%%i' /proc/1/root)"; then @@ -724,6 +746,10 @@ %exclude %{_mandir}/man8/telinit.8* %exclude %{_mandir}/man8/runlevel.8* %exclude %{_mandir}/man*/*udev*.[0-9]* + +# Packaged in analyze subpackage +%exclude %{_mandir}/man1/systemd-analyze.1* + %{_mandir}/man1/*.1* %{_mandir}/man3/*.3* %{_mandir}/man5/*.5* @@ -787,7 +813,11 @@ %endif %files analyze +%defattr(-,root,root) %attr(0755,root,root) /usr/bin/systemd-analyze +%if ! 0%{?bootstrap} +%{_mandir}/man1/systemd-analyze.1* +%endif %files -n %{udevpkgname} %defattr(-,root,root) @@ -878,6 +908,7 @@ %defattr(-,root,root) %dir /var/log/journal /var/log/README +/etc/init.d/systemd-journald %endif Index: systemd.changes =================================================================== --- systemd.changes (revision 311) +++ systemd.changes (revision 5) @@ -1,4 +1,35 @@ ------------------------------------------------------------------- +Tue Nov 20 09:36:43 UTC 2012 - fcrozat@suse.com + +- links more manpages for migrated tools (from Christopher + Yeleighton). +- disable boot.localnet service, ypbind service will do the right + thing now (bnc#716746) +- add xdm-display-manager.patch: pull xdm.service instead of + display-manager.service (needed until xdm initscript is migrated + to native systemd service). +- Add fix-permissions-btmp.patch: ensure btmp is owned only by root + (bnc#777405). +- Have the udev package create a tape group, as referenced by + 50-udev-default.rules and 60-persistent-storage-tape.rules + (DimStar). +- Add fix-bad-memory-access.patch: fix crash in journal rotation. +- Add fix-dbus-crash.patch: fix D-Bus caused crash. +- Add sync-on-shutdown.patch: ensure sync is done when initiating + shutdown. +- Add mount-efivars.patch: mount efivars if booting on UEFI. + + +------------------------------------------------------------------- +Thu Nov 15 14:31:28 UTC 2012 - fcrozat@suse.com + +- Ship a empty systemd-journald initscript in systemd-logger to + stop insserv to complain about missing syslog dependency. +- Update + 0001-service-Fix-dependencies-added-when-parsing-insserv..patch + with bug fixes from Debian. + +------------------------------------------------------------------- Wed Nov 14 17:36:05 UTC 2012 - fcrozat@suse.com - /var/log/journal is now only provided by systemd-logger (journal Index: systemd.spec =================================================================== --- systemd.spec (revision 311) +++ systemd.spec (revision 5) @@ -97,6 +97,7 @@ Source5: systemd-insserv_conf Source6: baselibs.conf Source7: libgcrypt.m4 +Source8: systemd-journald.init Source1060: boot.udev Source1061: write_dev_root_rule @@ -123,6 +124,8 @@ Patch56: support-suse-clock-sysconfig.patch Patch59: fix-enable-disable-boot-initscript.patch Patch60: var-run-lock.patch +Patch63: xdm-display-manager.patch +Patch64: fix-permissions-btmp.patch # Upstream First - Policy: # Never add any patches to this package without the upstream commit id @@ -132,6 +135,14 @@ Patch61: fix-logind-pty-seat.patch # PATCH-FIX-UPSTREAM fix-build-glibc217.patch fcrozat@suse.com -- fix build with latest glibc Patch62: fix-build-glibc217.patch +# PATCH-FIX-UPSTREAM fix-bad-memory-access.patch fcrozat@suse.com -- fix bad memory access +Patch65: fix-bad-memory-access.patch +# PATCH-FIX-UPSTREAM fix-dbus-crash.patch fcrozat@suse.com -- fix D-Bus caused crash +Patch66: fix-dbus-crash.patch +# PATCH-FIX-UPSTREAM sync-on-shutdown.patch fcrozat@suse.com -- Sync on shutdown +Patch67: sync-on-shutdown.patch +# PATCH-FIX-UPSTREAM mount-efivars.patch fcrozat@suse.com -- mount efivars if booting under UEFI +Patch68: mount-efivars.patch # udev patches # PATCH-FIX-OPENSUSE 0001-Reinstate-TIMEOUT-handling.patch @@ -146,8 +157,6 @@ # PATCH-FIX-OPENSUSE 0027-udev-fix-sg-autoload-regression.patch Patch1027: 0027-udev-fix-sg-autoload-regression.patch -# systemd patches - %description Systemd is a system and service manager, compatible with SysV and LSB init scripts for Linux. systemd provides aggressive parallelization @@ -308,6 +317,7 @@ %patch1026 -p1 %patch1027 -p1 +#systemd %patch1 -p1 %patch6 -p1 # don't apply when bootstrapping to not modify configure.in @@ -332,6 +342,12 @@ %patch60 -p1 %patch61 -p1 %patch62 -p1 +%patch63 -p1 +%patch64 -p1 +%patch65 -p1 +%patch66 -p1 +%patch67 -p1 +%patch68 -p1 %build autoreconf -fiv @@ -363,8 +379,14 @@ ln -sf %{_bindir}/systemd-ask-password $RPM_BUILD_ROOT/bin/systemd-ask-password ln -sf %{_bindir}/systemctl $RPM_BUILD_ROOT/bin/systemctl ln -sf %{_prefix}/lib/systemd/systemd-udevd $RPM_BUILD_ROOT/sbin/udevd +%if ! 0%{?bootstrap} +ln -sf systemd-udevd.8 $RPM_BUILD_ROOT/%{_mandir}/man8/udevd.8 +%endif mkdir -p $RPM_BUILD_ROOT/%{_prefix}/usr/lib/firmware/updates ln -sf /lib/firmware $RPM_BUILD_ROOT/usr/lib/firmware +%if ! 0%{?bootstrap} +install -m755 -D %{S:8} $RPM_BUILD_ROOT/etc/init.d/systemd-journald +%endif install -m755 -D %{S:1060} $RPM_BUILD_ROOT/etc/init.d/boot.udev ln -s systemd-udevd.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev.service @@ -373,11 +395,6 @@ mkdir -p $RPM_BUILD_ROOT/lib/systemd/system/basic.target.wants ln -sf ../udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants -#fix manpages -%if ! 0%{?bootstrap} -sed -i -e 's,^\(\.so \)\(.*\.\)\([0-9]\),\1man\3/\2\3,g' %{buildroot}/%{_mandir}/*/* -%endif - #workaround for 716939 chmod 644 %{buildroot}%{_bindir}/systemd-analyze mkdir -p %{buildroot}%{_sysconfdir}/rpm @@ -387,7 +404,7 @@ install -m755 %{S:3} -D %{buildroot}%{_sbindir}/systemd-sysv-convert # do not install, code has been fixed, might be useful in the future -#install -m755 %{S:5} %{buildroot}/lib/systemd/system-generators +#install -m755 %{S:5} %{buildroot}/usr/lib/systemd/system-generators ln -s ../usr/lib/systemd/systemd %{buildroot}/bin/systemd ln -s ../usr/lib/systemd/systemd %{buildroot}/sbin/init ln -s ../usr/bin/systemctl %{buildroot}/sbin/reboot @@ -410,8 +427,7 @@ ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/ldconfig.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/loadmodules.service install -m644 %{S:2} %{buildroot}/%{_prefix}/lib/systemd/system/localfs.service -# need to be implemented in systemd directly -#ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service +ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/localnet.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/proc.service ln -s systemd-fsck-root.service %{buildroot}/%{_prefix}/lib/systemd/system/rootfsck.service ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/single.service @@ -437,8 +453,12 @@ %endif # legacy links -ln -s loginctl %{buildroot}%{_bindir}/systemd-loginctl -ln -s journalctl %{buildroot}%{_bindir}/systemd-journalctl +for f in loginctl journalctl ; do + ln -s $f %{buildroot}%{_bindir}/systemd-$f +%if ! 0%{?bootstrap} + ln -s $f.1 %{buildroot}%{_mandir}/man1/systemd-$f.1 +%endif +done ln -s /usr/lib/udev %{buildroot}/lib/udev # Create the /var/log/journal directory to change the volatile journal to a persistent one @@ -527,6 +547,8 @@ elif [ ! -e /lib/udev ]; then ln -s /usr/lib/udev /lib/udev fi +# Create "tape" group which is referenced by 50-udev-default.rules and 60-persistent-storage-tape.rules +/usr/sbin/groupadd -r tape 2> /dev/null || : # kill daemon if we are not in a chroot if test -f /proc/1/exe -a -d /proc/1/root ; then if test "$(stat -Lc '%%D-%%i' /)" = "$(stat -Lc '%%D-%%i' /proc/1/root)"; then @@ -719,6 +741,10 @@ %exclude %{_mandir}/man8/telinit.8* %exclude %{_mandir}/man8/runlevel.8* %exclude %{_mandir}/man*/*udev*.[0-9]* + +# Packaged in analyze subpackage +%exclude %{_mandir}/man1/systemd-analyze.1* + %{_mandir}/man1/*.1* %{_mandir}/man3/*.3* %{_mandir}/man5/*.5* @@ -782,7 +808,11 @@ %endif %files analyze +%defattr(-,root,root) %attr(0755,root,root) /usr/bin/systemd-analyze +%if ! 0%{?bootstrap} +%{_mandir}/man1/systemd-analyze.1* +%endif %files -n %{udevpkgname} %defattr(-,root,root) @@ -873,6 +903,7 @@ %defattr(-,root,root) %dir /var/log/journal /var/log/README +/etc/init.d/systemd-journald %endif Index: fix-bad-memory-access.patch =================================================================== --- fix-bad-memory-access.patch (added) +++ fix-bad-memory-access.patch (revision 5) @@ -0,0 +1,23 @@ +From 7d73c1343be02a59b17de0cd34375deeb815d89c Mon Sep 17 00:00:00 2001 +From: Lennart Poettering <lennart@poettering.net> +Date: Tue, 20 Nov 2012 00:19:27 +0100 +Subject: [PATCH] journald: fix bad memory access + +https://bugzilla.redhat.com/show_bug.cgi?id=875653 +--- + src/journal/journald-server.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: systemd-195/src/journal/journald.c +=================================================================== +--- systemd-195.orig/src/journal/journald.c ++++ systemd-195/src/journal/journald.c +@@ -342,7 +342,7 @@ static void server_rotate(Server *s) { + HASHMAP_FOREACH_KEY(f, k, s->user_journals, i) { + r = journal_file_rotate(&f, s->compress, s->seal); + if (r < 0) +- if (f->path) ++ if (f) + log_error("Failed to rotate %s: %s", f->path, strerror(-r)); + else + log_error("Failed to create user journal: %s", strerror(-r)); Index: fix-dbus-crash.patch =================================================================== --- fix-dbus-crash.patch (added) +++ fix-dbus-crash.patch (revision 5) @@ -0,0 +1,32 @@ +From 645a9e5a2bbb06464a3fba1a3501e9d79e5bbad8 Mon Sep 17 00:00:00 2001 +From: Eelco Dolstra <eelco.dolstra@logicblox.com> +Date: Wed, 31 Oct 2012 11:53:56 +0100 +Subject: [PATCH] dbus-manager: fix a fatal dbus abort in + bus_manager_message_handler() + +If ListUnitFiles fails, or an OOM occurs, then dbus_message_unref() +will be called twice on "reply", causing systemd to crash. So remove +the call to dbus_message_unref(); it is unnecessary because of +the cleanup attribute on "reply". + +[zj: modified to leave one dbus_message_unref() alone, per Colin +Walters' comment.] +--- + src/core/dbus-manager.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c +index 2010241..3cf3e90 100644 +--- a/src/core/dbus-manager.c ++++ b/src/core/dbus-manager.c +@@ -1436,7 +1436,6 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection, + r = unit_file_get_list(m->running_as == SYSTEMD_SYSTEM ? UNIT_FILE_SYSTEM : UNIT_FILE_USER, NULL, h); + if (r < 0) { + unit_file_list_free(h); +- dbus_message_unref(reply); + return bus_send_error_reply(connection, message, NULL, r); + } + +-- +1.7.10.4 + Index: fix-permissions-btmp.patch =================================================================== --- fix-permissions-btmp.patch (added) +++ fix-permissions-btmp.patch (revision 5) @@ -0,0 +1,13 @@ +Index: systemd-44/tmpfiles.d/systemd.conf +=================================================================== +--- systemd-44.orig/tmpfiles.d/systemd.conf ++++ systemd-44/tmpfiles.d/systemd.conf +@@ -11,7 +11,7 @@ d /run/user 0755 root root 10d + F /run/utmp 0664 root utmp - + + f /var/log/wtmp 0664 root utmp - +-f /var/log/btmp 0600 root utmp - ++f /var/log/btmp 0600 root root - + + d /var/cache/man - - - 30d + Index: mount-efivars.patch =================================================================== --- mount-efivars.patch (added) +++ mount-efivars.patch (revision 5) @@ -0,0 +1,336 @@ +From f271dd97622b656c1c013d181ea615c671cc2438 Mon Sep 17 00:00:00 2001 +From: "Lee, Chun-Yi" <joeyli.kernel@gmail.com> +Date: Sat, 27 Oct 2012 11:23:22 +0800 +Subject: [PATCH] systemd: mount the EFI variable filesystem +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Add efivarfs to the mount_table in mount-setup.c, so the EFI variable +filesystem will be mounted when systemd executed. + +The EFI variable filesystem will merge in v3.7 or v3.8 linux kernel. + +Cc: Kay Sievers <kay@vrfy.org> +Cc: Lennart Poettering <lennart@poettering.net> +Cc: Mantas Mikulėnas <grawity@gmail.com> +Cc: Zbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl> +Cc: Matt Fleming <matt.fleming@intel.com> +Cc: Jeremy Kerr <jeremy.kerr@canonical.com> +Cc: Matthew Garrett <mjg@redhat.com> +Signed-off-by: Lee, Chun-Yi <jlee@suse.com> +--- + src/core/kmod-setup.c | 7 ++++--- + src/core/mount-setup.c | 1 + + 2 files changed, 5 insertions(+), 3 deletions(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index cc2a2d9..ce8a8e7 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -31,9 +31,10 @@ + #include "kmod-setup.h" + + static const char * const kmod_table[] = { +- "autofs4", "/sys/class/misc/autofs", +- "ipv6", "/sys/module/ipv6", +- "unix", "/proc/net/unix" ++ "autofs4", "/sys/class/misc/autofs", ++ "ipv6", "/sys/module/ipv6", ++ "efivarfs", "/sys/firmware/efi/efivars", ++ "unix", "/proc/net/unix" + }; + + #pragma GCC diagnostic push +diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c +index 0fd112f..9894c7f 100644 +--- a/src/core/mount-setup.c ++++ b/src/core/mount-setup.c +@@ -66,6 +66,7 @@ static const MountPoint mount_table[] = { + { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, + { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, true, true }, + { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, ++ { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, + { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, + { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, false, true }, + { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +-- +1.7.10.4 + +From c1e5704657315b436c0409e8172c1fcb76adccad Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:06:27 +0100 +Subject: [PATCH] shared: add is_efiboot() + +--- + src/shared/util.c | 4 ++++ + src/shared/util.h | 2 ++ + 2 files changed, 6 insertions(+) + +diff --git a/src/shared/util.c b/src/shared/util.c +index 2a8afae..9983695 100644 +--- a/src/shared/util.c ++++ b/src/shared/util.c +@@ -77,6 +77,10 @@ char **saved_argv = NULL; + static volatile unsigned cached_columns = 0; + static volatile unsigned cached_lines = 0; + ++bool is_efiboot(void) { ++ return access("/sys/firmware/efi", F_OK) >= 0; ++} ++ + size_t page_size(void) { + static __thread size_t pgsz = 0; + long r; +diff --git a/src/shared/util.h b/src/shared/util.h +index e387b12..99972cc 100644 +--- a/src/shared/util.h ++++ b/src/shared/util.h +@@ -90,6 +90,8 @@ union dirent_storage { + #define ANSI_HIGHLIGHT_YELLOW_ON "\x1B[1;33m" + #define ANSI_HIGHLIGHT_OFF "\x1B[0m" + ++bool is_efiboot(void); ++ + usec_t now(clockid_t clock); + + dual_timestamp* dual_timestamp_get(dual_timestamp *ts); +-- +1.7.10.4 + +From 1022373284b7562431fb0a6dba45db8af089a0e3 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:54:19 +0100 +Subject: [PATCH] kmod-setup: add conditional module loading callback + +--- + src/core/kmod-setup.c | 32 ++++++++++++++++++++------------ + 1 file changed, 20 insertions(+), 12 deletions(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index ce8a8e7..383a6b2 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -30,11 +30,17 @@ + + #include "kmod-setup.h" + +-static const char * const kmod_table[] = { +- "autofs4", "/sys/class/misc/autofs", +- "ipv6", "/sys/module/ipv6", +- "efivarfs", "/sys/firmware/efi/efivars", +- "unix", "/proc/net/unix" ++typedef struct Kmodule { ++ const char *name; ++ const char *directory; ++ bool (*condition_fn)(void); ++} KModule; ++ ++static const KModule kmod_table[] = { ++ { "autofs4", "/sys/class/misc/autofs", NULL } , ++ { "ipv6", "/sys/module/ipv6", NULL }, ++ { "efivarfs", "/sys/firmware/efi/efivars", NULL }, ++ { "unix", "/proc/net/unix", NULL } , + }; + + #pragma GCC diagnostic push +@@ -42,7 +48,8 @@ static const char * const kmod_table[] = { + static void systemd_kmod_log(void *data, int priority, const char *file, int line, + const char *fn, const char *format, va_list args) + { +- log_metav(priority, file, line, fn, format, args); ++ /* library logging is enabled at debug only */ ++ log_metav(LOG_DEBUG, file, line, fn, format, args); + } + #pragma GCC diagnostic pop + +@@ -53,13 +60,15 @@ int kmod_setup(void) { + int err; + + for (i = 0; i < ELEMENTSOF(kmod_table); i += 2) { ++ if (kmod_table[i].condition_fn && !kmod_table[i].condition_fn()) ++ continue; + +- if (access(kmod_table[i+1], F_OK) >= 0) ++ if (access(kmod_table[i].directory, F_OK) >= 0) + continue; + + log_debug("Your kernel apparently lacks built-in %s support. Might be a good idea to compile it in. " + "We'll now try to work around this by loading the module...", +- kmod_table[i]); ++ kmod_table[i].name); + + if (!ctx) { + ctx = kmod_new(NULL, NULL); +@@ -69,13 +78,12 @@ int kmod_setup(void) { + } + + kmod_set_log_fn(ctx, systemd_kmod_log, NULL); +- + kmod_load_resources(ctx); + } + +- err = kmod_module_new_from_name(ctx, kmod_table[i], &mod); ++ err = kmod_module_new_from_name(ctx, kmod_table[i].name, &mod); + if (err < 0) { +- log_error("Failed to load module '%s'", kmod_table[i]); ++ log_error("Failed to lookup module '%s'", kmod_table[i].name); + continue; + } + +@@ -85,7 +93,7 @@ int kmod_setup(void) { + else if (err == KMOD_PROBE_APPLY_BLACKLIST) + log_info("Module '%s' is blacklisted", kmod_module_get_name(mod)); + else +- log_error("Failed to insert '%s'", kmod_module_get_name(mod)); ++ log_error("Failed to insert module '%s'", kmod_module_get_name(mod)); + + kmod_module_unref(mod); + } +-- +1.7.10.4 + +From 3dfb265083347cb5700dc38f7cc0f479f378e6e9 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 16:55:23 +0100 +Subject: [PATCH] kmod-setup: mounting efivarfs, *after* we tried to mount it, + is pointless + +The mount() system call, which we issue before loading modules, will trigger +a modprobe by the kernel and block until it returns. Trying to load it again +later, will have exactly the same result as the first time. +--- + src/core/kmod-setup.c | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index 383a6b2..20ab232 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -39,7 +39,6 @@ typedef struct Kmodule { + static const KModule kmod_table[] = { + { "autofs4", "/sys/class/misc/autofs", NULL } , + { "ipv6", "/sys/module/ipv6", NULL }, +- { "efivarfs", "/sys/firmware/efi/efivars", NULL }, + { "unix", "/proc/net/unix", NULL } , + }; + +-- +1.7.10.4 + +From 6aa220e019f9dffd96590b06b68f937985204109 Mon Sep 17 00:00:00 2001 +From: Kay Sievers <kay@vrfy.org> +Date: Sun, 4 Nov 2012 17:03:48 +0100 +Subject: [PATCH] mount-setup: try mounting 'efivarfs' only if the system + bootet with EFI + +--- + TODO | 3 --- + src/core/mount-setup.c | 50 ++++++++++++++++++++++++++++++++---------------- + 2 files changed, 34 insertions(+), 19 deletions(-) + +diff --git a/src/core/mount-setup.c b/src/core/mount-setup.c +index 9894c7f..98614d0 100644 +--- a/src/core/mount-setup.c ++++ b/src/core/mount-setup.c +@@ -46,14 +46,20 @@ + #define TTY_GID 5 + #endif + ++typedef enum MountMode { ++ MNT_NONE = 0, ++ MNT_FATAL = 1 << 0, ++ MNT_IN_CONTAINER = 1 << 1, ++} MountMode; ++ + typedef struct MountPoint { + const char *what; + const char *where; + const char *type; + const char *options; + unsigned long flags; +- bool fatal; +- bool in_container; ++ bool (*condition_fn)(void); ++ MountMode mode; + } MountPoint; + + /* The first three entries we might need before SELinux is up. The +@@ -62,16 +68,26 @@ typedef struct MountPoint { + #define N_EARLY_MOUNT 4 + + static const MountPoint mount_table[] = { +- { "proc", "/proc", "proc", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, +- { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, true, true }, +- { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, true, true }, +- { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, +- { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, false, false }, +- { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +- { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, false, true }, +- { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, true, true }, +- { "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME, false, true }, +- { "cgroup", "/sys/fs/cgroup/systemd", "cgroup", "none,name=systemd", MS_NOSUID|MS_NOEXEC|MS_NODEV, false, true }, ++ { "proc", "/proc", "proc", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "securityfs", "/sys/kernel/security", "securityfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_NONE }, ++ { "efivarfs", "/sys/firmware/efi/efivars", "efivarfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ is_efiboot, MNT_NONE }, ++ { "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, ++ NULL, MNT_IN_CONTAINER }, ++ { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_FATAL|MNT_IN_CONTAINER }, ++ { "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_STRICTATIME, ++ NULL, MNT_IN_CONTAINER }, ++ { "cgroup", "/sys/fs/cgroup/systemd", "cgroup", "none,name=systemd", MS_NOSUID|MS_NOEXEC|MS_NODEV, ++ NULL, MNT_IN_CONTAINER }, + }; + + /* These are API file systems that might be mounted by other software, +@@ -119,6 +135,9 @@ static int mount_one(const MountPoint *p, bool relabel) { + + assert(p); + ++ if (p->condition_fn && !p->condition_fn()) ++ return 0; ++ + /* Relabel first, just in case */ + if (relabel) + label_fix(p->where, true, true); +@@ -131,7 +150,7 @@ static int mount_one(const MountPoint *p, bool relabel) { + return 0; + + /* Skip securityfs in a container */ +- if (!p->in_container && detect_container(NULL) > 0) ++ if (!(p->mode & MNT_IN_CONTAINER) && detect_container(NULL) > 0) + return 0; + + /* The access mode here doesn't really matter too much, since +@@ -149,8 +168,8 @@ static int mount_one(const MountPoint *p, bool relabel) { + p->type, + p->flags, + p->options) < 0) { +- log_full(p->fatal ? LOG_ERR : LOG_DEBUG, "Failed to mount %s: %s", p->where, strerror(errno)); +- return p->fatal ? -errno : 0; ++ log_full((p->mode & MNT_FATAL) ? LOG_ERR : LOG_DEBUG, "Failed to mount %s: %s", p->where, strerror(errno)); ++ return (p->mode & MNT_FATAL) ? -errno : 0; + } + + /* Relabel again, since we now mounted something fresh here */ +@@ -289,7 +308,6 @@ int mount_cgroup_controllers(char ***join_controllers) { + p.type = "cgroup"; + p.options = options; + p.flags = MS_NOSUID|MS_NOEXEC|MS_NODEV; +- p.fatal = false; + + r = mount_one(&p, true); + free(controller); +-- +1.7.10.4 + Index: sync-on-shutdown.patch =================================================================== --- sync-on-shutdown.patch (added) +++ sync-on-shutdown.patch (revision 5) @@ -0,0 +1,49 @@ +From 0049f05a8bb82c3e084bacc5945596761d706c55 Mon Sep 17 00:00:00 2001 +From: Lennart Poettering <lennart@poettering.net> +Date: Fri, 16 Nov 2012 01:30:29 +0100 +Subject: [PATCH] shutdown: readd explicit sync() when shutting down + +As it turns out reboot() doesn't actually imply a file system sync, but +only a disk sync. Accordingly, readd explicit sync() invocations +immediately before we invoke reboot(). + +This is much less dramatic than it might sounds as we umount all +disks/read-only remount them anyway before going down. +--- + src/core/service.c | 1 + + src/core/shutdown.c | 7 +++++++ + 2 files changed, 8 insertions(+) + +diff --git a/src/core/service.c b/src/core/service.c +index cf08485..df72aba 100644 +--- a/src/core/service.c ++++ b/src/core/service.c +@@ -2485,6 +2485,7 @@ static int service_start_limit_test(Service *s) { + + case SERVICE_START_LIMIT_REBOOT_IMMEDIATE: + log_warning("%s start request repeated too quickly, rebooting immediately.", UNIT(s)->id); ++ sync(); + reboot(RB_AUTOBOOT); + break; + +diff --git a/src/core/shutdown.c b/src/core/shutdown.c +index cc8c57b..b59aef1 100644 +--- a/src/core/shutdown.c ++++ b/src/core/shutdown.c +@@ -273,6 +273,13 @@ int main(int argc, char *argv[]) { + } + } + ++ /* The kernel will automaticall flush ATA disks and suchlike ++ * on reboot(), but the file systems need to be synce'd ++ * explicitly in advance. So let's do this here, but not ++ * needlessly slow down containers. */ ++ if (!in_container) ++ sync(); ++ + if (cmd == LINUX_REBOOT_CMD_KEXEC) { + + if (!in_container) { +-- +1.7.10.4 + Index: systemd-journald.init =================================================================== --- systemd-journald.init (added) +++ systemd-journald.init (revision 5) @@ -0,0 +1,33 @@ +#! /bin/sh +# +# Copyright (c) 2001-2002 SuSE Linux AG, Nuernberg, Germany. +# All rights reserved. +# +# /etc/init.d/systemd-journald +# +### BEGIN INIT INFO +# Provides: syslog +# Required-Start: $null +# Required-Stop: $null +# Default-Start: 2 3 5 +# Default-Stop: +# Short-Description: compat wrapper for journald +# Description: compat wrapper for journald +### END INIT INFO + +. /etc/rc.status + +rc_reset + +case "$1" in + start|stop|restart) + rc_failed 3 + rc_status -v + ;; + *) + echo "Usage: $0 {start|stop|restart}" + exit 1 + ;; +esac + +rc_exit Index: xdm-display-manager.patch =================================================================== --- xdm-display-manager.patch (added) +++ xdm-display-manager.patch (revision 5) @@ -0,0 +1,13 @@ +Index: systemd-195/units/graphical.target +=================================================================== +--- systemd-195.orig/units/graphical.target ++++ systemd-195/units/graphical.target +@@ -11,7 +11,7 @@ Documentation=man:systemd.special(7) + Requires=multi-user.target + After=multi-user.target + Conflicts=rescue.target +-Wants=display-manager.service ++Wants=xdm.service + AllowIsolate=yes + + [Install] OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=312
2012-11-20 13:10:12 +01:00
/etc/init.d/systemd-journald
%endif
%changelog