diff --git a/support/freebsd/rc.d/alkane b/support/freebsd/rc.d/alkane new file mode 100644 --- /dev/null +++ b/support/freebsd/rc.d/alkane @@ -0,0 +1,101 @@ +#!/bin/sh + +# PROVIDE: alkane +# REQUIRE: DAEMON +# KEYWORD: shutdown +# +# Add the following lines to /etc/rc.conf.local or /etc/rc.conf +# to enable this service: +# +# alkane_enable (bool): Set it to YES to enable alkane. +# Default is "NO". +# alkane_user (user): Set user to run alkane. +# Default is "deploy". +# alkane_dir_db (path): The database directory to use. Must match config. +# Default is "/var/db/alkane". +# alkane log_enable (bool): Enable logging to a specific log file +# Default is "YES" +# alkane_log_path (path): The path to the software log +# Default is "/var/log/alkane.log". +# alkane_log_level (str): The level of verbosity of the log (debug/info will output Rocket/Hyper too) +# Default is "warn" +# alkane_syslog_output_enable (bool): Set to enable syslog output. +# Default is "NO". See daemon(8). +# alkane_syslog_output_priority (str): Set syslog priority if syslog enabled. +# Default is "warn". See daemon(8). +# alkane_syslog_output_facility (str): Set syslog facility if syslog enabled. +# Default is "daemon". See daemon(8). + +. /etc/rc.subr + +name=alkane +rcvar=alkane_enable + +load_rc_config $name + +: ${alkane_enable:="NO"} +: ${alkane_user:="deploy"} +: ${alkane_dir_db:="/var/db/alkane"} +: ${alkane_log_enable:="YES"} +: ${alkane_log_path:="/var/log/alkane.log"} +: ${alkane_log_level:="warn"} +: ${alkane_config:="/usr/local/etc/alkane.conf"} +: ${alkane_address:="localhost"} +: ${alkane_port:="10206"} + +DAEMON=$(/usr/sbin/daemon 2>&1 | grep -q syslog ; echo $?) + +if [ ${DAEMON} -eq 0 ]; then + : ${alkane_syslog_output_enable:="NO"} + : ${alkane_syslog_output_priority:="warn"} + : ${alkane_syslog_output_facility:="daemon"} + if checkyesno alkane_syslog_output_enable; then + alkane_syslog_output_flags="-T ${name}" + + if [ -n "${alkane_syslog_output_priority}" ]; then + alkane_syslog_output_flags="${alkane_syslog_output_flags} -s ${alkane_syslog_output_priority}" + fi + + if [ -n "${alkane_syslog_output_facility}" ]; then + alkane_syslog_output_flags="${alkane_syslog_output_flags} -l ${alkane_syslog_output_facility}" + fi + fi +else + alkane_syslog_output_enable="NO" + alkane_syslog_output_flags="" +fi + +if checkyesno alkane_log_enable; then + alkane_log_enable="YES" + alkane_log_flags="-o ${alkane_log_path}" + alkane_env="${alkane_env} RUST_LOG=warn,alkane=${alkane_log_level} ${alkane_env}" +else + alkane_log_enable="NO" +fi + +alkane_env="${alkane_env} ROCKET_SECRET=$(openssl rand -base64 32) ROCKET_PORT=${alkane_port} ROCKET_ADDRESS=${alkane_address} ${alkane_env}" + +pidfile=/var/run/alkane.pid +procname="/usr/local/bin/alkane" +command="/usr/sbin/daemon" +command_args="-f -t ${name} ${alkane_log_flags} ${alkane_syslog_output_flags} -p ${pidfile} /usr/bin/env ${alkane_env} ${procname} server" + +start_precmd=alkane_startprecmd +required_files="$alkane_config" + +alkane_startprecmd() +{ + touch ${pidfile} + chown ${alkane_user} ${alkane_log_path} + + if [ "${alkane_log_enable}" = "YES" ]; then + touch ${alkane_log_path} + chown ${alkane_user} ${alkane_log_path} + fi + + if [ ! -d ${alkane_dir_db} ]; then + install -d -o ${alkane_user} ${alkane_dir_db} + fi +} + +run_rc_command "$1"