diff options
Diffstat (limited to 'testing/elektra/elektra.trigger')
-rw-r--r-- | testing/elektra/elektra.trigger | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/testing/elektra/elektra.trigger b/testing/elektra/elektra.trigger new file mode 100644 index 0000000000..bc42f1dab1 --- /dev/null +++ b/testing/elektra/elektra.trigger @@ -0,0 +1,57 @@ +#!/bin/sh +# +# This trigger creates/updates symlinks for default resolver and storage based +# on installed packages. +# + +ELEKTRA_LIBS='/usr/lib/elektra' +RESOLVER_LINK="$ELEKTRA_LIBS/libelektra-resolver.so" +STORAGE_LINK="$ELEKTRA_LIBS/libelektra-storage.so" + +PREFERRED_RESOLVER='elektra-resolver_fm_hpu_b' +PREFERRED_STORAGE='elektra-dump' + + +# Prints name of some installed elektra package that *provides* $1 +# (e.g. resolver, storage). If package $2 is installed, then it prints that. +# Otherwise it prints name of the first found package based on alphabetical +# order. +find_installed_provider() { + local provider="$1" + local preferred="$2" + local pkgname + + if [ -e "$ELEKTRA_LIBS/lib$preferred.so" ]; then + echo "$preferred" + else + # NOTE: `apk info` doesn't work correctly here, probably + # due to apk DB lock or something like that. + for pkgname in $(apk search -aqx elektra-$provider | sort | uniq); do + if [ -e "$ELEKTRA_LIBS/lib$pkgname.so" ]; then + echo "$pkgname" + return 0 + fi + done + return 1 + fi +} + +if ! [ -e "$RESOLVER_LINK" ]; then + if resolver=$(find_installed_provider resolver $PREFERRED_RESOLVER); then + echo "elektra: Switching default resolver to ${resolver#elektra-}" >&2 + ln -sf "lib$resolver.so" "$RESOLVER_LINK" + else + echo "elektra: No resolver provider found!" >&2 + fi +fi + +if ! [ -e "$STORAGE_LINK" ]; then + if storage=$(find_installed_provider storage $PREFERRED_STORAGE); then + echo "elektra: Switching default storage to ${storage#elektra-}" >&2 + ln -sf "lib$storage.so" "$STORAGE_LINK" + else + echo "elektra: No storage provider found!" >&2 + fi +fi + +exit 0 |