mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-02-26 09:57:26 +03:00
fstab-generator: support fstab=/rd.fstab= kernel cmdline
This generalizes functionality already available in dracut.
This commit is contained in:
parent
2488799b35
commit
9473414219
4
TODO
4
TODO
@ -30,9 +30,7 @@ Features:
|
||||
|
||||
* exclude processes marked with argv[0][0]=@ from the normal service killing too
|
||||
|
||||
* support rd.luks= kernel cmdline params in cryptsetup generator
|
||||
|
||||
* support rd.fstab= kernel cmdline params in fstab generator
|
||||
* support rd.luks.allow-discards= kernel cmdline params in cryptsetup generator
|
||||
|
||||
* support rd.driver= kernel cmdline params in modules load
|
||||
|
||||
|
@ -240,7 +240,19 @@
|
||||
<para>Configures the LUKS
|
||||
full-disk encryption logic at
|
||||
boot. For details see
|
||||
<citerefentry><refentrytitle>cryptsetup@.service</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
|
||||
<citerefentry><refentrytitle>systemd-cryptsetup-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><varname>fstab=</varname></term>
|
||||
<term><varname>rd.fstab=</varname></term>
|
||||
|
||||
<listitem>
|
||||
<para>Configures the
|
||||
<filename>/etc/fstab</filename>
|
||||
logic at boot. For details see
|
||||
<citerefentry><refentrytitle>systemd-fstab-generator</refentrytitle><manvolnum>8</manvolnum></citerefentry>.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
|
@ -32,8 +32,10 @@
|
||||
#include "mount-setup.h"
|
||||
#include "special.h"
|
||||
#include "mkdir.h"
|
||||
#include "virt.h"
|
||||
|
||||
static const char *arg_dest = "/tmp";
|
||||
static bool arg_enabled = true;
|
||||
|
||||
static int device_name(const char *path, char **unit) {
|
||||
char *p;
|
||||
@ -492,6 +494,62 @@ finish:
|
||||
return r;
|
||||
}
|
||||
|
||||
static int parse_proc_cmdline(void) {
|
||||
char *line, *w, *state;
|
||||
int r;
|
||||
size_t l;
|
||||
|
||||
if (detect_container(NULL) > 0)
|
||||
return 0;
|
||||
|
||||
r = read_one_line_file("/proc/cmdline", &line);
|
||||
if (r < 0) {
|
||||
log_warning("Failed to read /proc/cmdline, ignoring: %s", strerror(-r));
|
||||
return 0;
|
||||
}
|
||||
|
||||
FOREACH_WORD_QUOTED(w, l, line, state) {
|
||||
char *word;
|
||||
|
||||
word = strndup(w, l);
|
||||
if (!word) {
|
||||
r = -ENOMEM;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (startswith(word, "fstab=")) {
|
||||
r = parse_boolean(word + 6);
|
||||
if (r < 0)
|
||||
log_warning("Failed to parse fstab switch %s. Ignoring.", word + 6);
|
||||
else
|
||||
arg_enabled = r;
|
||||
|
||||
} else if (startswith(word, "rd.fstab=")) {
|
||||
|
||||
if (in_initrd()) {
|
||||
r = parse_boolean(word + 6);
|
||||
if (r < 0)
|
||||
log_warning("Failed to parse fstab switch %s. Ignoring.", word + 6);
|
||||
else
|
||||
arg_enabled = r;
|
||||
}
|
||||
|
||||
} else if (startswith(word, "fstab.") ||
|
||||
(in_initrd() && startswith(word, "rd.fstab."))) {
|
||||
|
||||
log_warning("Unknown kernel switch %s. Ignoring.", word);
|
||||
}
|
||||
|
||||
free(word);
|
||||
}
|
||||
|
||||
r = 0;
|
||||
|
||||
finish:
|
||||
free(line);
|
||||
return r;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
int r;
|
||||
|
||||
@ -509,6 +567,12 @@ int main(int argc, char *argv[]) {
|
||||
|
||||
umask(0022);
|
||||
|
||||
if (parse_proc_cmdline() < 0)
|
||||
return EXIT_FAILURE;
|
||||
|
||||
if (!arg_enabled)
|
||||
return EXIT_SUCCESS;
|
||||
|
||||
r = parse_fstab();
|
||||
|
||||
return r < 0 ? EXIT_FAILURE : EXIT_SUCCESS;
|
||||
|
Loading…
x
Reference in New Issue
Block a user