]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
kernel-install: add --esp-path= and --boot-path= options
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sun, 19 Mar 2023 17:55:56 +0000 (02:55 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Mon, 5 Jun 2023 05:23:54 +0000 (14:23 +0900)
Then, kernel-install takes one more step for compatibility with bootctl.

man/bootctl.xml
man/kernel-install.xml
man/standard-options.xml
src/kernel-install/kernel-install.c

index 5f98486343d813539f44901a940c679ed4fefd48..25522b9e4e024f87b01a396c2b2d8f81d1467401 100644 (file)
     <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>
index 06a95480e6b82ae032f3e96c3bf93737df685311..835eb36f18701bc6d5850b084a0eafa23af5ed7c 100644 (file)
     <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>
index 71c84958abe750742b4be2390d46955d56bf17a6..e72442e5a70dc2d039fd9bb3de0244a94aae858f 100644 (file)
     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>
index 396bfc6d44f6ffa2f01701b58d054fcc13ac2c9a..631c054cfcacbc04987f5c301d468815d6abba2e 100644 (file)
@@ -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"
 #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;