#!/bin/sh # PROVIDE: bitmarkd # REQUIRE: LOGIN cleanvar # KEYWORD: shutdown # Add the following lines to /etc/rc.conf to enable: # bitmarkd_enable (bool) Set to "NO" by default. # Set it to "YES" to enable bitmarkd # bitmarkd_options (str) Set to "" by default # bitmarkd_user (str) Set to "%%BITMARKD_USER%%" by default. # bitmarkd_group (str) Set to "%%BITMARKD_GROUP%%" by default. # bitmarkd_config_file (str) Set to "%%PREFIX%%/etc/${name}.conf" by default. # bitmarkd_data_dir (str) Set to "%%BITMARKD_DATA%%" by default. # bitmarkd_run_dir (str) Set to "%%BITMARKD_RUN%%" by default. # bitmarkd_syslog_enable (bool) Set to "NO" by default. # Set it to "YES" to enable syslog stdout/stderr # bitmarkd_ec2_ipv4_enable (bool) Set to NO by default. # Set it to"YES" to fetch EC2 public IPv4. # bitmarkd_ec2_url (str) # Set to "http://169.254.169.254/2016-09-02/meta-data/public-ipv4" by default. # Expects this to return just the IPv4 address. # bitmarkd_ec2_cmd (str) Set to "fetch -q -o -" by default. # bitmarkdlimits_enable (bool) Set to "NO" by default. # Set it to "YES" to enable bitmarkdlimits # bitmarkdlimits_args (str) Set to "-e -U ${bitmarkd_user}" by default . /etc/rc.subr name="bitmarkd" rcvar=bitmarkd_enable load_rc_config ${name} : ${bitmarkd_enable:="NO"} : ${bitmarkd_options:=""} : ${bitmarkd_user:="%%BITMARKD_USER%%"} : ${bitmarkd_group:="%%BITMARKD_GROUP%%"} : ${bitmarkd_config_file:="%%PREFIX%%/etc/${name}.conf"} : ${bitmarkd_data_dir:="%%BITMARKD_DATA%%"} : ${bitmarkd_run_dir:="%%BITMARKD_RUN%%"} : ${bitmarkd_syslog_enable:="NO"} : ${bitmarkd_ec2_ipv4_enable:="NO"} : ${bitmarkd_ec2_url:="http://169.254.169.254/2016-09-02/meta-data/public-ipv4"} : ${bitmarkd_ec2_cmd:="fetch -q -o -"} : ${bitmarkdlimits_enable:="NO"} : ${bitmarkdlimits_args:="-e -U ${bitmarkd_user}"} start_precmd="${name}_precmd" restart_precmd="${name}_checkconfig" stop_postcmd="${name}_poststop" keygen_cmd="${name}_keygen" keygen_precmd="${name}_checkconfig" dns_cmd="${name}_dns" dns_precmd="${name}_checkconfig" clearcache_cmd="${name}_clearcache" clearcache_precmd="${name}_precmd" extra_commands='keygen dns clearcache' pidfile="${bitmarkd_run_dir}/${name}.pid" # bitmarkd creates its own PID file so need to remove if stale lock_file="${bitmarkd_data_dir}/${name}.pid" required_files="${bitmarkd_config_file}" _bitmarkd_program="%%PREFIX%%/sbin/bitmarkd" _bitmarkd_arguments="--quiet --config-file=${bitmarkd_config_file} ${bitmarkd_options}" command="/usr/sbin/daemon" command_args="-f" checkyesno bitmarkd_syslog_enable && command_args="-S -T bitmarkd" command_args="${command_args} -P ${pidfile} -R 60 -- ${_bitmarkd_program} ${_bitmarkd_arguments}" #procname=${_bitmarkd_program} # do not override procname as program runs under daemon # list of items for keygen generate_list='gen-peer-identity gen-proof-identity gen-rpc-cert' # setup environment to reduce memory loading export GODEBUG='madvdontneed=1' export MALLOC_CONF='abort:true,narenas:1' bitmarkd_checkdirs() { local dir for dir in "${bitmarkd_data_dir}" "${bitmarkd_run_dir}" do [ -d "${dir}" ] || install -d -o "${bitmarkd_user}" -g "${bitmarkd_group}" -m 770 "${dir}" done cd "${bitmarkd_data_dir}" } bitmarkd_checkconfig() { bitmarkd_checkdirs #echo "Performing sanity check on bitmarkd configuration:" #eval ${command} ${bitmarkd_flags} -t # set environment for bitmarkd to access the currently assigned EC2 public IPv4 if checkyesno bitmarkd_ec2_ipv4_enable then PUBLIC_IPV4=$(${bitmarkd_ec2_cmd} "${bitmarkd_ec2_url}") export PUBLIC_IPV4 fi } bitmarkd_precmd() { bitmarkd_checkconfig pid=$(check_pidfile "${pidfile}" "${command}") if [ -n "${pid}" ] then echo "another bitmarkd is running on pid: ${pid}" return 1 else rm -f "${pidfile}" fi if checkyesno bitmarkdlimits_enable then eval $(/usr/bin/limits ${bitmarkdlimits_args}) 2>/dev/null else return 0 fi } bitmarkd_poststop() { rm -f "${pidfile}" rm -f "${lock_file}" } bitmarkd_keygen() { for c in ${generate_list} do su -m "${bitmarkd_user}" -c "${_bitmarkd_program} ${_bitmarkd_arguments} ${c} ${bitmarkd_data_dir}" done } bitmarkd_dns() { su -m "${bitmarkd_user}" -c "${_bitmarkd_program} ${_bitmarkd_arguments} dns-txt" } bitmarkd_clearcache() { local file for file in "${bitmarkd_data_dir}/"*.cache do [ -f "${file}" ] && rm "${file}" done } run_rc_command "$1"