| 1 | #!/bin/sh |
| 2 | |
| 3 | PROGNAME='kernel-hooks' |
| 4 | HOOKS_DIR='/etc/kernel-hooks.d' |
| 5 | |
| 6 | [ -d $HOOKS_DIR ] || exit 0 |
| 7 | |
| 8 | flavors_vers= |
| 9 | for 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" |
| 21 | done |
| 22 | |
| 23 | for 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 |
| 46 | done |
| 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. |
| 51 | exit 0 |