summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYu Watanabe <watanabe.yu+github@gmail.com>2023-03-19 18:55:56 +0100
committerYu Watanabe <watanabe.yu+github@gmail.com>2023-06-05 07:23:54 +0200
commit4cff5e92a9e0e3e6c3634df7837a571b36934d7f (patch)
tree59ed68decbe1d3907fb083e11bdd62d15bd0a94e
parentkernel-install: also parse KERNEL_INSTALL_LAYOUT from /etc/machine-info (diff)
downloadsystemd-4cff5e92a9e0e3e6c3634df7837a571b36934d7f.tar.xz
systemd-4cff5e92a9e0e3e6c3634df7837a571b36934d7f.zip
kernel-install: add --esp-path= and --boot-path= options
Then, kernel-install takes one more step for compatibility with bootctl.
-rw-r--r--man/bootctl.xml16
-rw-r--r--man/kernel-install.xml3
-rw-r--r--man/standard-options.xml21
-rw-r--r--src/kernel-install/kernel-install.c30
4 files changed, 53 insertions, 17 deletions
diff --git a/man/bootctl.xml b/man/bootctl.xml
index 5f98486343..25522b9e4e 100644
--- a/man/bootctl.xml
+++ b/man/bootctl.xml
@@ -269,20 +269,8 @@
<para>The following options are understood:</para>
<variablelist>
- <varlistentry>
- <term><option>--esp-path=</option></term>
- <listitem><para>Path to the EFI System Partition (ESP). If not specified, <filename>/efi/</filename>,
- <filename>/boot/</filename>, and <filename>/boot/efi/</filename> are checked in turn. It is
- recommended to mount the ESP to <filename>/efi/</filename>, if possible.</para></listitem>
- </varlistentry>
-
- <varlistentry>
- <term><option>--boot-path=</option></term>
- <listitem><para>Path to the Extended Boot Loader partition, as defined in the <ulink
- url="https://uapi-group.org/specifications/specs/boot_loader_specification">Boot Loader Specification</ulink>. If not
- specified, <filename>/boot/</filename> is checked. It is recommended to mount the Extended Boot
- Loader partition to <filename>/boot/</filename>, if possible.</para></listitem>
- </varlistentry>
+ <xi:include href="standard-options.xml" xpointer="esp-path"/>
+ <xi:include href="standard-options.xml" xpointer="boot-path"/>
<varlistentry>
<term><option>--root=<replaceable>root</replaceable></option></term>
diff --git a/man/kernel-install.xml b/man/kernel-install.xml
index 06a95480e6..835eb36f18 100644
--- a/man/kernel-install.xml
+++ b/man/kernel-install.xml
@@ -186,6 +186,9 @@
<para>The following options are understood:</para>
<variablelist>
+ <xi:include href="standard-options.xml" xpointer="esp-path"/>
+ <xi:include href="standard-options.xml" xpointer="boot-path"/>
+
<varlistentry>
<term><option>-v</option></term>
<term><option>--verbose</option></term>
diff --git a/man/standard-options.xml b/man/standard-options.xml
index 71c84958ab..e72442e5a7 100644
--- a/man/standard-options.xml
+++ b/man/standard-options.xml
@@ -97,4 +97,25 @@
in the image are used.</para></listitem>
</varlistentry>
+ <varlistentry id='esp-path'>
+ <term><option>--esp-path=</option></term>
+
+ <listitem>
+ <para>Path to the EFI System Partition (ESP). If not specified, <filename>/efi/</filename>,
+ <filename>/boot/</filename>, and <filename>/boot/efi/</filename> are checked in turn. It is
+ recommended to mount the ESP to <filename>/efi/</filename>, if possible.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry id='boot-path'>
+ <term><option>--boot-path=</option></term>
+
+ <listitem>
+ <para>Path to the Extended Boot Loader partition, as defined in the
+ <ulink url="https://uapi-group.org/specifications/specs/boot_loader_specification">Boot Loader Specification</ulink>.
+ If not specified, <filename>/boot/</filename> is checked. It is recommended to mount the Extended Boot
+ Loader partition to <filename>/boot/</filename>, if possible.</para>
+ </listitem>
+ </varlistentry>
+
</variablelist>
diff --git a/src/kernel-install/kernel-install.c b/src/kernel-install/kernel-install.c
index 396bfc6d44..631c054cfc 100644
--- a/src/kernel-install/kernel-install.c
+++ b/src/kernel-install/kernel-install.c
@@ -17,6 +17,7 @@
#include "kernel-image.h"
#include "main-func.h"
#include "mkdir.h"
+#include "parse-argument.h"
#include "path-util.h"
#include "pretty-print.h"
#include "rm-rf.h"
@@ -28,6 +29,11 @@
#include "verbs.h"
static bool arg_verbose = false;
+static char *arg_esp_path = NULL;
+static char *arg_xbootldr_path = NULL;
+
+STATIC_DESTRUCTOR_REGISTER(arg_esp_path, freep);
+STATIC_DESTRUCTOR_REGISTER(arg_xbootldr_path, freep);
typedef enum Action {
ACTION_ADD,
@@ -473,7 +479,7 @@ static int context_acquire_xbootldr(Context *c) {
r = find_xbootldr_and_warn_at(
/* rfd = */ c->rfd,
- /* path = */ NULL,
+ /* path = */ arg_xbootldr_path,
/* unprivileged_mode= */ -1,
/* ret_path = */ &c->boot_root,
/* ret_uuid = */ NULL,
@@ -499,7 +505,7 @@ static int context_acquire_esp(Context *c) {
r = find_esp_and_warn_at(
/* rfd = */ c->rfd,
- /* path = */ NULL,
+ /* path = */ arg_esp_path,
/* unprivileged_mode= */ -1,
/* ret_path = */ &c->boot_root,
/* ret_part = */ NULL,
@@ -1106,6 +1112,8 @@ static int help(void) {
" -h --help Show this help\n"
" --version Show package version\n"
" -v --verbose Increase verbosity\n"
+ " --esp-path=PATH Path to the EFI System Partition (ESP)\n"
+ " --boot-path=PATH Path to the $BOOT partition\n"
"\nSee the %4$s for details.\n",
program_invocation_short_name,
ansi_highlight(),
@@ -1118,14 +1126,18 @@ static int help(void) {
static int parse_argv(int argc, char *argv[]) {
enum {
ARG_VERSION = 0x100,
+ ARG_ESP_PATH,
+ ARG_BOOT_PATH,
};
static const struct option options[] = {
{ "help", no_argument, NULL, 'h' },
{ "version", no_argument, NULL, ARG_VERSION },
{ "verbose", no_argument, NULL, 'v' },
+ { "esp-path", required_argument, NULL, ARG_ESP_PATH },
+ { "boot-path", required_argument, NULL, ARG_BOOT_PATH },
{}
};
- int t;
+ int t, r;
assert(argc >= 0);
assert(argv);
@@ -1143,6 +1155,18 @@ static int parse_argv(int argc, char *argv[]) {
arg_verbose = true;
break;
+ case ARG_ESP_PATH:
+ r = parse_path_argument(optarg, /* suppress_root = */ false, &arg_esp_path);
+ if (r < 0)
+ return log_oom();
+ break;
+
+ case ARG_BOOT_PATH:
+ r = parse_path_argument(optarg, /* suppress_root = */ false, &arg_xbootldr_path);
+ if (r < 0)
+ return log_oom();
+ break;
+
case '?':
return -EINVAL;