Accepting request 142568 from Base:System
- Fix creation of /dev/root link. - Add remount-ro-before-unmount.patch: always remount read-only before unmounting in final shutdown loop. - Add switch-root-try-pivot-root.patch: try pivot_root before overmounting / - 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. OBS-URL: https://build.opensuse.org/request/show/142568 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/systemd?expand=0&rev=115
This commit is contained in:
commit
aa7c7b8178
@ -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,7 +47,7 @@ Index: systemd-41/src/service.c
|
||||
STRV_FOREACH (j, parsed+1) {
|
||||
- if (*j[0]=='+') {
|
||||
- e = UNIT_WANTS;
|
||||
+ if (*j[0]=='+')
|
||||
+ if (*j[0] == '+')
|
||||
name = *j+1;
|
||||
- }
|
||||
- else {
|
||||
@ -44,9 +62,54 @@ Index: systemd-41/src/service.c
|
||||
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
|
||||
|
||||
|
23
fix-bad-memory-access.patch
Normal file
23
fix-bad-memory-access.patch
Normal file
@ -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));
|
32
fix-build-glibc217.patch
Normal file
32
fix-build-glibc217.patch
Normal file
@ -0,0 +1,32 @@
|
||||
From e17187091d463ad008c0b74eb04de5078b2abb96 Mon Sep 17 00:00:00 2001
|
||||
From: Michal Schmidt <mschmidt@redhat.com>
|
||||
Date: Wed, 14 Nov 2012 14:44:05 +0100
|
||||
Subject: [PATCH] configure.ac: fix FTBFS with new glibc
|
||||
|
||||
glibc moved clock_* functions from librt to the core libc. As a result,
|
||||
clock_gettime is no more a suitable symbol to use when finding librt.
|
||||
Look for mq_open instead.
|
||||
Reference:
|
||||
http://www.sourceware.org/git/gitweb.cgi?p=glibc.git&h=6e6249d0b461b952d0f544792372663feb6d792a
|
||||
|
||||
Fixes a FTBFS in Fedora Rawhide.
|
||||
---
|
||||
configure.ac | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/configure.ac b/configure.ac
|
||||
index c4638d1..71ea6ad 100644
|
||||
--- a/configure.ac
|
||||
+++ b/configure.ac
|
||||
@@ -171,7 +171,7 @@ CC_CHECK_FLAGS_APPEND([with_ldflags], [LDFLAGS], [\
|
||||
-Wl,-z,now])
|
||||
AC_SUBST([OUR_LDFLAGS], $with_ldflags)
|
||||
|
||||
-AC_SEARCH_LIBS([clock_gettime], [rt], [], [AC_MSG_ERROR([*** POSIX RT library not found])])
|
||||
+AC_SEARCH_LIBS([mq_open], [rt], [], [AC_MSG_ERROR([*** POSIX RT library not found])])
|
||||
AC_SEARCH_LIBS([dlsym], [dl], [], [AC_MSG_ERROR([*** Dynamic linking loader library not found])])
|
||||
|
||||
save_LIBS="$LIBS"
|
||||
--
|
||||
1.7.10.4
|
||||
|
32
fix-dbus-crash.patch
Normal file
32
fix-dbus-crash.patch
Normal file
@ -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
|
||||
|
13
fix-permissions-btmp.patch
Normal file
13
fix-permissions-btmp.patch
Normal file
@ -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
|
||||
|
123
libgcrypt.m4
Normal file
123
libgcrypt.m4
Normal file
@ -0,0 +1,123 @@
|
||||
dnl Autoconf macros for libgcrypt
|
||||
dnl Copyright (C) 2002, 2004 Free Software Foundation, Inc.
|
||||
dnl
|
||||
dnl This file is free software; as a special exception the author gives
|
||||
dnl unlimited permission to copy and/or distribute it, with or without
|
||||
dnl modifications, as long as this notice is preserved.
|
||||
dnl
|
||||
dnl This file is distributed in the hope that it will be useful, but
|
||||
dnl WITHOUT ANY WARRANTY, to the extent permitted by law; without even the
|
||||
dnl implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
||||
|
||||
|
||||
dnl AM_PATH_LIBGCRYPT([MINIMUM-VERSION,
|
||||
dnl [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND ]]])
|
||||
dnl Test for libgcrypt and define LIBGCRYPT_CFLAGS and LIBGCRYPT_LIBS.
|
||||
dnl MINIMUN-VERSION is a string with the version number optionalliy prefixed
|
||||
dnl with the API version to also check the API compatibility. Example:
|
||||
dnl a MINIMUN-VERSION of 1:1.2.5 won't pass the test unless the installed
|
||||
dnl version of libgcrypt is at least 1.2.5 *and* the API number is 1. Using
|
||||
dnl this features allows to prevent build against newer versions of libgcrypt
|
||||
dnl with a changed API.
|
||||
dnl
|
||||
AC_DEFUN([AM_PATH_LIBGCRYPT],
|
||||
[ AC_ARG_WITH(libgcrypt-prefix,
|
||||
AC_HELP_STRING([--with-libgcrypt-prefix=PFX],
|
||||
[prefix where LIBGCRYPT is installed (optional)]),
|
||||
libgcrypt_config_prefix="$withval", libgcrypt_config_prefix="")
|
||||
if test x$libgcrypt_config_prefix != x ; then
|
||||
if test x${LIBGCRYPT_CONFIG+set} != xset ; then
|
||||
LIBGCRYPT_CONFIG=$libgcrypt_config_prefix/bin/libgcrypt-config
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_PATH_TOOL(LIBGCRYPT_CONFIG, libgcrypt-config, no)
|
||||
tmp=ifelse([$1], ,1:1.2.0,$1)
|
||||
if echo "$tmp" | grep ':' >/dev/null 2>/dev/null ; then
|
||||
req_libgcrypt_api=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\1/'`
|
||||
min_libgcrypt_version=`echo "$tmp" | sed 's/\(.*\):\(.*\)/\2/'`
|
||||
else
|
||||
req_libgcrypt_api=0
|
||||
min_libgcrypt_version="$tmp"
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING(for LIBGCRYPT - version >= $min_libgcrypt_version)
|
||||
ok=no
|
||||
if test "$LIBGCRYPT_CONFIG" != "no" ; then
|
||||
req_major=`echo $min_libgcrypt_version | \
|
||||
sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\1/'`
|
||||
req_minor=`echo $min_libgcrypt_version | \
|
||||
sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\2/'`
|
||||
req_micro=`echo $min_libgcrypt_version | \
|
||||
sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\)/\3/'`
|
||||
libgcrypt_config_version=`$LIBGCRYPT_CONFIG --version`
|
||||
major=`echo $libgcrypt_config_version | \
|
||||
sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\1/'`
|
||||
minor=`echo $libgcrypt_config_version | \
|
||||
sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\2/'`
|
||||
micro=`echo $libgcrypt_config_version | \
|
||||
sed 's/\([[0-9]]*\)\.\([[0-9]]*\)\.\([[0-9]]*\).*/\3/'`
|
||||
if test "$major" -gt "$req_major"; then
|
||||
ok=yes
|
||||
else
|
||||
if test "$major" -eq "$req_major"; then
|
||||
if test "$minor" -gt "$req_minor"; then
|
||||
ok=yes
|
||||
else
|
||||
if test "$minor" -eq "$req_minor"; then
|
||||
if test "$micro" -ge "$req_micro"; then
|
||||
ok=yes
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if test $ok = yes; then
|
||||
AC_MSG_RESULT([yes ($libgcrypt_config_version)])
|
||||
else
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
if test $ok = yes; then
|
||||
# If we have a recent libgcrypt, we should also check that the
|
||||
# API is compatible
|
||||
if test "$req_libgcrypt_api" -gt 0 ; then
|
||||
tmp=`$LIBGCRYPT_CONFIG --api-version 2>/dev/null || echo 0`
|
||||
if test "$tmp" -gt 0 ; then
|
||||
AC_MSG_CHECKING([LIBGCRYPT API version])
|
||||
if test "$req_libgcrypt_api" -eq "$tmp" ; then
|
||||
AC_MSG_RESULT([okay])
|
||||
else
|
||||
ok=no
|
||||
AC_MSG_RESULT([does not match. want=$req_libgcrypt_api got=$tmp])
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
if test $ok = yes; then
|
||||
LIBGCRYPT_CFLAGS=`$LIBGCRYPT_CONFIG --cflags`
|
||||
LIBGCRYPT_LIBS=`$LIBGCRYPT_CONFIG --libs`
|
||||
ifelse([$2], , :, [$2])
|
||||
if test x"$host" != x ; then
|
||||
libgcrypt_config_host=`$LIBGCRYPT_CONFIG --host 2>/dev/null || echo none`
|
||||
if test x"$libgcrypt_config_host" != xnone ; then
|
||||
if test x"$libgcrypt_config_host" != x"$host" ; then
|
||||
AC_MSG_WARN([[
|
||||
***
|
||||
*** The config script $LIBGCRYPT_CONFIG was
|
||||
*** built for $libgcrypt_config_host and thus may not match the
|
||||
*** used host $host.
|
||||
*** You may want to use the configure option --with-libgcrypt-prefix
|
||||
*** to specify a matching config script.
|
||||
***]])
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
else
|
||||
LIBGCRYPT_CFLAGS=""
|
||||
LIBGCRYPT_LIBS=""
|
||||
ifelse([$3], , :, [$3])
|
||||
fi
|
||||
AC_SUBST(LIBGCRYPT_CFLAGS)
|
||||
AC_SUBST(LIBGCRYPT_LIBS)
|
||||
])
|
336
mount-efivars.patch
Normal file
336
mount-efivars.patch
Normal file
@ -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
|
||||
|
95
remount-ro-before-unmount.patch
Normal file
95
remount-ro-before-unmount.patch
Normal file
@ -0,0 +1,95 @@
|
||||
From 93bd157722c76b47d80742f290373c1ce2865070 Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Fri, 16 Nov 2012 18:36:28 +0100
|
||||
Subject: [PATCH] umount: always remount read-only before unmounting in final
|
||||
shutdown loop
|
||||
|
||||
---
|
||||
src/core/umount.c | 57 +++++++++++++++++++++++++----------------------------
|
||||
1 file changed, 27 insertions(+), 30 deletions(-)
|
||||
|
||||
diff --git a/src/core/umount.c b/src/core/umount.c
|
||||
index 83c9de3..e794057 100644
|
||||
--- a/src/core/umount.c
|
||||
+++ b/src/core/umount.c
|
||||
@@ -407,6 +407,33 @@ static int mount_points_list_umount(MountPoint **head, bool *changed, bool log_e
|
||||
assert(head);
|
||||
|
||||
LIST_FOREACH_SAFE(mount_point, m, n, *head) {
|
||||
+
|
||||
+ /* If we are in a container, don't attempt to
|
||||
+ read-only mount anything as that brings no real
|
||||
+ benefits, but might confuse the host, as we remount
|
||||
+ the superblock here, not the bind mound. */
|
||||
+ if (detect_container(NULL) <= 0) {
|
||||
+ /* We always try to remount directories
|
||||
+ * read-only first, before we go on and umount
|
||||
+ * them.
|
||||
+ *
|
||||
+ * Mount points can be stacked. If a mount
|
||||
+ * point is stacked below / or /usr, we
|
||||
+ * cannnot umount or remount it directly,
|
||||
+ * since there is no way to refer to the
|
||||
+ * underlying mount. There's nothing we can do
|
||||
+ * about it for the general case, but we can
|
||||
+ * do something about it if it is aliased
|
||||
+ * somehwere else via a bind mount. If we
|
||||
+ * explicitly remount the super block of that
|
||||
+ * alias read-only we hence should be
|
||||
+ * relatively safe regarding keeping the fs we
|
||||
+ * can otherwise not see dirty. */
|
||||
+ mount(NULL, m->path, NULL, MS_REMOUNT|MS_RDONLY, NULL);
|
||||
+ }
|
||||
+
|
||||
+ /* Skip / and /usr since we cannot unmount that
|
||||
+ * anyway, since we are running from it */
|
||||
if (path_equal(m->path, "/")
|
||||
#ifndef HAVE_SPLIT_USR
|
||||
|| path_equal(m->path, "/usr")
|
||||
@@ -432,29 +459,6 @@ static int mount_points_list_umount(MountPoint **head, bool *changed, bool log_e
|
||||
return n_failed;
|
||||
}
|
||||
|
||||
-static int mount_points_list_remount_read_only(MountPoint **head, bool *changed) {
|
||||
- MountPoint *m, *n;
|
||||
- int n_failed = 0;
|
||||
-
|
||||
- assert(head);
|
||||
-
|
||||
- LIST_FOREACH_SAFE(mount_point, m, n, *head) {
|
||||
-
|
||||
- /* Trying to remount read-only */
|
||||
- if (mount(NULL, m->path, NULL, MS_REMOUNT|MS_RDONLY, NULL) == 0) {
|
||||
- if (changed)
|
||||
- *changed = true;
|
||||
-
|
||||
- mount_point_free(head, m);
|
||||
- } else {
|
||||
- log_warning("Could not remount as read-only %s: %m", m->path);
|
||||
- n_failed++;
|
||||
- }
|
||||
- }
|
||||
-
|
||||
- return n_failed;
|
||||
-}
|
||||
-
|
||||
static int swap_points_list_off(MountPoint **head, bool *changed) {
|
||||
MountPoint *m, *n;
|
||||
int n_failed = 0;
|
||||
@@ -571,13 +575,6 @@ int umount_all(bool *changed) {
|
||||
if (r <= 0)
|
||||
goto end;
|
||||
|
||||
- /* If we are in a container, don't attempt to read-only mount
|
||||
- anything as that brings no real benefits, but might confuse
|
||||
- the host, as we remount the superblock here, not the bind
|
||||
- mound. */
|
||||
- if (detect_container(NULL) <= 0)
|
||||
- r = mount_points_list_remount_read_only(&mp_list_head, changed);
|
||||
-
|
||||
end:
|
||||
mount_points_list_free(&mp_list_head);
|
||||
|
||||
--
|
||||
1.7.10.4
|
||||
|
81
switch-root-try-pivot-root.patch
Normal file
81
switch-root-try-pivot-root.patch
Normal file
@ -0,0 +1,81 @@
|
||||
From 891a4918ef75fa81e22691156c050d061bd53dd3 Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Fri, 16 Nov 2012 18:15:30 +0100
|
||||
Subject: [PATCH] switch-root: try pivot_root() before overmounting /
|
||||
|
||||
We should always try to umount the old root dir if possible, instead of
|
||||
overmounting it -- if that's possible.
|
||||
|
||||
The initial ("first") kernel rootfs can never be umounted, hence
|
||||
for the usual nitrd case we never bothered using pivot_root() and
|
||||
hence with fully unmounting it. However, fedup now tranisitions twice
|
||||
during boot, and in that case it is highly desirable that the "second"
|
||||
root dir is entirely unmounted when we switch to the "third". This patch
|
||||
makes that possible.
|
||||
|
||||
The pivot_root() needs a directory in the "third" root dir, to move the
|
||||
"second" root dir to. We use /mnt for that, under the assumption that
|
||||
this directory is likely to exist, and is not itself a mount point.
|
||||
---
|
||||
src/core/switch-root.c | 27 ++++++++++++++++++++++++++-
|
||||
1 file changed, 26 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/core/switch-root.c b/src/core/switch-root.c
|
||||
index 150332a..ce0e41d 100644
|
||||
--- a/src/core/switch-root.c
|
||||
+++ b/src/core/switch-root.c
|
||||
@@ -30,6 +30,7 @@
|
||||
#include "util.h"
|
||||
#include "path-util.h"
|
||||
#include "switch-root.h"
|
||||
+#include "missing.h"
|
||||
|
||||
int switch_root(const char *new_root) {
|
||||
|
||||
@@ -44,10 +45,21 @@ int switch_root(const char *new_root) {
|
||||
struct stat new_root_stat;
|
||||
bool old_root_remove;
|
||||
const char *i;
|
||||
+ _cleanup_free_ char *temporary_old_root = NULL;
|
||||
|
||||
if (path_equal(new_root, "/"))
|
||||
return 0;
|
||||
|
||||
+ /* When using pivot_root() we assume that /mnt exists as place
|
||||
+ * we can temporarily move the old root to. As we immediately
|
||||
+ * unmount it from there it doesn't matter much which
|
||||
+ * directory we choose for this, but it should be more likely
|
||||
+ * than not that /mnt exists and is suitable as mount point
|
||||
+ * and is on the same fs as the old root dir */
|
||||
+ temporary_old_root = strappend(new_root, "/mnt");
|
||||
+ if (!temporary_old_root)
|
||||
+ return -ENOMEM;
|
||||
+
|
||||
old_root_remove = in_initrd();
|
||||
|
||||
if (stat(new_root, &new_root_stat) < 0) {
|
||||
@@ -103,7 +115,20 @@ int switch_root(const char *new_root) {
|
||||
log_warning("Failed to open root directory: %m");
|
||||
}
|
||||
|
||||
- if (mount(new_root, "/", NULL, MS_MOVE, NULL) < 0) {
|
||||
+ /* We first try a pivot_root() so that we can umount the old
|
||||
+ * root dir. In many cases (i.e. where rootfs is /), that's
|
||||
+ * not possible however, and hence we simply overmount root */
|
||||
+ if (pivot_root(new_root, temporary_old_root) >= 0) {
|
||||
+
|
||||
+ /* Immediately get rid of the old root. Since we are
|
||||
+ * running off it we need to do this lazily. */
|
||||
+ if (umount2(temporary_old_root, MNT_DETACH) < 0) {
|
||||
+ r = -errno;
|
||||
+ log_error("Failed to umount old root dir %s: %m", temporary_old_root);
|
||||
+ goto fail;
|
||||
+ }
|
||||
+
|
||||
+ } else if (mount(new_root, "/", NULL, MS_MOVE, NULL) < 0) {
|
||||
r = -errno;
|
||||
log_error("Failed to mount moving %s to /: %m", new_root);
|
||||
goto fail;
|
||||
--
|
||||
1.7.10.4
|
||||
|
49
sync-on-shutdown.patch
Normal file
49
sync-on-shutdown.patch
Normal file
@ -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
|
||||
|
33
systemd-journald.init
Normal file
33
systemd-journald.init
Normal file
@ -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
|
@ -1,3 +1,65 @@
|
||||
-------------------------------------------------------------------
|
||||
Thu Nov 22 14:22:00 UTC 2012 - rmilasan@suse.com
|
||||
|
||||
- Fix creation of /dev/root link.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Nov 20 18:25:49 CET 2012 - fcrozat@suse.com
|
||||
|
||||
- Add remount-ro-before-unmount.patch: always remount read-only
|
||||
before unmounting in final shutdown loop.
|
||||
- Add switch-root-try-pivot-root.patch: try pivot_root before
|
||||
overmounting /
|
||||
|
||||
-------------------------------------------------------------------
|
||||
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
|
||||
won't be persistent for people using another syslog
|
||||
implementation).
|
||||
- install README in /var/log (in systemd-logger) and /etc/init.d
|
||||
- create adm group when installing systemd.
|
||||
- fix path in udev-root-symlink.systemd.
|
||||
- Enforce Requires(post) dependency on libudev in main systemd
|
||||
package (help upgrade).
|
||||
- Ensure configuration is reloaded when upgrading and save random
|
||||
seed when installing.
|
||||
- Create /lib/udev symlink, if we do a fresh install.
|
||||
- Add fix-build-glibc217.patch: fix build with latest glibc.
|
||||
- Add libgcrypt.m4: copy of autoconf macro from libgcrypt, only
|
||||
used to bootstrap systemd-mini.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Nov 6 14:40:37 UTC 2012 - coolo@suse.com
|
||||
|
||||
|
@ -86,6 +86,7 @@ Requires: %{udevpkgname} >= 172
|
||||
Requires: dbus-1 >= 1.4.0
|
||||
Requires: kbd
|
||||
Requires: pam-config >= 0.79-5
|
||||
Requires: pwdutils
|
||||
Requires: systemd-presets-branding
|
||||
Requires: util-linux >= 2.21
|
||||
Requires(post): coreutils
|
||||
@ -100,6 +101,8 @@ Source3: systemd-sysv-convert
|
||||
Source4: macros.systemd
|
||||
Source5: systemd-insserv_conf
|
||||
Source6: baselibs.conf
|
||||
Source7: libgcrypt.m4
|
||||
Source8: systemd-journald.init
|
||||
|
||||
Source1060: boot.udev
|
||||
Source1061: write_dev_root_rule
|
||||
@ -126,6 +129,8 @@ Patch53: fastboot-forcefsck.patch
|
||||
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
|
||||
@ -133,6 +138,20 @@ Patch60: var-run-lock.patch
|
||||
# an exception will be silently removed with the next version update.
|
||||
# PATCH-FIX-UPSTREAM fix-logind-pty-seat.patch fcrozat@suse.com -- fix logind complaining when doing su/sudo in X terminal
|
||||
Patch61: fix-logind-pty-seat.patch
|
||||
# PATCH-FIX-UPSTREAM fix-build-glibc217.patch fcrozat@suse.com -- fix build with latest glibc
|
||||
Patch62: fix-build-glibc217.patch
|
||||
# PATCH-FIX-UPSTREAM fix-bad-memory-access.patch fcrozat@suse.com -- fix bad memory access
|
||||
Patch65: fix-bad-memory-access.patch
|
||||
# PATCH-FIX-UPSTREAM fix-dbus-crash.patch fcrozat@suse.com -- fix D-Bus caused crash
|
||||
Patch66: fix-dbus-crash.patch
|
||||
# PATCH-FIX-UPSTREAM sync-on-shutdown.patch fcrozat@suse.com -- Sync on shutdown
|
||||
Patch67: sync-on-shutdown.patch
|
||||
# PATCH-FIX-UPSTREAM mount-efivars.patch fcrozat@suse.com -- mount efivars if booting under UEFI
|
||||
Patch68: mount-efivars.patch
|
||||
# PATCH-FIX-UPSTREAM switch-root-try-pivot-root.patch fcrozat@suse.com -- try pivot_root before overmounting /
|
||||
Patch69: switch-root-try-pivot-root.patch
|
||||
# PATCH-FIX-UPSTREAM remount-ro-before-unmount.patch fcrozat@suse.com -- remount ro before unmounting in final shutdown loop
|
||||
Patch70: remount-ro-before-unmount.patch
|
||||
|
||||
# udev patches
|
||||
# PATCH-FIX-OPENSUSE 0001-Reinstate-TIMEOUT-handling.patch
|
||||
@ -147,8 +166,6 @@ Patch1026: 0026-udev-netlink-null-rules.patch
|
||||
# PATCH-FIX-OPENSUSE 0027-udev-fix-sg-autoload-regression.patch
|
||||
Patch1027: 0027-udev-fix-sg-autoload-regression.patch
|
||||
|
||||
# systemd patches
|
||||
|
||||
%description
|
||||
Systemd is a system and service manager, compatible with SysV and LSB
|
||||
init scripts for Linux. systemd provides aggressive parallelization
|
||||
@ -204,6 +221,7 @@ License: GPL-2.0
|
||||
Group: System/Kernel
|
||||
Url: http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html
|
||||
PreReq: /bin/pidof /bin/rm /usr/bin/stat %insserv_prereq %fillup_prereq /usr/sbin/groupadd /usr/bin/getent /sbin/mkinitrd
|
||||
Requires(post): lib%{udevpkgname}%{udev_major}
|
||||
Conflicts: systemd < 39
|
||||
Conflicts: aaa_base < 11.5
|
||||
Conflicts: filesystem < 11.5
|
||||
@ -296,6 +314,11 @@ This package marks the installation to not use syslog but only the journal.
|
||||
%prep
|
||||
%setup -q -n systemd-%{version}
|
||||
|
||||
# only needed for bootstrap
|
||||
%if 0%{?bootstrap}
|
||||
cp %{SOURCE7} m4/
|
||||
%endif
|
||||
|
||||
#udev
|
||||
%patch1001 -p1
|
||||
%patch1013 -p1
|
||||
@ -303,6 +326,7 @@ This package marks the installation to not use syslog but only the journal.
|
||||
%patch1026 -p1
|
||||
%patch1027 -p1
|
||||
|
||||
#systemd
|
||||
%patch1 -p1
|
||||
%patch6 -p1
|
||||
# don't apply when bootstrapping to not modify configure.in
|
||||
@ -326,11 +350,18 @@ This package marks the installation to not use syslog but only the journal.
|
||||
%patch59 -p1
|
||||
%patch60 -p1
|
||||
%patch61 -p1
|
||||
%patch62 -p1
|
||||
%patch63 -p1
|
||||
%patch64 -p1
|
||||
%patch65 -p1
|
||||
%patch66 -p1
|
||||
%patch67 -p1
|
||||
%patch68 -p1
|
||||
%patch69 -p1
|
||||
%patch70 -p1
|
||||
|
||||
%build
|
||||
%if ! 0%{?bootstrap}
|
||||
autoreconf -fiv
|
||||
%endif
|
||||
# prevent pre-generated and distributed files from re-building
|
||||
find . -name "*.[1-8]" -exec touch '{}' \;
|
||||
export V=1
|
||||
@ -359,21 +390,24 @@ ln -sf %{_bindir}/udevadm $RPM_BUILD_ROOT/sbin/udevadm
|
||||
ln -sf %{_bindir}/systemd-ask-password $RPM_BUILD_ROOT/bin/systemd-ask-password
|
||||
ln -sf %{_bindir}/systemctl $RPM_BUILD_ROOT/bin/systemctl
|
||||
ln -sf %{_prefix}/lib/systemd/systemd-udevd $RPM_BUILD_ROOT/sbin/udevd
|
||||
%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
|
||||
sed -ie "s|@@PREFIX@@|%{_bindir}|g" %{S:1061}
|
||||
install -m755 -D %{S:1061} $RPM_BUILD_ROOT/%{_prefix}/lib/udev/write_dev_root_rule
|
||||
sed -ie "s|@@PREFIX@@|%{_prefix}/lib/udev|g" %{S:1062}
|
||||
install -m644 -D %{S:1062} $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev-root-symlink.service
|
||||
mkdir -p $RPM_BUILD_ROOT/lib/systemd/system/basic.target.wants
|
||||
ln -sf ../udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants
|
||||
|
||||
#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
|
||||
@ -383,7 +417,7 @@ mkdir -p %{buildroot}/{sbin,var/lib/systemd/sysv-convert,var/lib/systemd/migrate
|
||||
|
||||
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
|
||||
@ -406,8 +440,7 @@ ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/kbd.service
|
||||
ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/ldconfig.service
|
||||
ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/loadmodules.service
|
||||
install -m644 %{S:2} %{buildroot}/%{_prefix}/lib/systemd/system/localfs.service
|
||||
# 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
|
||||
@ -426,12 +459,19 @@ rm %{buildroot}/%{_prefix}/lib/systemd/system/local-fs.target.wants/tmp.mount
|
||||
# journal.
|
||||
rm -f %{buildroot}%{_libdir}/../lib/sysctl.d/coredump.conf
|
||||
|
||||
# remove README files for now
|
||||
rm -f %{buildroot}/var/log/README %{buildroot}/etc/init.d/README
|
||||
# remove README file for now
|
||||
rm -f %{buildroot}/etc/init.d/README
|
||||
%if 0%{?bootstrap}
|
||||
rm -f %{buildroot}/var/log/README
|
||||
%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
|
||||
@ -451,10 +491,15 @@ mkdir -p %{buildroot}%{_prefix}/lib/systemd/system/syslog.target.wants
|
||||
|
||||
%fdupes -s %{buildroot}%{_mandir}
|
||||
|
||||
%pre
|
||||
getent group adm >/dev/null || groupadd -r adm
|
||||
exit 0
|
||||
|
||||
%post
|
||||
/usr/sbin/pam-config -a --systemd >/dev/null 2>&1 || :
|
||||
/sbin/ldconfig
|
||||
/usr/bin/systemd-machine-id-setup >/dev/null 2>&1 || :
|
||||
/usr/lib/systemd/systemd-random-seed save >/dev/null 2>&1 || :
|
||||
/usr/bin/systemctl daemon-reexec >/dev/null 2>&1 || :
|
||||
|
||||
# Try to read default runlevel from the old inittab if it exists
|
||||
@ -485,6 +530,7 @@ fi
|
||||
%postun
|
||||
/sbin/ldconfig
|
||||
if [ $1 -ge 1 ]; then
|
||||
/usr/bin/systemctl daemon-reload >/dev/null 2>&1 || :
|
||||
/usr/bin/systemctl try-restart systemd-logind.service >/dev/null 2>&1 || :
|
||||
fi
|
||||
if [ $1 -eq 0 ]; then
|
||||
@ -511,7 +557,11 @@ if test -L /usr/lib/udev -a /lib/udev -ef /usr/lib/udev ; then
|
||||
rm /usr/lib/udev
|
||||
mv /lib/udev /usr/lib
|
||||
ln -s /usr/lib/udev /lib/udev
|
||||
elif [ ! -e /lib/udev ]; then
|
||||
ln -s /usr/lib/udev /lib/udev
|
||||
fi
|
||||
# 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
|
||||
@ -540,24 +590,28 @@ if test -f /proc/1/exe -a -d /proc/1/root; then
|
||||
fi
|
||||
fi
|
||||
|
||||
[ -x /sbin/mkinitrd_setup ] && /sbin/mkinitrd_setup
|
||||
if [ -e /var/lib/no_initrd_recreation_by_suspend ]; then
|
||||
echo "Skipping recreation of existing initial ramdisks, due"
|
||||
echo "to presence of /var/lib/no_initrd_recreation_by_suspend"
|
||||
elif [ -x /sbin/mkinitrd ]; then
|
||||
/sbin/mkinitrd
|
||||
if [ "${YAST_IS_RUNNING}" != "instsys" ]; then
|
||||
if [ -e /var/lib/no_initrd_recreation_by_suspend ]; then
|
||||
echo "Skipping recreation of existing initial ramdisks, due"
|
||||
echo "to presence of /var/lib/no_initrd_recreation_by_suspend"
|
||||
elif [ -x /sbin/mkinitrd ]; then
|
||||
[ -x /sbin/mkinitrd_setup ] && /sbin/mkinitrd_setup
|
||||
/sbin/mkinitrd || :
|
||||
fi
|
||||
fi
|
||||
|
||||
%postun -n %{udevpkgname}
|
||||
%insserv_cleanup
|
||||
systemctl daemon-reload >/dev/null 2>&1 || :
|
||||
|
||||
[ -x /sbin/mkinitrd_setup ] && /sbin/mkinitrd_setup
|
||||
if [ -e /var/lib/no_initrd_recreation_by_suspend ]; then
|
||||
echo "Skipping recreation of existing initial ramdisks, due"
|
||||
echo "to presence of /var/lib/no_initrd_recreation_by_suspend"
|
||||
elif [ -x /sbin/mkinitrd ]; then
|
||||
/sbin/mkinitrd
|
||||
if [ "${YAST_IS_RUNNING}" != "instsys" ]; then
|
||||
if [ -e /var/lib/no_initrd_recreation_by_suspend ]; then
|
||||
echo "Skipping recreation of existing initial ramdisks, due"
|
||||
echo "to presence of /var/lib/no_initrd_recreation_by_suspend"
|
||||
elif [ -x /sbin/mkinitrd ]; then
|
||||
[ -x /sbin/mkinitrd_setup ] && /sbin/mkinitrd_setup
|
||||
/sbin/mkinitrd || :
|
||||
fi
|
||||
fi
|
||||
|
||||
%post -n lib%{udevpkgname}%{udev_major} -p /sbin/ldconfig
|
||||
@ -572,7 +626,7 @@ fi
|
||||
%endif
|
||||
|
||||
%clean
|
||||
rm -rf %{buildroot}
|
||||
# rm -rf %{buildroot}
|
||||
|
||||
%files
|
||||
%defattr(-,root,root)
|
||||
@ -704,6 +758,10 @@ rm -rf %{buildroot}
|
||||
%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*
|
||||
@ -727,7 +785,6 @@ rm -rf %{buildroot}
|
||||
%dir /var/lib/systemd
|
||||
%dir /var/lib/systemd/sysv-convert
|
||||
%dir /var/lib/systemd/migrated
|
||||
%dir /var/log/journal
|
||||
|
||||
%files devel
|
||||
%defattr(-,root,root,-)
|
||||
@ -768,7 +825,11 @@ rm -rf %{buildroot}
|
||||
%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)
|
||||
@ -858,6 +919,8 @@ rm -rf %{buildroot}
|
||||
%files logger
|
||||
%defattr(-,root,root)
|
||||
%dir /var/log/journal
|
||||
/var/log/README
|
||||
/etc/init.d/systemd-journald
|
||||
|
||||
%endif
|
||||
|
||||
|
@ -1,3 +1,65 @@
|
||||
-------------------------------------------------------------------
|
||||
Thu Nov 22 14:22:00 UTC 2012 - rmilasan@suse.com
|
||||
|
||||
- Fix creation of /dev/root link.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Nov 20 18:25:49 CET 2012 - fcrozat@suse.com
|
||||
|
||||
- Add remount-ro-before-unmount.patch: always remount read-only
|
||||
before unmounting in final shutdown loop.
|
||||
- Add switch-root-try-pivot-root.patch: try pivot_root before
|
||||
overmounting /
|
||||
|
||||
-------------------------------------------------------------------
|
||||
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
|
||||
won't be persistent for people using another syslog
|
||||
implementation).
|
||||
- install README in /var/log (in systemd-logger) and /etc/init.d
|
||||
- create adm group when installing systemd.
|
||||
- fix path in udev-root-symlink.systemd.
|
||||
- Enforce Requires(post) dependency on libudev in main systemd
|
||||
package (help upgrade).
|
||||
- Ensure configuration is reloaded when upgrading and save random
|
||||
seed when installing.
|
||||
- Create /lib/udev symlink, if we do a fresh install.
|
||||
- Add fix-build-glibc217.patch: fix build with latest glibc.
|
||||
- Add libgcrypt.m4: copy of autoconf macro from libgcrypt, only
|
||||
used to bootstrap systemd-mini.
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue Nov 6 14:40:37 UTC 2012 - coolo@suse.com
|
||||
|
||||
|
123
systemd.spec
123
systemd.spec
@ -81,6 +81,7 @@ Requires: %{udevpkgname} >= 172
|
||||
Requires: dbus-1 >= 1.4.0
|
||||
Requires: kbd
|
||||
Requires: pam-config >= 0.79-5
|
||||
Requires: pwdutils
|
||||
Requires: systemd-presets-branding
|
||||
Requires: util-linux >= 2.21
|
||||
Requires(post): coreutils
|
||||
@ -95,6 +96,8 @@ Source3: systemd-sysv-convert
|
||||
Source4: macros.systemd
|
||||
Source5: systemd-insserv_conf
|
||||
Source6: baselibs.conf
|
||||
Source7: libgcrypt.m4
|
||||
Source8: systemd-journald.init
|
||||
|
||||
Source1060: boot.udev
|
||||
Source1061: write_dev_root_rule
|
||||
@ -121,6 +124,8 @@ Patch53: fastboot-forcefsck.patch
|
||||
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
|
||||
@ -128,6 +133,20 @@ Patch60: var-run-lock.patch
|
||||
# an exception will be silently removed with the next version update.
|
||||
# PATCH-FIX-UPSTREAM fix-logind-pty-seat.patch fcrozat@suse.com -- fix logind complaining when doing su/sudo in X terminal
|
||||
Patch61: fix-logind-pty-seat.patch
|
||||
# PATCH-FIX-UPSTREAM fix-build-glibc217.patch fcrozat@suse.com -- fix build with latest glibc
|
||||
Patch62: fix-build-glibc217.patch
|
||||
# PATCH-FIX-UPSTREAM fix-bad-memory-access.patch fcrozat@suse.com -- fix bad memory access
|
||||
Patch65: fix-bad-memory-access.patch
|
||||
# PATCH-FIX-UPSTREAM fix-dbus-crash.patch fcrozat@suse.com -- fix D-Bus caused crash
|
||||
Patch66: fix-dbus-crash.patch
|
||||
# PATCH-FIX-UPSTREAM sync-on-shutdown.patch fcrozat@suse.com -- Sync on shutdown
|
||||
Patch67: sync-on-shutdown.patch
|
||||
# PATCH-FIX-UPSTREAM mount-efivars.patch fcrozat@suse.com -- mount efivars if booting under UEFI
|
||||
Patch68: mount-efivars.patch
|
||||
# PATCH-FIX-UPSTREAM switch-root-try-pivot-root.patch fcrozat@suse.com -- try pivot_root before overmounting /
|
||||
Patch69: switch-root-try-pivot-root.patch
|
||||
# PATCH-FIX-UPSTREAM remount-ro-before-unmount.patch fcrozat@suse.com -- remount ro before unmounting in final shutdown loop
|
||||
Patch70: remount-ro-before-unmount.patch
|
||||
|
||||
# udev patches
|
||||
# PATCH-FIX-OPENSUSE 0001-Reinstate-TIMEOUT-handling.patch
|
||||
@ -142,8 +161,6 @@ Patch1026: 0026-udev-netlink-null-rules.patch
|
||||
# PATCH-FIX-OPENSUSE 0027-udev-fix-sg-autoload-regression.patch
|
||||
Patch1027: 0027-udev-fix-sg-autoload-regression.patch
|
||||
|
||||
# systemd patches
|
||||
|
||||
%description
|
||||
Systemd is a system and service manager, compatible with SysV and LSB
|
||||
init scripts for Linux. systemd provides aggressive parallelization
|
||||
@ -199,6 +216,7 @@ License: GPL-2.0
|
||||
Group: System/Kernel
|
||||
Url: http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.html
|
||||
PreReq: /bin/pidof /bin/rm /usr/bin/stat %insserv_prereq %fillup_prereq /usr/sbin/groupadd /usr/bin/getent /sbin/mkinitrd
|
||||
Requires(post): lib%{udevpkgname}%{udev_major}
|
||||
Conflicts: systemd < 39
|
||||
Conflicts: aaa_base < 11.5
|
||||
Conflicts: filesystem < 11.5
|
||||
@ -291,6 +309,11 @@ This package marks the installation to not use syslog but only the journal.
|
||||
%prep
|
||||
%setup -q -n systemd-%{version}
|
||||
|
||||
# only needed for bootstrap
|
||||
%if 0%{?bootstrap}
|
||||
cp %{SOURCE7} m4/
|
||||
%endif
|
||||
|
||||
#udev
|
||||
%patch1001 -p1
|
||||
%patch1013 -p1
|
||||
@ -298,6 +321,7 @@ This package marks the installation to not use syslog but only the journal.
|
||||
%patch1026 -p1
|
||||
%patch1027 -p1
|
||||
|
||||
#systemd
|
||||
%patch1 -p1
|
||||
%patch6 -p1
|
||||
# don't apply when bootstrapping to not modify configure.in
|
||||
@ -321,11 +345,18 @@ This package marks the installation to not use syslog but only the journal.
|
||||
%patch59 -p1
|
||||
%patch60 -p1
|
||||
%patch61 -p1
|
||||
%patch62 -p1
|
||||
%patch63 -p1
|
||||
%patch64 -p1
|
||||
%patch65 -p1
|
||||
%patch66 -p1
|
||||
%patch67 -p1
|
||||
%patch68 -p1
|
||||
%patch69 -p1
|
||||
%patch70 -p1
|
||||
|
||||
%build
|
||||
%if ! 0%{?bootstrap}
|
||||
autoreconf -fiv
|
||||
%endif
|
||||
# prevent pre-generated and distributed files from re-building
|
||||
find . -name "*.[1-8]" -exec touch '{}' \;
|
||||
export V=1
|
||||
@ -354,21 +385,24 @@ ln -sf %{_bindir}/udevadm $RPM_BUILD_ROOT/sbin/udevadm
|
||||
ln -sf %{_bindir}/systemd-ask-password $RPM_BUILD_ROOT/bin/systemd-ask-password
|
||||
ln -sf %{_bindir}/systemctl $RPM_BUILD_ROOT/bin/systemctl
|
||||
ln -sf %{_prefix}/lib/systemd/systemd-udevd $RPM_BUILD_ROOT/sbin/udevd
|
||||
%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
|
||||
sed -ie "s|@@PREFIX@@|%{_bindir}|g" %{S:1061}
|
||||
install -m755 -D %{S:1061} $RPM_BUILD_ROOT/%{_prefix}/lib/udev/write_dev_root_rule
|
||||
sed -ie "s|@@PREFIX@@|%{_prefix}/lib/udev|g" %{S:1062}
|
||||
install -m644 -D %{S:1062} $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/udev-root-symlink.service
|
||||
mkdir -p $RPM_BUILD_ROOT/lib/systemd/system/basic.target.wants
|
||||
ln -sf ../udev-root-symlink.service $RPM_BUILD_ROOT/%{_prefix}/lib/systemd/system/basic.target.wants
|
||||
|
||||
#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
|
||||
@ -378,7 +412,7 @@ mkdir -p %{buildroot}/{sbin,var/lib/systemd/sysv-convert,var/lib/systemd/migrate
|
||||
|
||||
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
|
||||
@ -401,8 +435,7 @@ ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/kbd.service
|
||||
ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/ldconfig.service
|
||||
ln -s /dev/null %{buildroot}/%{_prefix}/lib/systemd/system/loadmodules.service
|
||||
install -m644 %{S:2} %{buildroot}/%{_prefix}/lib/systemd/system/localfs.service
|
||||
# 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
|
||||
@ -421,12 +454,19 @@ rm %{buildroot}/%{_prefix}/lib/systemd/system/local-fs.target.wants/tmp.mount
|
||||
# journal.
|
||||
rm -f %{buildroot}%{_libdir}/../lib/sysctl.d/coredump.conf
|
||||
|
||||
# remove README files for now
|
||||
rm -f %{buildroot}/var/log/README %{buildroot}/etc/init.d/README
|
||||
# remove README file for now
|
||||
rm -f %{buildroot}/etc/init.d/README
|
||||
%if 0%{?bootstrap}
|
||||
rm -f %{buildroot}/var/log/README
|
||||
%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
|
||||
@ -446,10 +486,15 @@ mkdir -p %{buildroot}%{_prefix}/lib/systemd/system/syslog.target.wants
|
||||
|
||||
%fdupes -s %{buildroot}%{_mandir}
|
||||
|
||||
%pre
|
||||
getent group adm >/dev/null || groupadd -r adm
|
||||
exit 0
|
||||
|
||||
%post
|
||||
/usr/sbin/pam-config -a --systemd >/dev/null 2>&1 || :
|
||||
/sbin/ldconfig
|
||||
/usr/bin/systemd-machine-id-setup >/dev/null 2>&1 || :
|
||||
/usr/lib/systemd/systemd-random-seed save >/dev/null 2>&1 || :
|
||||
/usr/bin/systemctl daemon-reexec >/dev/null 2>&1 || :
|
||||
|
||||
# Try to read default runlevel from the old inittab if it exists
|
||||
@ -480,6 +525,7 @@ fi
|
||||
%postun
|
||||
/sbin/ldconfig
|
||||
if [ $1 -ge 1 ]; then
|
||||
/usr/bin/systemctl daemon-reload >/dev/null 2>&1 || :
|
||||
/usr/bin/systemctl try-restart systemd-logind.service >/dev/null 2>&1 || :
|
||||
fi
|
||||
if [ $1 -eq 0 ]; then
|
||||
@ -506,7 +552,11 @@ if test -L /usr/lib/udev -a /lib/udev -ef /usr/lib/udev ; then
|
||||
rm /usr/lib/udev
|
||||
mv /lib/udev /usr/lib
|
||||
ln -s /usr/lib/udev /lib/udev
|
||||
elif [ ! -e /lib/udev ]; then
|
||||
ln -s /usr/lib/udev /lib/udev
|
||||
fi
|
||||
# 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
|
||||
@ -535,24 +585,28 @@ if test -f /proc/1/exe -a -d /proc/1/root; then
|
||||
fi
|
||||
fi
|
||||
|
||||
[ -x /sbin/mkinitrd_setup ] && /sbin/mkinitrd_setup
|
||||
if [ -e /var/lib/no_initrd_recreation_by_suspend ]; then
|
||||
echo "Skipping recreation of existing initial ramdisks, due"
|
||||
echo "to presence of /var/lib/no_initrd_recreation_by_suspend"
|
||||
elif [ -x /sbin/mkinitrd ]; then
|
||||
/sbin/mkinitrd
|
||||
if [ "${YAST_IS_RUNNING}" != "instsys" ]; then
|
||||
if [ -e /var/lib/no_initrd_recreation_by_suspend ]; then
|
||||
echo "Skipping recreation of existing initial ramdisks, due"
|
||||
echo "to presence of /var/lib/no_initrd_recreation_by_suspend"
|
||||
elif [ -x /sbin/mkinitrd ]; then
|
||||
[ -x /sbin/mkinitrd_setup ] && /sbin/mkinitrd_setup
|
||||
/sbin/mkinitrd || :
|
||||
fi
|
||||
fi
|
||||
|
||||
%postun -n %{udevpkgname}
|
||||
%insserv_cleanup
|
||||
systemctl daemon-reload >/dev/null 2>&1 || :
|
||||
|
||||
[ -x /sbin/mkinitrd_setup ] && /sbin/mkinitrd_setup
|
||||
if [ -e /var/lib/no_initrd_recreation_by_suspend ]; then
|
||||
echo "Skipping recreation of existing initial ramdisks, due"
|
||||
echo "to presence of /var/lib/no_initrd_recreation_by_suspend"
|
||||
elif [ -x /sbin/mkinitrd ]; then
|
||||
/sbin/mkinitrd
|
||||
if [ "${YAST_IS_RUNNING}" != "instsys" ]; then
|
||||
if [ -e /var/lib/no_initrd_recreation_by_suspend ]; then
|
||||
echo "Skipping recreation of existing initial ramdisks, due"
|
||||
echo "to presence of /var/lib/no_initrd_recreation_by_suspend"
|
||||
elif [ -x /sbin/mkinitrd ]; then
|
||||
[ -x /sbin/mkinitrd_setup ] && /sbin/mkinitrd_setup
|
||||
/sbin/mkinitrd || :
|
||||
fi
|
||||
fi
|
||||
|
||||
%post -n lib%{udevpkgname}%{udev_major} -p /sbin/ldconfig
|
||||
@ -567,7 +621,7 @@ fi
|
||||
%endif
|
||||
|
||||
%clean
|
||||
rm -rf %{buildroot}
|
||||
# rm -rf %{buildroot}
|
||||
|
||||
%files
|
||||
%defattr(-,root,root)
|
||||
@ -699,6 +753,10 @@ rm -rf %{buildroot}
|
||||
%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*
|
||||
@ -722,7 +780,6 @@ rm -rf %{buildroot}
|
||||
%dir /var/lib/systemd
|
||||
%dir /var/lib/systemd/sysv-convert
|
||||
%dir /var/lib/systemd/migrated
|
||||
%dir /var/log/journal
|
||||
|
||||
%files devel
|
||||
%defattr(-,root,root,-)
|
||||
@ -763,7 +820,11 @@ rm -rf %{buildroot}
|
||||
%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)
|
||||
@ -853,6 +914,8 @@ rm -rf %{buildroot}
|
||||
%files logger
|
||||
%defattr(-,root,root)
|
||||
%dir /var/log/journal
|
||||
/var/log/README
|
||||
/etc/init.d/systemd-journald
|
||||
|
||||
%endif
|
||||
|
||||
|
@ -6,4 +6,4 @@ DefaultDependencies=no
|
||||
[Service]
|
||||
Type=oneshot
|
||||
RemainAfterExit=yes
|
||||
ExecStart=/lib/udev/write_dev_root_rule
|
||||
ExecStart=@@PREFIX@@/write_dev_root_rule
|
||||
|
@ -1,6 +1,6 @@
|
||||
#!/bin/sh
|
||||
|
||||
eval $(/sbin/udevadm info --export --export-prefix=ROOT_ --device-id-of-file=/)
|
||||
eval $(@@PREFIX@@/udevadm info --export --export-prefix=ROOT_ --device-id-of-file=/)
|
||||
|
||||
[ "$ROOT_MAJOR" -gt 0 ] || return
|
||||
mkdir -m 0755 -p /run/udev/rules.d >/dev/null 2>&1
|
||||
|
13
xdm-display-manager.patch
Normal file
13
xdm-display-manager.patch
Normal file
@ -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]
|
Loading…
Reference in New Issue
Block a user