* save/restore tool for SysV as requested by FPC
+* optionally create watched directories in .path units
+
Features:
* consider services with no [Install] section and stored in /lib enabled by "systemctl is-enabled"
+* store time when conditions where checked to inform admins about whether a unit was considered at all
+
* consider services with any kind of link in /etc/systemd/system enabled
* show failure error string in "systemctl status"
reference implementation.</para>
<para>Internally, this function creates a file in
- <filename>/dev/.systemd/readahead/</filename> which is
+ <filename>/dev/.run/systemd/readahead/</filename> which is
then used as flag file to notify the read-ahead
subsystem.</para>
zero(sa);
sa.un.sun_family = AF_UNIX;
- snprintf(sa.un.sun_path, sizeof(sa.un.sun_path)-1, "/dev/.systemd/ask-password/sck.%llu", random_ull());
+ snprintf(sa.un.sun_path, sizeof(sa.un.sun_path)-1, "/dev/.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;
_FD_MAX
};
- char temp[] = "/dev/.systemd/ask-password/tmp.XXXXXX";
+ char temp[] = "/dev/.run/systemd/ask-password/tmp.XXXXXX";
char final[sizeof(temp)] = "";
int fd = -1, r;
FILE *f = NULL;
assert(_passphrases);
- mkdir_p("/dev/.systemd/ask-password", 0755);
+ mkdir_p("/dev/.run/systemd/ask-password", 0755);
if ((fd = mkostemp(temp, O_CLOEXEC|O_CREAT|O_WRONLY)) < 0) {
log_error("Failed to create password file: %m");
r = EXIT_SUCCESS;
if (status.si_code == CLD_EXITED && (status.si_status & 1))
- touch("/dev/.systemd/quotacheck");
+ touch("/dev/.run/systemd/quotacheck");
finish:
if (udev_device)
GLib.Object(icon_name : "dialog-password");
set_title("System Password");
- directory = File.new_for_path("/dev/.systemd/ask-password/");
+ directory = File.new_for_path("/dev/.run/systemd/ask-password/");
file_monitor = directory.monitor_directory(0);
file_monitor.changed.connect(file_monitor_changed);
fd = -1;
/* Hmm, we couldn't write it? So let's write it to
- * /dev/.systemd/machine-id as a replacement */
+ * /dev/.run/systemd/machine-id as a replacement */
- mkdir_p("/dev/.systemd", 0755);
+ mkdir_p("/dev/.run/systemd", 0755);
- if ((r = write_one_line_file("/dev/.systemd/machine-id", id)) < 0) {
- log_error("Cannot write /dev/.systemd/machine-id: %s", strerror(-r));
+ 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));
- unlink("/dev/.systemd/machine-id");
+ unlink("/dev/.run/systemd/machine-id");
goto finish;
}
/* And now, let's mount it over */
- r = mount("/dev/.systemd/machine-id", "/etc/machine-id", "bind", MS_BIND|MS_RDONLY, NULL) < 0 ? -errno : 0;
- unlink("/dev/.systemd/machine-id");
+ 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");
if (r < 0)
log_error("Failed to mount /etc/machine-id: %s", strerror(-r));
/* 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/.systemd/plymouth", F_OK) >= 0)
+ if (access("/dev/.run/systemd/plymouth", F_OK) >= 0)
arg_show_status = true;
if (arg_action == ACTION_HELP) {
machine_id_setup();
loopback_setup();
- mkdir_p("/dev/.systemd/ask-password/", 0755);
-
test_mtab();
test_usr();
}
}
int manager_open_serialization(Manager *m, FILE **_f) {
- char *path;
+ char *path = NULL;
mode_t saved_umask;
int fd;
FILE *f;
assert(_f);
- if (m->running_as == MANAGER_SYSTEM) {
- mkdir_p("/dev/.systemd", 0755);
+ if (m->running_as == MANAGER_SYSTEM)
+ asprintf(&path, "/dev/.run/systemd/dump-%lu-XXXXXX", (unsigned long) getpid());
+ else
+ asprintf(&path, "/tmp/systemd-dump-%lu-XXXXXX", (unsigned long) getpid());
- if (asprintf(&path, "/dev/.systemd/dump-%lu-XXXXXX", (unsigned long) getpid()) < 0)
- return -ENOMEM;
- } else {
- if (asprintf(&path, "/tmp/systemd-dump-%lu-XXXXXX", (unsigned long) getpid()) < 0)
- return -ENOMEM;
- }
+ if (!path)
+ return -ENOMEM;
saved_umask = umask(0077);
fd = mkostemp(path, O_RDWR|O_CLOEXEC);
if (!m->generator_unit_path) {
char *p;
- char system_path[] = "/dev/.systemd/generator-XXXXXX",
+ char system_path[] = "/dev/.run/systemd/generator-XXXXXX",
user_path[] = "/tmp/systemd-generator-XXXXXX";
if (!(p = mkdtemp(m->running_as == MANAGER_SYSTEM ? system_path : user_path))) {
* appropriate labels, after mounting. The other virtual API
* file systems do not need. */
- if (unlink("/dev/.systemd/relabel-devtmpfs") >= 0)
+ if (unlink("/dev/.systemd-relabel-devtmpfs") >= 0)
nftw("/dev", nftw_cb, 64, FTW_MOUNT|FTW_PHYS);
/* Create a few default symlinks, which are normally created
NULSTR_FOREACH_PAIR(j, k, symlinks)
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);
+
return mount_cgroup_controllers();
}
if (!(p->unit_path = strv_new(
/* If you modify this you also want to modify
* systemdsystemunitpath= in systemd.pc.in! */
- "/dev/.systemd/system",
+ "/dev/.run/systemd/system",
SYSTEM_CONFIG_UNIT_PATH,
"/etc/systemd/system",
"/usr/local/share/systemd/system",
if (arg_skip)
return 0;
- if (access("/dev/.systemd/quotacheck", F_OK) < 0)
+ if (access("/dev/.run/systemd/quotacheck", F_OK) < 0)
return 0;
}
log_debug("Collecting...");
- if (access("/dev/.systemd/readahead/cancel", F_OK) >= 0) {
+ if (access("/dev/.run/systemd/readahead/cancel", F_OK) >= 0) {
log_debug("Collection canceled");
r = -ECANCELED;
goto finish;
}
- if (access("/dev/.systemd/readahead/done", F_OK) >= 0) {
+ if (access("/dev/.run/systemd/readahead/done", F_OK) >= 0) {
log_debug("Got termination request");
goto done;
}
return -errno;
}
- mkdir("/dev/.systemd", 0755);
- mkdir("/dev/.systemd/readahead", 0755);
+ mkdir("/dev/.run/systemd", 0755);
+ mkdir("/dev/.run/systemd/readahead", 0755);
- if (inotify_add_watch(fd, "/dev/.systemd/readahead", IN_CREATE) < 0) {
- log_error("Failed to watch /dev/.systemd/readahead: %m");
+ if (inotify_add_watch(fd, "/dev/.run/systemd/readahead", IN_CREATE) < 0) {
+ log_error("Failed to watch /dev/.run/systemd/readahead: %m");
close_nointr_nofail(fd);
return -errno;
}
int fd;
ReadaheadShared *m = NULL;
- mkdir("/dev/.systemd", 0755);
- mkdir("/dev/.systemd/readahead", 0755);
+ mkdir("/dev/.run/systemd", 0755);
+ mkdir("/dev/.run/systemd/readahead", 0755);
- if ((fd = open("/dev/.systemd/readahead/shared", O_CREAT|O_RDWR|O_CLOEXEC, 0644)) < 0) {
+ if ((fd = open("/dev/.run/systemd/readahead/shared", O_CREAT|O_RDWR|O_CLOEXEC, 0644)) < 0) {
log_error("Failed to create shared memory segment: %m");
goto finish;
}
log_debug("Replaying...");
- if (access("/dev/.systemd/readahead/noreplay", F_OK) >= 0) {
+ if (access("/dev/.run/systemd/readahead/noreplay", F_OK) >= 0) {
log_debug("Got termination request");
goto done;
}
#if !defined(DISABLE_SYSTEMD) && defined(__linux__)
int fd;
- mkdir("/dev/.systemd", 0755);
- mkdir("/dev/.systemd/readahead", 0755);
+ mkdir("/dev/.run/systemd", 0755);
+ mkdir("/dev/.run/systemd/readahead", 0755);
if ((fd = open(path, O_WRONLY|O_CREAT|O_CLOEXEC|O_NOCTTY, 0666)) < 0)
return -errno;
return -EINVAL;
if (strcmp(action, "cancel") == 0)
- return touch("/dev/.systemd/readahead/cancel");
+ return touch("/dev/.run/systemd/readahead/cancel");
else if (strcmp(action, "done") == 0)
- return touch("/dev/.systemd/readahead/done");
+ return touch("/dev/.run/systemd/readahead/done");
else if (strcmp(action, "noreplay") == 0)
- return touch("/dev/.systemd/readahead/noreplay");
+ return touch("/dev/.run/systemd/readahead/noreplay");
return -EINVAL;
}
/* Before we load the policy we create a flag file to ensure
* that after the reexec we iterate through /dev to relabel
* things. */
- mkdir_p("/dev/.systemd", 0755);
- touch("/dev/.systemd/relabel-devtmpfs");
+ touch("/dev/.systemd-relabel-devtmpfs");
if (selinux_init_load_policy(&enforce) == 0) {
log_debug("Successfully loaded SELinux policy, reexecuting.");
} else {
log_full(enforce > 0 ? LOG_ERR : LOG_WARNING, "Failed to load SELinux policy.");
- unlink("/dev/.systemd/relabel-devtmpfs");
+ unlink("/dev/.systemd-relabel-devtmpfs");
if (enforce > 0)
return -EIO;
if ((r = get_ctty_devnr(&devnr)) < 0)
return -r;
- if (asprintf(&p, "/dev/.systemd/ask-password-block/%u:%u", major(devnr), minor(devnr)) < 0)
+ if (asprintf(&p, "/dev/.run/systemd/ask-password-block/%u:%u", major(devnr), minor(devnr)) < 0)
return -ENOMEM;
mkdir_parents(p, 0700);
* advantage that the block will automatically go away if the
* process dies. */
- if (asprintf(&p, "/dev/.systemd/ask-password-block/%u:%u", major(st.st_rdev), minor(st.st_rdev)) < 0)
+ if (asprintf(&p, "/dev/.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);
struct dirent *de;
int r = 0;
- if (!(d = opendir("/dev/.systemd/ask-password"))) {
+ if (!(d = opendir("/dev/.run/systemd/ask-password"))) {
if (errno == ENOENT)
return 0;
if (!startswith(de->d_name, "ask."))
continue;
- if (!(p = strappend("/dev/.systemd/ask-password/", de->d_name))) {
+ if (!(p = strappend("/dev/.run/systemd/ask-password/", de->d_name))) {
log_error("Out of memory");
r = -ENOMEM;
goto finish;
tty_block_fd = wall_tty_block();
- mkdir_p("/dev/.systemd/ask-password", 0755);
+ mkdir_p("/dev/.run/systemd/ask-password", 0755);
if ((notify = inotify_init1(IN_CLOEXEC)) < 0) {
r = -errno;
goto finish;
}
- if (inotify_add_watch(notify, "/dev/.systemd/ask-password", IN_CLOSE_WRITE|IN_MOVED_TO) < 0) {
+ if (inotify_add_watch(notify, "/dev/.run/systemd/ask-password", IN_CLOSE_WRITE|IN_MOVED_TO) < 0) {
r = -errno;
goto finish;
}
systemduserunitdir=@pkgdatadir@/user
systemdsystemconfdir=@pkgsysconfdir@/system
systemduserconfdir=@pkgsysconfdir@/user
-systemdsystemunitpath=/dev/.systemd/system:${systemdsystemconfdir}:/etc/systemd/system:/usr/local/share/systemd/system:/usr/share/systemd/system:/lib/systemd/system:${systemdsystemunitdir}
+systemdsystemunitpath=/dev/.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
Before=basic.target shutdown.target
[Path]
-DirectoryNotEmpty=/dev/.systemd/ask-password
+DirectoryNotEmpty=/dev/.run/systemd/ask-password
Before=basic.target shutdown.target
[Path]
-DirectoryNotEmpty=/dev/.systemd/ask-password
+DirectoryNotEmpty=/dev/.run/systemd/ask-password
Before=basic.target shutdown.target
[Path]
-DirectoryNotEmpty=/dev/.systemd/ask-password
+DirectoryNotEmpty=/dev/.run/systemd/ask-password