diff options
Diffstat (limited to 'community/meilisearch/meilisearch.initd')
-rw-r--r-- | community/meilisearch/meilisearch.initd | 71 |
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 . +} |