mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-04-19 19:36:44 +02:00
50 lines
1.2 KiB
Bash
50 lines
1.2 KiB
Bash
#!/bin/sh
|
||
|
||
PROGNAME='kernel-hooks'
|
||
HOOKS_DIR='/etc/kernel-hooks.d'
|
||
|
||
[ -d $HOOKS_DIR ] || exit 0
|
||
|
||
flavors_vers=
|
||
for path in "$@"; do
|
||
name="${path##*/}"
|
||
|
||
case "$name" in
|
||
[0-9]*-[0-9]*-*) ;; # go on
|
||
*) echo "$PROGNAME: ERROR: invalid kernel version: $name!" >&2; exit 1;;
|
||
esac
|
||
|
||
flavor=${name#*-}; flavor=${flavor#*-}
|
||
ver=${name%-$flavor}
|
||
flavors_vers="$flavors_vers $flavor:$ver"
|
||
done
|
||
|
||
for flavor in $(printf '%s\n' $flavors_vers | sort | cut -d: -f1 | uniq); do
|
||
relfile=/usr/share/kernel/$flavor/kernel.release
|
||
|
||
new_ver=
|
||
old_ver=
|
||
for fv in $flavors_vers; do
|
||
[ "${fv%:*}" = "$flavor" ] || continue
|
||
ver=${fv#*:}
|
||
|
||
[ "$(cat "$relfile" 2>/dev/null)" = "$ver-$flavor" ] \
|
||
&& new_ver=$ver \
|
||
|| old_ver=$ver
|
||
done
|
||
|
||
for hook in $HOOKS_DIR/*; do
|
||
[ -x "$hook" ] || continue
|
||
name=${hook##*/}
|
||
|
||
echo "$PROGNAME: executing hook $name ($flavor, $new_ver, $old_ver)" >&2
|
||
|
||
$hook "$flavor" "$new_ver" "$old_ver" \
|
||
|| echo "$PROGNAME: ERROR: hook $name failed" >&2
|
||
done
|
||
done
|
||
|
||
# Triggers exiting with a non-zero status cause headaches. APK marks the
|
||
# corresponding package and the world as broken. Consequently, it exists with
|
||
# status 1 even after e.g. successful installation of a new package.
|
||
exit 0
|