180 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			180 lines
		
	
	
		
			3.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| 
								 | 
							
								#!/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"
							 |