diff --git a/man/kernel-install.xml b/man/kernel-install.xml index 84204df150..50e1320105 100644 --- a/man/kernel-install.xml +++ b/man/kernel-install.xml @@ -29,7 +29,7 @@ COMMAND KERNEL-VERSION KERNEL-IMAGE - INITRD-FILE + INITRD-FILE @@ -62,7 +62,7 @@ The following commands are understood: - add KERNEL-VERSION KERNEL-IMAGE [INITRD-FILE] + add KERNEL-VERSION KERNEL-IMAGE [INITRD-FILE ...] This command expects a kernel version string and a path to a kernel image file as arguments. kernel-install creates the directory @@ -70,7 +70,7 @@ and calls the executables from /usr/lib/kernel/install.d/*.install and /etc/kernel/install.d/*.install with the following arguments: - add KERNEL-VERSION /boot/MACHINE-ID/KERNEL-VERSION/ KERNEL-IMAGE INITRD-FILE + add KERNEL-VERSION /boot/MACHINE-ID/KERNEL-VERSION/ KERNEL-IMAGE [INITRD-FILE ...] Two default plugins execute the following operations in this case: @@ -84,9 +84,9 @@ 90-loaderentry.install copies KERNEL-IMAGE to /boot/MACHINE-ID/KERNEL-VERSION/linux. - If INITRD-FILE is provided, it also copies INITRD-FILE + If an INITRD-FILE is provided, it also copies INITRD-FILE to - /boot/MACHINE-ID/KERNEL_VERSION/initrd. + /boot/MACHINE-ID/KERNEL_VERSION/INITRD-FILE. It also creates a boot loader entry according to the Boot Loader Specification in /boot/loader/entries/MACHINE-ID-KERNEL-VERSION.conf. diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install index 3437bb3cbc..e5fb232f35 100644 --- a/src/kernel-install/90-loaderentry.install +++ b/src/kernel-install/90-loaderentry.install @@ -6,7 +6,7 @@ COMMAND="$1" KERNEL_VERSION="$2" BOOT_DIR_ABS="$3" KERNEL_IMAGE="$4" -INITRD_FILE="$5" +INITRD_OPTIONS_START="5" if ! [[ $KERNEL_INSTALL_MACHINE_ID ]]; then exit 0 @@ -83,14 +83,17 @@ 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 +for initrd in "${@:${INITRD_OPTIONS_START}}"; do + if [[ -f "${initrd}" ]]; then + initrd_basename="$(basename ${initrd})" + cp "${initrd}" "$BOOT_DIR_ABS/${initrd_basename}" && + chown root:root "$BOOT_DIR_ABS/${initrd_basename}" && + chmod 0644 "$BOOT_DIR_ABS/${initrd_basename}" || { + echo "Could not copy '${initrd}' to '$BOOT_DIR_ABS/${initrd_basename}'." >&2 + exit 1 + } + fi +done mkdir -p "${LOADER_ENTRY%/*}" || { echo "Could not create loader entry directory '${LOADER_ENTRY%/*}'." >&2 @@ -103,8 +106,10 @@ mkdir -p "${LOADER_ENTRY%/*}" || { echo "machine-id $MACHINE_ID" echo "options ${BOOT_OPTIONS[*]}" echo "linux $BOOT_DIR/linux" - [[ -f $BOOT_DIR_ABS/initrd ]] && \ - echo "initrd $BOOT_DIR/initrd" + for initrd in "${@:${INITRD_OPTIONS_START}}"; do + [[ -f $BOOT_DIR_ABS/$(basename ${initrd}) ]] && \ + echo "initrd $BOOT_DIR/$(basename ${initrd})" + done : } > "$LOADER_ENTRY" || { echo "Could not create loader entry '$LOADER_ENTRY'." >&2 diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install index 7240df904c..7973818bca 100644 --- a/src/kernel-install/kernel-install +++ b/src/kernel-install/kernel-install @@ -24,7 +24,7 @@ SKIP_REMAINING=77 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" } @@ -72,7 +72,7 @@ fi KERNEL_VERSION="$1" KERNEL_IMAGE="$2" -INITRD_FILE="$3" +INITRD_OPTIONS_START="3" if [[ -f /etc/machine-id ]]; then read MACHINE_ID < /etc/machine-id @@ -124,7 +124,7 @@ case $COMMAND in for f in "${PLUGINS[@]}"; do 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=$? if [[ $x == $SKIP_REMAINING ]]; then ret=0