mirror of
https://github.com/systemd/systemd.git
synced 2025-03-14 04:58:28 +03:00
Merge pull request #4477 from poettering/enumerate-load-fix
Properly synthesize -.slice and init.scope
This commit is contained in:
commit
6980e31f25
12
Makefile.am
12
Makefile.am
@ -493,7 +493,6 @@ dist_systemunit_DATA = \
|
||||
units/swap.target \
|
||||
units/slices.target \
|
||||
units/system.slice \
|
||||
units/x-.slice \
|
||||
units/systemd-initctl.socket \
|
||||
units/syslog.socket \
|
||||
units/dev-hugepages.mount \
|
||||
@ -637,17 +636,6 @@ GENERAL_ALIASES += \
|
||||
$(systemunitdir)/reboot.target $(pkgsysconfdir)/system/ctrl-alt-del.target \
|
||||
$(systemunitdir)/machines.target $(pkgsysconfdir)/system/multi-user.target.wants/machines.target
|
||||
|
||||
# automake is broken and can't handle files with a dash in front
|
||||
# http://debbugs.gnu.org/cgi/bugreport.cgi?bug=14728#8
|
||||
units-install-hook:
|
||||
mv $(DESTDIR)$(systemunitdir)/x-.slice $(DESTDIR)/$(systemunitdir)/-.slice
|
||||
|
||||
units-uninstall-hook:
|
||||
rm -f $(DESTDIR)/$(systemunitdir)/-.slice
|
||||
|
||||
INSTALL_DATA_HOOKS += units-install-hook
|
||||
UNINSTALL_DATA_HOOKS += units-uninstall-hook
|
||||
|
||||
dist_doc_DATA = \
|
||||
README \
|
||||
NEWS \
|
||||
|
@ -147,6 +147,34 @@ static int scope_verify(Scope *s) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int scope_load_init_scope(Unit *u) {
|
||||
assert(u);
|
||||
|
||||
if (!unit_has_name(u, SPECIAL_INIT_SCOPE))
|
||||
return 0;
|
||||
|
||||
u->transient = true;
|
||||
u->no_gc = true;
|
||||
|
||||
/* init.scope is a bit special, as it has to stick around forever. Because of its special semantics we
|
||||
* synthesize it here, instead of relying on the unit file on disk. */
|
||||
|
||||
u->default_dependencies = false;
|
||||
u->ignore_on_isolate = true;
|
||||
u->refuse_manual_start = true;
|
||||
u->refuse_manual_stop = true;
|
||||
|
||||
SCOPE(u)->kill_context.kill_signal = SIGRTMIN+14;
|
||||
|
||||
/* Prettify things, if we can. */
|
||||
if (!u->description)
|
||||
u->description = strdup("System and Service Manager");
|
||||
if (!u->documentation)
|
||||
(void) strv_extend(&u->documentation, "man:systemd(1)");
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int scope_load(Unit *u) {
|
||||
Scope *s = SCOPE(u);
|
||||
int r;
|
||||
@ -158,6 +186,9 @@ static int scope_load(Unit *u) {
|
||||
/* Refuse to load non-transient scope units, but allow them while reloading. */
|
||||
return -ENOENT;
|
||||
|
||||
r = scope_load_init_scope(u);
|
||||
if (r < 0)
|
||||
return r;
|
||||
r = unit_load_fragment_and_dropin_optional(u);
|
||||
if (r < 0)
|
||||
return r;
|
||||
@ -543,25 +574,14 @@ static void scope_enumerate(Manager *m) {
|
||||
r = unit_add_name(u, SPECIAL_INIT_SCOPE);
|
||||
if (r < 0) {
|
||||
unit_free(u);
|
||||
log_error_errno(r, "Failed to add init.scope name");
|
||||
log_error_errno(r, "Failed to add the " SPECIAL_INIT_SCOPE " name: %m");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
u->transient = true;
|
||||
u->default_dependencies = false;
|
||||
u->no_gc = true;
|
||||
u->ignore_on_isolate = true;
|
||||
u->refuse_manual_start = true;
|
||||
u->refuse_manual_stop = true;
|
||||
SCOPE(u)->deserialized_state = SCOPE_RUNNING;
|
||||
SCOPE(u)->kill_context.kill_signal = SIGRTMIN+14;
|
||||
|
||||
/* Prettify things, if we can. */
|
||||
if (!u->description)
|
||||
u->description = strdup("System and Service Manager");
|
||||
if (!u->documentation)
|
||||
(void) strv_extend(&u->documentation, "man:systemd(1)");
|
||||
|
||||
unit_add_to_load_queue(u);
|
||||
unit_add_to_dbus_queue(u);
|
||||
|
@ -130,6 +130,30 @@ static int slice_verify(Slice *s) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int slice_load_root_slice(Unit *u) {
|
||||
assert(u);
|
||||
|
||||
if (!unit_has_name(u, SPECIAL_ROOT_SLICE))
|
||||
return 0;
|
||||
|
||||
u->no_gc = true;
|
||||
|
||||
/* The root slice is a bit special. For example it is always running and cannot be terminated. Because of its
|
||||
* special semantics we synthesize it here, instead of relying on the unit file on disk. */
|
||||
|
||||
u->default_dependencies = false;
|
||||
u->ignore_on_isolate = true;
|
||||
u->refuse_manual_start = true;
|
||||
u->refuse_manual_stop = true;
|
||||
|
||||
if (!u->description)
|
||||
u->description = strdup("Root Slice");
|
||||
if (!u->documentation)
|
||||
u->documentation = strv_new("man:systemd.special(7)", NULL);
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int slice_load(Unit *u) {
|
||||
Slice *s = SLICE(u);
|
||||
int r;
|
||||
@ -137,6 +161,9 @@ static int slice_load(Unit *u) {
|
||||
assert(s);
|
||||
assert(u->load_state == UNIT_STUB);
|
||||
|
||||
r = slice_load_root_slice(u);
|
||||
if (r < 0)
|
||||
return r;
|
||||
r = unit_load_fragment_and_dropin_optional(u);
|
||||
if (r < 0)
|
||||
return r;
|
||||
@ -283,23 +310,14 @@ static void slice_enumerate(Manager *m) {
|
||||
r = unit_add_name(u, SPECIAL_ROOT_SLICE);
|
||||
if (r < 0) {
|
||||
unit_free(u);
|
||||
log_error_errno(r, "Failed to add -.slice name");
|
||||
log_error_errno(r, "Failed to add the "SPECIAL_ROOT_SLICE " name: %m");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
u->default_dependencies = false;
|
||||
u->no_gc = true;
|
||||
u->ignore_on_isolate = true;
|
||||
u->refuse_manual_start = true;
|
||||
u->refuse_manual_stop = true;
|
||||
SLICE(u)->deserialized_state = SLICE_ACTIVE;
|
||||
|
||||
if (!u->description)
|
||||
u->description = strdup("Root Slice");
|
||||
if (!u->documentation)
|
||||
(void) strv_extend(&u->documentation, "man:systemd.special(7)");
|
||||
|
||||
unit_add_to_load_queue(u);
|
||||
unit_add_to_dbus_queue(u);
|
||||
}
|
||||
|
@ -1,12 +0,0 @@
|
||||
# This file is part of systemd.
|
||||
#
|
||||
# systemd is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU Lesser General Public License as published by
|
||||
# the Free Software Foundation; either version 2.1 of the License, or
|
||||
# (at your option) any later version.
|
||||
|
||||
[Unit]
|
||||
Description=Root Slice
|
||||
Documentation=man:systemd.special(7)
|
||||
DefaultDependencies=no
|
||||
Before=slices.target
|
Loading…
x
Reference in New Issue
Block a user