From 3bd2e4a5845e3fe56c3285a5974f718b35238bcd Mon Sep 17 00:00:00 2001 From: Paul Wilde <31094984+pswilde@users.noreply.github.com> Date: Fri, 9 May 2025 17:10:06 +0000 Subject: [PATCH] Overhaul anubis.freebsd (#427) * Overhaul anubis.freebsd Some changes here to reflect the discussion in pull request 274 regarding the `anubis_env`, `anubis_env_file` and `anubis_args` variables. At the risk of improving personal choices in configuration with a minor amount more complexity, this new script now allows for the use of all three of these, together, with no interference between them all i.e. - if `anubis_env_file` is set, environment variables will be taken from this file - if `anubis_env` is set, environment variables will be taken from this string of variables, and override matching variables set in `anubis_env_file` - if `anubis_args` is set, runtime parameters will be taken from this string and override matching ones in both `anubis_env_file` and `anubis_env` Thanks to @dlangille for the advice with this. Signed-off-by: Paul Wilde <31094984+pswilde@users.noreply.github.com> * Update CHANGELOG.md Signed-off-by: Paul Wilde <31094984+pswilde@users.noreply.github.com> * Remove unnecessary comment line Signed-off-by: Paul Wilde <31094984+pswilde@users.noreply.github.com> * Correct helper information for anubis_env_file Signed-off-by: Paul Wilde <31094984+pswilde@users.noreply.github.com> --------- Signed-off-by: Paul Wilde <31094984+pswilde@users.noreply.github.com> --- docs/docs/CHANGELOG.md | 1 + run/anubis.freebsd | 63 +++++++++++++++++++++++++++++++++--------- 2 files changed, 51 insertions(+), 13 deletions(-) diff --git a/docs/docs/CHANGELOG.md b/docs/docs/CHANGELOG.md index 9583f23..1e97ef3 100644 --- a/docs/docs/CHANGELOG.md +++ b/docs/docs/CHANGELOG.md @@ -13,6 +13,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add `check-spelling` for spell checking - Add `--target-insecure-skip-verify` flag/envvar to allow Anubis to hit a self-signed HTTPS backend. +- Minor adjustments to FreeBSD rc.d script to allow for more flexible configuration. ## v1.18.0: Varis zos Galvus diff --git a/run/anubis.freebsd b/run/anubis.freebsd index 1c980fb..9572b18 100644 --- a/run/anubis.freebsd +++ b/run/anubis.freebsd @@ -1,9 +1,28 @@ #!/bin/sh # PROVIDE: anubis -# REQUIRE: NETWORKING +# REQUIRE: DAEMON NETWORKING # KEYWORD: shutdown +# Add the following lines to /etc/rc.conf.local or /etc/rc.conf to enable anubis: +# anubis_enable (bool): Set to "NO" by default. +# Set it to "YES" to enable anubis. +# anubis_user (user): Set to "www" by default. +# User to run anubis as. +# anubis_group (group): Set to "www" by default. +# Group to run anubis as. +# anubis_bin (str): Set to "/usr/local/bin/anubis" by default. +# Location of the anubis binary +# anubis_args (str): Set to "" by default. +# Extra flags passed to anubis. +# anubis_env (str): Set to "" by default. +# List of environment variables to be set before starting.. +# anubis_env_file (str): Set to "/etc/anubis.env" by default. +# Location of a file containing environment variables. +# +# Closely follows the init script from https://cgit.freebsd.org/ports/tree/www/go-anubis/files/anubis.in +# with a couple of adjustments for more flexible environment variable handling + . /etc/rc.subr name=anubis @@ -12,23 +31,41 @@ rcvar=anubis_enable load_rc_config ${name} : ${anubis_enable="NO"} -: ${anubis_user="anubis"} +: ${anubis_user="www"} +: ${anubis_group="www"} : ${anubis_bin="/usr/local/bin/anubis"} -: ${anubis_environment_file="/etc/anubis.env"} +: ${anubis_args=""} +: ${anubis_env=""} +: ${anubis_env_file="/etc/anubis.env"} +pidfile=/var/run/${name}.pid +daemon_pidfile=/var/run/${name}-daemon.pid command=/usr/sbin/daemon procname=${anubis_bin} -pidfile=/var/run/anubis.pid -logfile=/var/log/anubis.log -command_args="-c -f -p ${pidfile} -o ${logfile} ${procname}" -start_precmd=anubis_precmd +logfile=/var/log/${name}.log +command_args="-c -f -R 5 -r -T ${name} -p ${pidfile} -P ${daemon_pidfile} -o ${logfile} ${procname} ${anubis_args}" +start_precmd=anubis_startprecmd +stop_postcmd=anubis_stoppostcmd -anubis_precmd () { - export $(xargs < ${anubis_environment_file}) - if [ ! -f ${logfile} ]; then - install -o anubis /dev/null ${logfile} - fi - install -o anubis /dev/null ${pidfile} +anubis_startprecmd () { + if [ ! -e ${logfile} ]; then + install -o ${anubis_user} -g ${anubis_group} /dev/null ${logfile} + fi + if [ ! -e ${daemon_pidfile} ]; then + install -o ${anubis_user} -g ${anubis_group} /dev/null ${daemon_pidfile} + fi + if [ ! -e ${pidfile} ]; then + install -o ${anubis_user} -g ${anubis_group} /dev/null ${pidfile} + fi } +anubis_stoppostcmd() { + if [ -f "${daemon_pidfile}" ]; then + pids=$( pgrep -F ${daemon_pidfile} 2>&1 ) + _err=$? + [ ${_err} -eq 0 ] && kill -9 ${pids} + fi +} + + run_rc_command "$1"