Add multiple initrd file support to kernel-install

Instead of having just a single INITRD field, add support for all
additional parameters being INITRD fields in order.

Signed-off-by: Mike Auty <mike.auty@gmail.com>
This commit is contained in:
Mike Auty 2019-01-17 18:06:09 +00:00 committed by Lennart Poettering
parent 72de945726
commit 0912c0b80e
3 changed files with 24 additions and 19 deletions

View File

@ -29,7 +29,7 @@
<arg choice="plain">COMMAND</arg> <arg choice="plain">COMMAND</arg>
<arg choice="plain"><replaceable>KERNEL-VERSION</replaceable></arg> <arg choice="plain"><replaceable>KERNEL-VERSION</replaceable></arg>
<arg choice="plain"><replaceable>KERNEL-IMAGE</replaceable></arg> <arg choice="plain"><replaceable>KERNEL-IMAGE</replaceable></arg>
<arg choice="opt"><replaceable>INITRD-FILE</replaceable></arg> <arg choice="opt" rep="repeat"><replaceable>INITRD-FILE</replaceable></arg>
</cmdsynopsis> </cmdsynopsis>
</refsynopsisdiv> </refsynopsisdiv>
@ -62,7 +62,7 @@
<para>The following commands are understood:</para> <para>The following commands are understood:</para>
<variablelist> <variablelist>
<varlistentry> <varlistentry>
<term><command>add <replaceable>KERNEL-VERSION</replaceable> <replaceable>KERNEL-IMAGE</replaceable> [<replaceable>INITRD-FILE</replaceable>]</command></term> <term><command>add <replaceable>KERNEL-VERSION</replaceable> <replaceable>KERNEL-IMAGE</replaceable> [<replaceable>INITRD-FILE</replaceable> ...]</command></term>
<listitem> <listitem>
<para>This command expects a kernel version string and a path to a kernel image file as <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 arguments. <command>kernel-install</command> creates the directory
@ -70,7 +70,7 @@
and calls the executables from <filename>/usr/lib/kernel/install.d/*.install</filename> and 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: <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> <replaceable>INITRD-FILE</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>
<para>Two default plugins execute the following operations in this case:</para> <para>Two default plugins execute the following operations in this case:</para>
@ -84,9 +84,9 @@
<listitem><para><filename>90-loaderentry.install</filename> copies <replaceable>KERNEL-IMAGE</replaceable> <listitem><para><filename>90-loaderentry.install</filename> copies <replaceable>KERNEL-IMAGE</replaceable>
to to
<filename>/boot/<replaceable>MACHINE-ID</replaceable>/<replaceable>KERNEL-VERSION</replaceable>/linux</filename>. <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> If an <replaceable>INITRD-FILE</replaceable> is provided, it also copies <replaceable>INITRD-FILE</replaceable>
to to
<filename>/boot/<replaceable>MACHINE-ID</replaceable>/<replaceable>KERNEL_VERSION</replaceable>/initrd</filename>. <filename>/boot/<replaceable>MACHINE-ID</replaceable>/<replaceable>KERNEL_VERSION</replaceable>/<replaceable>INITRD-FILE</replaceable></filename>.
It also creates a boot loader entry according to the <ulink It also creates a boot loader entry according to the <ulink
url="https://systemd.io/BOOT_LOADER_SPECIFICATION">Boot Loader Specification</ulink> in 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>. <filename>/boot/loader/entries/<replaceable>MACHINE-ID</replaceable>-<replaceable>KERNEL-VERSION</replaceable>.conf</filename>.

View File

@ -6,7 +6,7 @@ COMMAND="$1"
KERNEL_VERSION="$2" KERNEL_VERSION="$2"
BOOT_DIR_ABS="$3" BOOT_DIR_ABS="$3"
KERNEL_IMAGE="$4" KERNEL_IMAGE="$4"
INITRD_FILE="$5" INITRD_OPTIONS_START="5"
if ! [[ $KERNEL_INSTALL_MACHINE_ID ]]; then if ! [[ $KERNEL_INSTALL_MACHINE_ID ]]; then
exit 0 exit 0
@ -83,14 +83,17 @@ cp "$KERNEL_IMAGE" "$BOOT_DIR_ABS/linux" &&
exit 1 exit 1
} }
if [[ -f "${INITRD_FILE}" ]]; then for initrd in "${@:${INITRD_OPTIONS_START}}"; do
cp "${INITRD_FILE}" "$BOOT_DIR_ABS/initrd" && if [[ -f "${initrd}" ]]; then
chown root:root "$BOOT_DIR_ABS/initrd" && initrd_basename="$(basename ${initrd})"
chmod 0644 "$BOOT_DIR_ABS/initrd" || { cp "${initrd}" "$BOOT_DIR_ABS/${initrd_basename}" &&
echo "Could not copy '$INITRD_FILE' to '$BOOT_DIR_ABS/initrd'." >&2 chown root:root "$BOOT_DIR_ABS/${initrd_basename}" &&
exit 1 chmod 0644 "$BOOT_DIR_ABS/${initrd_basename}" || {
} echo "Could not copy '${initrd}' to '$BOOT_DIR_ABS/${initrd_basename}'." >&2
fi exit 1
}
fi
done
mkdir -p "${LOADER_ENTRY%/*}" || { mkdir -p "${LOADER_ENTRY%/*}" || {
echo "Could not create loader entry directory '${LOADER_ENTRY%/*}'." >&2 echo "Could not create loader entry directory '${LOADER_ENTRY%/*}'." >&2
@ -103,8 +106,10 @@ mkdir -p "${LOADER_ENTRY%/*}" || {
echo "machine-id $MACHINE_ID" echo "machine-id $MACHINE_ID"
echo "options ${BOOT_OPTIONS[*]}" echo "options ${BOOT_OPTIONS[*]}"
echo "linux $BOOT_DIR/linux" echo "linux $BOOT_DIR/linux"
[[ -f $BOOT_DIR_ABS/initrd ]] && \ for initrd in "${@:${INITRD_OPTIONS_START}}"; do
echo "initrd $BOOT_DIR/initrd" [[ -f $BOOT_DIR_ABS/$(basename ${initrd}) ]] && \
echo "initrd $BOOT_DIR/$(basename ${initrd})"
done
: :
} > "$LOADER_ENTRY" || { } > "$LOADER_ENTRY" || {
echo "Could not create loader entry '$LOADER_ENTRY'." >&2 echo "Could not create loader entry '$LOADER_ENTRY'." >&2

View File

@ -24,7 +24,7 @@ SKIP_REMAINING=77
usage() usage()
{ {
echo "Usage:" echo "Usage:"
echo " $0 add KERNEL-VERSION KERNEL-IMAGE [INITRD-FILE]" echo " $0 add KERNEL-VERSION KERNEL-IMAGE [INITRD-FILE ...]"
echo " $0 remove KERNEL-VERSION" echo " $0 remove KERNEL-VERSION"
} }
@ -72,7 +72,7 @@ fi
KERNEL_VERSION="$1" KERNEL_VERSION="$1"
KERNEL_IMAGE="$2" KERNEL_IMAGE="$2"
INITRD_FILE="$3" INITRD_OPTIONS_START="3"
if [[ -f /etc/machine-id ]]; then if [[ -f /etc/machine-id ]]; then
read MACHINE_ID < /etc/machine-id read MACHINE_ID < /etc/machine-id
@ -124,7 +124,7 @@ case $COMMAND in
for f in "${PLUGINS[@]}"; do for f in "${PLUGINS[@]}"; do
if [[ -x $f ]]; then if [[ -x $f ]]; then
"$f" add "$KERNEL_VERSION" "$BOOT_DIR_ABS" "$KERNEL_IMAGE" "$INITRD_FILE" "$f" add "$KERNEL_VERSION" "$BOOT_DIR_ABS" "$KERNEL_IMAGE" "${@:${INITRD_OPTIONS_START}}"
x=$? x=$?
if [[ $x == $SKIP_REMAINING ]]; then if [[ $x == $SKIP_REMAINING ]]; then
ret=0 ret=0