mirror of
https://github.com/systemd/systemd.git
synced 2025-02-03 17:47:28 +03:00
unit: drop the Names= option
Names= is a source of errors, simply because alias names specified like this only become relevant after a unit has been loaded but cannot be used to load a unit. Let's get rid of the confusion and drop this field. To establish alias names peope should use symlinks, which have the the benefit of being useful as key to load a unit, even though they are not taken into account if unit names are listed but they haven't been explicitly referenced before.
This commit is contained in:
parent
a3a3e5b6ae
commit
8ff290af3b
2
TODO
2
TODO
@ -399,5 +399,3 @@ Regularly:
|
|||||||
Scheduled for removal (or fixing):
|
Scheduled for removal (or fixing):
|
||||||
|
|
||||||
* xxxOverridable dependencies
|
* xxxOverridable dependencies
|
||||||
|
|
||||||
* Names= unit option
|
|
||||||
|
@ -869,35 +869,6 @@
|
|||||||
symlinks.</para></listitem>
|
symlinks.</para></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
|
||||||
<term><varname>Names=</varname></term>
|
|
||||||
|
|
||||||
<listitem><para>Additional names for
|
|
||||||
this unit. The names listed here must
|
|
||||||
have the same suffix (i.e. type) as
|
|
||||||
the unit file name. This option may be
|
|
||||||
specified more than once, in which
|
|
||||||
case all listed names are used. Note
|
|
||||||
that this option is different from the
|
|
||||||
<varname>Alias=</varname> option from
|
|
||||||
the [Install] section mentioned
|
|
||||||
below. See below for details. Note
|
|
||||||
that in almost all cases this option
|
|
||||||
is not what you want. A symlink alias
|
|
||||||
in the file system is generally
|
|
||||||
preferable since it can be used as
|
|
||||||
lookup key. If a unit with a symlinked
|
|
||||||
alias name is not loaded and needs to
|
|
||||||
be it is easily found via the
|
|
||||||
symlink. However, if a unit with an
|
|
||||||
alias name configured with this
|
|
||||||
setting is not loaded it will not be
|
|
||||||
discovered. This settings' only use is
|
|
||||||
in conjunction with service
|
|
||||||
instances.</para>
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><varname>SourcePath=</varname></term>
|
<term><varname>SourcePath=</varname></term>
|
||||||
<listitem><para>A path to a
|
<listitem><para>A path to a
|
||||||
@ -936,30 +907,7 @@
|
|||||||
time,
|
time,
|
||||||
<command>systemctl enable</command>
|
<command>systemctl enable</command>
|
||||||
will create symlinks from these names
|
will create symlinks from these names
|
||||||
to the unit file name. Note that this
|
to the unit file name.</para></listitem>
|
||||||
is different from the
|
|
||||||
<varname>Names=</varname> option from
|
|
||||||
the [Unit] section mentioned above:
|
|
||||||
The names from
|
|
||||||
<varname>Names=</varname> apply
|
|
||||||
unconditionally if the unit is
|
|
||||||
loaded. The names from
|
|
||||||
<varname>Alias=</varname> apply only
|
|
||||||
if the unit has actually been
|
|
||||||
installed with the
|
|
||||||
<command>systemctl enable</command>
|
|
||||||
command. Also, if systemd searches for a
|
|
||||||
unit, it will discover symlinked alias
|
|
||||||
names as configured with
|
|
||||||
<varname>Alias=</varname>, but not
|
|
||||||
names configured with
|
|
||||||
<varname>Names=</varname> only. It is
|
|
||||||
a common pattern to list a name in
|
|
||||||
both options. In this case, a unit
|
|
||||||
will be active under all names if
|
|
||||||
installed, but also if not installed
|
|
||||||
but requested explicitly under its
|
|
||||||
main name.</para></listitem>
|
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
<varlistentry>
|
<varlistentry>
|
||||||
|
@ -90,7 +90,6 @@ $1.UtmpIdentifier, config_parse_unit_string_printf, 0,
|
|||||||
$1.ControlGroupModify, config_parse_bool, 0, offsetof($1, exec_context.control_group_modify)
|
$1.ControlGroupModify, config_parse_bool, 0, offsetof($1, exec_context.control_group_modify)
|
||||||
$1.ControlGroupPersistent, config_parse_tristate, 0, offsetof($1, exec_context.control_group_persistent)'
|
$1.ControlGroupPersistent, config_parse_tristate, 0, offsetof($1, exec_context.control_group_persistent)'
|
||||||
)m4_dnl
|
)m4_dnl
|
||||||
Unit.Names, config_parse_unit_names, 0, 0
|
|
||||||
Unit.Description, config_parse_unit_string_printf, 0, offsetof(Unit, description)
|
Unit.Description, config_parse_unit_string_printf, 0, offsetof(Unit, description)
|
||||||
Unit.Documentation, config_parse_documentation, 0, offsetof(Unit, documentation)
|
Unit.Documentation, config_parse_documentation, 0, offsetof(Unit, documentation)
|
||||||
Unit.SourcePath, config_parse_path, 0, offsetof(Unit, source_path)
|
Unit.SourcePath, config_parse_path, 0, offsetof(Unit, source_path)
|
||||||
|
@ -105,49 +105,6 @@ int config_parse_unit_deps(
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int config_parse_unit_names(
|
|
||||||
const char *filename,
|
|
||||||
unsigned line,
|
|
||||||
const char *section,
|
|
||||||
const char *lvalue,
|
|
||||||
int ltype,
|
|
||||||
const char *rvalue,
|
|
||||||
void *data,
|
|
||||||
void *userdata) {
|
|
||||||
|
|
||||||
Unit *u = userdata;
|
|
||||||
char *w;
|
|
||||||
size_t l;
|
|
||||||
char *state;
|
|
||||||
|
|
||||||
assert(filename);
|
|
||||||
assert(lvalue);
|
|
||||||
assert(rvalue);
|
|
||||||
assert(data);
|
|
||||||
|
|
||||||
FOREACH_WORD_QUOTED(w, l, rvalue, state) {
|
|
||||||
char *t, *k;
|
|
||||||
int r;
|
|
||||||
|
|
||||||
t = strndup(w, l);
|
|
||||||
if (!t)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
k = unit_name_printf(u, t);
|
|
||||||
free(t);
|
|
||||||
if (!k)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
r = unit_merge_by_name(u, k);
|
|
||||||
if (r < 0)
|
|
||||||
log_error("Failed to add name %s, ignoring: %s", k, strerror(-r));
|
|
||||||
|
|
||||||
free(k);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int config_parse_unit_string_printf(
|
int config_parse_unit_string_printf(
|
||||||
const char *filename,
|
const char *filename,
|
||||||
unsigned line,
|
unsigned line,
|
||||||
@ -2395,7 +2352,6 @@ void unit_dump_config_items(FILE *f) {
|
|||||||
{ config_parse_limit, "LIMIT" },
|
{ config_parse_limit, "LIMIT" },
|
||||||
{ config_parse_unit_cgroup, "CGROUP [...]" },
|
{ config_parse_unit_cgroup, "CGROUP [...]" },
|
||||||
{ config_parse_unit_deps, "UNIT [...]" },
|
{ config_parse_unit_deps, "UNIT [...]" },
|
||||||
{ config_parse_unit_names, "UNIT [...]" },
|
|
||||||
{ config_parse_exec, "PATH [ARGUMENT [...]]" },
|
{ config_parse_exec, "PATH [ARGUMENT [...]]" },
|
||||||
{ config_parse_service_type, "SERVICETYPE" },
|
{ config_parse_service_type, "SERVICETYPE" },
|
||||||
{ config_parse_service_restart, "SERVICERESTART" },
|
{ config_parse_service_restart, "SERVICERESTART" },
|
||||||
|
@ -32,7 +32,6 @@ void unit_dump_config_items(FILE *f);
|
|||||||
|
|
||||||
int config_parse_warn_compat(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
int config_parse_warn_compat(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||||
int config_parse_unit_deps(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
int config_parse_unit_deps(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||||
int config_parse_unit_names(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
|
||||||
int config_parse_unit_string_printf(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
int config_parse_unit_string_printf(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||||
int config_parse_unit_strv_printf(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
int config_parse_unit_strv_printf(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||||
int config_parse_unit_path_printf(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
int config_parse_unit_path_printf(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user