180 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			180 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/bin/sh
 | |
| # PROVIDE: bitcoin
 | |
| # REQUIRE: LOGIN cleanvar
 | |
| # KEYWORD: shutdown
 | |
| 
 | |
| #
 | |
| # Add the following lines to /etc/rc.conf to enable :
 | |
| # bitcoin_enable (bool):	Set to "NO" by default.
 | |
| #				Set it to "YES" to enable bitcoin
 | |
| # bitcoin_user (str)		Set to "bitcoin" by default.
 | |
| # bitcoin_group (str)		Set to "bitcoin" by default.
 | |
| # bitcoin_conf (str)		Set to "/bitcoin/bitcoin.conf" by default.
 | |
| # bitcoin_data_dir (str)	Set to "/bitcoin" by default.
 | |
| # bitcoin_syslog_facility(str)	Set to "local0" by default.
 | |
| # bitcoin_syslog_priority(str)	Set to "info" by default.
 | |
| # bitcoinlimits_enable (bool)	Set to "NO" by default.
 | |
| #				Set it to "YES" to enable bitcoinlimits
 | |
| # bitcoinlimits_args		Set to "-e -U ${bitcoin_user}" by default
 | |
| 
 | |
| 
 | |
| . /etc/rc.subr
 | |
| 
 | |
| name="bitcoin"
 | |
| rcvar=bitcoin_enable
 | |
| 
 | |
| start_precmd="bitcoin_precmd"
 | |
| start_cmd="bitcoin_start"
 | |
| restart_precmd="bitcoin_checkconfig"
 | |
| reload_precmd="bitcoin_checkconfig"
 | |
| configtest_cmd="bitcoin_checkconfig"
 | |
| status_cmd="bitcoin_status"
 | |
| stop_cmd="bitcoin_stop"
 | |
| stop_postcmd="bitcoin_wait"
 | |
| command="/usr/local/bin/bitcoind"
 | |
| daemon_command="/usr/sbin/daemon"
 | |
| extra_commands="configtest"
 | |
| pidfile="/bitcoin/bitcoind.pid"
 | |
| 
 | |
| : ${bitcoin_enable:="NO"}
 | |
| : ${bitcoinlimits_enable:="NO"}
 | |
| 
 | |
| load_rc_config ${name}
 | |
| 
 | |
| : ${bitcoin_user:="bitcoin"}
 | |
| : ${bitcoin_group:="bitcoin"}
 | |
| : ${bitcoin_data_dir:="/bitcoin"}
 | |
| : ${bitcoin_config_file:="/bitcoin/bitcoin.conf"}
 | |
| : ${bitcoin_syslog_facility:="local0"}
 | |
| : ${bitcoin_syslog_priority:="info"}
 | |
| : ${bitcoin_syslog_tag:="bitcoin"}
 | |
| : ${bitcoin_kill_after:="300"}
 | |
| : ${bitcoinlimits_args:="-e -U ${bitcoin_user}"}
 | |
| 
 | |
| # set up dependant variables
 | |
| procname="${command}"
 | |
| required_files="${bitcoin_config_file}"
 | |
| pidfile="${bitcoin_data_dir}/bitcoind.pid"
 | |
| 
 | |
| bitcoin_checkconfig()
 | |
| {
 | |
|   echo "Performing sanity check on bitcoin configuration:"
 | |
|   if [ ! -d "${bitcoin_data_dir}" ]
 | |
|   then
 | |
|     echo "Missing data directory: ${bitcoin_data_dir}"
 | |
|     exit 1
 | |
|   fi
 | |
|   chown -R "${bitcoin_user}:${bitcoin_group}" "${bitcoin_data_dir}"
 | |
| 
 | |
|   if [ ! -f "${bitcoin_config_file}" ]
 | |
|   then
 | |
|     echo "Missing configuration file: ${bitcoin_config_file}"
 | |
|     exit 1
 | |
|   fi
 | |
|   if [ ! -x "${command}" ]
 | |
|   then
 | |
|     echo "Missing executable: ${command}"
 | |
|     exit 1
 | |
|   fi
 | |
|   return 0
 | |
| }
 | |
