[systemd-devel] use /run instead of /dev/.run
Kay Sievers
kay.sievers at vrfy.org
Thu Mar 24 21:07:20 PDT 2011
Instead of the /dev/.run trick we have currently implemented, we decided
to move the early-boot runtime dir to /run.
An existing /var/run directory is bind-mounted to /run. If /var/run is
already a symlink, no action is taken.
An existing /var/lock directory is bind-mounted to /run/lock.
If /var/lock is already a symlink, no action is taken.
To implement the directory vs. symlink logic, we have a:
ConditionPathIsDirectory=
now, which is used in the mount units.
Skipped mount unit in case of symlink:
$ systemctl status var-run.mount
var-run.mount - Runtime Directory
Loaded: loaded (/lib/systemd/system/var-run.mount)
Active: inactive (dead)
start condition failed at Fri, 25 Mar 2011 04:51:41 +0100; 6min ago
Where: /var/run
What: /run
CGroup: name=systemd:/system/var-run.mount
The systemd rpm needs to make sure to add something like:
%pre
mkdir -p -m0755 /run >/dev/null 2>&1 || :
or it needs to be added to filesystem.rpm.
Udev -git already uses /run if that exists, and is writable at bootup.
Otherwise it falls back to the current /dev/.udev.
Dracut and plymouth need to be adopted to switch from /dev/.run to run
too.
Cheers,
Kay
diff --git a/man/sd_readahead.xml b/man/sd_readahead.xml
index f5114e4..004608d 100644
--- a/man/sd_readahead.xml
+++ b/man/sd_readahead.xml
@@ -123,7 +123,7 @@
reference implementation.</para>
<para>Internally, this function creates a file in
- <filename>/dev/.run/systemd/readahead/</filename> which is
+ <filename>/run/systemd/readahead/</filename> which is
then used as flag file to notify the read-ahead
subsystem.</para>
diff --git a/man/systemd-nspawn.xml b/man/systemd-nspawn.xml
index 70ebf94..667e75c 100644
--- a/man/systemd-nspawn.xml
+++ b/man/systemd-nspawn.xml
@@ -99,7 +99,7 @@
<para>Note that <command>systemd-nspawn</command> will
mount file systems private to the container to
<filename>/dev</filename>,
- <filename>/dev/.run</filename> and similar. These will
+ <filename>/run</filename> and similar. These will
not be visible outside of the container, and their
contents will be lost when the container exits.</para>
diff --git a/src/ask-password-api.c b/src/ask-password-api.c
index 9c3dad9..5d17d4c 100644
--- a/src/ask-password-api.c
+++ b/src/ask-password-api.c
@@ -223,7 +223,7 @@ static int create_socket(char **name) {
zero(sa);
sa.un.sun_family = AF_UNIX;
- snprintf(sa.un.sun_path, sizeof(sa.un.sun_path)-1, "/dev/.run/systemd/ask-password/sck.%llu", random_ull());
+ snprintf(sa.un.sun_path, sizeof(sa.un.sun_path)-1, "/run/systemd/ask-password/sck.%llu", random_ull());
if (bind(fd, &sa.sa, offsetof(struct sockaddr_un, sun_path) + strlen(sa.un.sun_path)) < 0) {
r = -errno;
@@ -265,7 +265,7 @@ int ask_password_agent(
_FD_MAX
};
- char temp[] = "/dev/.run/systemd/ask-password/tmp.XXXXXX";
+ char temp[] = "/run/systemd/ask-password/tmp.XXXXXX";
char final[sizeof(temp)] = "";
int fd = -1, r;
FILE *f = NULL;
@@ -280,7 +280,7 @@ int ask_password_agent(
sigset_add_many(&mask, SIGINT, SIGTERM, -1);
assert_se(sigprocmask(SIG_BLOCK, &mask, &oldmask) == 0);
- mkdir_p("/dev/.run/systemd/ask-password", 0755);
+ mkdir_p("/run/systemd/ask-password", 0755);
if ((fd = mkostemp(temp, O_CLOEXEC|O_CREAT|O_WRONLY)) < 0) {
log_error("Failed to create password file: %m");
diff --git a/src/cgroups-agent.c b/src/cgroups-agent.c
index 18612ec..e0868b6 100644
--- a/src/cgroups-agent.c
+++ b/src/cgroups-agent.c
@@ -49,7 +49,7 @@ int main(int argc, char *argv[]) {
* this to avoid an activation loop when we start dbus when we
* are called when the dbus service is shut down. */
- if (!(bus = dbus_connection_open_private("unix:path=/dev/.run/systemd/private", &error))) {
+ if (!(bus = dbus_connection_open_private("unix:path=/run/systemd/private", &error))) {
#ifndef LEGACY
dbus_error_free(&error);
diff --git a/src/condition.c b/src/condition.c
index 1dce276..61812c2 100644
--- a/src/condition.c
+++ b/src/condition.c
@@ -134,6 +134,14 @@ bool condition_test(Condition *c) {
case CONDITION_PATH_EXISTS:
return (access(c->parameter, F_OK) >= 0) == !c->negate;
+ case CONDITION_PATH_IS_DIRECTORY: {
+ struct stat st;
+
+ if (lstat(c->parameter, &st) < 0)
+ return !c->negate;
+ return S_ISDIR(st.st_mode) == !c->negate;
+ }
+
case CONDITION_DIRECTORY_NOT_EMPTY: {
int k;
diff --git a/src/condition.h b/src/condition.h
index 0ce713b..9913c8c 100644
--- a/src/condition.h
+++ b/src/condition.h
@@ -28,6 +28,7 @@
typedef enum ConditionType {
CONDITION_PATH_EXISTS,
+ CONDITION_PATH_IS_DIRECTORY,
CONDITION_DIRECTORY_NOT_EMPTY,
CONDITION_KERNEL_COMMAND_LINE,
CONDITION_VIRTUALIZATION,
diff --git a/src/conf-parser.c b/src/conf-parser.c
index aac64b2..a086cf7 100644
--- a/src/conf-parser.c
+++ b/src/conf-parser.c
@@ -61,7 +61,7 @@ static int next_assignment(
if (!t->parse)
return 0;
- return t->parse(filename, line, section, lvalue, rvalue, t->data, userdata);
+ return t->parse(filename, line, section, lvalue, t->ltype, rvalue, t->data, userdata);
}
/* Warn about unknown non-extension fields. */
@@ -226,6 +226,7 @@ int config_parse_int(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -251,6 +252,7 @@ int config_parse_uint64(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -276,6 +278,7 @@ int config_parse_unsigned(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -301,6 +304,7 @@ int config_parse_size(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -328,6 +332,7 @@ int config_parse_bool(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -354,6 +359,7 @@ int config_parse_string(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -383,6 +389,7 @@ int config_parse_path(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -416,6 +423,7 @@ int config_parse_strv(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -468,6 +476,7 @@ int config_parse_path_strv(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
diff --git a/src/conf-parser.h b/src/conf-parser.h
index 019b7af..3432695 100644
--- a/src/conf-parser.h
+++ b/src/conf-parser.h
@@ -28,12 +28,13 @@
/* An abstract parser for simple, line based, shallow configuration
* files consisting of variable assignments only. */
-typedef int (*ConfigParserCallback)(const char *filename, unsigned line, const char *section, const char *lvalue, const char *rvalue, void *data, void *userdata);
+typedef int (*ConfigParserCallback)(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
/* Wraps info for parsing a specific configuration variable */
typedef struct ConfigItem {
const char *lvalue; /* name of the variable */
ConfigParserCallback parse; /* Function that is called to parse the variable's value */
+ int ltype; /* Distinguish differnt variables passed to the same callback */
void *data; /* Where to store the variable's data */
const char *section;
} ConfigItem;
@@ -44,15 +45,15 @@ typedef struct ConfigItem {
int config_parse(const char *filename, FILE *f, const char* const *sections, const ConfigItem *t, bool relaxed, void *userdata);
/* Generic parsers */
-int config_parse_int(const char *filename, unsigned line, const char *section, const char *lvalue, const char *rvalue, void *data, void *userdata);
-int config_parse_unsigned(const char *filename, unsigned line, const char *section, const char *lvalue, const char *rvalue, void *data, void *userdata);
-int config_parse_uint64(const char *filename, unsigned line, const char *section, const char *lvalue, const char *rvalue, void *data, void *userdata);
-int config_parse_size(const char *filename, unsigned line, const char *section, const char *lvalue, const char *rvalue, void *data, void *userdata);
-int config_parse_bool(const char *filename, unsigned line, const char *section, const char *lvalue, const char *rvalue, void *data, void *userdata);
-int config_parse_string(const char *filename, unsigned line, const char *section, const char *lvalue, const char *rvalue, void *data, void *userdata);
-int config_parse_path(const char *filename, unsigned line, const char *section, const char *lvalue, const char *rvalue, void *data, void *userdata);
-int config_parse_strv(const char *filename, unsigned line, const char *section, const char *lvalue, const char *rvalue, void *data, void *userdata);
-int config_parse_path_strv(const char *filename, unsigned line, const char *section, const char *lvalue, const char *rvalue, void *data, void *userdata);
+int config_parse_int(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
+int config_parse_unsigned(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
+int config_parse_uint64(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
+int config_parse_size(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
+int config_parse_bool(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
+int config_parse_string(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
+int config_parse_path(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
+int config_parse_strv(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
+int config_parse_path_strv(const char *filename, unsigned line, const char *section, const char *lvalue, int ltype, const char *rvalue, void *data, void *userdata);
#define DEFINE_CONFIG_PARSE_ENUM(function,name,type,msg) \
int function( \
@@ -60,6 +61,7 @@ int config_parse_path_strv(const char *filename, unsigned line, const char *sect
unsigned line, \
const char *section, \
const char *lvalue, \
+ int ltype, \
const char *rvalue, \
void *data, \
void *userdata) { \
diff --git a/src/dbus-common.c b/src/dbus-common.c
index e352b8c..dcce10e 100644
--- a/src/dbus-common.c
+++ b/src/dbus-common.c
@@ -104,7 +104,7 @@ int bus_connect(DBusBusType t, DBusConnection **_bus, bool *private, DBusError *
/* If we are root, then let's not go via the bus */
if (geteuid() == 0 && t == DBUS_BUS_SYSTEM) {
- if (!(bus = dbus_connection_open_private("unix:path=/dev/.run/systemd/private", error))) {
+ if (!(bus = dbus_connection_open_private("unix:path=/run/systemd/private", error))) {
#ifndef LEGACY
dbus_error_free(error);
diff --git a/src/dbus.c b/src/dbus.c
index 7afb0fb..31b1ce6 100644
--- a/src/dbus.c
+++ b/src/dbus.c
@@ -955,8 +955,8 @@ static int bus_init_private(Manager *m) {
if (getpid() != 1)
return 0;
- unlink("/dev/.run/systemd/private");
- if (!(m->private_bus = dbus_server_listen("unix:path=/dev/.run/systemd/private", &error))) {
+ unlink("/run/systemd/private");
+ if (!(m->private_bus = dbus_server_listen("unix:path=/run/systemd/private", &error))) {
log_error("Failed to create private D-Bus server: %s", error.message);
r = -EIO;
goto fail;
diff --git a/src/execute.h b/src/execute.h
index 755dea3..3b2b4e8 100644
--- a/src/execute.h
+++ b/src/execute.h
@@ -40,7 +40,7 @@ struct CGroupBonding;
#include "util.h"
/* Abstract namespace! */
-#define LOGGER_SOCKET "/dev/.run/systemd/logger"
+#define LOGGER_SOCKET "/run/systemd/logger"
typedef enum KillMode {
KILL_CONTROL_GROUP = 0,
diff --git a/src/fsck.c b/src/fsck.c
index a3c83c3..7b809b3 100644
--- a/src/fsck.c
+++ b/src/fsck.c
@@ -265,7 +265,7 @@ int main(int argc, char *argv[]) {
r = EXIT_SUCCESS;
if (status.si_code == CLD_EXITED && (status.si_status & 1))
- touch("/dev/.run/systemd/quotacheck");
+ touch("/run/systemd/quotacheck");
finish:
if (udev_device)
diff --git a/src/load-fragment.c b/src/load-fragment.c
index ac22b94..3435256 100644
--- a/src/load-fragment.c
+++ b/src/load-fragment.c
@@ -48,6 +48,7 @@ static int config_parse_warn_compat(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -62,6 +63,7 @@ static int config_parse_deps(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -108,6 +110,7 @@ static int config_parse_names(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -154,6 +157,7 @@ static int config_parse_string_printf(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -187,6 +191,7 @@ static int config_parse_listen(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -249,6 +254,7 @@ static int config_parse_socket_bind(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -283,6 +289,7 @@ static int config_parse_nice(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -316,6 +323,7 @@ static int config_parse_oom_score_adjust(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -349,6 +357,7 @@ static int config_parse_mode(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -383,6 +392,7 @@ static int config_parse_exec(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -500,6 +510,7 @@ static int config_parse_usec(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -527,6 +538,7 @@ static int config_parse_bindtodevice(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -559,6 +571,7 @@ static int config_parse_facility(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -586,6 +599,7 @@ static int config_parse_level(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -612,6 +626,7 @@ static int config_parse_io_class(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -640,6 +655,7 @@ static int config_parse_io_priority(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -668,6 +684,7 @@ static int config_parse_cpu_sched_policy(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -697,6 +714,7 @@ static int config_parse_cpu_sched_prio(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -726,6 +744,7 @@ static int config_parse_cpu_affinity(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -771,6 +790,7 @@ static int config_parse_capabilities(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -803,6 +823,7 @@ static int config_parse_secure_bits(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -844,6 +865,7 @@ static int config_parse_bounding_set(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -902,6 +924,7 @@ static int config_parse_timer_slack_nsec(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -929,6 +952,7 @@ static int config_parse_limit(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -959,6 +983,7 @@ static int config_parse_cgroup(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -993,6 +1018,7 @@ static int config_parse_sysv_priority(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -1020,6 +1046,7 @@ static int config_parse_fsck_passno(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -1048,6 +1075,7 @@ static int config_parse_kill_signal(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -1074,6 +1102,7 @@ static int config_parse_mount_flags(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -1111,6 +1140,7 @@ static int config_parse_timer(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -1151,6 +1181,7 @@ static int config_parse_timer_unit(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -1185,6 +1216,7 @@ static int config_parse_path_spec(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -1231,6 +1263,7 @@ static int config_parse_path_unit(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -1265,6 +1298,7 @@ static int config_parse_socket_service(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -1299,6 +1333,7 @@ static int config_parse_service_sockets(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -1353,6 +1388,7 @@ static int config_parse_env_file(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -1383,6 +1419,7 @@ static int config_parse_ip_tos(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -1409,10 +1446,12 @@ static int config_parse_condition_path(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
+ ConditionType cond = ltype;
Unit *u = data;
bool trigger, negate;
Condition *c;
@@ -1433,8 +1472,7 @@ static int config_parse_condition_path(
return 0;
}
- if (!(c = condition_new(streq(lvalue, "ConditionPathExists") ? CONDITION_PATH_EXISTS : CONDITION_DIRECTORY_NOT_EMPTY,
- rvalue, trigger, negate)))
+ if (!(c = condition_new(cond, rvalue, trigger, negate)))
return -ENOMEM;
LIST_PREPEND(Condition, conditions, u->meta.conditions, c);
@@ -1446,6 +1484,7 @@ static int config_parse_condition_kernel(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -1477,6 +1516,7 @@ static int config_parse_condition_virt(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -1508,6 +1548,7 @@ static int config_parse_condition_null(
unsigned line,
const char *section,
const char *lvalue,
+ int ltype,
const char *rvalue,
void *data,
void *userdata) {
@@ -1763,178 +1804,179 @@ static int load_from_path(Unit *u, const char *path) {
};
#define EXEC_CONTEXT_CONFIG_ITEMS(context, section) \
- { "WorkingDirectory", config_parse_path, &(context).working_directory, section }, \
- { "RootDirectory", config_parse_path, &(context).root_directory, section }, \
- { "User", config_parse_string_printf, &(context).user, section }, \
- { "Group", config_parse_string_printf, &(context).group, section }, \
- { "SupplementaryGroups", config_parse_strv, &(context).supplementary_groups, section }, \
- { "Nice", config_parse_nice, &(context), section }, \
- { "OOMScoreAdjust", config_parse_oom_score_adjust,&(context), section }, \
- { "IOSchedulingClass", config_parse_io_class, &(context), section }, \
- { "IOSchedulingPriority", config_parse_io_priority, &(context), section }, \
- { "CPUSchedulingPolicy", config_parse_cpu_sched_policy,&(context), section }, \
- { "CPUSchedulingPriority", config_parse_cpu_sched_prio, &(context), section }, \
- { "CPUSchedulingResetOnFork", config_parse_bool, &(context).cpu_sched_reset_on_fork, section }, \
- { "CPUAffinity", config_parse_cpu_affinity, &(context), section }, \
- { "UMask", config_parse_mode, &(context).umask, section }, \
- { "Environment", config_parse_strv, &(context).environment, section }, \
- { "EnvironmentFile", config_parse_env_file, &(context).environment_files, section }, \
- { "StandardInput", config_parse_input, &(context).std_input, section }, \
- { "StandardOutput", config_parse_output, &(context).std_output, section }, \
- { "StandardError", config_parse_output, &(context).std_error, section }, \
- { "TTYPath", config_parse_path, &(context).tty_path, section }, \
- { "SyslogIdentifier", config_parse_string_printf, &(context).syslog_identifier, section }, \
- { "SyslogFacility", config_parse_facility, &(context).syslog_priority, section }, \
- { "SyslogLevel", config_parse_level, &(context).syslog_priority, section }, \
- { "SyslogLevelPrefix", config_parse_bool, &(context).syslog_level_prefix, section }, \
- { "Capabilities", config_parse_capabilities, &(context), section }, \
- { "SecureBits", config_parse_secure_bits, &(context), section }, \
- { "CapabilityBoundingSet", config_parse_bounding_set, &(context), section }, \
- { "TimerSlackNSec", config_parse_timer_slack_nsec,&(context), section }, \
- { "LimitCPU", config_parse_limit, &(context).rlimit[RLIMIT_CPU], section }, \
- { "LimitFSIZE", config_parse_limit, &(context).rlimit[RLIMIT_FSIZE], section }, \
- { "LimitDATA", config_parse_limit, &(context).rlimit[RLIMIT_DATA], section }, \
- { "LimitSTACK", config_parse_limit, &(context).rlimit[RLIMIT_STACK], section }, \
- { "LimitCORE", config_parse_limit, &(context).rlimit[RLIMIT_CORE], section }, \
- { "LimitRSS", config_parse_limit, &(context).rlimit[RLIMIT_RSS], section }, \
- { "LimitNOFILE", config_parse_limit, &(context).rlimit[RLIMIT_NOFILE], section }, \
- { "LimitAS", config_parse_limit, &(context).rlimit[RLIMIT_AS], section }, \
- { "LimitNPROC", config_parse_limit, &(context).rlimit[RLIMIT_NPROC], section }, \
- { "LimitMEMLOCK", config_parse_limit, &(context).rlimit[RLIMIT_MEMLOCK], section }, \
- { "LimitLOCKS", config_parse_limit, &(context).rlimit[RLIMIT_LOCKS], section }, \
- { "LimitSIGPENDING", config_parse_limit, &(context).rlimit[RLIMIT_SIGPENDING], section }, \
- { "LimitMSGQUEUE", config_parse_limit, &(context).rlimit[RLIMIT_MSGQUEUE], section }, \
- { "LimitNICE", config_parse_limit, &(context).rlimit[RLIMIT_NICE], section }, \
- { "LimitRTPRIO", config_parse_limit, &(context).rlimit[RLIMIT_RTPRIO], section }, \
- { "LimitRTTIME", config_parse_limit, &(context).rlimit[RLIMIT_RTTIME], section }, \
- { "ControlGroup", config_parse_cgroup, u, section }, \
- { "ReadWriteDirectories", config_parse_path_strv, &(context).read_write_dirs, section }, \
- { "ReadOnlyDirectories", config_parse_path_strv, &(context).read_only_dirs, section }, \
- { "InaccessibleDirectories",config_parse_path_strv, &(context).inaccessible_dirs, section }, \
- { "PrivateTmp", config_parse_bool, &(context).private_tmp, section }, \
- { "MountFlags", config_parse_mount_flags, &(context), section }, \
- { "TCPWrapName", config_parse_string_printf, &(context).tcpwrap_name, section }, \
- { "PAMName", config_parse_string_printf, &(context).pam_name, section }, \
- { "KillMode", config_parse_kill_mode, &(context).kill_mode, section }, \
- { "KillSignal", config_parse_kill_signal, &(context).kill_signal, section }, \
- { "SendSIGKILL", config_parse_bool, &(context).send_sigkill, section }, \
- { "UtmpIdentifier", config_parse_string_printf, &(context).utmp_id, section }
+ { "WorkingDirectory", config_parse_path, 0, &(context).working_directory, section }, \
+ { "RootDirectory", config_parse_path, 0, &(context).root_directory, section }, \
+ { "User", config_parse_string_printf, 0, &(context).user, section }, \
+ { "Group", config_parse_string_printf, 0, &(context).group, section }, \
+ { "SupplementaryGroups", config_parse_strv, 0, &(context).supplementary_groups, section }, \
+ { "Nice", config_parse_nice, 0, &(context), section }, \
+ { "OOMScoreAdjust", config_parse_oom_score_adjust,0, &(context), section }, \
+ { "IOSchedulingClass", config_parse_io_class, 0, &(context), section }, \
+ { "IOSchedulingPriority", config_parse_io_priority, 0, &(context), section }, \
+ { "CPUSchedulingPolicy", config_parse_cpu_sched_policy,0, &(context), section }, \
+ { "CPUSchedulingPriority", config_parse_cpu_sched_prio, 0, &(context), section }, \
+ { "CPUSchedulingResetOnFork", config_parse_bool, 0, &(context).cpu_sched_reset_on_fork, section }, \
+ { "CPUAffinity", config_parse_cpu_affinity, 0, &(context), section }, \
+ { "UMask", config_parse_mode, 0, &(context).umask, section }, \
+ { "Environment", config_parse_strv, 0, &(context).environment, section }, \
+ { "EnvironmentFile", config_parse_env_file, 0, &(context).environment_files, section }, \
+ { "StandardInput", config_parse_input, 0, &(context).std_input, section }, \
+ { "StandardOutput", config_parse_output, 0, &(context).std_output, section }, \
+ { "StandardError", config_parse_output, 0, &(context).std_error, section }, \
+ { "TTYPath", config_parse_path, 0, &(context).tty_path, section }, \
+ { "SyslogIdentifier", config_parse_string_printf, 0, &(context).syslog_identifier, section }, \
+ { "SyslogFacility", config_parse_facility, 0, &(context).syslog_priority, section }, \
+ { "SyslogLevel", config_parse_level, 0, &(context).syslog_priority, section }, \
+ { "SyslogLevelPrefix", config_parse_bool, 0, &(context).syslog_level_prefix, section }, \
+ { "Capabilities", config_parse_capabilities, 0, &(context), section }, \
+ { "SecureBits", config_parse_secure_bits, 0, &(context), section }, \
+ { "CapabilityBoundingSet", config_parse_bounding_set, 0, &(context), section }, \
+ { "TimerSlackNSec", config_parse_timer_slack_nsec,0, &(context), section }, \
+ { "LimitCPU", config_parse_limit, 0, &(context).rlimit[RLIMIT_CPU], section }, \
+ { "LimitFSIZE", config_parse_limit, 0, &(context).rlimit[RLIMIT_FSIZE], section }, \
+ { "LimitDATA", config_parse_limit, 0, &(context).rlimit[RLIMIT_DATA], section }, \
+ { "LimitSTACK", config_parse_limit, 0, &(context).rlimit[RLIMIT_STACK], section }, \
+ { "LimitCORE", config_parse_limit, 0, &(context).rlimit[RLIMIT_CORE], section }, \
+ { "LimitRSS", config_parse_limit, 0, &(context).rlimit[RLIMIT_RSS], section }, \
+ { "LimitNOFILE", config_parse_limit, 0, &(context).rlimit[RLIMIT_NOFILE], section }, \
+ { "LimitAS", config_parse_limit, 0, &(context).rlimit[RLIMIT_AS], section }, \
+ { "LimitNPROC", config_parse_limit, 0, &(context).rlimit[RLIMIT_NPROC], section }, \
+ { "LimitMEMLOCK", config_parse_limit, 0, &(context).rlimit[RLIMIT_MEMLOCK], section }, \
+ { "LimitLOCKS", config_parse_limit, 0, &(context).rlimit[RLIMIT_LOCKS], section }, \
+ { "LimitSIGPENDING", config_parse_limit, 0, &(context).rlimit[RLIMIT_SIGPENDING], section }, \
+ { "LimitMSGQUEUE", config_parse_limit, 0, &(context).rlimit[RLIMIT_MSGQUEUE], section }, \
+ { "LimitNICE", config_parse_limit, 0, &(context).rlimit[RLIMIT_NICE], section }, \
+ { "LimitRTPRIO", config_parse_limit, 0, &(context).rlimit[RLIMIT_RTPRIO], section }, \
+ { "LimitRTTIME", config_parse_limit, 0, &(context).rlimit[RLIMIT_RTTIME], section }, \
+ { "ControlGroup", config_parse_cgroup, 0, u, section }, \
+ { "ReadWriteDirectories", config_parse_path_strv, 0, &(context).read_write_dirs, section }, \
+ { "ReadOnlyDirectories", config_parse_path_strv, 0, &(context).read_only_dirs, section }, \
+ { "InaccessibleDirectories",config_parse_path_strv, 0, &(context).inaccessible_dirs, section }, \
+ { "PrivateTmp", config_parse_bool, 0, &(context).private_tmp, section }, \
+ { "MountFlags", config_parse_mount_flags, 0, &(context), section }, \
+ { "TCPWrapName", config_parse_string_printf, 0, &(context).tcpwrap_name, section }, \
+ { "PAMName", config_parse_string_printf, 0, &(context).pam_name, section }, \
+ { "KillMode", config_parse_kill_mode, 0, &(context).kill_mode, section }, \
+ { "KillSignal", config_parse_kill_signal, 0, &(context).kill_signal, section }, \
+ { "SendSIGKILL", config_parse_bool, 0, &(context).send_sigkill, section }, \
+ { "UtmpIdentifier", config_parse_string_printf, 0, &(context).utmp_id, section }
const ConfigItem items[] = {
- { "Names", config_parse_names, u, "Unit" },
- { "Description", config_parse_string_printf, &u->meta.description, "Unit" },
- { "Requires", config_parse_deps, UINT_TO_PTR(UNIT_REQUIRES), "Unit" },
- { "RequiresOverridable", config_parse_deps, UINT_TO_PTR(UNIT_REQUIRES_OVERRIDABLE), "Unit" },
- { "Requisite", config_parse_deps, UINT_TO_PTR(UNIT_REQUISITE), "Unit" },
- { "RequisiteOverridable", config_parse_deps, UINT_TO_PTR(UNIT_REQUISITE_OVERRIDABLE), "Unit" },
- { "Wants", config_parse_deps, UINT_TO_PTR(UNIT_WANTS), "Unit" },
- { "BindTo", config_parse_deps, UINT_TO_PTR(UNIT_BIND_TO), "Unit" },
- { "Conflicts", config_parse_deps, UINT_TO_PTR(UNIT_CONFLICTS), "Unit" },
- { "Before", config_parse_deps, UINT_TO_PTR(UNIT_BEFORE), "Unit" },
- { "After", config_parse_deps, UINT_TO_PTR(UNIT_AFTER), "Unit" },
- { "OnFailure", config_parse_deps, UINT_TO_PTR(UNIT_ON_FAILURE), "Unit" },
- { "StopWhenUnneeded", config_parse_bool, &u->meta.stop_when_unneeded, "Unit" },
- { "RefuseManualStart", config_parse_bool, &u->meta.refuse_manual_start, "Unit" },
- { "RefuseManualStop", config_parse_bool, &u->meta.refuse_manual_stop, "Unit" },
- { "AllowIsolate", config_parse_bool, &u->meta.allow_isolate, "Unit" },
- { "DefaultDependencies", config_parse_bool, &u->meta.default_dependencies, "Unit" },
- { "JobTimeoutSec", config_parse_usec, &u->meta.job_timeout, "Unit" },
- { "ConditionPathExists", config_parse_condition_path, u, "Unit" },
- { "ConditionDirectoryNotEmpty", config_parse_condition_path, u, "Unit" },
- { "ConditionKernelCommandLine", config_parse_condition_kernel, u, "Unit" },
- { "ConditionVirtualization",config_parse_condition_virt, u, "Unit" },
- { "ConditionNull", config_parse_condition_null, u, "Unit" },
-
- { "PIDFile", config_parse_path, &u->service.pid_file, "Service" },
- { "ExecStartPre", config_parse_exec, u->service.exec_command+SERVICE_EXEC_START_PRE, "Service" },
- { "ExecStart", config_parse_exec, u->service.exec_command+SERVICE_EXEC_START, "Service" },
- { "ExecStartPost", config_parse_exec, u->service.exec_command+SERVICE_EXEC_START_POST, "Service" },
- { "ExecReload", config_parse_exec, u->service.exec_command+SERVICE_EXEC_RELOAD, "Service" },
- { "ExecStop", config_parse_exec, u->service.exec_command+SERVICE_EXEC_STOP, "Service" },
- { "ExecStopPost", config_parse_exec, u->service.exec_command+SERVICE_EXEC_STOP_POST, "Service" },
- { "RestartSec", config_parse_usec, &u->service.restart_usec, "Service" },
- { "TimeoutSec", config_parse_usec, &u->service.timeout_usec, "Service" },
- { "Type", config_parse_service_type, &u->service.type, "Service" },
- { "Restart", config_parse_service_restart, &u->service.restart, "Service" },
- { "PermissionsStartOnly", config_parse_bool, &u->service.permissions_start_only, "Service" },
- { "RootDirectoryStartOnly", config_parse_bool, &u->service.root_directory_start_only, "Service" },
- { "RemainAfterExit", config_parse_bool, &u->service.remain_after_exit, "Service" },
- { "GuessMainPID", config_parse_bool, &u->service.guess_main_pid, "Service" },
+ { "Names", config_parse_names, 0, u, "Unit" },
+ { "Description", config_parse_string_printf, 0, &u->meta.description, "Unit" },
+ { "Requires", config_parse_deps, 0, UINT_TO_PTR(UNIT_REQUIRES), "Unit" },
+ { "RequiresOverridable", config_parse_deps, 0, UINT_TO_PTR(UNIT_REQUIRES_OVERRIDABLE), "Unit" },
+ { "Requisite", config_parse_deps, 0, UINT_TO_PTR(UNIT_REQUISITE), "Unit" },
+ { "RequisiteOverridable", config_parse_deps, 0, UINT_TO_PTR(UNIT_REQUISITE_OVERRIDABLE), "Unit" },
+ { "Wants", config_parse_deps, 0, UINT_TO_PTR(UNIT_WANTS), "Unit" },
+ { "BindTo", config_parse_deps, 0, UINT_TO_PTR(UNIT_BIND_TO), "Unit" },
+ { "Conflicts", config_parse_deps, 0, UINT_TO_PTR(UNIT_CONFLICTS), "Unit" },
+ { "Before", config_parse_deps, 0, UINT_TO_PTR(UNIT_BEFORE), "Unit" },
+ { "After", config_parse_deps, 0, UINT_TO_PTR(UNIT_AFTER), "Unit" },
+ { "OnFailure", config_parse_deps, 0, UINT_TO_PTR(UNIT_ON_FAILURE), "Unit" },
+ { "StopWhenUnneeded", config_parse_bool, 0, &u->meta.stop_when_unneeded, "Unit" },
+ { "RefuseManualStart", config_parse_bool, 0, &u->meta.refuse_manual_start, "Unit" },
+ { "RefuseManualStop", config_parse_bool, 0, &u->meta.refuse_manual_stop, "Unit" },
+ { "AllowIsolate", config_parse_bool, 0, &u->meta.allow_isolate, "Unit" },
+ { "DefaultDependencies", config_parse_bool, 0, &u->meta.default_dependencies, "Unit" },
+ { "JobTimeoutSec", config_parse_usec, 0, &u->meta.job_timeout, "Unit" },
+ { "ConditionPathExists", config_parse_condition_path, CONDITION_PATH_EXISTS, u, "Unit" },
+ { "ConditionPathIsDirectory", config_parse_condition_path, CONDITION_PATH_IS_DIRECTORY, u, "Unit" },
+ { "ConditionDirectoryNotEmpty", config_parse_condition_path, CONDITION_DIRECTORY_NOT_EMPTY, u, "Unit" },
+ { "ConditionKernelCommandLine", config_parse_condition_kernel, 0, u, "Unit" },
+ { "ConditionVirtualization",config_parse_condition_virt, 0, u, "Unit" },
+ { "ConditionNull", config_parse_condition_null, 0, u, "Unit" },
+
+ { "PIDFile", config_parse_path, 0, &u->service.pid_file, "Service" },
+ { "ExecStartPre", config_parse_exec, 0, u->service.exec_command+SERVICE_EXEC_START_PRE, "Service" },
+ { "ExecStart", config_parse_exec, 0, u->service.exec_command+SERVICE_EXEC_START, "Service" },
+ { "ExecStartPost", config_parse_exec, 0, u->service.exec_command+SERVICE_EXEC_START_POST, "Service" },
+ { "ExecReload", config_parse_exec, 0, u->service.exec_command+SERVICE_EXEC_RELOAD, "Service" },
+ { "ExecStop", config_parse_exec, 0, u->service.exec_command+SERVICE_EXEC_STOP, "Service" },
+ { "ExecStopPost", config_parse_exec, 0, u->service.exec_command+SERVICE_EXEC_STOP_POST, "Service" },
+ { "RestartSec", config_parse_usec, 0, &u->service.restart_usec, "Service" },
+ { "TimeoutSec", config_parse_usec, 0, &u->service.timeout_usec, "Service" },
+ { "Type", config_parse_service_type, 0, &u->service.type, "Service" },
+ { "Restart", config_parse_service_restart, 0, &u->service.restart, "Service" },
+ { "PermissionsStartOnly", config_parse_bool, 0, &u->service.permissions_start_only, "Service" },
+ { "RootDirectoryStartOnly", config_parse_bool, 0, &u->service.root_directory_start_only, "Service" },
+ { "RemainAfterExit", config_parse_bool, 0, &u->service.remain_after_exit, "Service" },
+ { "GuessMainPID", config_parse_bool, 0, &u->service.guess_main_pid, "Service" },
#ifdef HAVE_SYSV_COMPAT
- { "SysVStartPriority", config_parse_sysv_priority, &u->service.sysv_start_priority, "Service" },
+ { "SysVStartPriority", config_parse_sysv_priority, 0, &u->service.sysv_start_priority, "Service" },
#else
- { "SysVStartPriority", config_parse_warn_compat, NULL, "Service" },
+ { "SysVStartPriority", config_parse_warn_compat, 0, NULL, "Service" },
#endif
- { "NonBlocking", config_parse_bool, &u->service.exec_context.non_blocking, "Service" },
- { "BusName", config_parse_string_printf, &u->service.bus_name, "Service" },
- { "NotifyAccess", config_parse_notify_access, &u->service.notify_access, "Service" },
- { "Sockets", config_parse_service_sockets, &u->service, "Service" },
- { "FsckPassNo", config_parse_fsck_passno, &u->service.fsck_passno, "Service" },
+ { "NonBlocking", config_parse_bool, 0, &u->service.exec_context.non_blocking, "Service" },
+ { "BusName", config_parse_string_printf, 0, &u->service.bus_name, "Service" },
+ { "NotifyAccess", config_parse_notify_access, 0, &u->service.notify_access, "Service" },
+ { "Sockets", config_parse_service_sockets, 0, &u->service, "Service" },
+ { "FsckPassNo", config_parse_fsck_passno, 0, &u->service.fsck_passno, "Service" },
EXEC_CONTEXT_CONFIG_ITEMS(u->service.exec_context, "Service"),
- { "ListenStream", config_parse_listen, &u->socket, "Socket" },
- { "ListenDatagram", config_parse_listen, &u->socket, "Socket" },
- { "ListenSequentialPacket", config_parse_listen, &u->socket, "Socket" },
- { "ListenFIFO", config_parse_listen, &u->socket, "Socket" },
- { "BindIPv6Only", config_parse_socket_bind, &u->socket, "Socket" },
- { "Backlog", config_parse_unsigned, &u->socket.backlog, "Socket" },
- { "BindToDevice", config_parse_bindtodevice, &u->socket, "Socket" },
- { "ExecStartPre", config_parse_exec, u->socket.exec_command+SOCKET_EXEC_START_PRE, "Socket" },
- { "ExecStartPost", config_parse_exec, u->socket.exec_command+SOCKET_EXEC_START_POST, "Socket" },
- { "ExecStopPre", config_parse_exec, u->socket.exec_command+SOCKET_EXEC_STOP_PRE, "Socket" },
- { "ExecStopPost", config_parse_exec, u->socket.exec_command+SOCKET_EXEC_STOP_POST, "Socket" },
- { "TimeoutSec", config_parse_usec, &u->socket.timeout_usec, "Socket" },
- { "DirectoryMode", config_parse_mode, &u->socket.directory_mode, "Socket" },
- { "SocketMode", config_parse_mode, &u->socket.socket_mode, "Socket" },
- { "Accept", config_parse_bool, &u->socket.accept, "Socket" },
- { "MaxConnections", config_parse_unsigned, &u->socket.max_connections, "Socket" },
- { "KeepAlive", config_parse_bool, &u->socket.keep_alive, "Socket" },
- { "Priority", config_parse_int, &u->socket.priority, "Socket" },
- { "ReceiveBuffer", config_parse_size, &u->socket.receive_buffer, "Socket" },
- { "SendBuffer", config_parse_size, &u->socket.send_buffer, "Socket" },
- { "IPTOS", config_parse_ip_tos, &u->socket.ip_tos, "Socket" },
- { "IPTTL", config_parse_int, &u->socket.ip_ttl, "Socket" },
- { "Mark", config_parse_int, &u->socket.mark, "Socket" },
- { "PipeSize", config_parse_size, &u->socket.pipe_size, "Socket" },
- { "FreeBind", config_parse_bool, &u->socket.free_bind, "Socket" },
- { "TCPCongestion", config_parse_string, &u->socket.tcp_congestion, "Socket" },
- { "Service", config_parse_socket_service, &u->socket, "Socket" },
+ { "ListenStream", config_parse_listen, 0, &u->socket, "Socket" },
+ { "ListenDatagram", config_parse_listen, 0, &u->socket, "Socket" },
+ { "ListenSequentialPacket", config_parse_listen, 0, &u->socket, "Socket" },
+ { "ListenFIFO", config_parse_listen, 0, &u->socket, "Socket" },
+ { "BindIPv6Only", config_parse_socket_bind, 0, &u->socket, "Socket" },
+ { "Backlog", config_parse_unsigned, 0, &u->socket.backlog, "Socket" },
+ { "BindToDevice", config_parse_bindtodevice, 0, &u->socket, "Socket" },
+ { "ExecStartPre", config_parse_exec, 0, u->socket.exec_command+SOCKET_EXEC_START_PRE, "Socket" },
+ { "ExecStartPost", config_parse_exec, 0, u->socket.exec_command+SOCKET_EXEC_START_POST, "Socket" },
+ { "ExecStopPre", config_parse_exec, 0, u->socket.exec_command+SOCKET_EXEC_STOP_PRE, "Socket" },
+ { "ExecStopPost", config_parse_exec, 0, u->socket.exec_command+SOCKET_EXEC_STOP_POST, "Socket" },
+ { "TimeoutSec", config_parse_usec, 0, &u->socket.timeout_usec, "Socket" },
+ { "DirectoryMode", config_parse_mode, 0, &u->socket.directory_mode, "Socket" },
+ { "SocketMode", config_parse_mode, 0, &u->socket.socket_mode, "Socket" },
+ { "Accept", config_parse_bool, 0, &u->socket.accept, "Socket" },
+ { "MaxConnections", config_parse_unsigned, 0, &u->socket.max_connections, "Socket" },
+ { "KeepAlive", config_parse_bool, 0, &u->socket.keep_alive, "Socket" },
+ { "Priority", config_parse_int, 0, &u->socket.priority, "Socket" },
+ { "ReceiveBuffer", config_parse_size, 0, &u->socket.receive_buffer, "Socket" },
+ { "SendBuffer", config_parse_size, 0, &u->socket.send_buffer, "Socket" },
+ { "IPTOS", config_parse_ip_tos, 0, &u->socket.ip_tos, "Socket" },
+ { "IPTTL", config_parse_int, 0, &u->socket.ip_ttl, "Socket" },
+ { "Mark", config_parse_int, 0, &u->socket.mark, "Socket" },
+ { "PipeSize", config_parse_size, 0, &u->socket.pipe_size, "Socket" },
+ { "FreeBind", config_parse_bool, 0, &u->socket.free_bind, "Socket" },
+ { "TCPCongestion", config_parse_string, 0, &u->socket.tcp_congestion, "Socket" },
+ { "Service", config_parse_socket_service, 0, &u->socket, "Socket" },
EXEC_CONTEXT_CONFIG_ITEMS(u->socket.exec_context, "Socket"),
- { "What", config_parse_string, &u->mount.parameters_fragment.what, "Mount" },
- { "Where", config_parse_path, &u->mount.where, "Mount" },
- { "Options", config_parse_string, &u->mount.parameters_fragment.options, "Mount" },
- { "Type", config_parse_string, &u->mount.parameters_fragment.fstype, "Mount" },
- { "TimeoutSec", config_parse_usec, &u->mount.timeout_usec, "Mount" },
- { "DirectoryMode", config_parse_mode, &u->mount.directory_mode, "Mount" },
+ { "What", config_parse_string, 0, &u->mount.parameters_fragment.what, "Mount" },
+ { "Where", config_parse_path, 0, &u->mount.where, "Mount" },
+ { "Options", config_parse_string, 0, &u->mount.parameters_fragment.options, "Mount" },
+ { "Type", config_parse_string, 0, &u->mount.parameters_fragment.fstype, "Mount" },
+ { "TimeoutSec", config_parse_usec, 0, &u->mount.timeout_usec, "Mount" },
+ { "DirectoryMode", config_parse_mode, 0, &u->mount.directory_mode, "Mount" },
EXEC_CONTEXT_CONFIG_ITEMS(u->mount.exec_context, "Mount"),
- { "Where", config_parse_path, &u->automount.where, "Automount" },
- { "DirectoryMode", config_parse_mode, &u->automount.directory_mode, "Automount" },
+ { "Where", config_parse_path, 0, &u->automount.where, "Automount" },
+ { "DirectoryMode", config_parse_mode, 0, &u->automount.directory_mode, "Automount" },
- { "What", config_parse_path, &u->swap.parameters_fragment.what, "Swap" },
- { "Priority", config_parse_int, &u->swap.parameters_fragment.priority, "Swap" },
- { "TimeoutSec", config_parse_usec, &u->swap.timeout_usec, "Swap" },
+ { "What", config_parse_path, 0, &u->swap.parameters_fragment.what, "Swap" },
+ { "Priority", config_parse_int, 0, &u->swap.parameters_fragment.priority, "Swap" },
+ { "TimeoutSec", config_parse_usec, 0, &u->swap.timeout_usec, "Swap" },
EXEC_CONTEXT_CONFIG_ITEMS(u->swap.exec_context, "Swap"),
- { "OnActiveSec", config_parse_timer, &u->timer, "Timer" },
- { "OnBootSec", config_parse_timer, &u->timer, "Timer" },
- { "OnStartupSec", config_parse_timer, &u->timer, "Timer" },
- { "OnUnitActiveSec", config_parse_timer, &u->timer, "Timer" },
- { "OnUnitInactiveSec", config_parse_timer, &u->timer, "Timer" },
- { "Unit", config_parse_timer_unit, &u->timer, "Timer" },
+ { "OnActiveSec", config_parse_timer, 0, &u->timer, "Timer" },
+ { "OnBootSec", config_parse_timer, 0, &u->timer, "Timer" },
+ { "OnStartupSec", config_parse_timer, 0, &u->timer, "Timer" },
+ { "OnUnitActiveSec", config_parse_timer, 0, &u->timer, "Timer" },
+ { "OnUnitInactiveSec", config_parse_timer, 0, &u->timer, "Timer" },
+ { "Unit", config_parse_timer_unit, 0, &u->timer, "Timer" },
- { "PathExists", config_parse_path_spec, &u->path, "Path" },
- { "PathChanged", config_parse_path_spec, &u->path, "Path" },
- { "DirectoryNotEmpty", config_parse_path_spec, &u->path, "Path" },
- { "Unit", config_parse_path_unit, &u->path, "Path" },
+ { "PathExists", config_parse_path_spec, 0, &u->path, "Path" },
+ { "PathChanged", config_parse_path_spec, 0, &u->path, "Path" },
+ { "DirectoryNotEmpty", config_parse_path_spec, 0, &u->path, "Path" },
+ { "Unit", config_parse_path_unit, 0, &u->path, "Path" },
/* The [Install] section is ignored here. */
- { "Alias", NULL, NULL, "Install" },
- { "WantedBy", NULL, NULL, "Install" },
- { "Also", NULL, NULL, "Install" },
+ { "Alias", NULL, 0, NULL, "Install" },
+ { "WantedBy", NULL, 0, NULL, "Install" },
+ { "Also", NULL, 0, NULL, "Install" },
- { NULL, NULL, NULL, NULL }
+ { NULL, NULL, 0, NULL, NULL }
};
#undef EXEC_CONTEXT_CONFIG_ITEMS
diff --git a/src/machine-id-setup.c b/src/machine-id-setup.c
index 59a1424..98e288e 100644
--- a/src/machine-id-setup.c
+++ b/src/machine-id-setup.c
@@ -142,20 +142,20 @@ int machine_id_setup(void) {
fd = -1;
/* Hmm, we couldn't write it? So let's write it to
- * /dev/.run/systemd/machine-id as a replacement */
+ * /run/systemd/machine-id as a replacement */
- mkdir_p("/dev/.run/systemd", 0755);
+ mkdir_p("/run/systemd", 0755);
- if ((r = write_one_line_file("/dev/.run/systemd/machine-id", id)) < 0) {
- log_error("Cannot write /dev/.run/systemd/machine-id: %s", strerror(-r));
+ if ((r = write_one_line_file("/run/systemd/machine-id", id)) < 0) {
+ log_error("Cannot write /run/systemd/machine-id: %s", strerror(-r));
- unlink("/dev/.run/systemd/machine-id");
+ unlink("/run/systemd/machine-id");
goto finish;
}
/* And now, let's mount it over */
- r = mount("/dev/.run/systemd/machine-id", "/etc/machine-id", "bind", MS_BIND|MS_RDONLY, NULL) < 0 ? -errno : 0;
- unlink("/dev/.run/systemd/machine-id");
+ r = mount("/run/systemd/machine-id", "/etc/machine-id", "bind", MS_BIND|MS_RDONLY, NULL) < 0 ? -errno : 0;
+ unlink("/run/systemd/machine-id");
if (r < 0)
log_error("Failed to mount /etc/machine-id: %s", strerror(-r));
diff --git a/src/main.c b/src/main.c
index 7edd6b5..b7c2400 100644
--- a/src/main.c
+++ b/src/main.c
@@ -494,24 +494,24 @@ static DEFINE_CONFIG_PARSE_ENUM(config_parse_output, exec_output, ExecOutput, "F
static int parse_config_file(void) {
const ConfigItem items[] = {
- { "LogLevel", config_parse_level, NULL, "Manager" },
- { "LogTarget", config_parse_target, NULL, "Manager" },
- { "LogColor", config_parse_color, NULL, "Manager" },
- { "LogLocation", config_parse_location, NULL, "Manager" },
- { "DumpCore", config_parse_bool, &arg_dump_core, "Manager" },
- { "CrashShell", config_parse_bool, &arg_crash_shell, "Manager" },
- { "ShowStatus", config_parse_bool, &arg_show_status, "Manager" },
+ { "LogLevel", config_parse_level, 0, NULL, "Manager" },
+ { "LogTarget", config_parse_target, 0, NULL, "Manager" },
+ { "LogColor", config_parse_color, 0, NULL, "Manager" },
+ { "LogLocation", config_parse_location, 0, NULL, "Manager" },
+ { "DumpCore", config_parse_bool, 0, &arg_dump_core, "Manager" },
+ { "CrashShell", config_parse_bool, 0, &arg_crash_shell, "Manager" },
+ { "ShowStatus", config_parse_bool, 0, &arg_show_status, "Manager" },
#ifdef HAVE_SYSV_COMPAT
- { "SysVConsole", config_parse_bool, &arg_sysv_console, "Manager" },
+ { "SysVConsole", config_parse_bool, 0, &arg_sysv_console, "Manager" },
#endif
- { "CrashChVT", config_parse_int, &arg_crash_chvt, "Manager" },
- { "CPUAffinity", config_parse_cpu_affinity, NULL, "Manager" },
- { "MountAuto", config_parse_bool, &arg_mount_auto, "Manager" },
- { "SwapAuto", config_parse_bool, &arg_swap_auto, "Manager" },
- { "DefaultControllers", config_parse_strv, &arg_default_controllers, "Manager" },
- { "DefaultStandardOutput", config_parse_output, &arg_default_std_output, "Manager" },
- { "DefaultStandardError", config_parse_output, &arg_default_std_error, "Manager" },
- { NULL, NULL, NULL, NULL }
+ { "CrashChVT", config_parse_int, 0, &arg_crash_chvt, "Manager" },
+ { "CPUAffinity", config_parse_cpu_affinity, 0, NULL, "Manager" },
+ { "MountAuto", config_parse_bool, 0, &arg_mount_auto, "Manager" },
+ { "SwapAuto", config_parse_bool, 0, &arg_swap_auto, "Manager" },
+ { "DefaultControllers", config_parse_strv, 0, &arg_default_controllers, "Manager" },
+ { "DefaultStandardOutput", config_parse_output, 0, &arg_default_std_output, "Manager" },
+ { "DefaultStandardError", config_parse_output, 0, &arg_default_std_error, "Manager" },
+ { NULL, NULL, 0, NULL, NULL }
};
static const char * const sections[] = {
@@ -1074,7 +1074,7 @@ int main(int argc, char *argv[]) {
/* If Plymouth is being run make sure we show the status, so
* that there's something nice to see when people press Esc */
- if (access("/dev/.run/initramfs/plymouth", F_OK) >= 0)
+ if (access("/run/initramfs/plymouth", F_OK) >= 0)
arg_show_status = true;
if (arg_action == ACTION_HELP) {
diff --git a/src/manager.c b/src/manager.c
index a9aaee3..69d231a 100644
--- a/src/manager.c
+++ b/src/manager.c
@@ -66,7 +66,7 @@
#define GC_QUEUE_USEC_MAX (10*USEC_PER_SEC)
/* Where clients shall send notification messages to */
-#define NOTIFY_SOCKET_SYSTEM "/dev/.run/systemd/notify"
+#define NOTIFY_SOCKET_SYSTEM "/run/systemd/notify"
#define NOTIFY_SOCKET_USER "@/org/freedesktop/systemd1/notify"
static int manager_setup_notify(Manager *m) {
@@ -2592,7 +2592,7 @@ int manager_open_serialization(Manager *m, FILE **_f) {
assert(_f);
if (m->running_as == MANAGER_SYSTEM)
- asprintf(&path, "/dev/.run/systemd/dump-%lu-XXXXXX", (unsigned long) getpid());
+ asprintf(&path, "/run/systemd/dump-%lu-XXXXXX", (unsigned long) getpid());
else
asprintf(&path, "/tmp/systemd-dump-%lu-XXXXXX", (unsigned long) getpid());
@@ -2895,7 +2895,7 @@ void manager_run_generators(Manager *m) {
if (!m->generator_unit_path) {
char *p;
- char system_path[] = "/dev/.run/systemd/generator-XXXXXX",
+ char system_path[] = "/run/systemd/generator-XXXXXX",
user_path[] = "/tmp/systemd-generator-XXXXXX";
if (!(p = mkdtemp(m->running_as == MANAGER_SYSTEM ? system_path : user_path))) {
diff --git a/src/mount-setup.c b/src/mount-setup.c
index d740d4f..056e4a1 100644
--- a/src/mount-setup.c
+++ b/src/mount-setup.c
@@ -54,7 +54,7 @@ static const MountPoint mount_table[] = {
{ "devtmpfs", "/dev", "devtmpfs", "mode=755", MS_NOSUID, true },
{ "tmpfs", "/dev/shm", "tmpfs", "mode=1777", MS_NOSUID|MS_NODEV, true },
{ "devpts", "/dev/pts", "devpts", "mode=620,gid=" STRINGIFY(TTY_GID), MS_NOSUID|MS_NOEXEC, false },
- { "tmpfs", "/dev/.run", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV, true },
+ { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV, true },
{ "tmpfs", "/sys/fs/cgroup", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV, true },
{ "cgroup", "/sys/fs/cgroup/systemd", "cgroup", "none,name=systemd", MS_NOSUID|MS_NOEXEC|MS_NODEV, true },
};
@@ -253,8 +253,8 @@ int mount_setup(void) {
symlink_and_label(j, k);
/* Create a few directories we always want around */
- mkdir("/dev/.run/systemd", 0755);
- mkdir("/dev/.run/systemd/ask-password", 0755);
+ mkdir("/run/systemd", 0755);
+ mkdir("/run/systemd/ask-password", 0755);
return mount_cgroup_controllers();
}
diff --git a/src/mount.c b/src/mount.c
index 9986717..cc49b19 100644
--- a/src/mount.c
+++ b/src/mount.c
@@ -844,6 +844,10 @@ static void mount_enter_mounting(Mount *m) {
mkdir_p(m->where, m->directory_mode);
+ /* create the source directory for bind-mounts if needed */
+ if (m->parameters_fragment.fstype && strcmp(m->parameters_fragment.fstype, "bind") == 0)
+ mkdir_p(m->parameters_fragment.what, m->directory_mode);
+
if (m->from_fragment)
r = exec_command_set(
m->control_command,
diff --git a/src/nspawn.c b/src/nspawn.c
index aaa5d1f..6b0ba4e 100644
--- a/src/nspawn.c
+++ b/src/nspawn.c
@@ -117,7 +117,7 @@ static int mount_all(const char *dest) {
{ "sysfs", "/sys", "sysfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_RDONLY, true },
{ "tmpfs", "/dev", "tmpfs", "mode=755", MS_NOSUID, true },
{ "/dev/pts", "/dev/pts", "bind", NULL, MS_BIND, true },
- { "tmpfs", "/dev/.run", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV, true },
+ { "tmpfs", "/run", "tmpfs", "mode=755", MS_NOSUID|MS_NOEXEC|MS_NODEV, true },
#ifdef HAVE_SELINUX
{ "selinux", "/selinux", "selinuxfs", NULL, MS_NOSUID|MS_NOEXEC|MS_NODEV|MS_RDONLY, false },
#endif
diff --git a/src/path-lookup.c b/src/path-lookup.c
index 922e722..fff9304 100644
--- a/src/path-lookup.c
+++ b/src/path-lookup.c
@@ -183,7 +183,7 @@ int lookup_paths_init(LookupPaths *p, ManagerRunningAs running_as) {
if (!(p->unit_path = strv_new(
/* If you modify this you also want to modify
* systemdsystemunitpath= in systemd.pc.in! */
- "/dev/.run/systemd/system",
+ "/run/systemd/system",
SYSTEM_CONFIG_UNIT_PATH,
"/etc/systemd/system",
"/usr/local/share/systemd/system",
diff --git a/src/quotacheck.c b/src/quotacheck.c
index 057d861..c7b20a6 100644
--- a/src/quotacheck.c
+++ b/src/quotacheck.c
@@ -97,7 +97,7 @@ int main(int argc, char *argv[]) {
if (arg_skip)
return 0;
- if (access("/dev/.run/systemd/quotacheck", F_OK) < 0)
+ if (access("/run/systemd/quotacheck", F_OK) < 0)
return 0;
}
diff --git a/src/readahead-collect.c b/src/readahead-collect.c
index ca82271..7028db5 100644
--- a/src/readahead-collect.c
+++ b/src/readahead-collect.c
@@ -289,13 +289,13 @@ static int collect(const char *root) {
log_debug("Collecting...");
- if (access("/dev/.run/systemd/readahead/cancel", F_OK) >= 0) {
+ if (access("/run/systemd/readahead/cancel", F_OK) >= 0) {
log_debug("Collection canceled");
r = -ECANCELED;
goto finish;
}
- if (access("/dev/.run/systemd/readahead/done", F_OK) >= 0) {
+ if (access("/run/systemd/readahead/done", F_OK) >= 0) {
log_debug("Got termination request");
goto done;
}
diff --git a/src/readahead-common.c b/src/readahead-common.c
index 990ffd4..fc49a33 100644
--- a/src/readahead-common.c
+++ b/src/readahead-common.c
@@ -167,11 +167,11 @@ int open_inotify(void) {
return -errno;
}
- mkdir("/dev/.run/systemd", 0755);
- mkdir("/dev/.run/systemd/readahead", 0755);
+ mkdir("/run/systemd", 0755);
+ mkdir("/run/systemd/readahead", 0755);
- if (inotify_add_watch(fd, "/dev/.run/systemd/readahead", IN_CREATE) < 0) {
- log_error("Failed to watch /dev/.run/systemd/readahead: %m");
+ if (inotify_add_watch(fd, "/run/systemd/readahead", IN_CREATE) < 0) {
+ log_error("Failed to watch /run/systemd/readahead: %m");
close_nointr_nofail(fd);
return -errno;
}
@@ -183,10 +183,10 @@ ReadaheadShared *shared_get(void) {
int fd;
ReadaheadShared *m = NULL;
- mkdir("/dev/.run/systemd", 0755);
- mkdir("/dev/.run/systemd/readahead", 0755);
+ mkdir("/run/systemd", 0755);
+ mkdir("/run/systemd/readahead", 0755);
- if ((fd = open("/dev/.run/systemd/readahead/shared", O_CREAT|O_RDWR|O_CLOEXEC, 0644)) < 0) {
+ if ((fd = open("/run/systemd/readahead/shared", O_CREAT|O_RDWR|O_CLOEXEC, 0644)) < 0) {
log_error("Failed to create shared memory segment: %m");
goto finish;
}
diff --git a/src/readahead-replay.c b/src/readahead-replay.c
index d2de7ef..2ac3143 100644
--- a/src/readahead-replay.c
+++ b/src/readahead-replay.c
@@ -192,7 +192,7 @@ static int replay(const char *root) {
log_debug("Replaying...");
- if (access("/dev/.run/systemd/readahead/noreplay", F_OK) >= 0) {
+ if (access("/run/systemd/readahead/noreplay", F_OK) >= 0) {
log_debug("Got termination request");
goto done;
}
diff --git a/src/sd-readahead.c b/src/sd-readahead.c
index 0dfe4ab..c5cfe67 100644
--- a/src/sd-readahead.c
+++ b/src/sd-readahead.c
@@ -42,8 +42,8 @@ static int touch(const char *path) {
#if !defined(DISABLE_SYSTEMD) && defined(__linux__)
int fd;
- mkdir("/dev/.run/systemd", 0755);
- mkdir("/dev/.run/systemd/readahead", 0755);
+ mkdir("/run/systemd", 0755);
+ mkdir("/run/systemd/readahead", 0755);
if ((fd = open(path, O_WRONLY|O_CREAT|O_CLOEXEC|O_NOCTTY, 0666)) < 0)
return -errno;
@@ -66,11 +66,11 @@ int sd_readahead(const char *action) {
return -EINVAL;
if (strcmp(action, "cancel") == 0)
- return touch("/dev/.run/systemd/readahead/cancel");
+ return touch("/run/systemd/readahead/cancel");
else if (strcmp(action, "done") == 0)
- return touch("/dev/.run/systemd/readahead/done");
+ return touch("/run/systemd/readahead/done");
else if (strcmp(action, "noreplay") == 0)
- return touch("/dev/.run/systemd/readahead/noreplay");
+ return touch("/run/systemd/readahead/noreplay");
return -EINVAL;
}
diff --git a/src/systemctl.c b/src/systemctl.c
index 5e34d03..4879b29 100644
--- a/src/systemctl.c
+++ b/src/systemctl.c
@@ -4023,11 +4023,11 @@ finish:
static int install_info_apply(const char *verb, LookupPaths *paths, InstallInfo *i, const char *config_path) {
const ConfigItem items[] = {
- { "Alias", config_parse_strv, &i->aliases, "Install" },
- { "WantedBy", config_parse_strv, &i->wanted_by, "Install" },
- { "Also", config_parse_also, NULL, "Install" },
+ { "Alias", config_parse_strv, 0, &i->aliases, "Install" },
+ { "WantedBy", config_parse_strv, 0, &i->wanted_by, "Install" },
+ { "Also", config_parse_also, 0, NULL, "Install" },
- { NULL, NULL, NULL, NULL }
+ { NULL, NULL, 0, NULL, NULL }
};
char **p;
@@ -5366,7 +5366,7 @@ static int send_shutdownd(usec_t t, char mode, bool warn, const char *message) {
zero(sockaddr);
sockaddr.sa.sa_family = AF_UNIX;
sockaddr.un.sun_path[0] = 0;
- strncpy(sockaddr.un.sun_path, "/dev/.run/systemd/shutdownd", sizeof(sockaddr.un.sun_path));
+ strncpy(sockaddr.un.sun_path, "/run/systemd/shutdownd", sizeof(sockaddr.un.sun_path));
zero(iovec);
iovec.iov_base = (char*) &c;
@@ -5374,7 +5374,7 @@ static int send_shutdownd(usec_t t, char mode, bool warn, const char *message) {
zero(msghdr);
msghdr.msg_name = &sockaddr;
- msghdr.msg_namelen = offsetof(struct sockaddr_un, sun_path) + sizeof("/dev/.run/systemd/shutdownd") - 1;
+ msghdr.msg_namelen = offsetof(struct sockaddr_un, sun_path) + sizeof("/run/systemd/shutdownd") - 1;
msghdr.msg_iov = &iovec;
msghdr.msg_iovlen = 1;
diff --git a/src/tty-ask-password-agent.c b/src/tty-ask-password-agent.c
index 2c854fa..dcf4b33 100644
--- a/src/tty-ask-password-agent.c
+++ b/src/tty-ask-password-agent.c
@@ -251,12 +251,12 @@ static int parse_password(const char *filename, char **wall) {
bool accept_cached = false;
const ConfigItem items[] = {
- { "Socket", config_parse_string, &socket_name, "Ask" },
- { "NotAfter", config_parse_uint64, ¬_after, "Ask" },
- { "Message", config_parse_string, &message, "Ask" },
- { "PID", config_parse_unsigned, &pid, "Ask" },
- { "AcceptCached", config_parse_bool, &accept_cached, "Ask" },
- { NULL, NULL, NULL, NULL }
+ { "Socket", config_parse_string, 0, &socket_name, "Ask" },
+ { "NotAfter", config_parse_uint64, 0, ¬_after, "Ask" },
+ { "Message", config_parse_string, 0, &message, "Ask" },
+ { "PID", config_parse_unsigned, 0, &pid, "Ask" },
+ { "AcceptCached", config_parse_bool, 0, &accept_cached, "Ask" },
+ { NULL, NULL, 0, NULL, NULL }
};
FILE *f;
@@ -431,7 +431,7 @@ static int wall_tty_block(void) {
if ((r = get_ctty_devnr(&devnr)) < 0)
return -r;
- if (asprintf(&p, "/dev/.run/systemd/ask-password-block/%u:%u", major(devnr), minor(devnr)) < 0)
+ if (asprintf(&p, "/run/systemd/ask-password-block/%u:%u", major(devnr), minor(devnr)) < 0)
return -ENOMEM;
mkdir_parents(p, 0700);
@@ -475,7 +475,7 @@ static bool wall_tty_match(const char *path) {
* advantage that the block will automatically go away if the
* process dies. */
- if (asprintf(&p, "/dev/.run/systemd/ask-password-block/%u:%u", major(st.st_rdev), minor(st.st_rdev)) < 0)
+ if (asprintf(&p, "/run/systemd/ask-password-block/%u:%u", major(st.st_rdev), minor(st.st_rdev)) < 0)
return true;
fd = open(p, O_WRONLY|O_CLOEXEC|O_NONBLOCK|O_NOCTTY);
@@ -494,7 +494,7 @@ static int show_passwords(void) {
struct dirent *de;
int r = 0;
- if (!(d = opendir("/dev/.run/systemd/ask-password"))) {
+ if (!(d = opendir("/run/systemd/ask-password"))) {
if (errno == ENOENT)
return 0;
@@ -519,7 +519,7 @@ static int show_passwords(void) {
if (!startswith(de->d_name, "ask."))
continue;
- if (!(p = strappend("/dev/.run/systemd/ask-password/", de->d_name))) {
+ if (!(p = strappend("/run/systemd/ask-password/", de->d_name))) {
log_error("Out of memory");
r = -ENOMEM;
goto finish;
@@ -558,14 +558,14 @@ static int watch_passwords(void) {
tty_block_fd = wall_tty_block();
- mkdir_p("/dev/.run/systemd/ask-password", 0755);
+ mkdir_p("/run/systemd/ask-password", 0755);
if ((notify = inotify_init1(IN_CLOEXEC)) < 0) {
r = -errno;
goto finish;
}
- if (inotify_add_watch(notify, "/dev/.run/systemd/ask-password", IN_CLOSE_WRITE|IN_MOVED_TO) < 0) {
+ if (inotify_add_watch(notify, "/run/systemd/ask-password", IN_CLOSE_WRITE|IN_MOVED_TO) < 0) {
r = -errno;
goto finish;
}
diff --git a/systemd.pc.in b/systemd.pc.in
index f962b58..6a843fb 100644
--- a/systemd.pc.in
+++ b/systemd.pc.in
@@ -11,7 +11,7 @@ systemdsystemunitdir=@systemunitdir@
systemduserunitdir=@pkgdatadir@/user
systemdsystemconfdir=@pkgsysconfdir@/system
systemduserconfdir=@pkgsysconfdir@/user
-systemdsystemunitpath=/dev/.run/systemd/system:${systemdsystemconfdir}:/etc/systemd/system:/usr/local/share/systemd/system:/usr/share/systemd/system:/lib/systemd/system:${systemdsystemunitdir}
+systemdsystemunitpath=/run/systemd/system:${systemdsystemconfdir}:/etc/systemd/system:/usr/local/share/systemd/system:/usr/share/systemd/system:/lib/systemd/system:${systemdsystemunitdir}
Name: systemd
Description: systemd System and Service Manager
diff --git a/tmpfiles.d/systemd.conf b/tmpfiles.d/systemd.conf
index 880a6ed..2d8e520 100644
--- a/tmpfiles.d/systemd.conf
+++ b/tmpfiles.d/systemd.conf
@@ -7,9 +7,10 @@
# See tmpfiles.d(5) for details
-d /var/lock/subsys 0755 root root -
-d /var/run/user 0755 root root 10d
-F /var/run/utmp 0664 root utmp -
+d /run/lock 0755 root lock -
+d /run/lock/subsys 0755 root root -
+d /run/user 0755 root root 10d
+F /run/utmp 0664 root utmp -
f /var/log/wtmp 0664 root utmp -
f /var/log/btmp 0600 root utmp -
diff --git a/units/fsck-root.service.in b/units/fsck-root.service.in
index ae6ea92..8f4adc4 100644
--- a/units/fsck-root.service.in
+++ b/units/fsck-root.service.in
@@ -12,7 +12,7 @@ After=systemd-readahead-collect.service systemd-readahead-replay.service
Before=local-fs.target shutdown.target remount-rootfs.service quotacheck.service
# Dracut informs us with this flag file if the root fsck was already run
-ConditionPathExists=!/dev/.run/initramfs/root-fsck
+ConditionPathExists=!/run/initramfs/root-fsck
[Service]
Type=oneshot
diff --git a/units/plymouth-start.service b/units/plymouth-start.service
index 4ef2bcc..eb336e6 100644
--- a/units/plymouth-start.service
+++ b/units/plymouth-start.service
@@ -13,7 +13,7 @@ After=systemd-vconsole-setup.service udev-settle.service
Before=systemd-ask-password-plymouth.service
# Dracut informs us with this flag file if plymouth is already running
-ConditionPathExists=!/dev/.run/initramfs/plymouth
+ConditionPathExists=!/run/initramfs/plymouth
[Service]
ExecStart=/sbin/plymouthd --mode=boot
diff --git a/units/systemd-ask-password-console.path b/units/systemd-ask-password-console.path
index ac76fc1..4005a27 100644
--- a/units/systemd-ask-password-console.path
+++ b/units/systemd-ask-password-console.path
@@ -12,4 +12,4 @@ Conflicts=shutdown.target
Before=basic.target shutdown.target
[Path]
-DirectoryNotEmpty=/dev/.run/systemd/ask-password
+DirectoryNotEmpty=/run/systemd/ask-password
diff --git a/units/systemd-ask-password-plymouth.path b/units/systemd-ask-password-plymouth.path
index b339b5e..a2aec44 100644
--- a/units/systemd-ask-password-plymouth.path
+++ b/units/systemd-ask-password-plymouth.path
@@ -12,4 +12,4 @@ Conflicts=shutdown.target systemd-ask-password-console.path systemd-ask-password
Before=basic.target shutdown.target
[Path]
-DirectoryNotEmpty=/dev/.run/systemd/ask-password
+DirectoryNotEmpty=/run/systemd/ask-password
diff --git a/units/systemd-ask-password-wall.path b/units/systemd-ask-password-wall.path
index c277563..7a883d5 100644
--- a/units/systemd-ask-password-wall.path
+++ b/units/systemd-ask-password-wall.path
@@ -12,4 +12,4 @@ Conflicts=shutdown.target
Before=basic.target shutdown.target
[Path]
-DirectoryNotEmpty=/dev/.run/systemd/ask-password
+DirectoryNotEmpty=/run/systemd/ask-password
diff --git a/units/systemd-logger.socket b/units/systemd-logger.socket
index 5cf6a9b..9b2d202 100644
--- a/units/systemd-logger.socket
+++ b/units/systemd-logger.socket
@@ -13,4 +13,4 @@ DefaultDependencies=no
Before=sockets.target
[Socket]
-ListenStream=/dev/.run/systemd/logger
+ListenStream=/run/systemd/logger
diff --git a/units/systemd-shutdownd.socket b/units/systemd-shutdownd.socket
index 6faf36f..b30a665 100644
--- a/units/systemd-shutdownd.socket
+++ b/units/systemd-shutdownd.socket
@@ -13,4 +13,4 @@ DefaultDependencies=no
Before=sockets.target
[Socket]
-ListenDatagram=/dev/.run/systemd/shutdownd
+ListenDatagram=/run/systemd/shutdownd
diff --git a/units/var-lock.mount b/units/var-lock.mount
index 0ea2599..80e1bab 100644
--- a/units/var-lock.mount
+++ b/units/var-lock.mount
@@ -8,9 +8,11 @@
[Unit]
Description=Lock Directory
Before=local-fs.target
+# skip mounting if the directory does not exist or is a symlink
+ConditionPathIsDirectory=/var/lock
[Mount]
-What=tmpfs
+What=/run/lock
Where=/var/lock
-Type=tmpfs
-Options=mode=775,gid=lock,nosuid,nodev,noexec
+Type=bind
+Options=bind
diff --git a/units/var-run.mount b/units/var-run.mount
index cd3889e..c513dfe 100644
--- a/units/var-run.mount
+++ b/units/var-run.mount
@@ -8,9 +8,11 @@
[Unit]
Description=Runtime Directory
Before=local-fs.target
+# skip mounting if the directory does not exist or is a symlink
+ConditionPathIsDirectory=/var/run
[Mount]
-What=/dev/.run
+What=/run
Where=/var/run
Type=bind
Options=bind
More information about the systemd-devel
mailing list