mirror of
https://github.com/systemd/systemd
synced 2024-09-16 06:43:18 +00:00
firstboot: Add --kernel-command-line option
This commit is contained in:
parent
676339a191
commit
a5925354bb
|
@ -164,6 +164,15 @@
|
|||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><option>--kernel-command-line=<replaceable>CMDLINE</replaceable></option></term>
|
||||
|
||||
<listitem><para>Sets the system's kernel command line. This controls the
|
||||
<filename>/etc/kernel/cmdline</filename> file which is used by
|
||||
<citerefentry><refentrytitle>kernel-install</refentrytitle><manvolnum>8</manvolnum></citerefentry>.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term><option>--prompt-locale</option></term>
|
||||
<term><option>--prompt-keymap</option></term>
|
||||
|
|
|
@ -42,6 +42,7 @@ static char *arg_timezone = NULL;
|
|||
static char *arg_hostname = NULL;
|
||||
static sd_id128_t arg_machine_id = {};
|
||||
static char *arg_root_password = NULL;
|
||||
static char *arg_kernel_cmdline = NULL;
|
||||
static bool arg_prompt_locale = false;
|
||||
static bool arg_prompt_keymap = false;
|
||||
static bool arg_prompt_timezone = false;
|
||||
|
@ -804,6 +805,27 @@ static int process_root_password(void) {
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int process_kernel_cmdline(void) {
|
||||
const char *etc_kernel_cmdline;
|
||||
int r;
|
||||
|
||||
etc_kernel_cmdline = prefix_roota(arg_root, "/etc/kernel/cmdline");
|
||||
if (laccess(etc_kernel_cmdline, F_OK) >= 0 && !arg_force)
|
||||
return 0;
|
||||
|
||||
if (!arg_kernel_cmdline)
|
||||
return 0;
|
||||
|
||||
r = write_string_file(etc_kernel_cmdline, arg_kernel_cmdline,
|
||||
WRITE_STRING_FILE_CREATE | WRITE_STRING_FILE_SYNC | WRITE_STRING_FILE_MKDIR_0755 |
|
||||
(arg_force ? WRITE_STRING_FILE_ATOMIC : 0));
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to write %s: %m", etc_kernel_cmdline);
|
||||
|
||||
log_info("%s written.", etc_kernel_cmdline);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int help(void) {
|
||||
_cleanup_free_ char *link = NULL;
|
||||
int r;
|
||||
|
@ -862,6 +884,7 @@ static int parse_argv(int argc, char *argv[]) {
|
|||
ARG_ROOT_PASSWORD,
|
||||
ARG_ROOT_PASSWORD_FILE,
|
||||
ARG_ROOT_PASSWORD_HASHED,
|
||||
ARG_KERNEL_COMMAND_LINE,
|
||||
ARG_PROMPT,
|
||||
ARG_PROMPT_LOCALE,
|
||||
ARG_PROMPT_KEYMAP,
|
||||
|
@ -891,6 +914,7 @@ static int parse_argv(int argc, char *argv[]) {
|
|||
{ "root-password", required_argument, NULL, ARG_ROOT_PASSWORD },
|
||||
{ "root-password-file", required_argument, NULL, ARG_ROOT_PASSWORD_FILE },
|
||||
{ "root-password-hashed", required_argument, NULL, ARG_ROOT_PASSWORD_HASHED },
|
||||
{ "kernel-command-line", required_argument, NULL, ARG_KERNEL_COMMAND_LINE },
|
||||
{ "prompt", no_argument, NULL, ARG_PROMPT },
|
||||
{ "prompt-locale", no_argument, NULL, ARG_PROMPT_LOCALE },
|
||||
{ "prompt-keymap", no_argument, NULL, ARG_PROMPT_KEYMAP },
|
||||
|
@ -1010,6 +1034,13 @@ static int parse_argv(int argc, char *argv[]) {
|
|||
|
||||
break;
|
||||
|
||||
case ARG_KERNEL_COMMAND_LINE:
|
||||
r = free_and_strdup(&arg_kernel_cmdline, optarg);
|
||||
if (r < 0)
|
||||
return log_oom();
|
||||
|
||||
break;
|
||||
|
||||
case ARG_PROMPT:
|
||||
arg_prompt_locale = arg_prompt_keymap = arg_prompt_timezone = arg_prompt_hostname = arg_prompt_root_password = true;
|
||||
break;
|
||||
|
@ -1134,6 +1165,10 @@ static int run(int argc, char *argv[]) {
|
|||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = process_kernel_cmdline();
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue