aboutsummaryrefslogtreecommitdiffstats
path: root/community/meilisearch/meilisearch.initd
diff options
context:
space:
mode:
Diffstat (limited to 'community/meilisearch/meilisearch.initd')
-rw-r--r--community/meilisearch/meilisearch.initd71
1 files changed, 71 insertions, 0 deletions
diff --git a/community/meilisearch/meilisearch.initd b/community/meilisearch/meilisearch.initd
new file mode 100644
index 00000000000..3df57541e1f
--- /dev/null
+++ b/community/meilisearch/meilisearch.initd
@@ -0,0 +1,71 @@
+#!/sbin/openrc-run
+
+name="Meilisearch"
+description="A lightning-fast search engine"
+
+: ${command_user:="meilisearch"}
+: ${cfgfile:="/etc/meilisearch/config.toml"}
+: ${master_key_file:="/etc/meilisearch/master_key"}
+: ${datadir:="/var/lib/meilisearch"}
+: ${start_wait:=50} # milliseconds
+: ${healthcheck_timer:=30}
+: ${respawn_delay:=5}
+
+command="/usr/bin/meilisearch"
+command_args="--config-file-path $cfgfile $command_args"
+command_background="yes"
+directory="$datadir"
+pidfile="/run/$RC_SVCNAME.pid"
+
+start_stop_daemon_args="--wait $start_wait $start_stop_daemon_args"
+# The leading space is to avoid fallback to $start_stop_daemon_args when this
+# is empty (supervise-daemon doesn't support --wait).
+supervise_daemon_args=" $supervise_daemon_args"
+
+depend() {
+ need localmount net
+ after firewall
+}
+
+start_pre() {
+ # This variable is not supported in Meilisearch >1.0, so we can use it
+ # to detect old config.
+ if [ "${MEILI_MAX_INDEX_SIZE-}" ]; then
+ eerror "You are using an outdated configuration; remove environment variables from"
+ eerror "/etc/conf.d/meilisearch and use $cfgfile instead."
+ return 1
+ fi
+
+ if [ -z "${MEILI_MASTER_KEY-}" ] && ! config_get 'master_key' >/dev/null; then
+ if ! [ -f "$master_key_file" ]; then
+ einfo "Generating random master_key in $master_key_file"
+ { head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32; echo ''; } \
+ | install -D -m 640 -g meilisearch /dev/stdin "$master_key_file"
+ fi
+
+ export MEILI_MASTER_KEY="$(cat "$master_key_file")"
+ fi
+
+ if [ "${logfile-}" ]; then
+ error_log="$logfile"
+ checkpath -f -m 640 -o "$command_user" "$logfile" || return 1
+ else
+ command_args="$command_args --syslog"
+ fi
+
+ return 0
+}
+
+healthcheck() {
+ local http_addr
+
+ [ -x /usr/bin/curl ] || return 0
+ http_addr="$(config_get 'http_addr')" || return 0
+
+ /usr/bin/curl -fq "$http_addr/health"
+}
+
+config_get() {
+ local key="$1"
+ sed -En 's/^'"$key"'\s*=\s*("([^"]+)"|([^ #]+)).*/\2\3/p' "$cfgfile" | grep -m1 .
+}