systemd: merge 2 patches from git master.
This commit is contained in:
parent
060aaa8ebd
commit
d4ef5d70e6
|
@ -1,14 +1,14 @@
|
||||||
# Template file for 'libudev'
|
# Template file for 'libudev'
|
||||||
pkgname=libudev
|
pkgname=libudev
|
||||||
version=205
|
version=205
|
||||||
revision=1
|
revision=2
|
||||||
wrksrc="systemd-${version}"
|
wrksrc="systemd-${version}"
|
||||||
build_style=gnu-configure
|
build_style=gnu-configure
|
||||||
configure_args="--libexecdir=/usr/lib --disable-selinux
|
configure_args="--libexecdir=/usr/lib --disable-selinux
|
||||||
--disable-static --disable-ima --enable-introspection=no
|
--disable-static --disable-ima --enable-introspection=no
|
||||||
--disable-kmod --disable-blkid --disable-chkconfig
|
--disable-kmod --disable-blkid --disable-chkconfig
|
||||||
--disable-selinux --disable-tcpwrap --disable-pam
|
--disable-selinux --disable-tcpwrap --disable-pam
|
||||||
--disable-acl --disable-xattr --disable-audit
|
--disable-acl --disable-xattr --disable-audit --disable-machined
|
||||||
--disable-libcryptsetup --disable-qrencode --disable-microhttpd
|
--disable-libcryptsetup --disable-qrencode --disable-microhttpd
|
||||||
--disable-binfmt --disable-vconsole --disable-readahead --disable-bootchart
|
--disable-binfmt --disable-vconsole --disable-readahead --disable-bootchart
|
||||||
--disable-quotacheck --disable-randomseed --disable-hostnamed
|
--disable-quotacheck --disable-randomseed --disable-hostnamed
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
From ad929bcc27e2c6c1aa731053e45882686e9babab Mon Sep 17 00:00:00 2001
|
||||||
|
From: Kay Sievers <kay@vrfy.org>
|
||||||
|
Date: Thu, 04 Jul 2013 18:31:18 +0000
|
||||||
|
Subject: disable the cgroups release agent when shutting down
|
||||||
|
|
||||||
|
During shutdown, when we try to clean up all remaining processes, the
|
||||||
|
kernel will fork new agents every time a cgroup runs empty. These
|
||||||
|
new processes cause delays in the final SIGTERM, SIGKILL logic.
|
||||||
|
|
||||||
|
Apart from that, this should also avoid that the kernel-forked binaries
|
||||||
|
cause unpredictably timed access to the filesystem which we might need to
|
||||||
|
unmount.
|
||||||
|
---
|
||||||
|
diff --git a/src/core/main.c b/src/core/main.c
|
||||||
|
index 8b8e110..ada0f9d 100644
|
||||||
|
--- src/core/main.c
|
||||||
|
+++ src/core/main.c
|
||||||
|
@@ -1942,6 +1942,10 @@ finish:
|
||||||
|
watchdog_close(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ /* avoid the creation of new processes forked by the kernel; at this
|
||||||
|
+ * point, we will not listen to the signals anyway */
|
||||||
|
+ cg_uninstall_release_agent(SYSTEMD_CGROUP_CONTROLLER);
|
||||||
|
+
|
||||||
|
execve(SYSTEMD_SHUTDOWN_BINARY_PATH, (char **) command_line, env_block);
|
||||||
|
free(env_block);
|
||||||
|
log_error("Failed to execute shutdown binary, freezing: %m");
|
||||||
|
diff --git a/src/shared/cgroup-util.c b/src/shared/cgroup-util.c
|
||||||
|
index 390259e..73013d1 100644
|
||||||
|
--- src/shared/cgroup-util.c
|
||||||
|
+++ src/shared/cgroup-util.c
|
||||||
|
@@ -790,6 +790,21 @@ int cg_install_release_agent(const char *controller, const char *agent) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+int cg_uninstall_release_agent(const char *controller) {
|
||||||
|
+ _cleanup_free_ char *fs = NULL;
|
||||||
|
+ int r;
|
||||||
|
+
|
||||||
|
+ r = cg_get_path(controller, NULL, "release_agent", &fs);
|
||||||
|
+ if (r < 0)
|
||||||
|
+ return r;
|
||||||
|
+
|
||||||
|
+ r = write_string_file(fs, "");
|
||||||
|
+ if (r < 0)
|
||||||
|
+ return r;
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
int cg_is_empty(const char *controller, const char *path, bool ignore_self) {
|
||||||
|
_cleanup_fclose_ FILE *f = NULL;
|
||||||
|
pid_t pid = 0, self_pid;
|
||||||
|
diff --git a/src/shared/cgroup-util.h b/src/shared/cgroup-util.h
|
||||||
|
index c781aab..0fc93c1 100644
|
||||||
|
--- src/shared/cgroup-util.h
|
||||||
|
+++ src/shared/cgroup-util.h
|
||||||
|
@@ -89,6 +89,7 @@ int cg_set_group_access(const char *controller, const char *path, mode_t mode, u
|
||||||
|
int cg_set_task_access(const char *controller, const char *path, mode_t mode, uid_t uid, gid_t gid);
|
||||||
|
|
||||||
|
int cg_install_release_agent(const char *controller, const char *agent);
|
||||||
|
+int cg_uninstall_release_agent(const char *controller);
|
||||||
|
|
||||||
|
int cg_is_empty(const char *controller, const char *path, bool ignore_self);
|
||||||
|
int cg_is_empty_by_spec(const char *spec, bool ignore_self);
|
||||||
|
--
|
||||||
|
cgit v0.9.0.2-2-gbebe
|
|
@ -0,0 +1,48 @@
|
||||||
|
From c1eba3008cac9e625b8bb774e9b44ceec8465980 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Kay Sievers <kay@vrfy.org>
|
||||||
|
Date: Thu, 04 Jul 2013 18:54:40 +0000
|
||||||
|
Subject: cgroups-agent: remove ancient fallback code; turn connection error into warning
|
||||||
|
|
||||||
|
During re-execution and shutdown cgroups agents might not be able
|
||||||
|
to connect to systemd's private D-Bus socket, the printed error to
|
||||||
|
the console is misleding in that case, so turn it into a warning.
|
||||||
|
---
|
||||||
|
diff --git a/src/cgroups-agent/cgroups-agent.c b/src/cgroups-agent/cgroups-agent.c
|
||||||
|
index 0e3d2b7..a47949a 100644
|
||||||
|
--- src/cgroups-agent/cgroups-agent.c
|
||||||
|
+++ src/cgroups-agent/cgroups-agent.c
|
||||||
|
@@ -48,26 +48,19 @@ int main(int argc, char *argv[]) {
|
||||||
|
* this to avoid an activation loop when we start dbus when we
|
||||||
|
* are called when the dbus service is shut down. */
|
||||||
|
|
||||||
|
- if (!(bus = dbus_connection_open_private("unix:path=/run/systemd/private", &error))) {
|
||||||
|
-#ifndef NOLEGACY
|
||||||
|
- dbus_error_free(&error);
|
||||||
|
-
|
||||||
|
- /* Retry with the pre v21 socket name, to ease upgrades */
|
||||||
|
- if (!(bus = dbus_connection_open_private("unix:abstract=/org/freedesktop/systemd1/private", &error))) {
|
||||||
|
-#endif
|
||||||
|
- log_error("Failed to get D-Bus connection: %s", bus_error_message(&error));
|
||||||
|
- goto finish;
|
||||||
|
- }
|
||||||
|
-#ifndef NOLEGACY
|
||||||
|
+ bus = dbus_connection_open_private("unix:path=/run/systemd/private", &error);
|
||||||
|
+ if (!bus) {
|
||||||
|
+ log_warning("Failed to get D-Bus connection: %s", bus_error_message(&error));
|
||||||
|
+ goto finish;
|
||||||
|
}
|
||||||
|
-#endif
|
||||||
|
|
||||||
|
if (bus_check_peercred(bus) < 0) {
|
||||||
|
log_error("Bus owner not root.");
|
||||||
|
goto finish;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (!(m = dbus_message_new_signal("/org/freedesktop/systemd1/agent", "org.freedesktop.systemd1.Agent", "Released"))) {
|
||||||
|
+ m = dbus_message_new_signal("/org/freedesktop/systemd1/agent", "org.freedesktop.systemd1.Agent", "Released");
|
||||||
|
+ if (!m) {
|
||||||
|
log_error("Could not allocate signal message.");
|
||||||
|
goto finish;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
cgit v0.9.0.2-2-gbebe
|
|
@ -1,7 +1,7 @@
|
||||||
# Template file for 'systemd'
|
# Template file for 'systemd'
|
||||||
pkgname=systemd
|
pkgname=systemd
|
||||||
version=205
|
version=205
|
||||||
revision=1
|
revision=2
|
||||||
short_desc="A system and service manager for Linux"
|
short_desc="A system and service manager for Linux"
|
||||||
maintainer="Juan RP <xtraeme@gmail.com>"
|
maintainer="Juan RP <xtraeme@gmail.com>"
|
||||||
homepage="http://www.freedesktop.org/wiki/Software/systemd"
|
homepage="http://www.freedesktop.org/wiki/Software/systemd"
|
||||||
|
|
Loading…
Reference in New Issue