* add RefuseManualIsolate= (default on?)
-* nofail
+* fstab nofail
* add systemctl switch to dump transaction without executing it
* system.conf/session.conf brauch ne man page
-* sd-daemon ohne SCM_CREDENTIALS bitte
-
* exec /sbin/poweroff als PID 1 und shutdown
External:
" <property name=\"SysVRcndPath\" type=\"as\" access=\"read\"/>\n" \
" <property name=\"NotifySocket\" type=\"s\" access=\"read\"/>\n" \
" <property name=\"ControlGroupHierarchy\" type=\"s\" access=\"read\"/>\n" \
- " <property name=\"MountOnPlug\" type=\"b\" access=\"read\"/>\n" \
- " <property name=\"SwapOnPlug\" type=\"b\" access=\"read\"/>\n" \
" <property name=\"MountAuto\" type=\"b\" access=\"read\"/>\n" \
+ " <property name=\"SwapAuto\" type=\"b\" access=\"read\"/>\n" \
" </interface>\n"
#define INTROSPECTION_BEGIN \
{ "org.freedesktop.systemd1.Manager", "SysVRcndPath", bus_property_append_strv, "as", m->lookup_paths.sysvrcnd_path },
{ "org.freedesktop.systemd1.Manager", "NotifySocket", bus_property_append_string, "s", m->notify_socket },
{ "org.freedesktop.systemd1.Manager", "ControlGroupHierarchy", bus_property_append_string, "s", m->cgroup_hierarchy },
- { "org.freedesktop.systemd1.Manager", "MountOnPlug", bus_property_append_bool, "b", &m->mount_on_plug },
- { "org.freedesktop.systemd1.Manager", "SwapOnPlug", bus_property_append_bool, "b", &m->swap_on_plug },
{ "org.freedesktop.systemd1.Manager", "MountAuto", bus_property_append_bool, "b", &m->mount_auto },
+ { "org.freedesktop.systemd1.Manager", "SwapAuto", bus_property_append_bool, "b", &m->swap_auto },
{ NULL, NULL, NULL, NULL, NULL }
};
static bool arg_confirm_spawn = false;
static bool arg_show_status = true;
static bool arg_sysv_console = true;
-static bool arg_mount_on_plug = true;
-static bool arg_swap_on_plug = true;
static bool arg_mount_auto = true;
+static bool arg_swap_auto = true;
static FILE* serialization = NULL;
{ "SysVConsole", config_parse_bool, &arg_sysv_console, "Manager" },
{ "CrashChVT", config_parse_int, &arg_crash_chvt, "Manager" },
{ "CPUAffinity", config_parse_cpu_affinity, NULL, "Manager" },
- { "MountOnPlug", config_parse_bool, &arg_mount_on_plug, "Manager" },
- { "SwapOnPlug", config_parse_bool, &arg_swap_on_plug, "Manager" },
{ "MountAuto", config_parse_bool, &arg_mount_auto, "Manager" },
+ { "SwapAuto", config_parse_bool, &arg_swap_auto, "Manager" },
{ NULL, NULL, NULL, NULL }
};
m->confirm_spawn = arg_confirm_spawn;
m->show_status = arg_show_status;
m->sysv_console = arg_sysv_console;
- m->mount_on_plug = arg_mount_on_plug;
- m->swap_on_plug = arg_swap_on_plug;
m->mount_auto = arg_mount_auto;
+ m->swap_auto = arg_swap_auto;
if ((r = manager_startup(m, serialization, fds)) < 0)
log_error("Failed to fully start up daemon: %s", strerror(-r));
bool show_status;
bool confirm_spawn;
bool sysv_console;
-
- bool mount_on_plug;
- bool swap_on_plug;
bool mount_auto;
+ bool swap_auto;
int n_deserializing;
};
}
}
+static int mount_add_device_links(Mount *m) {
+ MountParameters *p;
+ bool nofail, noauto;
+
+ assert(m);
+
+ if (m->from_fragment)
+ p = &m->parameters_fragment;
+ else if (m->from_etc_fstab)
+ p = &m->parameters_etc_fstab;
+ else
+ return 0;
+
+ if (!p->what || path_equal(m->where, "/"))
+ return 0;
+
+ noauto = !!mount_test_option(p->options, MNTOPT_NOAUTO);
+ nofail = !!mount_test_option(p->options, "nofail");
+
+ return unit_add_node_link(UNIT(m), p->what,
+ !noauto && nofail &&
+ UNIT(m)->meta.manager->running_as == MANAGER_SYSTEM);
+}
+
static int mount_add_default_dependencies(Mount *m) {
int r;
else if (m->from_proc_self_mountinfo && m->parameters_proc_self_mountinfo.what)
what = m->parameters_proc_self_mountinfo.what;
- if (what && !path_equal(m->where, "/"))
- if ((r = unit_add_node_link(u, what,
- u->meta.manager->running_as == MANAGER_SYSTEM &&
- u->meta.manager->mount_on_plug)) < 0)
- return r;
+ if ((r = mount_add_device_links(m)) < 0)
+ return r;
if ((r = mount_add_mount_links(m)) < 0)
return r;
what,
pri,
!!mount_test_option(me->mnt_opts, MNTOPT_NOAUTO),
+ !!mount_test_option(me->mnt_opts, "nofail"),
!!mount_test_option(me->mnt_opts, "comment=systemd.swapon"),
false);
} else
if ((r = manager_load_unit(s->meta.manager, SPECIAL_SWAP_TARGET, NULL, NULL, &tu)) < 0)
return r;
- if (!p->noauto && p->handle && s->meta.manager->running_as == MANAGER_SYSTEM)
+ if (!p->noauto && (p->handle || s->meta.manager->swap_auto) && s->meta.manager->running_as == MANAGER_SYSTEM)
if ((r = unit_add_dependency(tu, UNIT_WANTS, UNIT(s), true)) < 0)
return r;
return unit_add_dependency(UNIT(s), UNIT_BEFORE, tu, true);
}
+static int swap_add_device_links(Swap *s) {
+ SwapParameters *p;
+
+ assert(s);
+
+ if (!s->what)
+ return 0;
+
+ if (s->from_fragment)
+ p = &s->parameters_fragment;
+ else if (s->from_etc_fstab)
+ p = &s->parameters_etc_fstab;
+ else
+ return 0;
+
+ return unit_add_node_link(UNIT(s), s->what,
+ !p->noauto && p->nofail &&
+ s->meta.manager->running_as == MANAGER_SYSTEM);
+}
+
static int swap_add_default_dependencies(Swap *s) {
int r;
if ((r = unit_set_description(u, s->what)) < 0)
return r;
- if ((r = unit_add_node_link(u, s->what,
- u->meta.manager->running_as == MANAGER_SYSTEM &&
- u->meta.manager->swap_on_plug)) < 0)
+
+ if ((r = swap_add_device_links(s)) < 0)
return r;
if ((r = swap_add_mount_links(s)) < 0)
const char *what,
int priority,
bool noauto,
+ bool nofail,
bool handle,
bool from_proc_swaps) {
Unit *u = NULL;
p->priority = priority;
p->noauto = noauto;
+ p->nofail = nofail;
p->handle = handle;
if (delete)
"%sWhat: %s\n"
"%sPriority: %i\n"
"%sNoAuto: %s\n"
+ "%sNoFail: %s\n"
"%sHandle: %s\n"
"%sFrom /etc/fstab: %s\n"
"%sFrom /proc/swaps: %s\n"
prefix, s->what,
prefix, p->priority,
prefix, yes_no(p->noauto),
+ prefix, yes_no(p->nofail),
prefix, yes_no(p->handle),
prefix, yes_no(s->from_etc_fstab),
prefix, yes_no(s->from_proc_swaps),
if (!d)
return -ENOMEM;
- k = swap_add_one(m, d, prio, false, false, true);
+ k = swap_add_one(m, d, prio, false, false, false, true);
free(d);
if (k < 0)
char *what;
int priority;
bool noauto:1;
+ bool nofail:1;
bool handle:1;
} SwapParameters;
extern const UnitVTable swap_vtable;
-int swap_add_one(Manager *m, const char *what, int prio, bool no_auto, bool handle, bool from_proc_swap);
+int swap_add_one(Manager *m, const char *what, int prio, bool no_auto, bool no_fail, bool handle, bool from_proc_swap);
int swap_add_one_mount_link(Swap *s, Mount *m);
#SysVConsole=yes
#CrashChVT=1
#CPUAffinity=1 2
-#MountOnPlug=yes
-#SwapOnPlug=yes
#MountAuto=yes
+#SwapAuto=yes