systemd/systemd.spec

1080 lines
41 KiB
RPMSpec
Raw Normal View History

#
# spec file for package systemd
#
# Copyright (c) 2013 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
Accepting request 176957 from home:fcrozat:branches:Base:System - Update to release 204: + systemd-nspawn creates etc/resolv.conf in container if needed. + systemd-nspawn will store metadata about container in container cgroup including its root directory. + cgroup hierarchy has been reworked, all objects are now suffxed (with .session for user sessions, .user for users, .nspawn for containers). All cgroup names are now escaped to preven collision of object names. + systemctl list-dependencies gained --plain, --reverse, --after and --before switches. + systemd-inhibit shows processes name taking inhibitor lock. + nss-myhostname will now resolve "localhost" implicitly. + .include is not allowed recursively anymore and only in unit files. Drop-in files should be favored in most cases. + systemd-analyze gained "critical-chain" command, to get slowest chain of units run during boot-up. + systemd-nspawn@.service has been added to easily run nspawn container for system services. Just start "systemd-nspawn@foobar.service" and container from /var/lib/container/foobar" will be booted. + systemd-cgls has new --machine parameter to list processes from one container. + ConditionSecurity= can now check for apparmor and SMACK. + /etc/systemd/sleep.conf has been introduced to configure which kernel operation will be execute when "suspend", "hibernate" or "hybrid-sleep" is requrested. It allow new kernel "freeze" state to be used too. (This setting won't have any effect if pm-utils is installed). + ENV{SYSTEMD_WANTS} in udev rules will now implicitly escape passed argument if applicable. OBS-URL: https://build.opensuse.org/request/show/176957 OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=388
2013-05-29 17:26:40 +02:00
Version: 204
Release: 0
Summary: A System and Session Manager
License: LGPL-2.1+
Group: System/Base
BuildRoot: %{_tmppath}/%{name}-%{version}-build
BuildRequires: audit-devel
%if ! 0%{?bootstrap}
BuildRequires: dbus-1
BuildRequires: docbook-xsl-stylesheets
%endif
Accepting request 101496 from home:fcrozat:branches:Base:System - 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/request/show/101496 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
Accepting request 80495 from home:fcrozat:systemd - 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/request/show/80495 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: libattr-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: libgcrypt-devel
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}
#!BuildIgnore: dbus-1
Requires: this-is-only-for-build-envs
Conflicts: systemd
Conflicts: kiwi
%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
Obsoletes: systemd-analyze < 201
Provides: systemd-analyze = %{version}
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
Accepting request 142041 from home:fcrozat:branches:Base:System - 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/request/show/142041 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
Source9: nss-myhostname-config
Source10: macros.systemd.upstream
Source1060: boot.udev
Source1061: write_dev_root_rule
Source1062: systemd-udev-root-symlink
# PATCH-FIX-UPSTREAM avoid-assertion-if-invalid-address-familily-is-passed-to-g.patch lnussel@suse.com bnc#791101 -- avoid assertion if invalid address familily is passed to gethostbyaddr_r
Patch0: avoid-assertion-if-invalid-address-familily-is-passed-to-g.patch
# PATCH-FIX-UPSTREAM optionally-warn-if-nss-myhostname-is-called.patch lnussel@suse.com -- optionally warn if nss-myhostname is called
Patch1: optionally-warn-if-nss-myhostname-is-called.patch
# handle SUSE specific kbd settings
Patch3: handle-disable_caplock-and-compose_table-and-kbd_rate.patch
Patch4: handle-numlock-value-in-etc-sysconfig-keyboard.patch
Patch6: parse-etc-insserv.conf-and-adds-dependencies-accordingly.patch
Patch7: service-flags-sysv-service-with-detected-pid-as-RemainAfte.patch
Patch8: module-load-handle-SUSE-etc-sysconfig-kernel-module-list.patch
Patch9: remain_after_exit-initscript-heuristic-and-add-new-LSB-hea.patch
Patch10: force-lvm-restart-after-cryptsetup-target-is-reached.patch
Patch11: delay-fsck-cryptsetup-after-md-dmraid-lvm-are-started.patch
Patch12: Fix-run-lock-directories-permissions-to-follow-openSUSE-po.patch
Patch13: ensure-sysctl-are-applied-after-modules-are-loaded.patch
Patch14: ensure-DM-and-LVM-are-started-before-local-fs-pre-target.patch
Patch15: timedate-add-support-for-openSUSE-version-of-etc-sysconfig.patch
Patch16: fix-support-for-boot-prefixed-initscript-bnc-746506.patch
Patch17: restore-var-run-and-var-lock-bind-mount-if-they-aren-t-sym.patch
Patch18: fix-owner-of-var-log-btmp.patch
# PATCH-FIX-OPENSUSE ensure-ask-password-wall-starts-after-getty-tty1.patch -- don't start getty on tty1 until all password request are done
Patch5: ensure-ask-password-wall-starts-after-getty-tty1.patch
# PATCH-FIX-OPENSUSE handle-root_uses_lang-value-in-etc-sysconfig-language.patch bnc#792182 fcrozat@suse.com -- handle ROOT_USES_LANG=ctype
Patch20: handle-root_uses_lang-value-in-etc-sysconfig-language.patch
# PATCH-FIX-OPENSUSE allow-multiple-sulogin-to-be-started.patch bnc#793182 fcrozat@suse.com -- handle multiple sulogin
Patch21: allow-multiple-sulogin-to-be-started.patch
# PATCH-FIX-OPENSUSE handle-SYSTEMCTL_OPTIONS-environment-variable.patch bnc#798620 fcrozat@suse.com -- handle SYSTEMCTL_OPTIONS environment variable
Patch22: handle-SYSTEMCTL_OPTIONS-environment-variable.patch
# PATCH-FIX-OPENSUSE apply-ACL-for-nvidia-device-nodes.patch bnc#808319 -- set ACL on nvidia devices
Patch27: apply-ACL-for-nvidia-device-nodes.patch
# PATCH-FIX-OPENSUSE Revert-service-drop-support-for-SysV-scripts-for-the-early.patch fcrozat@suse.com -- handle boot.* initscripts
Patch37: Revert-service-drop-support-for-SysV-scripts-for-the-early.patch
# PATCH-FIX-OPENSUSE systemd-tmp-safe-defaults.patch FATE#314974 max@suse.de -- Return to SUSE's "safe defaults" policy on deleting files from tmp direcorie.
Patch39: systemd-tmp-safe-defaults.patch
# PATCH-FIX-OPENSUSE sysctl-handle-boot-sysctl.conf-kernel_release.patch bnc#809420 fcrozat@suse.com -- handle /boot/sysctl.conf-<kernel_release> file
Patch40: sysctl-handle-boot-sysctl.conf-kernel_release.patch
Accepting request 176957 from home:fcrozat:branches:Base:System - Update to release 204: + systemd-nspawn creates etc/resolv.conf in container if needed. + systemd-nspawn will store metadata about container in container cgroup including its root directory. + cgroup hierarchy has been reworked, all objects are now suffxed (with .session for user sessions, .user for users, .nspawn for containers). All cgroup names are now escaped to preven collision of object names. + systemctl list-dependencies gained --plain, --reverse, --after and --before switches. + systemd-inhibit shows processes name taking inhibitor lock. + nss-myhostname will now resolve "localhost" implicitly. + .include is not allowed recursively anymore and only in unit files. Drop-in files should be favored in most cases. + systemd-analyze gained "critical-chain" command, to get slowest chain of units run during boot-up. + systemd-nspawn@.service has been added to easily run nspawn container for system services. Just start "systemd-nspawn@foobar.service" and container from /var/lib/container/foobar" will be booted. + systemd-cgls has new --machine parameter to list processes from one container. + ConditionSecurity= can now check for apparmor and SMACK. + /etc/systemd/sleep.conf has been introduced to configure which kernel operation will be execute when "suspend", "hibernate" or "hybrid-sleep" is requrested. It allow new kernel "freeze" state to be used too. (This setting won't have any effect if pm-utils is installed). + ENV{SYSTEMD_WANTS} in udev rules will now implicitly escape passed argument if applicable. OBS-URL: https://build.opensuse.org/request/show/176957 OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=388
2013-05-29 17:26:40 +02:00
# PATCH-FIX-OPENSUSE ensure-shortname-is-set-as-hostname-bnc-820213.patch bnc#820213 fcrozat@suse.com -- Do not set anything beyond first dot as hostname
Patch41: ensure-shortname-is-set-as-hostname-bnc-820213.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-OPENSUSE disable-nss-myhostname-warning-bnc-783841.diff lnussel@suse.de -- disable nss-myhostname warning (bnc#783841)
Patch23: disable-nss-myhostname-warning-bnc-783841.patch
# PATCH-FIX-OPENSUSE handle-HOSTNAME.patch fcrozat@suse.com -- handle /etc/HOSTNAME (bnc#803653)
Patch24: handle-etc-HOSTNAME.patch
# PATCH-FIX-OPENSUSE Forward-suspend-hibernate-calls-to-pm-utils.patch fcrozat@suse.com bnc#790157 -- forward to pm-utils
Patch25: Forward-suspend-hibernate-calls-to-pm-utils.patch
2013-04-19 22:31:17 +02:00
# PATCH-FIX-UPSTREAM rules-add-lid-switch-of-ARM-based-Chromebook-as-a-power-sw.patch rjschwei@suse.com -- add lid switch of ARM based Chromebook as a power switch to logind
Patch38: rules-add-lid-switch-of-ARM-based-Chromebook-as-a-power-sw.patch
Accepting request 176957 from home:fcrozat:branches:Base:System - Update to release 204: + systemd-nspawn creates etc/resolv.conf in container if needed. + systemd-nspawn will store metadata about container in container cgroup including its root directory. + cgroup hierarchy has been reworked, all objects are now suffxed (with .session for user sessions, .user for users, .nspawn for containers). All cgroup names are now escaped to preven collision of object names. + systemctl list-dependencies gained --plain, --reverse, --after and --before switches. + systemd-inhibit shows processes name taking inhibitor lock. + nss-myhostname will now resolve "localhost" implicitly. + .include is not allowed recursively anymore and only in unit files. Drop-in files should be favored in most cases. + systemd-analyze gained "critical-chain" command, to get slowest chain of units run during boot-up. + systemd-nspawn@.service has been added to easily run nspawn container for system services. Just start "systemd-nspawn@foobar.service" and container from /var/lib/container/foobar" will be booted. + systemd-cgls has new --machine parameter to list processes from one container. + ConditionSecurity= can now check for apparmor and SMACK. + /etc/systemd/sleep.conf has been introduced to configure which kernel operation will be execute when "suspend", "hibernate" or "hybrid-sleep" is requrested. It allow new kernel "freeze" state to be used too. (This setting won't have any effect if pm-utils is installed). + ENV{SYSTEMD_WANTS} in udev rules will now implicitly escape passed argument if applicable. OBS-URL: https://build.opensuse.org/request/show/176957 OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=388
2013-05-29 17:26:40 +02:00
# PATCH-FIX-UPSTREAM systemctl-does-not-expand-u-so-revert-back-to-I.patch fcrozat@suse.com -- avoids expansion errors.
Patch42: systemctl-does-not-expand-u-so-revert-back-to-I.patch
# PATCH-FIX-UPSTREAM Start-ctrl-alt-del.target-irreversibly.patch fcrozat@suse.com -- ctrl-alt-del should be irreversible for reliability.
Patch43: Start-ctrl-alt-del.target-irreversibly.patch
# PATCH-FIX-UPSTREAM 0004-journald-DO-recalculate-the-ACL-mask-but-only-if-it-.patch crrodriguez@opensuse.org fix systemd-journald[347]: Failed to set ACL on ...user-1000.journal..Invalid argument
Patch44: 0004-journald-DO-recalculate-the-ACL-mask-but-only-if-it-.patch
# PATCH-FIX-UPSTREAM 0006-systemctl-core-allow-nuking-of-symlinks-to-removed-u.patch crrodriguez@opensuse.org ensure systemctl disable removes dangling symlinks
Patch45: 0006-systemctl-core-allow-nuking-of-symlinks-to-removed-u.patch
# PATCH-FIX-UPSTREAM 0008-service-don-t-report-alien-child-as-alive-when-it-s-.patch crrodriguez@opensuse.org do not report alien child as alive when it is dead.
Patch46: 0008-service-don-t-report-alien-child-as-alive-when-it-s-.patch
# PATCH-FIX-UPSTREAM 0001-journal-letting-interleaved-seqnums-go.patch crrodriguez@opensuse.org fix journal infinite loops
Patch47: 0001-journal-letting-interleaved-seqnums-go.patch
# PATCH-FIX-UPSTREAM 0002-journal-remember-last-direction-of-search-and-keep-o.patch crrodriguez@opensuse.org fix journal infinite loops
Patch48: 0002-journal-remember-last-direction-of-search-and-keep-o.patch
# PATCH-FIX-UPSTREAM 0160-mount-when-learning-about-the-root-mount-from-mounti.patch crrodriguez@opensuse.org another case where / is attempted to umount at shutdown
Patch49: 0160-mount-when-learning-about-the-root-mount-from-mounti.patch
# PATCH-FIX-UPSTREAM 0185-core-only-attempt-to-connect-to-a-session-bus-if-one.patch crrodriguez@opensuse.org only attempt to connect to a session bus if one likely exists.
Patch50: 0185-core-only-attempt-to-connect-to-a-session-bus-if-one.patch
# udev patches
# PATCH-FIX-OPENSUSE 1001-re-enable-by_path-links-for-ata-devices.patch
Patch1001: 1001-re-enable-by_path-links-for-ata-devices.patch
# PATCH-FIX-OPENSUSE 1002-rules-create-by-id-scsi-links-for-ATA-devices.patch
Patch1002: 1002-rules-create-by-id-scsi-links-for-ATA-devices.patch
# PATCH-FIX-OPENSUSE 1003-udev-netlink-null-rules.patch
Patch1003: 1003-udev-netlink-null-rules.patch
# PATCH-FIX-OPENSUSE 1004-fix-devname-prefix.patch fcrozat@suse.com -- fix modules.devname path, it isn't in /usr
Patch1004: 1004-fix-devname-prefix.patch
# PATCH-FIX-OPENSUSE 1005-create-default-links-for-primary-cd_dvd-drive.patch
Patch1005: 1005-create-default-links-for-primary-cd_dvd-drive.patch
# PATCH-FIX-OPENSUSE 1006-udev-always-rename-network.patch
Patch1006: 1006-udev-always-rename-network.patch
# PATCH-FIX-OPENSUSE 1007-physical-hotplug-cpu-and-memory.patch
Patch1007: 1007-physical-hotplug-cpu-and-memory.patch
# PATCH-FIX-OPENSUSE 1008-add-msft-compability-rules.patch
Patch1008: 1008-add-msft-compability-rules.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}
Requires: systemd-rpm-macros
%if 0%{?bootstrap}
Conflicts: systemd-devel
%endif
%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 -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 /usr/bin/sg_inq
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}
Conflicts: libudev%{udev_major}
Conflicts: udev
%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}
Conflicts: kiwi
%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}
Conflicts: libudev%{udev_major} = %{version}
Conflicts: libudev-devel
%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.
%package -n nss-myhostname
Summary: Plugin for local system host name resolution
License: LGPL-2.1+
Group: System/Libraries
%description -n nss-myhostname
nss-myhostname is a plugin for the GNU Name Service Switch (NSS)
functionality of the GNU C Library (glibc) providing host name
resolution for the locally configured system hostname as returned by
gethostname(2). Various software relies on an always resolvable local
host name. When using dynamic hostnames this is usually achieved by
patching /etc/hosts at the same time as changing the host name. This
however is not ideal since it requires a writable /etc file system and
is fragile because the file might be edited by the administrator at
the same time. nss-myhostname simply returns all locally
configured public IP addresses, or -- if none are configured --
the IPv4 address 127.0.0.2 (wich is on the local loopback) and the
IPv6 address ::1 (which is the local host) for whatever system
hostname is configured locally. Patching /etc/hosts is thus no
longer necessary.
Note that nss-myhostname only provides a workaround for broken
software. If nss-myhostname is trigged by an application a message
is logged to /var/log/messages. Please check whether that's worth
a bug report then.
This package marks the installation to not use syslog but only the journal.
%endif
%prep
%setup -q -n systemd-%{version}
echo "Checking whether upstream rpm macros changed..."
[ -z "`diff -Naru "%{S:10}" src/core/macros.systemd.in`" ] || exit 1
# only needed for bootstrap
%if 0%{?bootstrap}
cp %{SOURCE7} m4/
%endif
# systemd patches
%patch0 -p1
%patch1 -p1
%patch3 -p1
# don't apply when bootstrapping to not modify configure.in
%if ! 0%{?bootstrap}
%patch4 -p1
%endif
%patch5 -p1
%patch6 -p1
%patch7 -p1
%patch8 -p1
%patch9 -p1
%patch10 -p1
%patch11 -p1
%patch12 -p1
%patch13 -p1
%patch14 -p1
%patch15 -p1
%patch16 -p1
%patch17 -p1
%patch18 -p1
%patch20 -p1
%patch21 -p1
Accepting request 96123 from home:fcrozat:systemd - Remove storage-after-cryptsetup.service, add storage-after-cryptsetup.patch instead to prevent dependency cycle (bnc#722539). - Add delay-fsck-cryptsetup-after-md-lvm-dmraid.patch: ensure fsck/cryptsetup is run after lvm/md/dmraid have landed (bnc#724912). - Add cron-tty-pam.patch: Fix cron filling logs (bnc#731358). - Add do_not_warn_pidfile.patch: Fix PID warning in logs (bnc#732912). - Add mount-swap-log.patch: Ensure swap and mount output is redirected to default log target (rhb#750032). - Add color-on-boot.patch: ensure colored status are displayed at boot time. - Update modules_on_boot.patch to fix bnc#732041. - Replace private_tmp_crash.patch with log_on_close.patch, better upstream fix for bnc#699829 and fix bnc#731719. - Update vconsole patch to fix memleaks and crash (bnc#734527). - Add handle-racy-daemon.patch: fix warnings with sendmail (bnc#732912). - Add new-lsb-headers.patch: support PIDFile: and X-Systemd-RemainAfterExit: header in initscript (bnc#727771). - Update bootsplash services to not start if vga= is missing from cmdline (bnc#727771) - Add lock-opensuse.patch: disable /var/lock/{subsys,lockdev} and change default permissions on /var/lock (bnc#733523). - Add garbage_collect_units: ensure error units are correctly garbage collected (rhb#680122). - Add crypt-loop-file.patch: add support for crypt file loop (bnc#730496). OBS-URL: https://build.opensuse.org/request/show/96123 OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=228
2011-12-09 15:44:59 +01:00
%patch22 -p1
%patch23 -p1
%patch24 -p1
%patch25 -p1
%patch27 -p1
%patch37 -p1
%ifarch %arm
%patch38 -p1
%endif
%patch39 -p1
%patch40 -p1
%patch41 -p1
Accepting request 176957 from home:fcrozat:branches:Base:System - Update to release 204: + systemd-nspawn creates etc/resolv.conf in container if needed. + systemd-nspawn will store metadata about container in container cgroup including its root directory. + cgroup hierarchy has been reworked, all objects are now suffxed (with .session for user sessions, .user for users, .nspawn for containers). All cgroup names are now escaped to preven collision of object names. + systemctl list-dependencies gained --plain, --reverse, --after and --before switches. + systemd-inhibit shows processes name taking inhibitor lock. + nss-myhostname will now resolve "localhost" implicitly. + .include is not allowed recursively anymore and only in unit files. Drop-in files should be favored in most cases. + systemd-analyze gained "critical-chain" command, to get slowest chain of units run during boot-up. + systemd-nspawn@.service has been added to easily run nspawn container for system services. Just start "systemd-nspawn@foobar.service" and container from /var/lib/container/foobar" will be booted. + systemd-cgls has new --machine parameter to list processes from one container. + ConditionSecurity= can now check for apparmor and SMACK. + /etc/systemd/sleep.conf has been introduced to configure which kernel operation will be execute when "suspend", "hibernate" or "hybrid-sleep" is requrested. It allow new kernel "freeze" state to be used too. (This setting won't have any effect if pm-utils is installed). + ENV{SYSTEMD_WANTS} in udev rules will now implicitly escape passed argument if applicable. OBS-URL: https://build.opensuse.org/request/show/176957 OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=388
2013-05-29 17:26:40 +02:00
%patch42 -p1
%patch43 -p1
%patch44 -p1
%patch45 -p1
%patch46 -p1
%patch47 -p1
%patch48 -p1
%patch49 -p1
%patch50 -p1
# udev patches
%patch1001 -p1
%patch1002 -p1
%patch1003 -p1
%patch1004 -p1
%patch1005 -p1
%patch1006 -p1
# don't apply when bootstrapping to not modify Makefile.am
%if ! 0%{?bootstrap}
%patch1007 -p1
%patch1008 -p1
%endif
%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 \
--docdir=%{_docdir}/systemd \
--with-pamlibdir=/%{_lib}/security \
%if 0%{?bootstrap}
--disable-gudev \
--disable-myhostname \
%else
--enable-manpages \
--enable-gtk-doc \
--with-nss-my-hostname-warning \
%endif
--enable-selinux \
--enable-split-usr \
--disable-static \
--with-firmware-path="%{_prefix}/lib/firmware:/lib/firmware" \
--with-rc-local-script-path-start=/etc/init.d/boot.local \
--with-rc-local-script-path-stop=/etc/init.d/halt.local \
Accepting request 176957 from home:fcrozat:branches:Base:System - Update to release 204: + systemd-nspawn creates etc/resolv.conf in container if needed. + systemd-nspawn will store metadata about container in container cgroup including its root directory. + cgroup hierarchy has been reworked, all objects are now suffxed (with .session for user sessions, .user for users, .nspawn for containers). All cgroup names are now escaped to preven collision of object names. + systemctl list-dependencies gained --plain, --reverse, --after and --before switches. + systemd-inhibit shows processes name taking inhibitor lock. + nss-myhostname will now resolve "localhost" implicitly. + .include is not allowed recursively anymore and only in unit files. Drop-in files should be favored in most cases. + systemd-analyze gained "critical-chain" command, to get slowest chain of units run during boot-up. + systemd-nspawn@.service has been added to easily run nspawn container for system services. Just start "systemd-nspawn@foobar.service" and container from /var/lib/container/foobar" will be booted. + systemd-cgls has new --machine parameter to list processes from one container. + ConditionSecurity= can now check for apparmor and SMACK. + /etc/systemd/sleep.conf has been introduced to configure which kernel operation will be execute when "suspend", "hibernate" or "hybrid-sleep" is requrested. It allow new kernel "freeze" state to be used too. (This setting won't have any effect if pm-utils is installed). + ENV{SYSTEMD_WANTS} in udev rules will now implicitly escape passed argument if applicable. OBS-URL: https://build.opensuse.org/request/show/176957 OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=388
2013-05-29 17:26:40 +02:00
--with-debug-shell=/bin/bash \
CFLAGS="%{optflags}"
make %{?_smp_mflags}
%install
make install DESTDIR="%buildroot"
# move to %{_lib}
%if ! 0%{?bootstrap}
mv $RPM_BUILD_ROOT%{_libdir}/libnss_myhostname.so.2 $RPM_BUILD_ROOT/%{_lib}
%endif
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
Accepting request 142041 from home:fcrozat:branches:Base:System - 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/request/show/142041 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
ln -sf /lib/firmware $RPM_BUILD_ROOT/usr/lib/firmware
Accepting request 142041 from home:fcrozat:branches:Base:System - 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/request/show/142041 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
install -D -m 755 %{S:9} %{buildroot}%{_sbindir}/nss-myhostname-config
Accepting request 142041 from home:fcrozat:branches:Base:System - 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/request/show/142041 OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=312
2012-11-20 13:10:12 +01:00
%endif
sed -ie "s|@@PREFIX@@|%{_prefix}/lib/udev|g" %{S:1060}
sed -ie "s|@@SYSTEMD@@|%{_prefix}/lib/systemd|g" %{S:1060}
sed -ie "s|@@BINDIR@@|%{_bindir}|g" %{S:1060}
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/systemd-udev-root-symlink.service
mkdir -p $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants
ln -sf ../systemd-udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants
rm -rf %{buildroot}%{_sysconfdir}/rpm
find %{buildroot} -type f -name '*.la' -delete
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
Accepting request 142041 from home:fcrozat:branches:Base:System - 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/request/show/142041 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
Accepting request 142041 from home:fcrozat:branches:Base:System - 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/request/show/142041 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
# create %{_libexecdir}/modules-load.d
mkdir -p %{buildroot}%{_libexecdir}/modules-load.d
cat << EOF > %{buildroot}%{_libexecdir}/modules-load.d/sg.conf
# load sg module at boot time
sg
EOF
# 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}%{_prefix}/lib/sysctl.d/50-coredump.conf
# do not ship sysctl defaults in systemd package, will be part of
# aaa_base (in procps for now)
rm -f %{buildroot}%{_prefix}/lib/sysctl.d/50-default.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
Accepting request 142041 from home:fcrozat:branches:Base:System - 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/request/show/142041 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 directories in /var exist
mkdir -p %{buildroot}/var/lib/systemd/coredump
mkdir -p %{buildroot}/var/lib/systemd/catalog
#create ghost databases
touch %{buildroot}/var/lib/systemd/catalog/database
touch %{buildroot}%{_sysconfdir}/udev/hwdb.bin
# 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
# create drop-in to prevent tty1 to be cleared (bnc#804158)
mkdir -p %{buildroot}%{_prefix}/lib/systemd/system/getty@tty1.service.d/
echo << EOF > %{buildroot}%{_prefix}/lib/systemd/system/getty@tty1.service.d/noclear.conf
[Service]
# ensure tty1 isn't cleared (bnc#804158)
TTYVTDisallocate=no
EOF
%fdupes -s %{buildroot}%{_mandir}
Accepting request 101496 from home:fcrozat:branches:Base:System - 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/request/show/101496 OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=234
2012-01-25 15:08:16 +01:00
# disable predictable network interface naming until it has been reviewed by network team
cat << EOF > %{buildroot}%{_prefix}/lib/tmpfiles.d/network.conf
F /run/udev/rules.d/80-net-name-slot.rules 0644 - - - "#disable predictable network interface naming for now"
EOF
%pre
getent group systemd-journal >/dev/null || groupadd -r systemd-journal || :
getent passwd systemd-journal-gateway >/dev/null || useradd -r -l -g systemd-journal-gateway -d /var/log/journal -s /usr/sbin/nologin -c "Journal Gateway" systemd-journal-gateway >/dev/null 2>&1 || :
getent group systemd-journal-gateway >/dev/null || groupadd -r systemd-journal-gateway || :
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 || :
/usr/bin/journalctl --update-catalog >/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
Accepting request 142041 from home:fcrozat:branches:Base:System - 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/request/show/142041 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}
/usr/bin/udevadm hwdb --update >/dev/null 2>&1 || :
%{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
%post logger
if [ "$1" -eq 1 ]; then
# tell journal to start logging on disk if directory didn't exist before
systemctl --no-block restart systemd-journal-flush.service >/dev/null 2>&1 || :
fi
%preun -n nss-myhostname
if [ "$1" -eq 0 -a -f /etc/nsswitch.conf ] ; then
%{_sbindir}/nss-myhostname-config --disable
fi
%post -n nss-myhostname -p /sbin/ldconfig
%postun -n nss-myhostname -p /sbin/ldconfig
%endif
%files
%defattr(-,root,root)
/bin/systemd
/bin/systemd-ask-password
/bin/systemctl
%{_bindir}/bootctl
%{_bindir}/kernel-install
%{_bindir}/hostnamectl
%{_bindir}/localectl
%{_bindir}/systemctl
%{_bindir}/systemd-analyze
%{_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
Accepting request 101496 from home:fcrozat:branches:Base:System - 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/request/show/101496 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
Accepting request 176957 from home:fcrozat:branches:Base:System - Update to release 204: + systemd-nspawn creates etc/resolv.conf in container if needed. + systemd-nspawn will store metadata about container in container cgroup including its root directory. + cgroup hierarchy has been reworked, all objects are now suffxed (with .session for user sessions, .user for users, .nspawn for containers). All cgroup names are now escaped to preven collision of object names. + systemctl list-dependencies gained --plain, --reverse, --after and --before switches. + systemd-inhibit shows processes name taking inhibitor lock. + nss-myhostname will now resolve "localhost" implicitly. + .include is not allowed recursively anymore and only in unit files. Drop-in files should be favored in most cases. + systemd-analyze gained "critical-chain" command, to get slowest chain of units run during boot-up. + systemd-nspawn@.service has been added to easily run nspawn container for system services. Just start "systemd-nspawn@foobar.service" and container from /var/lib/container/foobar" will be booted. + systemd-cgls has new --machine parameter to list processes from one container. + ConditionSecurity= can now check for apparmor and SMACK. + /etc/systemd/sleep.conf has been introduced to configure which kernel operation will be execute when "suspend", "hibernate" or "hybrid-sleep" is requrested. It allow new kernel "freeze" state to be used too. (This setting won't have any effect if pm-utils is installed). + ENV{SYSTEMD_WANTS} in udev rules will now implicitly escape passed argument if applicable. OBS-URL: https://build.opensuse.org/request/show/176957 OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=388
2013-05-29 17:26:40 +02:00
%dir %{_prefix}/lib/kernel
%dir %{_prefix}/lib/kernel/install.d
%{_prefix}/lib/kernel/install.d/50-depmod.install
%{_prefix}/lib/kernel/install.d/90-loaderentry.install
%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/systemd-udev-root-symlink.service
%exclude %{_prefix}/lib/systemd/system/*.target.wants/systemd-udev*.*
%exclude %{_prefix}/lib/systemd/system/basic.target.wants/systemd-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/catalog
%{_prefix}/lib/systemd/catalog/systemd.catalog
%dir %{_prefix}/lib/systemd/system-shutdown
%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/getty@tty1.service.d
%{_prefix}/lib/systemd/system/getty@tty1.service.d/noclear.conf
%if ! 0%{?bootstrap}
%{_prefix}/lib/systemd/system-generators/systemd-cryptsetup-generator
%endif
%{_prefix}/lib/systemd/system-generators/systemd-efi-boot-generator
%{_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
%{_libexecdir}/modules-load.d/sg.conf
%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/bootchart.conf
%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]*
Accepting request 142041 from home:fcrozat:branches:Base:System - 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/request/show/142041 OBS-URL: https://build.opensuse.org/package/show/Base:System/systemd?expand=0&rev=312
2012-11-20 13:10:12 +01:00
%{_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 %{_datadir}/bash-completion
%dir %{_datadir}/bash-completion/completions
%ghost /var/lib/systemd/catalog/database
%{_datadir}/bash-completion/completions/*
%if 0%{suse_version} < 1310
%{_sysconfdir}/rpm/macros.systemd
%endif
%dir /var/lib/systemd
%dir /var/lib/systemd/sysv-convert
%dir /var/lib/systemd/migrated
%dir /var/lib/systemd/catalog
%dir /var/lib/systemd/coredump
%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 -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
%dir %{_prefix}/lib/udev/hwdb.d
%{_prefix}/lib/udev/hwdb.d/*
%{_sysconfdir}/init.d/boot.udev
%dir %{_sysconfdir}/udev/
%dir %{_sysconfdir}/udev/rules.d/
%ghost %{_sysconfdir}/udev/hwdb.bin
%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/systemd-udev-root-symlink.service
%{_prefix}/lib/systemd/system/basic.target.wants/systemd-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
Accepting request 142041 from home:fcrozat:branches:Base:System - 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/request/show/142041 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
%files -n nss-myhostname
%defattr(-, root, root)
%{_sbindir}/nss-myhostname-config
/%{_lib}/*nss_myhostname*
%endif
%changelog