aboutsummaryrefslogtreecommitdiffstats
path: root/testing/elektra/elektra.trigger
diff options
context:
space:
mode:
Diffstat (limited to 'testing/elektra/elektra.trigger')
-rw-r--r--testing/elektra/elektra.trigger57
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