mirror of
https://github.com/systemd/systemd
synced 2024-07-21 10:17:21 +00:00
environment-generator: new generator to peruse environment.d
Why the strange name: the prefix is necessary to follow our own advice that environment generators should have numerical prefixes. I also put -d- in the name because otherwise the name was very easy to mistake with systemd.environment-generator. This additional letter clarifies that this on special generator that supports environment.d files.
This commit is contained in:
parent
37f3ffca27
commit
f63c4aabb2
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -19,6 +19,7 @@
|
||||||
/*.tar.bz2
|
/*.tar.bz2
|
||||||
/*.tar.gz
|
/*.tar.gz
|
||||||
/*.tar.xz
|
/*.tar.xz
|
||||||
|
/30-systemd-environment-d-generator
|
||||||
/GPATH
|
/GPATH
|
||||||
/GRTAGS
|
/GRTAGS
|
||||||
/GSYMS
|
/GSYMS
|
||||||
|
|
|
@ -110,6 +110,7 @@ MANPAGES += \
|
||||||
man/systemd-debug-generator.8 \
|
man/systemd-debug-generator.8 \
|
||||||
man/systemd-delta.1 \
|
man/systemd-delta.1 \
|
||||||
man/systemd-detect-virt.1 \
|
man/systemd-detect-virt.1 \
|
||||||
|
man/systemd-environment-d-generator.8 \
|
||||||
man/systemd-escape.1 \
|
man/systemd-escape.1 \
|
||||||
man/systemd-fsck@.service.8 \
|
man/systemd-fsck@.service.8 \
|
||||||
man/systemd-fstab-generator.8 \
|
man/systemd-fstab-generator.8 \
|
||||||
|
@ -185,6 +186,7 @@ MANPAGES += \
|
||||||
man/udev_new.3 \
|
man/udev_new.3 \
|
||||||
man/udevadm.8
|
man/udevadm.8
|
||||||
MANPAGES_ALIAS += \
|
MANPAGES_ALIAS += \
|
||||||
|
man/30-systemd-environment-d-generator.8 \
|
||||||
man/SD_ALERT.3 \
|
man/SD_ALERT.3 \
|
||||||
man/SD_BUS_ERROR_ACCESS_DENIED.3 \
|
man/SD_BUS_ERROR_ACCESS_DENIED.3 \
|
||||||
man/SD_BUS_ERROR_ADDRESS_IN_USE.3 \
|
man/SD_BUS_ERROR_ADDRESS_IN_USE.3 \
|
||||||
|
@ -542,6 +544,7 @@ MANPAGES_ALIAS += \
|
||||||
man/udev_ref.3 \
|
man/udev_ref.3 \
|
||||||
man/udev_unref.3 \
|
man/udev_unref.3 \
|
||||||
man/user.conf.d.5
|
man/user.conf.d.5
|
||||||
|
man/30-systemd-environment-d-generator.8: man/systemd-environment-d-generator.8
|
||||||
man/SD_ALERT.3: man/sd-daemon.3
|
man/SD_ALERT.3: man/sd-daemon.3
|
||||||
man/SD_BUS_ERROR_ACCESS_DENIED.3: man/sd-bus-errors.3
|
man/SD_BUS_ERROR_ACCESS_DENIED.3: man/sd-bus-errors.3
|
||||||
man/SD_BUS_ERROR_ADDRESS_IN_USE.3: man/sd-bus-errors.3
|
man/SD_BUS_ERROR_ADDRESS_IN_USE.3: man/sd-bus-errors.3
|
||||||
|
@ -899,6 +902,9 @@ man/udev_monitor_unref.3: man/udev_monitor_new_from_netlink.3
|
||||||
man/udev_ref.3: man/udev_new.3
|
man/udev_ref.3: man/udev_new.3
|
||||||
man/udev_unref.3: man/udev_new.3
|
man/udev_unref.3: man/udev_new.3
|
||||||
man/user.conf.d.5: man/systemd-system.conf.5
|
man/user.conf.d.5: man/systemd-system.conf.5
|
||||||
|
man/30-systemd-environment-d-generator.html: man/systemd-environment-d-generator.html
|
||||||
|
$(html-alias)
|
||||||
|
|
||||||
man/SD_ALERT.html: man/sd-daemon.html
|
man/SD_ALERT.html: man/sd-daemon.html
|
||||||
$(html-alias)
|
$(html-alias)
|
||||||
|
|
||||||
|
@ -2768,6 +2774,7 @@ EXTRA_DIST += \
|
||||||
man/systemd-debug-generator.xml \
|
man/systemd-debug-generator.xml \
|
||||||
man/systemd-delta.xml \
|
man/systemd-delta.xml \
|
||||||
man/systemd-detect-virt.xml \
|
man/systemd-detect-virt.xml \
|
||||||
|
man/systemd-environment-d-generator.xml \
|
||||||
man/systemd-escape.xml \
|
man/systemd-escape.xml \
|
||||||
man/systemd-firstboot.xml \
|
man/systemd-firstboot.xml \
|
||||||
man/systemd-fsck@.service.xml \
|
man/systemd-fsck@.service.xml \
|
||||||
|
|
10
Makefile.am
10
Makefile.am
|
@ -426,6 +426,9 @@ systemgenerator_PROGRAMS = \
|
||||||
systemd-system-update-generator \
|
systemd-system-update-generator \
|
||||||
systemd-debug-generator
|
systemd-debug-generator
|
||||||
|
|
||||||
|
userenvgenerator_PROGRAMS = \
|
||||||
|
30-systemd-environment-d-generator
|
||||||
|
|
||||||
dist_bashcompletion_data = \
|
dist_bashcompletion_data = \
|
||||||
shell-completion/bash/busctl \
|
shell-completion/bash/busctl \
|
||||||
shell-completion/bash/journalctl \
|
shell-completion/bash/journalctl \
|
||||||
|
@ -2817,6 +2820,13 @@ systemd_system_update_generator_SOURCES = \
|
||||||
systemd_system_update_generator_LDADD = \
|
systemd_system_update_generator_LDADD = \
|
||||||
libsystemd-shared.la
|
libsystemd-shared.la
|
||||||
|
|
||||||
|
# ------------------------------------------------------------------------------
|
||||||
|
30_systemd_environment_d_generator_SOURCES = \
|
||||||
|
src/environment-d-generator/environment-d-generator.c
|
||||||
|
|
||||||
|
30_systemd_environment_d_generator_LDADD = \
|
||||||
|
libsystemd-shared.la
|
||||||
|
|
||||||
# ------------------------------------------------------------------------------
|
# ------------------------------------------------------------------------------
|
||||||
if ENABLE_HIBERNATE
|
if ENABLE_HIBERNATE
|
||||||
systemgenerator_PROGRAMS += \
|
systemgenerator_PROGRAMS += \
|
||||||
|
|
80
man/systemd-environment-d-generator.xml
Normal file
80
man/systemd-environment-d-generator.xml
Normal file
|
@ -0,0 +1,80 @@
|
||||||
|
<?xml version='1.0'?> <!--*-nxml-*-->
|
||||||
|
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
|
||||||
|
"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd" [
|
||||||
|
<!ENTITY % entities SYSTEM "custom-entities.ent" >
|
||||||
|
%entities;
|
||||||
|
]>
|
||||||
|
|
||||||
|
<!--
|
||||||
|
This file is part of systemd.
|
||||||
|
|
||||||
|
Copyright 2017 Zbigniew Jędrzejewski-Szmek
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
systemd is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public License
|
||||||
|
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
-->
|
||||||
|
<refentry id="systemd-environment-d-generator">
|
||||||
|
|
||||||
|
<refentryinfo>
|
||||||
|
<title>systemd-environment-d-generator</title>
|
||||||
|
<productname>systemd</productname>
|
||||||
|
|
||||||
|
<authorgroup>
|
||||||
|
<author>
|
||||||
|
<contrib>Developer</contrib>
|
||||||
|
<firstname>Zbigniew</firstname>
|
||||||
|
<surname>Jędrzejewski-Szmek</surname>
|
||||||
|
<email>zbyszek@in.waw.pl</email>
|
||||||
|
</author>
|
||||||
|
</authorgroup>
|
||||||
|
</refentryinfo>
|
||||||
|
|
||||||
|
<refmeta>
|
||||||
|
<refentrytitle>systemd-environment-d-generator</refentrytitle>
|
||||||
|
<manvolnum>8</manvolnum>
|
||||||
|
</refmeta>
|
||||||
|
|
||||||
|
<refnamediv>
|
||||||
|
<refname>systemd-environment-d-generator</refname>
|
||||||
|
<refname>30-systemd-environment-d-generator</refname>
|
||||||
|
<refpurpose>Load variables specified by <filename>environment.d</filename>
|
||||||
|
</refpurpose>
|
||||||
|
</refnamediv>
|
||||||
|
|
||||||
|
<refsynopsisdiv>
|
||||||
|
<para><filename>&userenvgeneratordir;/30-systemd-environment-d-generator</filename></para>
|
||||||
|
</refsynopsisdiv>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>Description</title>
|
||||||
|
|
||||||
|
<para><filename>systemd-environment-d-generator</filename> is a
|
||||||
|
<citerefentry><refentrytitle>systemd.environment-generator</refentrytitle><manvolnum>7</manvolnum></citerefentry>
|
||||||
|
that reads environment configuration specified by
|
||||||
|
<citerefentry><refentrytitle>environment.d</refentrytitle><manvolnum>7</manvolnum></citerefentry>
|
||||||
|
configuration files and passes it to the
|
||||||
|
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>
|
||||||
|
user manager instance.</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
<refsect1>
|
||||||
|
<title>See Also</title>
|
||||||
|
<para>
|
||||||
|
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
|
||||||
|
<citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
|
||||||
|
<citerefentry><refentrytitle>systemd.environment-generator</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
|
||||||
|
<citerefentry><refentrytitle>systemd.generator</refentrytitle><manvolnum>7</manvolnum></citerefentry>
|
||||||
|
</para>
|
||||||
|
</refsect1>
|
||||||
|
|
||||||
|
</refentry>
|
|
@ -151,6 +151,7 @@
|
||||||
<title>See also</title>
|
<title>See also</title>
|
||||||
|
|
||||||
<para>
|
<para>
|
||||||
|
<citerefentry><refentrytitle>systemd-environment-d-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>,
|
||||||
<citerefentry><refentrytitle>systemd.generator</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
|
<citerefentry><refentrytitle>systemd.generator</refentrytitle><manvolnum>7</manvolnum></citerefentry>,
|
||||||
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
|
<citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
|
||||||
<citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
|
<citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>
|
||||||
|
|
1
src/environment-d-generator/Makefile
Symbolic link
1
src/environment-d-generator/Makefile
Symbolic link
|
@ -0,0 +1 @@
|
||||||
|
../Makefile
|
107
src/environment-d-generator/environment-d-generator.c
Normal file
107
src/environment-d-generator/environment-d-generator.c
Normal file
|
@ -0,0 +1,107 @@
|
||||||
|
/***
|
||||||
|
This file is part of systemd.
|
||||||
|
|
||||||
|
Copyright 2017 Zbigniew Jędrzejewski-Szmek
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
systemd is distributed in the hope that it will be useful, but
|
||||||
|
WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
Lesser General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU Lesser General Public License
|
||||||
|
along with systemd; If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
***/
|
||||||
|
|
||||||
|
#include "sd-path.h"
|
||||||
|
|
||||||
|
#include "conf-files.h"
|
||||||
|
#include "def.h"
|
||||||
|
#include "escape.h"
|
||||||
|
#include "fileio.h"
|
||||||
|
#include "log.h"
|
||||||
|
#include "path-lookup.h"
|
||||||
|
|
||||||
|
static int environment_dirs(char ***ret) {
|
||||||
|
_cleanup_strv_free_ char **dirs = NULL;
|
||||||
|
_cleanup_free_ char *c = NULL;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
dirs = strv_split_nulstr(CONF_PATHS_NULSTR("environment.d"));
|
||||||
|
if (!dirs)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
/* ~/.config/systemd/environment.d */
|
||||||
|
r = sd_path_home(SD_PATH_USER_CONFIGURATION, "environment.d", &c);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
r = strv_extend_front(&dirs, c);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
*ret = dirs;
|
||||||
|
dirs = NULL;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int load_and_print(void) {
|
||||||
|
_cleanup_strv_free_ char **dirs = NULL, **files = NULL, **env = NULL;
|
||||||
|
char **i;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
r = environment_dirs(&dirs);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
r = conf_files_list_strv(&files, ".conf", NULL, (const char **) dirs);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
/* This will mutate the existing environment, based on the presumption
|
||||||
|
* that in case of failure, a partial update is better than none. */
|
||||||
|
|
||||||
|
STRV_FOREACH(i, files) {
|
||||||
|
r = merge_env_file(&env, NULL, *i);
|
||||||
|
if (r == -ENOMEM)
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
STRV_FOREACH(i, env) {
|
||||||
|
char *t;
|
||||||
|
_cleanup_free_ char *q = NULL;
|
||||||
|
|
||||||
|
t = strchr(*i, '=');
|
||||||
|
assert(t);
|
||||||
|
|
||||||
|
q = shell_maybe_quote(t + 1);
|
||||||
|
if (!q)
|
||||||
|
return log_oom();
|
||||||
|
|
||||||
|
printf("%.*s=%s\n", (int) (t - *i), *i, q);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
int r;
|
||||||
|
|
||||||
|
log_parse_environment();
|
||||||
|
log_open();
|
||||||
|
|
||||||
|
if (argc > 1) {
|
||||||
|
log_error("This program takes no arguments.");
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
r = load_and_print();
|
||||||
|
if (r < 0)
|
||||||
|
log_error_errno(r, "Failed to load environment.d: %m");
|
||||||
|
|
||||||
|
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||||
|
}
|
|
@ -503,8 +503,7 @@ int lookup_paths_init(
|
||||||
append = true;
|
append = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* FIXME: empty components in other places should be
|
/* FIXME: empty components in other places should be rejected. */
|
||||||
* rejected. */
|
|
||||||
|
|
||||||
r = path_split_and_make_absolute(e, &paths);
|
r = path_split_and_make_absolute(e, &paths);
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
|
|
Loading…
Reference in a new issue