81818461c6
The script shouldn't rely on a previous script exiting with a status code that prevents it to be executed. Instead, should check if the destination directory for the BLS kernel image exists and exit otherwise.
92 lines
2.1 KiB
Bash
92 lines
2.1 KiB
Bash
#!/bin/bash
|
|
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
|
|
# ex: ts=8 sw=4 sts=4 et filetype=sh
|
|
|
|
COMMAND="$1"
|
|
KERNEL_VERSION="$2"
|
|
BOOT_DIR_ABS="$3"
|
|
KERNEL_IMAGE="$4"
|
|
|
|
if ! [[ $KERNEL_INSTALL_MACHINE_ID ]]; then
|
|
exit 0
|
|
fi
|
|
|
|
if ! [[ -d "$BOOT_DIR_ABS" ]]; then
|
|
exit 0
|
|
fi
|
|
|
|
MACHINE_ID=$KERNEL_INSTALL_MACHINE_ID
|
|
|
|
BOOT_DIR="/$MACHINE_ID/$KERNEL_VERSION"
|
|
BOOT_ROOT=${BOOT_DIR_ABS%$BOOT_DIR}
|
|
LOADER_ENTRY="$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION.conf"
|
|
|
|
if [[ $COMMAND == remove ]]; then
|
|
exec rm -f "$LOADER_ENTRY"
|
|
fi
|
|
|
|
if ! [[ $COMMAND == add ]]; then
|
|
exit 1
|
|
fi
|
|
|
|
if ! [[ $KERNEL_IMAGE ]]; then
|
|
exit 1
|
|
fi
|
|
|
|
if [[ -f /etc/os-release ]]; then
|
|
. /etc/os-release
|
|
elif [[ -f /usr/lib/os-release ]]; then
|
|
. /usr/lib/os-release
|
|
fi
|
|
|
|
if ! [[ $PRETTY_NAME ]]; then
|
|
PRETTY_NAME="Linux $KERNEL_VERSION"
|
|
fi
|
|
|
|
declare -a BOOT_OPTIONS
|
|
|
|
if [[ -f /etc/kernel/cmdline ]]; then
|
|
read -r -d '' -a BOOT_OPTIONS < /etc/kernel/cmdline
|
|
fi
|
|
|
|
if ! [[ ${BOOT_OPTIONS[*]} ]]; then
|
|
read -r -d '' -a line < /proc/cmdline
|
|
for i in "${line[@]}"; do
|
|
[[ "${i#initrd=*}" != "$i" ]] && continue
|
|
BOOT_OPTIONS+=("$i")
|
|
done
|
|
fi
|
|
|
|
if ! [[ ${BOOT_OPTIONS[*]} ]]; then
|
|
echo "Could not determine the kernel command line parameters." >&2
|
|
echo "Please specify the kernel command line in /etc/kernel/cmdline!" >&2
|
|
exit 1
|
|
fi
|
|
|
|
cp "$KERNEL_IMAGE" "$BOOT_DIR_ABS/linux" &&
|
|
chown root:root "$BOOT_DIR_ABS/linux" &&
|
|
chmod 0644 "$BOOT_DIR_ABS/linux" || {
|
|
echo "Could not copy '$KERNEL_IMAGE to '$BOOT_DIR_ABS/linux'." >&2
|
|
exit 1
|
|
}
|
|
|
|
mkdir -p "${LOADER_ENTRY%/*}" || {
|
|
echo "Could not create loader entry directory '${LOADER_ENTRY%/*}'." >&2
|
|
exit 1
|
|
}
|
|
|
|
{
|
|
echo "title $PRETTY_NAME"
|
|
echo "version $KERNEL_VERSION"
|
|
echo "machine-id $MACHINE_ID"
|
|
echo "options ${BOOT_OPTIONS[*]}"
|
|
echo "linux $BOOT_DIR/linux"
|
|
[[ -f $BOOT_DIR_ABS/initrd ]] && \
|
|
echo "initrd $BOOT_DIR/initrd"
|
|
:
|
|
} > "$LOADER_ENTRY" || {
|
|
echo "Could not create loader entry '$LOADER_ENTRY'." >&2
|
|
exit 1
|
|
}
|
|
exit 0
|