Kernel install doesn't need the second argument on his command line when removing. This is correctly documented in the man page.
137 lines
3.1 KiB
Bash
137 lines
3.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
|
|
#
|
|
# This file is part of systemd.
|
|
#
|
|
# Copyright 2013 Harald Hoyer
|
|
#
|
|
# 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/>.
|
|
|
|
usage()
|
|
{
|
|
echo "Usage:"
|
|
echo " $0 add KERNEL-VERSION KERNEL-IMAGE"
|
|
echo " $0 remove KERNEL-VERSION"
|
|
}
|
|
|
|
dropindirs_sort()
|
|
{
|
|
local suffix=$1; shift
|
|
local -a files
|
|
local f d i
|
|
|
|
readarray -t files < <(
|
|
for d in "$@"; do
|
|
for i in "$d/"*"$suffix"; do
|
|
if [[ -e "$i" ]]; then
|
|
echo "${i##*/}"
|
|
fi
|
|
done
|
|
done | sort -Vu
|
|
)
|
|
|
|
for f in "${files[@]}"; do
|
|
for d in "$@"; do
|
|
if [[ -e "$d/$f" ]]; then
|
|
echo "$d/$f"
|
|
continue 2
|
|
fi
|
|
done
|
|
done
|
|
}
|
|
|
|
export LC_COLLATE=C
|
|
|
|
for i in "$@"; do
|
|
if [ "$i" == "--help" -o "$i" == "-h" ]; then
|
|
usage
|
|
exit 0
|
|
fi
|
|
done
|
|
|
|
if [[ "${0##*/}" == 'installkernel' ]]; then
|
|
COMMAND='add'
|
|
else
|
|
COMMAND="$1"
|
|
shift
|
|
fi
|
|
|
|
KERNEL_VERSION="$1"
|
|
KERNEL_IMAGE="$2"
|
|
|
|
if [[ -f /etc/machine-id ]]; then
|
|
read MACHINE_ID < /etc/machine-id
|
|
fi
|
|
|
|
if ! [[ $MACHINE_ID ]]; then
|
|
echo "Could not determine your machine ID from /etc/machine-id." >&2
|
|
echo "Please run 'systemd-machine-id-setup' as root. See man:machine-id(5)" >&2
|
|
exit 1
|
|
fi
|
|
|
|
if [[ ! $COMMAND ]] || [[ ! $KERNEL_VERSION ]]; then
|
|
echo "Not enough arguments" >&2
|
|
exit 1
|
|
fi
|
|
|
|
BOOT_DIR_ABS="/boot/$MACHINE_ID/$KERNEL_VERSION"
|
|
ret=0
|
|
|
|
readarray -t PLUGINS < <(
|
|
dropindirs_sort ".install" \
|
|
"/etc/kernel/install.d" \
|
|
"/usr/lib/kernel/install.d"
|
|
)
|
|
|
|
case $COMMAND in
|
|
add)
|
|
if [[ ! "$KERNEL_IMAGE" ]]; then
|
|
echo "Command 'add' requires an argument" >&2
|
|
exit 1
|
|
fi
|
|
|
|
mkdir -p "$BOOT_DIR_ABS" || {
|
|
echo "Could not create boot directory '$BOOT_DIR_ABS'." >&2
|
|
exit 1
|
|
}
|
|
|
|
for f in "${PLUGINS[@]}"; do
|
|
if [[ -x $f ]]; then
|
|
"$f" add "$KERNEL_VERSION" "$BOOT_DIR_ABS" "$KERNEL_IMAGE"
|
|
((ret+=$?))
|
|
fi
|
|
done
|
|
;;
|
|
|
|
remove)
|
|
for f in "${PLUGINS[@]}"; do
|
|
if [[ -x $f ]]; then
|
|
"$f" remove "$KERNEL_VERSION" "$BOOT_DIR_ABS"
|
|
((ret+=$?))
|
|
fi
|
|
done
|
|
|
|
rm -rf "$BOOT_DIR_ABS"
|
|
((ret+=$?))
|
|
;;
|
|
|
|
*)
|
|
echo "Unknown command '$COMMAND'" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
exit $ret
|