mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-01-03 01:17:45 +03:00
Merge pull request #13136 from keszybz/readd-ntp-units.d
ntp-units.d support
This commit is contained in:
commit
0eebcd4c68
@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
<para><filename>systemd-timedated</filename> is a system service
|
<para><filename>systemd-timedated</filename> is a system service
|
||||||
that may be used as a mechanism to change the system clock and
|
that may be used as a mechanism to change the system clock and
|
||||||
timezone, as well as to enable/disable NTP time synchronization.
|
timezone, as well as to enable/disable network time synchronization.
|
||||||
<filename>systemd-timedated</filename> is automatically activated
|
<filename>systemd-timedated</filename> is automatically activated
|
||||||
on request and terminates itself when it is unused.</para>
|
on request and terminates itself when it is unused.</para>
|
||||||
|
|
||||||
@ -46,25 +46,36 @@
|
|||||||
</refsect1>
|
</refsect1>
|
||||||
|
|
||||||
<refsect1>
|
<refsect1>
|
||||||
<title>Environment</title>
|
<title>List of network time synchronization services</title>
|
||||||
|
|
||||||
<variablelist class='environment-variables'>
|
<para><command>systemd-timesyncd</command> will look for files with a <literal>.list</literal> extension
|
||||||
<varlistentry>
|
in <filename>ntp-units.d/</filename> directories. Each file is parsed as a list of unit names, one per
|
||||||
<term><varname>$SYSTEMD_TIMEDATED_NTP_SERVICES</varname></term>
|
line. Empty lines and lines with comments (<literal>#</literal>) are ignored. Files are read from
|
||||||
|
<filename>/usr/lib/systemd/ntp-units.d/</filename> and the corresponding directories under
|
||||||
|
<filename>/etc/</filename>, <filename>/run/</filename>, <filename>/usr/local/lib/</filename>. Files in
|
||||||
|
<filename>/etc/</filename> override files with the same name in <filename>/run/</filename>,
|
||||||
|
<filename>/usr/local/lib/</filename>, and <filename>/usr/lib/</filename>. Files in
|
||||||
|
<filename>/run/</filename> override files with the same name under <filename>/usr/</filename>. Packages
|
||||||
|
should install their configuration files in <filename>/usr/lib/</filename> (distribution packages) or
|
||||||
|
<filename>/usr/local/lib/</filename> (local installs).</para>
|
||||||
|
|
||||||
<listitem><para>Colon-separated list of unit names of NTP client services.
|
<example>
|
||||||
If not set, then
|
<title><filename>ntp-units.d/</filename> entry for <command>systemd-timesyncd</command></title>
|
||||||
<citerefentry><refentrytitle>systemd-timesyncd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>
|
<programlisting># /usr/lib/systemd/ntp-units.d/80-systemd-timesync.list
|
||||||
is used. See the entries of NTP related commands of
|
systemd-timesyncd.service
|
||||||
<citerefentry><refentrytitle>timedatectl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
|
</programlisting>
|
||||||
for details about this.</para>
|
</example>
|
||||||
|
|
||||||
<para>Example:
|
<para>If the environment variable <varname>$SYSTEMD_TIMEDATED_NTP_SERVICES</varname> is set,
|
||||||
<programlisting>SYSTEMD_TIMEDATED_NTP_SERVICES=ntpd.service:chronyd.service:systemd-timesyncd.service</programlisting>
|
<command>systemd-timesyncd</command> will parse the contents of that variable as a colon-separated list
|
||||||
</para></listitem>
|
of unit names. When set, this variable overrides the file-based list described above.</para>
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
<example>
|
||||||
|
<title>An override that specifies that <command>chronyd</command> should be used if available</title>
|
||||||
|
<programlisting>SYSTEMD_TIMEDATED_NTP_SERVICES=chronyd.service:systemd-timesyncd.service</programlisting>
|
||||||
|
</example>
|
||||||
</refsect1>
|
</refsect1>
|
||||||
|
|
||||||
<refsect1>
|
<refsect1>
|
||||||
<title>See Also</title>
|
<title>See Also</title>
|
||||||
<para>
|
<para>
|
||||||
|
@ -23,22 +23,25 @@
|
|||||||
|
|
||||||
<refsynopsisdiv>
|
<refsynopsisdiv>
|
||||||
<cmdsynopsis>
|
<cmdsynopsis>
|
||||||
<command>timedatectl <arg choice="opt" rep="repeat">OPTIONS</arg> <arg choice="req">COMMAND</arg></command>
|
<command>timedatectl</command>
|
||||||
|
<arg choice="opt" rep="repeat">OPTIONS</arg>
|
||||||
|
<arg choice="req">COMMAND</arg>
|
||||||
</cmdsynopsis>
|
</cmdsynopsis>
|
||||||
</refsynopsisdiv>
|
</refsynopsisdiv>
|
||||||
|
|
||||||
<refsect1>
|
<refsect1>
|
||||||
<title>Description</title>
|
<title>Description</title>
|
||||||
|
|
||||||
<para><command>timedatectl</command> may be used to query and
|
<para><command>timedatectl</command> may be used to query and change the system clock and its settings,
|
||||||
change the system clock and its settings.</para>
|
and enable or disable time synchronization services.</para>
|
||||||
|
|
||||||
<para>Use
|
<para>Use
|
||||||
<citerefentry><refentrytitle>systemd-firstboot</refentrytitle><manvolnum>1</manvolnum></citerefentry>
|
<citerefentry><refentrytitle>systemd-firstboot</refentrytitle><manvolnum>1</manvolnum></citerefentry>
|
||||||
to initialize the system time zone for mounted (but not booted)
|
to initialize the system time zone for mounted (but not booted)
|
||||||
system images.</para>
|
system images.</para>
|
||||||
|
|
||||||
<para><command>timedatectl</command> may be used to show the current status of
|
<para><command>timedatectl</command> may be used to show the current status of time synchronization
|
||||||
|
services, for example
|
||||||
<citerefentry><refentrytitle>systemd-timesyncd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
|
<citerefentry><refentrytitle>systemd-timesyncd.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
|
||||||
</para>
|
</para>
|
||||||
|
|
||||||
@ -123,11 +126,8 @@
|
|||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><command>status</command></term>
|
<term><command>status</command></term>
|
||||||
|
|
||||||
<listitem><para>Show current settings of the system clock and RTC,
|
<listitem><para>Show current settings of the system clock and RTC, including whether network time
|
||||||
including whether network time synchronization through
|
synchronization is active. If no command is specified, this is the implied default.
|
||||||
<filename>systemd-timesyncd.service</filename> is active. Even if it is
|
|
||||||
inactive, a different service might still synchronize the clock.
|
|
||||||
If no command is specified, this is the implied default.
|
|
||||||
</para></listitem>
|
</para></listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
@ -193,11 +193,11 @@
|
|||||||
<varlistentry>
|
<varlistentry>
|
||||||
<term><command>set-ntp [BOOL]</command></term>
|
<term><command>set-ntp [BOOL]</command></term>
|
||||||
|
|
||||||
<listitem><para>Takes a boolean argument. Controls whether network time synchronization is active
|
<listitem><para>Takes a boolean argument. Controls whether network time synchronization is active and
|
||||||
and enabled (if available). If the argument is true, this enables and starts the first existed
|
enabled (if available). If the argument is true, this enables and starts the first existing network
|
||||||
service listed in the environment variable <varname>$SYSTEMD_TIMEDATED_NTP_SERVICES</varname>
|
synchronization service. If the argument is false, then this disables and stops the known network
|
||||||
of <filename>systemd-timedated.service</filename>. If the argument is false, then this disables and
|
synchronization services. The way that the list of services is built is described below.</para>
|
||||||
stops the all services listed in <varname>$SYSTEMD_TIMEDATED_NTP_SERVICES</varname>.</para></listitem>
|
</listitem>
|
||||||
</varlistentry>
|
</varlistentry>
|
||||||
|
|
||||||
</variablelist>
|
</variablelist>
|
||||||
@ -250,8 +250,7 @@
|
|||||||
<refsect1>
|
<refsect1>
|
||||||
<title>Exit status</title>
|
<title>Exit status</title>
|
||||||
|
|
||||||
<para>On success, 0 is returned, a non-zero failure
|
<para>On success, 0 is returned, a non-zero failure code otherwise.</para>
|
||||||
code otherwise.</para>
|
|
||||||
</refsect1>
|
</refsect1>
|
||||||
|
|
||||||
<xi:include href="less-variables.xml" />
|
<xi:include href="less-variables.xml" />
|
||||||
|
@ -157,6 +157,7 @@ systemdstatedir = join_paths(localstatedir, 'lib/systemd')
|
|||||||
catalogstatedir = join_paths(systemdstatedir, 'catalog')
|
catalogstatedir = join_paths(systemdstatedir, 'catalog')
|
||||||
randomseeddir = join_paths(localstatedir, 'lib/systemd')
|
randomseeddir = join_paths(localstatedir, 'lib/systemd')
|
||||||
profiledir = join_paths(rootlibexecdir, 'portable', 'profile')
|
profiledir = join_paths(rootlibexecdir, 'portable', 'profile')
|
||||||
|
ntpservicelistdir = join_paths(rootprefixdir, 'lib/systemd/ntp-units.d')
|
||||||
|
|
||||||
docdir = get_option('docdir')
|
docdir = get_option('docdir')
|
||||||
if docdir == ''
|
if docdir == ''
|
||||||
|
@ -247,6 +247,11 @@ static int guess_type(const char **name, bool *is_usr, bool *is_collection, cons
|
|||||||
if (path_equal(n, "kernel/install.d"))
|
if (path_equal(n, "kernel/install.d"))
|
||||||
ext = ".install";
|
ext = ".install";
|
||||||
|
|
||||||
|
if (path_equal(n, "systemd/ntp-units.d")) {
|
||||||
|
coll = true;
|
||||||
|
ext = ".list";
|
||||||
|
}
|
||||||
|
|
||||||
if (PATH_IN_SET(n, "systemd/system-preset", "systemd/user-preset")) {
|
if (PATH_IN_SET(n, "systemd/system-preset", "systemd/user-preset")) {
|
||||||
coll = true;
|
coll = true;
|
||||||
ext = ".preset";
|
ext = ".preset";
|
||||||
|
@ -15,7 +15,9 @@
|
|||||||
#include "bus-error.h"
|
#include "bus-error.h"
|
||||||
#include "bus-util.h"
|
#include "bus-util.h"
|
||||||
#include "clock-util.h"
|
#include "clock-util.h"
|
||||||
|
#include "conf-files.h"
|
||||||
#include "def.h"
|
#include "def.h"
|
||||||
|
#include "fd-util.h"
|
||||||
#include "fileio-label.h"
|
#include "fileio-label.h"
|
||||||
#include "fileio.h"
|
#include "fileio.h"
|
||||||
#include "fs-util.h"
|
#include "fs-util.h"
|
||||||
@ -36,6 +38,8 @@
|
|||||||
#define NULL_ADJTIME_UTC "0.0 0 0\n0\nUTC\n"
|
#define NULL_ADJTIME_UTC "0.0 0 0\n0\nUTC\n"
|
||||||
#define NULL_ADJTIME_LOCAL "0.0 0 0\n0\nLOCAL\n"
|
#define NULL_ADJTIME_LOCAL "0.0 0 0\n0\nLOCAL\n"
|
||||||
|
|
||||||
|
#define UNIT_LIST_DIRS (const char* const*) CONF_PATHS_STRV("systemd/ntp-units.d")
|
||||||
|
|
||||||
typedef struct UnitStatusInfo {
|
typedef struct UnitStatusInfo {
|
||||||
char *name;
|
char *name;
|
||||||
char *load_state;
|
char *load_state;
|
||||||
@ -117,20 +121,17 @@ static int context_add_ntp_service(Context *c, const char *s) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int context_parse_ntp_services(Context *c) {
|
static int context_parse_ntp_services_from_environment(Context *c) {
|
||||||
const char *env, *p;
|
const char *env, *p;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert(c);
|
assert(c);
|
||||||
|
|
||||||
env = getenv("SYSTEMD_TIMEDATED_NTP_SERVICES");
|
env = getenv("SYSTEMD_TIMEDATED_NTP_SERVICES");
|
||||||
if (!env) {
|
if (!env)
|
||||||
r = context_add_ntp_service(c, "systemd-timesyncd.service");
|
|
||||||
if (r < 0)
|
|
||||||
log_warning_errno(r, "Failed to add NTP service \"systemd-timesyncd.service\", ignoring: %m");
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
|
||||||
|
log_debug("Using list of ntp services from environment variable $SYSTEMD_TIMEDATED_NTP_SERVICES.");
|
||||||
|
|
||||||
for (p = env;;) {
|
for (p = env;;) {
|
||||||
_cleanup_free_ char *word = NULL;
|
_cleanup_free_ char *word = NULL;
|
||||||
@ -150,7 +151,62 @@ static int context_parse_ntp_services(Context *c) {
|
|||||||
log_warning_errno(r, "Failed to add NTP service \"%s\", ignoring: %m", word);
|
log_warning_errno(r, "Failed to add NTP service \"%s\", ignoring: %m", word);
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int context_parse_ntp_services_from_disk(Context *c) {
|
||||||
|
_cleanup_strv_free_ char **files = NULL;
|
||||||
|
char **f;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
r = conf_files_list_strv(&files, ".list", NULL, CONF_FILES_FILTER_MASKED, UNIT_LIST_DIRS);
|
||||||
|
if (r < 0)
|
||||||
|
return log_error_errno(r, "Failed to enumerate .list files: %m");
|
||||||
|
|
||||||
|
STRV_FOREACH(f, files) {
|
||||||
|
_cleanup_fclose_ FILE *file = NULL;
|
||||||
|
|
||||||
|
log_debug("Reading file '%s'", *f);
|
||||||
|
|
||||||
|
r = fopen_unlocked(*f, "re", &file);
|
||||||
|
if (r < 0) {
|
||||||
|
log_error_errno(r, "Failed to open %s, ignoring: %m", *f);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (;;) {
|
||||||
|
_cleanup_free_ char *line = NULL;
|
||||||
|
const char *word;
|
||||||
|
|
||||||
|
r = read_line(file, LINE_MAX, &line);
|
||||||
|
if (r < 0) {
|
||||||
|
log_error_errno(r, "Failed to read %s, ignoring: %m", *f);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (r == 0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
word = strstrip(line);
|
||||||
|
if (isempty(word) || startswith("#", word))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
r = context_add_ntp_service(c, word);
|
||||||
|
if (r < 0)
|
||||||
|
log_warning_errno(r, "Failed to add NTP service \"%s\", ignoring: %m", word);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int context_parse_ntp_services(Context *c) {
|
||||||
|
int r;
|
||||||
|
|
||||||
|
r = context_parse_ntp_services_from_environment(c);
|
||||||
|
if (r != 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
return context_parse_ntp_services_from_disk(c);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int context_ntp_service_is_active(Context *c) {
|
static int context_ntp_service_is_active(Context *c) {
|
||||||
|
1
src/timesync/80-systemd-timesync.list
Normal file
1
src/timesync/80-systemd-timesync.list
Normal file
@ -0,0 +1 @@
|
|||||||
|
systemd-timesyncd.service
|
@ -32,6 +32,8 @@ if conf.get('ENABLE_TIMESYNCD') == 1
|
|||||||
install_dir : dbuspolicydir)
|
install_dir : dbuspolicydir)
|
||||||
install_data('org.freedesktop.timesync1.service',
|
install_data('org.freedesktop.timesync1.service',
|
||||||
install_dir : dbussystemservicedir)
|
install_dir : dbussystemservicedir)
|
||||||
|
install_data('80-systemd-timesync.list',
|
||||||
|
install_dir : ntpservicelistdir)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
############################################################
|
############################################################
|
||||||
|
@ -15,6 +15,7 @@ ConditionVirtualization=!container
|
|||||||
DefaultDependencies=no
|
DefaultDependencies=no
|
||||||
After=systemd-remount-fs.service systemd-sysusers.service
|
After=systemd-remount-fs.service systemd-sysusers.service
|
||||||
Before=time-set.target sysinit.target shutdown.target
|
Before=time-set.target sysinit.target shutdown.target
|
||||||
|
Conflicts=chronyd.service ntpd.service
|
||||||
Conflicts=shutdown.target
|
Conflicts=shutdown.target
|
||||||
Wants=time-set.target time-sync.target
|
Wants=time-set.target time-sync.target
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user