projects/aports·blob master · refs

51 lines · 1.2 KiB

1#!/bin/sh
2
3PROGNAME='kernel-hooks'
4HOOKS_DIR='/etc/kernel-hooks.d'
5
6[ -d $HOOKS_DIR ] || exit 0
7
8flavors_vers=
9for path in "$@"; do
10 [ -f "$path" ] && continue
11 name="${path##*/}"
12
13 case "$name" in
14 [0-9]*-[0-9]*-*) ;; # go on
15 *) echo "$PROGNAME: ERROR: invalid kernel version: $name!" >&2; exit 1;;
16 esac
17
18 flavor=${name#*-}; flavor=${flavor#*-}
19 ver=${name%-$flavor}
20 flavors_vers="$flavors_vers $flavor:$ver"
21done
22
23for flavor in $(printf '%s\n' $flavors_vers | sort | cut -d: -f1 | uniq); do
24 relfile=/usr/share/kernel/$flavor/kernel.release
25
26 new_ver=
27 old_ver=
28 for fv in $flavors_vers; do
29 [ "${fv%:*}" = "$flavor" ] || continue
30 ver=${fv#*:}
31
32 [ "$(cat "$relfile" 2>/dev/null)" = "$ver-$flavor" ] \
33 && new_ver=$ver \
34 || old_ver=$ver
35 done
36
37 for hook in $HOOKS_DIR/*; do
38 [ -x "$hook" ] || continue
39 name=${hook##*/}
40
41 echo "$PROGNAME: executing hook $name ($flavor, $new_ver, $old_ver)" >&2
42
43 $hook "$flavor" "$new_ver" "$old_ver" \
44 || echo "$PROGNAME: ERROR: hook $name failed" >&2
45 done
46done
47
48# Triggers exiting with a non-zero status cause headaches. APK marks the
49# corresponding package and the world as broken. Consequently, it exists with
50# status 1 even after e.g. successful installation of a new package.
51exit 0