mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-02-26 09:57:26 +03:00
tmpfiles.d: switch to stacked config dirs in /lib, /etc, /run
This commit is contained in:
parent
db1413d738
commit
772f83719e
@ -31,7 +31,7 @@ bashcompletiondir=$(sysconfdir)/bash_completion.d
|
||||
# Our own, non-special dirs
|
||||
pkgsysconfdir=$(sysconfdir)/systemd
|
||||
userunitdir=$(prefix)/lib/systemd/user
|
||||
tmpfilesdir=$(sysconfdir)/tmpfiles.d
|
||||
tmpfilesdir=$(prefix)/lib/tmpfiles.d
|
||||
usergeneratordir=$(pkglibexecdir)/user-generators
|
||||
|
||||
# And these are the special ones for /
|
||||
@ -1286,12 +1286,13 @@ CLEANFILES += \
|
||||
install-data-hook:
|
||||
$(MKDIR_P) -m 0755 \
|
||||
$(DESTDIR)$(tmpfilesdir) \
|
||||
$(DESTDIR)$(sysconfdir)/modules-load.d \
|
||||
$(DESTDIR)$(sysconfdir)/tmpfiles.d \
|
||||
$(DESTDIR)$(prefix)/lib/modules-load.d \
|
||||
$(DESTDIR)$(sysconfdir)/sysctl.d \
|
||||
$(DESTDIR)$(sysconfdir)/modules-load.d \
|
||||
$(DESTDIR)$(prefix)/lib/sysctl.d \
|
||||
$(DESTDIR)$(sysconfdir)/binfmt.d \
|
||||
$(DESTDIR)$(sysconfdir)/sysctl.d \
|
||||
$(DESTDIR)$(prefix)/lib/binfmt.d \
|
||||
$(DESTDIR)$(sysconfdir)/binfmt.d \
|
||||
$(DESTDIR)$(systemshutdowndir) \
|
||||
$(DESTDIR)$(systemgeneratordir) \
|
||||
$(DESTDIR)$(usergeneratordir)
|
||||
|
@ -57,9 +57,7 @@
|
||||
<para><command>systemd</command> uses
|
||||
files from the above directories to configure
|
||||
additional binary formats to register during boot in
|
||||
the kernel. Each configuration file is named in the
|
||||
style of
|
||||
<filename><program>.conf</filename>.</para>
|
||||
the kernel.</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
@ -75,7 +73,9 @@
|
||||
ignored. Note that this means you may not use ; and #
|
||||
as delimiter in binary format rules.</para>
|
||||
|
||||
<para>Files in <filename>/etc/</filename> overwrite
|
||||
<para>Each configuration file is named in the style of
|
||||
<filename><program>.conf</filename>.
|
||||
Files in <filename>/etc/</filename> overwrite
|
||||
files with the same name in <filename>/usr/lib/</filename>.
|
||||
Files in <filename>/run</filename> overwrite files with
|
||||
the same name in <filename>/etc/</filename> and
|
||||
|
@ -74,7 +74,9 @@
|
||||
newlines. Empty lines and lines whose first
|
||||
non-whitespace character is # or ; are ignored.</para>
|
||||
|
||||
<para>Files in <filename>/etc/</filename> overwrite
|
||||
<para>Each configuration file is named in the style of
|
||||
<filename><program>.conf</filename>.
|
||||
Files in <filename>/etc/</filename> overwrite
|
||||
files with the same name in <filename>/usr/lib/</filename>.
|
||||
Files in <filename>/run</filename> overwrite files with
|
||||
the same name in <filename>/etc/</filename> and
|
||||
|
@ -54,12 +54,10 @@
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para><command>systemd</command> uses
|
||||
<filename>/etc/sysctl.d/</filename> to configure
|
||||
<para><command>systemd</command> uses configuration files
|
||||
from the above directories to configure
|
||||
<citerefentry><refentrytitle>sysctl</refentrytitle><manvolnum>8</manvolnum></citerefentry>
|
||||
kernel parameters to load during boot. Each
|
||||
configuration file is named in the style of
|
||||
<filename>/etc/sysctl.d/<program>.conf</filename>.</para>
|
||||
kernel parameters to load during boot.</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
@ -73,7 +71,9 @@
|
||||
<para>Note that both / and . are accepted as
|
||||
separators in sysctl variable names.</para>
|
||||
|
||||
<para>Files in <filename>/etc/</filename> overwrite
|
||||
<para>Each configuration file is named in the style of
|
||||
<filename><program>.conf</filename>.
|
||||
Files in <filename>/etc/</filename> overwrite
|
||||
files with the same name in <filename>/usr/lib/</filename>.
|
||||
Files in <filename>/run</filename> overwrite files with
|
||||
the same name in <filename>/etc/</filename> and
|
||||
|
@ -47,26 +47,41 @@
|
||||
</refnamediv>
|
||||
|
||||
<refsynopsisdiv>
|
||||
<para><filename>/usr/lib/tmpfiles.d/*.conf</filename></para>
|
||||
<para><filename>/etc/tmpfiles.d/*.conf</filename></para>
|
||||
<para><filename>/run/tmpfiles.d/*.conf</filename></para>
|
||||
</refsynopsisdiv>
|
||||
|
||||
<refsect1>
|
||||
<title>Description</title>
|
||||
|
||||
<para><command>systemd-tmpfiles</command> uses the
|
||||
configuration files in
|
||||
<filename>/etc/tmpfiles.d/</filename> to describe the
|
||||
configuration files from the above directories to describe the
|
||||
creation, cleaning and removal of volatile and
|
||||
temporary files and directories which usually reside
|
||||
in directories such as <filename>/run</filename>
|
||||
or <filename>/tmp</filename>. Each configuration file
|
||||
is named in the style of
|
||||
<filename>/etc/tmpfiles.d/<program>.conf</filename>.</para>
|
||||
or <filename>/tmp</filename>.</para>
|
||||
</refsect1>
|
||||
|
||||
<refsect1>
|
||||
<title>Configuration Format</title>
|
||||
|
||||
<para>Each configuration file is named in the style of
|
||||
<filename><program>.conf</filename>.
|
||||
Files in <filename>/etc/</filename> overwrite
|
||||
files with the same name in <filename>/usr/lib/</filename>.
|
||||
Files in <filename>/run</filename> overwrite files with
|
||||
the same name in <filename>/etc/</filename> and
|
||||
<filename>/usr/lib/</filename>. Packages should install their
|
||||
configuration files in <filename>/usr/lib/</filename>, files
|
||||
in <filename>/etc/</filename> are reserved for the local
|
||||
administration, which possibly decides to overwrite the
|
||||
configurations installed from packages. All files are sorted
|
||||
by filename in alphabetical order, regardless in which of the
|
||||
directories they reside, to ensure that a specific
|
||||
configuration file takes precedence over another file with
|
||||
an alphabetically later name.</para>
|
||||
|
||||
<para>The configuration format is one line per path
|
||||
containing action, mode, ownership and age
|
||||
fields:</para>
|
||||
@ -181,10 +196,12 @@ d /run/user 0755 root root 10d</programlisting>
|
||||
<term><varname>us</varname></term></varlistentry>
|
||||
</variablelist>
|
||||
|
||||
<para>If multiple integers and units are specified the time values are summed up.</para>
|
||||
|
||||
<para>The age field only applies to lines starting with d, D and x. If omitted or set to - no automatic clean-up is done.</para>
|
||||
<para>If multiple integers and units are specified the time
|
||||
values are summed up.</para>
|
||||
|
||||
<para>The age field only applies to lines starting with
|
||||
d, D and x. If omitted or set to - no automatic clean-up
|
||||
is done.</para>
|
||||
</refsect2>
|
||||
|
||||
</refsect1>
|
||||
|
@ -804,20 +804,6 @@ finish:
|
||||
return r;
|
||||
}
|
||||
|
||||
static int scandir_filter(const struct dirent *d) {
|
||||
assert(d);
|
||||
|
||||
if (ignore_file(d->d_name))
|
||||
return 0;
|
||||
|
||||
if (d->d_type != DT_REG &&
|
||||
d->d_type != DT_LNK &&
|
||||
d->d_type != DT_UNKNOWN)
|
||||
return 0;
|
||||
|
||||
return endswith(d->d_name, ".conf");
|
||||
}
|
||||
|
||||
static int help(void) {
|
||||
|
||||
printf("%s [OPTIONS...] [CONFIGURATION FILE...]\n\n"
|
||||
@ -912,6 +898,7 @@ static int read_config_file(const char *fn, bool ignore_enoent) {
|
||||
return -errno;
|
||||
}
|
||||
|
||||
log_debug("apply: %s\n", fn);
|
||||
for (;;) {
|
||||
char line[LINE_MAX], *l;
|
||||
int k;
|
||||
@ -974,41 +961,24 @@ int main(int argc, char *argv[]) {
|
||||
r = EXIT_FAILURE;
|
||||
|
||||
} else {
|
||||
int n, j;
|
||||
struct dirent **de = NULL;
|
||||
char **files, **f;
|
||||
|
||||
if ((n = scandir("/etc/tmpfiles.d/", &de, scandir_filter, alphasort)) < 0) {
|
||||
files = conf_files_list(".conf",
|
||||
"/run/tmpfiles.d",
|
||||
"/etc/tmpfiles.d",
|
||||
"/usr/lib/tmpfiles.d",
|
||||
NULL);
|
||||
|
||||
if (errno != ENOENT) {
|
||||
log_error("Failed to enumerate /etc/tmpfiles.d/ files: %m");
|
||||
STRV_FOREACH(f, files) {
|
||||
if (read_config_file(*f, true) < 0)
|
||||
r = EXIT_FAILURE;
|
||||
}
|
||||
|
||||
goto finish;
|
||||
}
|
||||
|
||||
for (j = 0; j < n; j++) {
|
||||
int k;
|
||||
char *fn;
|
||||
|
||||
k = asprintf(&fn, "/etc/tmpfiles.d/%s", de[j]->d_name);
|
||||
free(de[j]);
|
||||
|
||||
if (k < 0) {
|
||||
log_error("Failed to allocate file name.");
|
||||
r = EXIT_FAILURE;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (read_config_file(fn, true) < 0)
|
||||
r = EXIT_FAILURE;
|
||||
|
||||
free(fn);
|
||||
}
|
||||
|
||||
free(de);
|
||||
strv_free(files);
|
||||
}
|
||||
|
||||
|
||||
|
||||
HASHMAP_FOREACH(i, globs, iterator)
|
||||
if (process_item(i) < 0)
|
||||
r = EXIT_FAILURE;
|
||||
|
Loading…
x
Reference in New Issue
Block a user