SHA256
1
0
forked from pool/systemd
systemd/sync-on-shutdown.patch

47 lines
1.7 KiB
Diff
Raw Normal View History

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
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(+)
Index: systemd-195/src/core/service.c
===================================================================
--- systemd-195.orig/src/core/service.c
+++ systemd-195/src/core/service.c
@@ -2526,6 +2526,7 @@ static int service_start_limit_test(Serv
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
case SERVICE_START_LIMIT_REBOOT_IMMEDIATE:
log_warning("%s start request repeated too quickly, rebooting immediately.", UNIT(s)->id);
+ sync();
reboot(RB_AUTOBOOT);
break;
Index: systemd-195/src/core/shutdown.c
===================================================================
--- systemd-195.orig/src/core/shutdown.c
+++ systemd-195/src/core/shutdown.c
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
@@ -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) {