Last active
May 5, 2021 20:23
-
-
Save nabijaczleweli/d98ba80f3d0a3ecb4e09e28fea46fea6 to your computer and use it in GitHub Desktop.
Fedora 34 all available /usr/lib/kernel/install.ds
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/bash | |
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- | |
# ex: ts=8 sw=4 sts=4 et filetype=sh | |
# SPDX-License-Identifier: LGPL-2.1-or-later | |
# | |
# This file is part of systemd. | |
# | |
# systemd is free software; you can redistribute it and/or modify it | |
# under the terms of the GNU Lesser General Public License as published by | |
# the Free Software Foundation; either version 2.1 of the License, or | |
# (at your option) any later version. | |
# | |
# systemd is distributed in the hope that it will be useful, but | |
# WITHOUT ANY WARRANTY; without even the implied warranty of | |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
# General Public License for more details. | |
# | |
# You should have received a copy of the GNU Lesser General Public License | |
# along with systemd; If not, see <http://www.gnu.org/licenses/>. | |
COMMAND="$1" | |
KERNEL_VERSION="$2" | |
ENTRY_DIR_ABS="$3" | |
KERNEL_IMAGE="$4" | |
INITRD_OPTIONS_START="5" | |
if ! [[ $KERNEL_INSTALL_MACHINE_ID ]]; then | |
exit 0 | |
fi | |
if [[ $COMMAND != add ]]; then | |
exit 0 | |
fi | |
# If the boot dir exists (e.g. $ESP/<machine-id>), | |
# create the entry directory ($ESP/<machine-id>/<kernel-version>). | |
# This is the only function of this plugin. | |
MACHINE_ID_DIR="${ENTRY_DIR_ABS%/*}" | |
if ! [ -d "$MACHINE_ID_DIR" ]; then | |
exit 0 | |
fi | |
if [ "$KERNEL_INSTALL_VERBOSE" -gt 0 ]; then | |
echo "+mkdir -v -p $ENTRY_DIR_ABS" | |
exec mkdir -v -p "$ENTRY_DIR_ABS" | |
else | |
exec mkdir -p "$ENTRY_DIR_ABS" | |
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/bash | |
# set -x | |
if [[ "$(uname -m)" == arm* || "$(uname -m)" == aarch64 ]] | |
then | |
COMMAND="$1" | |
KERNEL_VERSION="$2" | |
#BOOT_DIR_ABS="$3" | |
#KERNEL_IMAGE="$4" | |
[ -f /etc/u-boot.conf ] && source /etc/u-boot.conf || true | |
[ -z "$FIRMWAREDT" ] || FirmwareDT=$FIRMWAREDT | |
if [[ $FirmwareDT == "True" ]] | |
then | |
# if we want to use firmware DT we remove symlink to current kernel DT | |
if [ -h /boot/dtb ]; then | |
rm -f /boot/dtb | |
fi | |
exit 0 | |
fi | |
# Setup a /boot/dtb -> /boot/dtb-$newest_kernel_version symlink so that | |
# u-boot can find the correct dtb to load. | |
# | |
# If invoked to 'add' a new kernel, find the newest based on `sort`ing | |
# the kernel versions dtb. If 'remove', then follow basically the same | |
# procedure but exclude the version currently being removed. | |
# | |
# The theory of operation here is that, while newer kernels may add new | |
# dtb nodes and fields, as upstreaming hw support for some particular | |
# device progresses, it should never make backward incompatible changes. | |
# So it should always be safe to use a newer dtb with an older kernel. | |
list_dtb_versions() { | |
excluded_version="$1" | |
for dtbdir in /boot/dtb-*; do | |
dtbver=${dtbdir#*-} | |
if [ "$dtbver" != "$excluded_version" ]; then | |
echo $dtbver | |
fi | |
done | |
} | |
setup_dtb_link() { | |
ver=`list_dtb_versions $1 | sort -r --sort=version | head -1` | |
if [ -h /boot/dtb ]; then | |
rm -f /boot/dtb | |
fi | |
ln -s dtb-$ver /boot/dtb | |
} | |
ret=0 | |
case "$COMMAND" in | |
add) | |
# If we're adding a kernel we want that version | |
if [ -h /boot/dtb ]; then | |
rm -f /boot/dtb | |
fi | |
ln -s dtb-$KERNEL_VERSION /boot/dtb | |
ret=$? | |
;; | |
remove) | |
setup_dtb_link $KERNEL_VERSION | |
ret=$? | |
;; | |
esac | |
exit $ret | |
else | |
# Just exit on non ARM | |
exit 0 | |
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/bash | |
if ! [[ $KERNEL_INSTALL_MACHINE_ID ]]; then | |
exit 0 | |
fi | |
[[ -f /etc/default/grub ]] && . /etc/default/grub | |
[[ -f /etc/os-release ]] && . /etc/os-release | |
COMMAND="$1" | |
KERNEL_VERSION="$2" | |
BOOT_DIR_ABS="$3" | |
KERNEL_IMAGE="$4" | |
KERNEL_DIR="${KERNEL_IMAGE%/*}" | |
MACHINE_ID=$KERNEL_INSTALL_MACHINE_ID | |
# If ${BOOT_DIR_ABS} exists, some other boot loader is active. | |
[[ -d "${BOOT_DIR_ABS}" ]] && exit 0 | |
BLS_DIR="/boot/loader/entries" | |
mkbls() { | |
local kernelver=$1 && shift | |
local datetime=$1 && shift | |
local kernelopts=$1 && shift | |
local debugname="" | |
local debugid="" | |
local flavor="" | |
if [[ "$kernelver" == *\+* ]] ; then | |
local flavor=-"${kernelver##*+}" | |
if [[ "${flavor}" == "-debug" ]]; then | |
local debugname=" with debugging" | |
local debugid="-debug" | |
fi | |
fi | |
cat <<EOF | |
title ${NAME} (${kernelver}) ${VERSION}${debugname} | |
version ${kernelver}${debugid} | |
linux /vmlinuz-${kernelver} | |
initrd /initramfs-${kernelver}.img | |
options ${kernelopts} | |
grub_users \$grub_users | |
grub_arg --unrestricted | |
grub_class kernel${flavor} | |
EOF | |
} | |
[[ "$KERNEL_VERSION" == *\+* ]] && flavor=-"${KERNEL_VERSION##*+}" | |
case "$COMMAND" in | |
add) | |
if [[ "${KERNEL_DIR}" != "/boot" ]]; then | |
for i in \ | |
"$KERNEL_IMAGE" \ | |
"$KERNEL_DIR"/System.map \ | |
"$KERNEL_DIR"/config \ | |
"$KERNEL_DIR"/zImage.stub \ | |
"$KERNEL_DIR"/dtb | |
do | |
[[ -e "$i" ]] || continue | |
rm -f "/boot/${i##*/}-${KERNEL_VERSION}" | |
cp -aT "$i" "/boot/${i##*/}-${KERNEL_VERSION}" | |
command -v restorecon &>/dev/null && \ | |
restorecon -R "/boot/${i##*/}-${KERNEL_VERSION}" | |
done | |
# hmac is .vmlinuz-<version>.hmac so needs a special treatment | |
i="$KERNEL_DIR/.${KERNEL_IMAGE##*/}.hmac" | |
if [[ -e "$i" ]]; then | |
rm -f "/boot/.${KERNEL_IMAGE##*/}-${KERNEL_VERSION}.hmac" | |
cp -a "$i" "/boot/.${KERNEL_IMAGE##*/}-${KERNEL_VERSION}.hmac" | |
command -v restorecon &>/dev/null && \ | |
restorecon "/boot/.${KERNEL_IMAGE##*/}-${KERNEL_VERSION}.hmac" | |
fi | |
fi | |
if [[ "x${GRUB_ENABLE_BLSCFG}" = "xtrue" ]] || [[ ! -f /sbin/new-kernel-pkg ]]; then | |
if [[ -f /etc/kernel/cmdline ]]; then | |
read -r -d '' -a BOOT_OPTIONS < /etc/kernel/cmdline | |
elif [[ -f /usr/lib/kernel/cmdline ]]; then | |
read -r -d '' -a BOOT_OPTIONS < /usr/lib/kernel/cmdline | |
else | |
declare -a BOOT_OPTIONS | |
read -r -d '' -a line < /proc/cmdline | |
for i in "${line[@]}"; do | |
[[ "${i#initrd=*}" != "$i" ]] && continue | |
[[ "${i#BOOT_IMAGE=*}" != "$i" ]] && continue | |
BOOT_OPTIONS+=("$i") | |
done | |
fi | |
eval "$(grub2-get-kernel-settings)" || true | |
[[ -d "$BLS_DIR" ]] || mkdir -m 0700 -p "$BLS_DIR" | |
BLS_ID="${MACHINE_ID}-${KERNEL_VERSION}" | |
BLS_TARGET="${BLS_DIR}/${BLS_ID}.conf" | |
mkbls "${KERNEL_VERSION}" \ | |
"$(date -u +%Y%m%d%H%M%S -d "$(stat -c '%y' "${KERNEL_DIR}")")" \ | |
"${BOOT_OPTIONS[*]}" >"${BLS_TARGET}" | |
command -v restorecon &>/dev/null && restorecon -R "${BLS_TARGET}" | |
LINUX="$(grep '^linux[ \t]' "${BLS_TARGET}" | sed -e 's,^linux[ \t]*,,')" | |
INITRD="$(grep '^initrd[ \t]' "${BLS_TARGET}" | sed -e 's,^initrd[ \t]*,,')" | |
LINUX_RELPATH="$(grub2-mkrelpath /boot${LINUX})" | |
BOOTPREFIX="$(dirname ${LINUX_RELPATH})" | |
ROOTPREFIX="$(dirname "/boot${LINUX}")" | |
if [[ $LINUX != $LINUX_RELPATH ]]; then | |
sed -i -e "s,^linux.*,linux ${BOOTPREFIX}${LINUX},g" "${BLS_TARGET}" | |
sed -i -e "s,^initrd.*,initrd ${BOOTPREFIX}${INITRD},g" "${BLS_TARGET}" | |
fi | |
if [[ "$KERNEL_VERSION" == *\+* ]] && [ "x$GRUB_DEFAULT_TO_DEBUG" != "xtrue" ]; then | |
GRUB_UPDATE_DEFAULT_KERNEL=false | |
fi | |
if [ "x$GRUB_UPDATE_DEFAULT_KERNEL" = "xtrue" ]; then | |
NEWDEFAULT="${BLS_ID}" | |
fi | |
if [ "x$GRUB_LINUX_MAKE_DEBUG" = "xtrue" ]; then | |
BLS_DEBUG="$(echo ${BLS_TARGET} | sed -e "s/${KERNEL_VERSION}/${KERNEL_VERSION}~debug/")" | |
cp -aT "${BLS_TARGET}" "${BLS_DEBUG}" | |
TITLE="$(grep '^title[ \t]' "${BLS_DEBUG}" | sed -e 's/^title[ \t]*//')" | |
OPTIONS="$(echo "${BOOT_OPTIONS[*]} ${GRUB_CMDLINE_LINUX_DEBUG}" | sed -e 's/\//\\\//g')" | |
sed -i -e "s/^title.*/title ${TITLE}${GRUB_LINUX_DEBUG_TITLE_POSTFIX}/" "${BLS_DEBUG}" | |
sed -i -e "s/^options.*/options ${OPTIONS}/" "${BLS_DEBUG}" | |
if [ -n "$NEWDEFAULT" -a "x$GRUB_DEFAULT_TO_DEBUG" = "xtrue" ]; then | |
NEWDEFAULT="${BLS_DEBUG_ID}" | |
fi | |
fi | |
if [ -n "$NEWDEFAULT" ]; then | |
grub2-editenv - set "saved_entry=${NEWDEFAULT}" | |
fi | |
# this probably isn't the best place to do this, but it will do for now. | |
if [ -e "${ROOTPREFIX}${INITRD}" -a -e "${ROOTPREFIX}${LINUX}" -a \ | |
"${ROOTPREFIX}${INITRD}" -ot "${ROOTPREFIX}${LINUX}" -a \ | |
-x /usr/lib/kernel/install.d/50-dracut.install ]; then | |
rm -f "${ROOTPREFIX}${INITRD}" | |
fi | |
exit 0 | |
fi | |
/sbin/new-kernel-pkg --package "kernel${flavor}" --install "$KERNEL_VERSION" || exit $? | |
/sbin/new-kernel-pkg --package "kernel${flavor}" --mkinitrd --dracut --depmod --update "$KERNEL_VERSION" || exit $? | |
/sbin/new-kernel-pkg --package "kernel${flavor}" --rpmposttrans "$KERNEL_VERSION" || exit $? | |
# If grubby is used there's no need to run other installation plugins | |
exit 77 | |
;; | |
remove) | |
if [[ "x${GRUB_ENABLE_BLSCFG}" = "xtrue" ]] || [[ ! -f /sbin/new-kernel-pkg ]]; then | |
BLS_TARGET="${BLS_DIR}/${MACHINE_ID}-${KERNEL_VERSION}.conf" | |
BLS_DEBUG="$(echo ${BLS_TARGET} | sed -e "s/${KERNEL_VERSION}/${KERNEL_VERSION}~debug/")" | |
rm -f "${BLS_TARGET}" "${BLS_DEBUG}" | |
for i in vmlinuz System.map config zImage.stub dtb; do | |
rm -rf "/boot/${i}-${KERNEL_VERSION}" | |
done | |
# hmac is .vmlinuz-<version>.hmac so needs a special treatment | |
rm -f "/boot/.vmlinuz-${KERNEL_VERSION}.hmac" | |
exit 0 | |
fi | |
/sbin/new-kernel-pkg --package "kernel${flavor+-$flavor}" --rminitrd --rmmoddep --remove "$KERNEL_VERSION" || exit $? | |
# If grubby is used there's no need to run other installation plugins | |
exit 77 | |
;; | |
*) | |
;; | |
esac |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/bash | |
if [[ ! -x /sbin/new-kernel-pkg ]]; then | |
exit 0 | |
fi | |
COMMAND="$1" | |
KERNEL_VERSION="$2" | |
BOOT_DIR_ABS="$3" | |
KERNEL_IMAGE="$4" | |
KERNEL_DIR="${KERNEL_IMAGE%/*}" | |
[[ "$KERNEL_VERSION" == *\+* ]] && flavor=-"${KERNEL_VERSION##*+}" | |
case "$COMMAND" in | |
add) | |
if [[ "${KERNEL_DIR}" != "/boot" ]]; then | |
for i in \ | |
"$KERNEL_IMAGE" \ | |
"$KERNEL_DIR"/System.map \ | |
"$KERNEL_DIR"/config \ | |
"$KERNEL_DIR"/zImage.stub \ | |
"$KERNEL_DIR"/dtb \ | |
; do | |
[[ -e "$i" ]] || continue | |
cp -aT "$i" "/boot/${i##*/}-${KERNEL_VERSION}" | |
command -v restorecon &>/dev/null && \ | |
restorecon -R "/boot/${i##*/}-${KERNEL_VERSION}" | |
done | |
# hmac is .vmlinuz-<version>.hmac so needs a special treatment | |
i="$KERNEL_DIR/.${KERNEL_IMAGE##*/}.hmac" | |
if [[ -e "$i" ]]; then | |
cp -a "$i" "/boot/.${KERNEL_IMAGE##*/}-${KERNEL_VERSION}.hmac" | |
command -v restorecon &>/dev/null && \ | |
restorecon "/boot/.${KERNEL_IMAGE##*/}-${KERNEL_VERSION}.hmac" | |
fi | |
fi | |
/sbin/new-kernel-pkg --package "kernel${flavor}" --install "$KERNEL_VERSION" || exit $? | |
/sbin/new-kernel-pkg --package "kernel${flavor}" --mkinitrd --dracut --depmod --update "$KERNEL_VERSION" || exit $? | |
/sbin/new-kernel-pkg --package "kernel${flavor}" --rpmposttrans "$KERNEL_VERSION" || exit $? | |
;; | |
remove) | |
/sbin/new-kernel-pkg --package "kernel${flavor+-$flavor}" --rminitrd --rmmoddep --remove "$KERNEL_VERSION" || exit $? | |
;; | |
*) | |
;; | |
esac | |
# skip other installation plugins, if we can't find a boot loader spec conforming setup | |
if ! [[ -d /boot/loader/entries || -L /boot/loader/entries ]]; then | |
exit 77 | |
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/bash | |
if [[ "$1" == "add" ]]; then | |
/etc/kernel/postinst.d/dkms $2 | |
fi | |
if [[ "$1" == "remove" ]]; then | |
/etc/kernel/prerm.d/dkms $2 | |
fi |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/bash | |
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- | |
# ex: ts=8 sw=4 sts=4 et filetype=sh | |
# SPDX-License-Identifier: LGPL-2.1-or-later | |
# | |
# This file is part of systemd. | |
# | |
# systemd is free software; you can redistribute it and/or modify it | |
# under the terms of the GNU Lesser General Public License as published by | |
# the Free Software Foundation; either version 2.1 of the License, or | |
# (at your option) any later version. | |
# | |
# systemd is distributed in the hope that it will be useful, but | |
# WITHOUT ANY WARRANTY; without even the implied warranty of | |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
# General Public License for more details. | |
# | |
# You should have received a copy of the GNU Lesser General Public License | |
# along with systemd; If not, see <http://www.gnu.org/licenses/>. | |
COMMAND="$1" | |
KERNEL_VERSION="$2" | |
ENTRY_DIR_ABS="$3" | |
KERNEL_IMAGE="$4" | |
INITRD_OPTIONS_START="5" | |
[[ $KERNEL_VERSION ]] || exit 1 | |
case "$COMMAND" in | |
add) | |
[[ -d "/lib/modules/${KERNEL_VERSION}/kernel" ]] || exit 0 | |
[ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \ | |
echo "Running depmod -a ${KERNEL_VERSION}" | |
exec depmod -a "${KERNEL_VERSION}" | |
;; | |
remove) | |
[ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \ | |
echo "Removing /lib/modules/${KERNEL_VERSION}/modules.dep and associated files" | |
exec rm -f /lib/modules/"${KERNEL_VERSION}"/modules.{alias{,.bin},builtin.bin,dep{,.bin},devname,softdep,symbols{,.bin}} | |
;; | |
*) | |
exit 0 | |
esac |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/bash | |
COMMAND="$1" | |
KERNEL_VERSION="$2" | |
BOOT_DIR_ABS="$3" | |
KERNEL_IMAGE="$4" | |
# If KERNEL_INSTALL_MACHINE_ID is defined but empty, BOOT_DIR_ABS is a fake directory. | |
# So, let's skip to create initrd. | |
if ! [[ ${KERNEL_INSTALL_MACHINE_ID-x} ]]; then | |
exit 0 | |
fi | |
if [[ -d "$BOOT_DIR_ABS" ]]; then | |
INITRD="initrd" | |
else | |
BOOT_DIR_ABS="/boot" | |
INITRD="initramfs-${KERNEL_VERSION}.img" | |
fi | |
ret=0 | |
case "$COMMAND" in | |
add) | |
INITRD_IMAGE_PREGENERATED=${KERNEL_IMAGE%/*}/initrd | |
if [[ -f ${INITRD_IMAGE_PREGENERATED} ]]; then | |
# we found an initrd at the same place as the kernel | |
# use this and don't generate a new one | |
cp --reflink=auto "$INITRD_IMAGE_PREGENERATED" "$BOOT_DIR_ABS/$INITRD" \ | |
&& chown root:root "$BOOT_DIR_ABS/$INITRD" \ | |
&& chmod 0600 "$BOOT_DIR_ABS/$INITRD" \ | |
&& exit 0 | |
fi | |
if [[ -f /etc/kernel/cmdline ]]; then | |
read -r -d '' -a BOOT_OPTIONS < /etc/kernel/cmdline | |
elif [[ -f /usr/lib/kernel/cmdline ]]; then | |
read -r -d '' -a BOOT_OPTIONS < /usr/lib/kernel/cmdline | |
else | |
declare -a BOOT_OPTIONS | |
read -r -d '' -a line < /proc/cmdline | |
for i in "${line[@]}"; do | |
[[ "${i#initrd=*}" != "$i" ]] && continue | |
BOOT_OPTIONS+=("$i") | |
done | |
fi | |
unset noimageifnotneeded | |
for ((i=0; i < "${#BOOT_OPTIONS[@]}"; i++)); do | |
# shellcheck disable=SC1001 | |
if [[ ${BOOT_OPTIONS[$i]} == root\=PARTUUID\=* ]]; then | |
noimageifnotneeded="yes" | |
break | |
fi | |
done | |
dracut -f ${noimageifnotneeded:+--noimageifnotneeded} "$BOOT_DIR_ABS/$INITRD" "$KERNEL_VERSION" | |
ret=$? | |
;; | |
remove) | |
rm -f -- "$BOOT_DIR_ABS/$INITRD" | |
ret=$? | |
;; | |
esac | |
exit $ret |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/bash | |
export LANG=C | |
COMMAND="$1" | |
KERNEL_VERSION="$2" | |
BOOT_DIR_ABS="${3%/*}/0-rescue" | |
KERNEL_IMAGE="$4" | |
dropindirs_sort() | |
{ | |
suffix=$1; shift | |
args=("$@") | |
files=$( | |
while (( $# > 0 )); do | |
for i in "${1}"/*"${suffix}"; do | |
[[ -f $i ]] && echo "${i##*/}" | |
done | |
shift | |
done | sort -Vu | |
) | |
for f in $files; do | |
for d in "${args[@]}"; do | |
if [[ -f "$d/$f" ]]; then | |
echo "$d/$f" | |
continue 2 | |
fi | |
done | |
done | |
} | |
[[ -f /etc/os-release ]] && . /etc/os-release | |
if [[ ${KERNEL_INSTALL_MACHINE_ID+x} ]]; then | |
MACHINE_ID=$KERNEL_INSTALL_MACHINE_ID | |
elif [[ -f /etc/machine-id ]] ; then | |
read -r MACHINE_ID < /etc/machine-id | |
fi | |
if ! [[ $MACHINE_ID ]]; then | |
exit 0 | |
fi | |
if [[ -f /etc/kernel/cmdline ]]; then | |
read -r -d '' -a BOOT_OPTIONS < /etc/kernel/cmdline | |
elif [[ -f /usr/lib/kernel/cmdline ]]; then | |
read -r -d '' -a BOOT_OPTIONS < /usr/lib/kernel/cmdline | |
else | |
declare -a BOOT_OPTIONS | |
read -r -d '' -a line < /proc/cmdline | |
for i in "${line[@]}"; do | |
[[ "${i#initrd=*}" != "$i" ]] && continue | |
BOOT_OPTIONS+=("$i") | |
done | |
fi | |
if [[ -d "${BOOT_DIR_ABS%/*}" ]]; then | |
BOOT_DIR="/${MACHINE_ID}/0-rescue" | |
BOOT_ROOT=${BOOT_DIR_ABS%$BOOT_DIR} | |
LOADER_ENTRY="$BOOT_ROOT/loader/entries/${MACHINE_ID}-0-rescue.conf" | |
KERNEL="linux" | |
INITRD="initrd" | |
else | |
BLS_DIR="/boot/loader/entries" | |
BOOT_DIR_ABS="/boot" | |
LOADER_ENTRY="$BLS_DIR/${MACHINE_ID}-0-rescue.conf" | |
KERNEL="vmlinuz-0-rescue-${MACHINE_ID}" | |
INITRD="initramfs-0-rescue-${MACHINE_ID}.img" | |
fi | |
ret=0 | |
case "$COMMAND" in | |
add) | |
[[ -f "$LOADER_ENTRY" ]] && [[ -f "$BOOT_DIR_ABS/$KERNEL" ]] \ | |
&& [[ -f "$BOOT_DIR_ABS/$INITRD" ]] && exit 0 | |
# source our config dir | |
for f in $(dropindirs_sort ".conf" "/etc/dracut.conf.d" "/usr/lib/dracut/dracut.conf.d"); do | |
if [[ -e $f ]]; then | |
# shellcheck disable=SC1090 | |
. "$f" | |
fi | |
done | |
# shellcheck disable=SC2154 | |
[[ $dracut_rescue_image != "yes" ]] && exit 0 | |
[[ -d "$BOOT_DIR_ABS" ]] || mkdir -p "$BOOT_DIR_ABS" | |
if ! cp --reflink=auto "$KERNEL_IMAGE" "$BOOT_DIR_ABS/$KERNEL"; then | |
echo "Can't copy '$KERNEL_IMAGE to '$BOOT_DIR_ABS/$KERNEL'!" >&2 | |
fi | |
if [[ ! -f "$BOOT_DIR_ABS/$INITRD" ]]; then | |
dracut -f --no-hostonly -a "rescue" "$BOOT_DIR_ABS/$INITRD" "$KERNEL_VERSION" | |
((ret+=$?)) | |
fi | |
if [[ "${BOOT_DIR_ABS}" != "/boot" ]]; then | |
{ | |
echo "title $PRETTY_NAME - Rescue Image" | |
echo "version $KERNEL_VERSION" | |
echo "machine-id $MACHINE_ID" | |
echo "options ${BOOT_OPTIONS[*]} rd.auto=1" | |
echo "linux $BOOT_DIR/linux" | |
echo "initrd $BOOT_DIR/initrd" | |
} > "$LOADER_ENTRY" | |
else | |
if [[ -e "${BLS_DIR}/${MACHINE_ID}-${KERNEL_VERSION}.conf" ]]; then | |
cp -aT "${BLS_DIR}/${MACHINE_ID}-${KERNEL_VERSION}.conf" "$LOADER_ENTRY" | |
else | |
cp -aT "${KERNEL_IMAGE%/*}/bls.conf" "$LOADER_ENTRY" | |
fi | |
sed -i "s/${KERNEL_VERSION}/0-rescue-${MACHINE_ID}/" "$LOADER_ENTRY" | |
fi | |
((ret+=$?)) | |
;; | |
remove) | |
exit 0 | |
;; | |
*) | |
usage | |
ret=1;; | |
esac | |
exit $ret |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/bash | |
COMMAND="$1" | |
KERNEL_VERSION="$2" | |
BOOT_DIR_ABS="$3" | |
KERNEL_IMAGE="$4" | |
if ! [[ ${KERNEL_INSTALL_MACHINE_ID-x} ]]; then | |
exit 0 | |
fi | |
if [[ -d "$BOOT_DIR_ABS" ]]; then | |
KDUMP_INITRD="initrdkdump" | |
else | |
BOOT_DIR_ABS="/boot" | |
KDUMP_INITRD="initramfs-${KERNEL_VERSION}kdump.img" | |
fi | |
ret=0 | |
case "$COMMAND" in | |
add) | |
# Do nothing, kdump initramfs is strictly host only | |
# and managed by kdump service | |
;; | |
remove) | |
rm -f -- "$BOOT_DIR_ABS/$KDUMP_INITRD" | |
ret=$? | |
;; | |
esac | |
exit $ret |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/bash | |
# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- | |
# ex: ts=8 sw=4 sts=4 et filetype=sh | |
# SPDX-License-Identifier: LGPL-2.1-or-later | |
# | |
# This file is part of systemd. | |
# | |
# systemd is free software; you can redistribute it and/or modify it | |
# under the terms of the GNU Lesser General Public License as published by | |
# the Free Software Foundation; either version 2.1 of the License, or | |
# (at your option) any later version. | |
# | |
# systemd is distributed in the hope that it will be useful, but | |
# WITHOUT ANY WARRANTY; without even the implied warranty of | |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
# General Public License for more details. | |
# | |
# You should have received a copy of the GNU Lesser General Public License | |
# along with systemd; If not, see <http://www.gnu.org/licenses/>. | |
COMMAND="$1" | |
KERNEL_VERSION="$2" | |
ENTRY_DIR_ABS="$3" | |
KERNEL_IMAGE="$4" | |
INITRD_OPTIONS_START="5" | |
if ! [[ $KERNEL_INSTALL_MACHINE_ID ]]; then | |
exit 0 | |
fi | |
if ! [[ -d "$ENTRY_DIR_ABS" ]]; then | |
exit 0 | |
fi | |
MACHINE_ID=$KERNEL_INSTALL_MACHINE_ID | |
BOOT_ROOT=${ENTRY_DIR_ABS%/$MACHINE_ID/$KERNEL_VERSION} | |
BOOT_MNT=$(stat -c %m $BOOT_ROOT) | |
ENTRY_DIR=${ENTRY_DIR_ABS#$BOOT_MNT} | |
if [[ $COMMAND == remove ]]; then | |
rm -f "$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION.conf" | |
rm -f "$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION+"*".conf" | |
exit 0 | |
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 | |
if [[ -f /etc/kernel/cmdline ]]; then | |
read -r -d '' -a BOOT_OPTIONS < /etc/kernel/cmdline | |
elif [[ -f /usr/lib/kernel/cmdline ]]; then | |
read -r -d '' -a BOOT_OPTIONS < /usr/lib/kernel/cmdline | |
else | |
declare -a BOOT_OPTIONS | |
read -r -d '' -a line < /proc/cmdline | |
for i in "${line[@]}"; do | |
[[ "${i#initrd=*}" != "$i" ]] && continue | |
[[ "${i#BOOT_IMAGE=*}" != "$i" ]] && continue | |
BOOT_OPTIONS+=("$i") | |
done | |
fi | |
if [[ -f /etc/kernel/tries ]]; then | |
read -r TRIES </etc/kernel/tries | |
if ! [[ "$TRIES" =~ ^[0-9]+$ ]] ; then | |
echo "/etc/kernel/tries does not contain an integer." >&2 | |
exit 1 | |
fi | |
LOADER_ENTRY="$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION+$TRIES.conf" | |
else | |
LOADER_ENTRY="$BOOT_ROOT/loader/entries/$MACHINE_ID-$KERNEL_VERSION.conf" | |
fi | |
cp "$KERNEL_IMAGE" "$ENTRY_DIR_ABS/linux" && | |
chown root:root "$ENTRY_DIR_ABS/linux" && | |
chmod 0644 "$ENTRY_DIR_ABS/linux" || { | |
echo "Could not copy '$KERNEL_IMAGE to '$ENTRY_DIR_ABS/linux'." >&2 | |
exit 1 | |
} | |
INITRD_OPTIONS=( "${@:${INITRD_OPTIONS_START}}" ) | |
for initrd in "${INITRD_OPTIONS[@]}"; do | |
if [[ -f "${initrd}" ]]; then | |
initrd_basename="$(basename ${initrd})" | |
[ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \ | |
echo "Installing $ENTRY_DIR_ABS/${initrd_basename}" | |
cp "${initrd}" "$ENTRY_DIR_ABS/${initrd_basename}" && | |
chown root:root "$ENTRY_DIR_ABS/${initrd_basename}" && | |
chmod 0644 "$ENTRY_DIR_ABS/${initrd_basename}" || { | |
echo "Could not copy '${initrd}' to '$ENTRY_DIR_ABS/${initrd_basename}'." >&2 | |
exit 1 | |
} | |
fi | |
done | |
# If no initrd option is supplied, fall back to "initrd" which is | |
# the name used by dracut when generating it in its kernel-install hook | |
[[ ${#INITRD_OPTIONS[@]} == 0 ]] && INITRD_OPTIONS=( initrd ) | |
mkdir -p "${LOADER_ENTRY%/*}" || { | |
echo "Could not create loader entry directory '${LOADER_ENTRY%/*}'." >&2 | |
exit 1 | |
} | |
[ "$KERNEL_INSTALL_VERBOSE" -gt 0 ] && \ | |
echo "Creating $LOADER_ENTRY" | |
{ | |
echo "title $PRETTY_NAME" | |
echo "version $KERNEL_VERSION" | |
echo "machine-id $MACHINE_ID" | |
echo "options ${BOOT_OPTIONS[*]}" | |
echo "linux $ENTRY_DIR/linux" | |
for initrd in "${INITRD_OPTIONS[@]}"; do | |
[[ -f $ENTRY_DIR_ABS/$(basename ${initrd}) ]] && \ | |
echo "initrd $ENTRY_DIR/$(basename ${initrd})" | |
done | |
: | |
} > "$LOADER_ENTRY" || { | |
echo "Could not create loader entry '$LOADER_ENTRY'." >&2 | |
exit 1 | |
} | |
exit 0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/bash | |
COMMAND="$1" | |
KERNEL_VERSION="$2" | |
BOOT_DIR_ABS="$3" | |
KERNEL_IMAGE="$4" | |
if ! [[ $KERNEL_INSTALL_MACHINE_ID ]]; then | |
exit 0 | |
fi | |
MACHINE_ID=$KERNEL_INSTALL_MACHINE_ID | |
# with grub2 always /boot | |
BOOT_ROOT="/boot" | |
LOADER_ENTRIES="$BOOT_ROOT/loader/entries" | |
[ -d "$LOADER_ENTRIES" ] || exit 0 | |
[ "$COMMAND" = "add" ] || exit 0 | |
# The zipl bootloader doesn't support variables | |
ARCH=`uname -m` | |
[ "${ARCH:0:4}" = "s390" ] && exit 0 | |
pushd "$LOADER_ENTRIES" &> /dev/null | |
for f in `basename "$MACHINE_ID"`-*.conf; do | |
# Skip non-files and rescue entries | |
if [ ! -f "$f" -o "${f: -12}" == "-rescue.conf" ]; then | |
continue | |
fi | |
# Skip boom managed entries | |
if [[ "$f" =~ \w*-[0-9a-f]{7,}-.*-.*.conf ]]; then | |
continue | |
fi | |
grep -q '^\s*options\s\+.*\$tuned_params' "$f" || sed -i '/^\s*options\s\+/ s/\(.*\)/\1 \$tuned_params/' "$f" | |
grep -q '^\s*initrd\s\+.*\$tuned_initrd' "$f" || sed -i '/^\s*initrd\s\+/ s/\(.*\)/\1 \$tuned_initrd/' "$f" | |
done | |
popd &> /dev/null | |
exit 0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/bash - | |
# | |
# 95-akmodposttrans.install - Calls akmods for newly installed kernels | |
# | |
# Copyright (c) 2019 Nicolas Viéville <nicolas.vieville@uphf.fr> | |
# | |
# Permission is hereby granted, free of charge, to any person obtaining | |
# a copy of this software and associated documentation files (the | |
# "Software"), to deal in the Software without restriction, including | |
# without limitation the rights to use, copy, modify, merge, publish, | |
# distribute, sublicense, and/or sell copies of the Software, and to | |
# permit persons to whom the Software is furnished to do so, subject to | |
# the following conditions: | |
# | |
# The above copyright notice and this permission notice shall be | |
# included in all copies or substantial portions of the Software. | |
# | |
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, | |
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF | |
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND | |
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE | |
# LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION | |
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION | |
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. | |
# | |
COMMAND="$1" | |
KERNEL_VERSION="$2" | |
BOOT_DIR_ABS="$3" | |
KERNEL_IMAGE="$4" | |
# just check in case a user calls this directly | |
if [[ ! -w /var ]] ; then | |
echo "Needs to run as root to be able to install rpms." >&2 | |
exit 4 | |
fi | |
if [[ ! -n "${KERNEL_VERSION}" ]] ; then | |
exit 1 | |
fi | |
case "${COMMAND}" in | |
add) | |
# needs to run in background as rpmdb might be locked otherwise | |
if [ -e /bin/systemctl ] ; then | |
# Exit early if system-update.target is active - rhbz#1518401 | |
/bin/systemctl is-active system-update.target &>/dev/null | |
RET=$? | |
[ $RET == 0 ] && exit 0 | |
/bin/systemctl restart akmods@${KERNEL_VERSION}.service --no-block >/dev/null 2>&1 | |
else | |
nohup /usr/sbin/akmods --from-kernel-posttrans --kernels ${KERNEL_VERSION} > /dev/null 2>&1 & | |
fi | |
exit 0 | |
;; | |
remove) | |
# Nothing to do | |
;; | |
*) | |
;; | |
esac | |
exit 0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/bash | |
if ! [[ $KERNEL_INSTALL_MACHINE_ID ]]; then | |
exit 0 | |
fi | |
COMMAND="$1" | |
KERNEL_VERSION="$2" | |
BOOT_DIR_ABS="$3" | |
# If $BOOT_DIR_ABS exists, some other boot loader is active. | |
[[ -d "$BOOT_DIR_ABS" ]] && exit 0 | |
run_hooks() | |
{ | |
local f | |
local files="$1" | |
for f in $files ; do | |
[ -x "$f" ] || continue | |
"$f" "$KERNEL_VERSION" "/boot/vmlinuz-$KERNEL_VERSION" | |
done | |
} | |
case "$COMMAND" in | |
add) | |
run_hooks "/etc/kernel/postinst.d/*[^~] /etc/kernel/postinst.d/$KERNEL_VERSION/*[^~]" | |
;; | |
remove) | |
run_hooks "/etc/kernel/prerm.d/*[^~] /etc/kernel/prerm.d/$KERNEL_VERSION/*[^~]" | |
;; | |
*) | |
exit 0 | |
esac |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/bash | |
if ! [[ $KERNEL_INSTALL_MACHINE_ID ]]; then | |
exit 0 | |
fi | |
# PV and PVH Xen DomU guests boot with pygrub that doesn't have BLS support, | |
# also Xen Dom0 use the menuentries from 20_linux_xen and not the ones from | |
# 10_linux. So BLS support needs to be disabled for both Xen Dom0 and DomU. | |
if [[ -e /sys/hypervisor/type ]] && grep -q "^xen$" /sys/hypervisor/type; then | |
RUN_MKCONFIG=true | |
DISABLE_BLS=true | |
fi | |
ARCH=$(uname -m) | |
# Older ppc64le OPAL firmware (petitboot version < 1.8.0) don't have BLS support | |
# so grub2-mkconfig has to be run to generate a config with menuentry commands. | |
if [[ $ARCH = "ppc64le" ]] && [ -d /sys/firmware/opal ]; then | |
petitboot_path="/sys/firmware/devicetree/base/ibm,firmware-versions/petitboot" | |
if test -e ${petitboot_path}; then | |
read -r -d '' petitboot_version < ${petitboot_path} | |
petitboot_version="$(echo ${petitboot_version//v})" | |
major_version="$(echo ${petitboot_version} | cut -d . -f1)" | |
minor_version="$(echo ${petitboot_version} | cut -d . -f2)" | |
if test -z ${petitboot_version} || test ${major_version} -lt 1 || \ | |
test ${major_version} -eq 1 -a ${minor_version} -lt 8; then | |
RUN_MKCONFIG=true | |
fi | |
else | |
RUN_MKCONFIG=true | |
fi | |
fi | |
if [[ $DISABLE_BLS = "true" ]]; then | |
if grep -q '^GRUB_ENABLE_BLSCFG="*true"*\s*$' /etc/default/grub; then | |
sed -i 's/^GRUB_ENABLE_BLSCFG=.*/GRUB_ENABLE_BLSCFG=false/' /etc/default/grub | |
fi | |
fi | |
# A traditional grub configuration file needs to be generated only in the case when | |
# the bootloaders are not capable of populating a menu entry from the BLS fragments. | |
if [[ $RUN_MKCONFIG != "true" ]]; then | |
exit 0 | |
fi | |
[[ -f /etc/default/grub ]] && . /etc/default/grub | |
COMMAND="$1" | |
case "$COMMAND" in | |
add|remove) | |
grub2-mkconfig --no-grubenv-update -o /boot/grub2/grub.cfg >& /dev/null | |
;; | |
*) | |
;; | |
esac |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment