mirror of
https://github.com/systemd/systemd.git
synced 2024-11-23 18:23:32 +08:00
use /run instead of /dev/.run
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
This commit is contained in:
parent
37f85e66e8
commit
2b583ce657
@ -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>
|
||||
|
||||
|
@ -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>
|
||||
|
||||
|
@ -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");
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -28,6 +28,7 @@
|
||||
|
||||
typedef enum ConditionType {
|
||||
CONDITION_PATH_EXISTS,
|
||||
CONDITION_PATH_IS_DIRECTORY,
|
||||
CONDITION_DIRECTORY_NOT_EMPTY,
|
||||
CONDITION_KERNEL_COMMAND_LINE,
|
||||
CONDITION_VIRTUALIZATION,
|
||||
|
@ -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) {
|
||||
|
@ -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) { \
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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,
|
||||
|
@ -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)
|
||||
|
@ -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" },
|
||||
{ "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, &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" },
|
||||
{ "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
|
||||
|
@ -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));
|
||||
|
34
src/main.c
34
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) {
|
||||
|
@ -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))) {
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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,
|
||||
|
@ -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
|
||||
|
@ -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",
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
|
@ -290,13 +290,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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
|
||||
|
@ -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 -
|
||||
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -12,4 +12,4 @@ Conflicts=shutdown.target
|
||||
Before=basic.target shutdown.target
|
||||
|
||||
[Path]
|
||||
DirectoryNotEmpty=/dev/.run/systemd/ask-password
|
||||
DirectoryNotEmpty=/run/systemd/ask-password
|
||||
|
@ -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
|
||||
|
@ -12,4 +12,4 @@ Conflicts=shutdown.target
|
||||
Before=basic.target shutdown.target
|
||||
|
||||
[Path]
|
||||
DirectoryNotEmpty=/dev/.run/systemd/ask-password
|
||||
DirectoryNotEmpty=/run/systemd/ask-password
|
||||
|
@ -13,4 +13,4 @@ DefaultDependencies=no
|
||||
Before=sockets.target
|
||||
|
||||
[Socket]
|
||||
ListenStream=/dev/.run/systemd/logger
|
||||
ListenStream=/run/systemd/logger
|
||||
|
@ -13,4 +13,4 @@ DefaultDependencies=no
|
||||
Before=sockets.target
|
||||
|
||||
[Socket]
|
||||
ListenDatagram=/dev/.run/systemd/shutdownd
|
||||
ListenDatagram=/run/systemd/shutdownd
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user