| 
 | |
| bitcoin_cleanup()
 | |
| {
 | |
|   rm -f "${pidfile}"
 | |
| }
 | |
| 
 | |
| bitcoin_precmd()
 | |
| {
 | |
|   bitcoin_checkconfig
 | |
| 
 | |
|   pid=$(check_pidfile "${pidfile}" "${procname}")
 | |
|   if [ -z "${pid}" ]
 | |
|   then
 | |
|     echo "Bitcoind is not running"
 | |
|     rm -f "${pidfile}"
 | |
|   fi
 | |
| 
 | |
|   if checkyesno bitcoinlimits_enable
 | |
|   then
 | |
|     eval $(/usr/bin/limits ${bitcoinlimits_args}) 2>/dev/null
 | |
|   else
 | |
|     return 0
 | |
|   fi
 | |
| }
 | |
| 
 | |
| bitcoin_status()
 | |
| {
 | |
|   local pid
 | |
|   pid=$(check_pidfile "${pidfile}" "${procname}")
 | |
|   if [ -z "${pid}" ]
 | |
|   then
 | |
|     echo "Bitcoind is not running"
 | |
|     return 1
 | |
|   else
 | |
|     echo "Bitcoind running, pid: ${pid}"
 | |
|   fi
 | |
| }
 | |
| 
 | |
| bitcoin_start()
 | |
| {
 | |
|   echo "Starting bitcoin:"
 | |
|   cd "${bitcoin_data_dir}" || return 1
 | |
|   ${daemon_command} \
 | |
|     -u "${bitcoin_user}" \
 | |
|     -l "${bitcoin_syslog_facility}" \
 | |
|     -s "${bitcoin_syslog_priority}" \
 | |
|     -T "${bitcoin_syslog_tag}" \
 | |
|     ${command} \
 | |
|     -printtoconsole=1 \
 | |
|     -conf="${bitcoin_config_file}" \
 | |
|     -datadir="${bitcoin_data_dir}"
 | |
| }
 | |
| 
 | |
| bitcoin_stop()
 | |
| {
 | |
|   echo "Stopping bitcoin:"
 | |
|   pid=$(check_pidfile "${pidfile}" "${procname}")
 | |
|   if [ -z "${pid}" ]
 | |
|   then
 | |
|     echo "Bitcoind is not running"
 | |
|     return 1
 | |
|   else
 | |
|     kill ${pid}
 | |
|   fi
 | |
| }
 | |
| 
 | |
| bitcoin_wait()
 | |
| {
 | |
|   local n="${bitcoin_kill_after}"
 | |
|   echo "Waiting for bitcoin shutdown:"
 | |
|   while :
 | |
|   do
 | |
|     printf '.'
 | |
|     pid=$(check_pidfile "${pidfile}" "${procname}")
 | |
|     if [ -z "${pid}" ]
 | |
|     then
 | |
|       printf '\n'
 | |
|       break
 | |
|     fi
 | |
|     sleep 1
 | |
|     n=$((${n} - 1))
 | |
|     if [ ${n} -eq 0 -a -f "${pidfile}" ]
 | |
|     then
 | |
|       printf "\nForce shutdown"
 | |
|       kill -9 $(cat "${pidfile}")
 | |
|       for n in 1 2 3
 | |
|       do
 | |
|         printf '.'
 | |
|         sleep 1
 | |
|       done
 | |
|       printf '\n'
 | |
|       break
 | |
|     fi
 | |
|   done
 | |
|   rm -f "${pidfile}"
 | |
|   echo "Shutdown complete"
 | |
| }
 | |
| 
 | |
| run_rc_command "$1"
 |