]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
Improve kernel-install support for initrd files. (#11281)
authorikelos <mike.auty@gmail.com>
Sat, 29 Dec 2018 19:01:10 +0000 (19:01 +0000)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 29 Dec 2018 19:01:10 +0000 (04:01 +0900)
The current support in kernel-install for initrd images doesn't copy
over the initrd file or allow a means for it to be specified (it
requires a specific filename in a particular directory).

This patchset adds support for (optionally) providing the name of
initial ramdisk file to copied over and used by kernel-install.

man/kernel-install.xml
src/kernel-install/90-loaderentry.install
src/kernel-install/kernel-install

index 83e50c8d708475a212e97fd486956ef72ca15a72..84204df150b2e48e1ed7dcfad7531487e5f6e11e 100644 (file)
@@ -28,7 +28,8 @@
       <command>kernel-install</command>
       <arg choice="plain">COMMAND</arg>
       <arg choice="plain"><replaceable>KERNEL-VERSION</replaceable></arg>
-      <arg choice="opt"><replaceable>KERNEL-IMAGE</replaceable></arg>
+      <arg choice="plain"><replaceable>KERNEL-IMAGE</replaceable></arg>
+      <arg choice="opt"><replaceable>INITRD-FILE</replaceable></arg>
     </cmdsynopsis>
   </refsynopsisdiv>
 
@@ -61,7 +62,7 @@
     <para>The following commands are understood:</para>
     <variablelist>
       <varlistentry>
-        <term><command>add <replaceable>KERNEL-VERSION</replaceable> <replaceable>KERNEL-IMAGE</replaceable></command></term>
+        <term><command>add <replaceable>KERNEL-VERSION</replaceable> <replaceable>KERNEL-IMAGE</replaceable> [<replaceable>INITRD-FILE</replaceable>]</command></term>
         <listitem>
           <para>This command expects a kernel version string and a path to a kernel image file as
           arguments. <command>kernel-install</command> creates the directory
@@ -69,7 +70,7 @@
           and calls the executables from <filename>/usr/lib/kernel/install.d/*.install</filename> and
           <filename>/etc/kernel/install.d/*.install</filename> with the following arguments:
 
-          <programlisting>add <replaceable>KERNEL-VERSION</replaceable> <filename>/boot/<replaceable>MACHINE-ID</replaceable>/<replaceable>KERNEL-VERSION</replaceable>/</filename> <replaceable>KERNEL-IMAGE</replaceable></programlisting>
+          <programlisting>add <replaceable>KERNEL-VERSION</replaceable> <filename>/boot/<replaceable>MACHINE-ID</replaceable>/<replaceable>KERNEL-VERSION</replaceable>/</filename> <replaceable>KERNEL-IMAGE</replaceable> <replaceable>INITRD-FILE</replaceable></programlisting>
           </para>
 
           <para>Two default plugins execute the following operations in this case:</para>
             <listitem><para><filename>90-loaderentry.install</filename> copies <replaceable>KERNEL-IMAGE</replaceable>
             to
             <filename>/boot/<replaceable>MACHINE-ID</replaceable>/<replaceable>KERNEL-VERSION</replaceable>/linux</filename>.
+            If <replaceable>INITRD-FILE</replaceable> is provided, it also copies <replaceable>INITRD-FILE</replaceable>
+            to
+            <filename>/boot/<replaceable>MACHINE-ID</replaceable>/<replaceable>KERNEL_VERSION</replaceable>/initrd</filename>.
             It also creates a boot loader entry according to the <ulink
             url="https://systemd.io/BOOT_LOADER_SPECIFICATION">Boot Loader Specification</ulink> in
             <filename>/boot/loader/entries/<replaceable>MACHINE-ID</replaceable>-<replaceable>KERNEL-VERSION</replaceable>.conf</filename>.
             The title of the entry is the <replaceable>PRETTY_NAME</replaceable> parameter specified in
             <filename>/etc/os-release</filename> or <filename>/usr/lib/os-release</filename> (if the former is
-            missing), or "Linux <replaceable>KERNEL-VERSION</replaceable>", if unset.  If the file
-            <filename>initrd</filename> is found next to the kernel image file, the initrd will be added to the
-            configuration.</para></listitem>
+            missing), or "Linux <replaceable>KERNEL-VERSION</replaceable>", if unset.</para></listitem>
           </itemizedlist>
         </listitem>
       </varlistentry>
index 39ec8a69c66ba0828480a8f3657a98b7c92bb441..3437bb3cbcb6f6e429bf28a0a2ee07efa9795c6f 100644 (file)
@@ -6,6 +6,7 @@ COMMAND="$1"
 KERNEL_VERSION="$2"
 BOOT_DIR_ABS="$3"
 KERNEL_IMAGE="$4"
+INITRD_FILE="$5"
 
 if ! [[ $KERNEL_INSTALL_MACHINE_ID ]]; then
     exit 0
@@ -82,6 +83,15 @@ cp "$KERNEL_IMAGE" "$BOOT_DIR_ABS/linux" &&
     exit 1
 }
 
+if [[ -f "${INITRD_FILE}" ]]; then
+    cp "${INITRD_FILE}" "$BOOT_DIR_ABS/initrd" &&
+        chown root:root "$BOOT_DIR_ABS/initrd" &&
+        chmod 0644 "$BOOT_DIR_ABS/initrd" || {
+         echo "Could not copy '$INITRD_FILE' to '$BOOT_DIR_ABS/initrd'." >&2
+         exit 1
+    }
+fi
+
 mkdir -p "${LOADER_ENTRY%/*}" || {
     echo "Could not create loader entry directory '${LOADER_ENTRY%/*}'." >&2
     exit 1
index 732d584bbe49bda48f63ab9f7578410c7b862b79..7240df904c7004ad933462d3ed0f2854fdac9ed0 100644 (file)
@@ -24,7 +24,7 @@ SKIP_REMAINING=77
 usage()
 {
     echo "Usage:"
-    echo "        $0 add KERNEL-VERSION KERNEL-IMAGE"
+    echo "        $0 add KERNEL-VERSION KERNEL-IMAGE [INITRD-FILE]"
     echo "        $0 remove KERNEL-VERSION"
 }
 
@@ -72,6 +72,7 @@ fi
 
 KERNEL_VERSION="$1"
 KERNEL_IMAGE="$2"
+INITRD_FILE="$3"
 
 if [[ -f /etc/machine-id ]]; then
     read MACHINE_ID < /etc/machine-id
@@ -123,7 +124,7 @@ case $COMMAND in
 
         for f in "${PLUGINS[@]}"; do
             if [[ -x $f ]]; then
-                "$f" add "$KERNEL_VERSION" "$BOOT_DIR_ABS" "$KERNEL_IMAGE"
+                "$f" add "$KERNEL_VERSION" "$BOOT_DIR_ABS" "$KERNEL_IMAGE" "$INITRD_FILE"
                 x=$?
                 if [[ $x == $SKIP_REMAINING ]]; then
                     ret=0