You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
197 lines
6.3 KiB
197 lines
6.3 KiB
From 779e7c8fe188bea5b2185be0784112104be168df Mon Sep 17 00:00:00 2001
|
|
From: Matt Whitlock <bitcoin@mattwhitlock.name>
|
|
Date: Sun, 17 Sep 2023 10:02:20 -0400
|
|
Subject: [PATCH] contrib/init: improve OpenRC scripts and systemd service unit
|
|
|
|
---
|
|
contrib/init/bitcoind.openrc | 112 +++++++++++++++----------------
|
|
contrib/init/bitcoind.openrcconf | 7 +-
|
|
contrib/init/bitcoind.service | 5 ++
|
|
3 files changed, 64 insertions(+), 60 deletions(-)
|
|
|
|
diff --git a/contrib/init/bitcoind.openrc b/contrib/init/bitcoind.openrc
|
|
index 013a1a6070..7d16e975e5 100644
|
|
--- a/contrib/init/bitcoind.openrc
|
|
+++ b/contrib/init/bitcoind.openrc
|
|
@@ -1,76 +1,72 @@
|
|
#!/sbin/openrc-run
|
|
|
|
-# backward compatibility for existing gentoo layout
|
|
-#
|
|
-if [ -d "/var/lib/bitcoin/.bitcoin" ]; then
|
|
- BITCOIND_DEFAULT_DATADIR="/var/lib/bitcoin/.bitcoin"
|
|
-else
|
|
- BITCOIND_DEFAULT_DATADIR="/var/lib/bitcoind"
|
|
-fi
|
|
+: ${BITCOIND_CONFIGFILE:=/etc/bitcoin/bitcoin.conf}
|
|
+: ${BITCOIND_PIDDIR:=/run/bitcoind}
|
|
+: ${BITCOIND_PIDFILE:=${BITCOIND_PIDDIR}/${SVCNAME}.pid}
|
|
+: ${BITCOIND_DATADIR:=/var/lib/bitcoind}
|
|
+: ${BITCOIND_LOGDIR:=/var/log/bitcoind}
|
|
+: ${BITCOIND_USER:=${BITCOIN_USER:-bitcoin}}
|
|
+: ${BITCOIND_GROUP:=bitcoin}
|
|
+: ${BITCOIND_BIN:=/usr/bin/bitcoind}
|
|
+: ${BITCOIND_NICE:=${NICELEVEL:-0}}
|
|
+: ${BITCOIND_OPTS=${BITCOIN_OPTS}}
|
|
|
|
-BITCOIND_CONFIGFILE=${BITCOIND_CONFIGFILE:-/etc/bitcoin/bitcoin.conf}
|
|
-BITCOIND_PIDDIR=${BITCOIND_PIDDIR:-/var/run/bitcoind}
|
|
-BITCOIND_PIDFILE=${BITCOIND_PIDFILE:-${BITCOIND_PIDDIR}/bitcoind.pid}
|
|
-BITCOIND_DATADIR=${BITCOIND_DATADIR:-${BITCOIND_DEFAULT_DATADIR}}
|
|
-BITCOIND_USER=${BITCOIND_USER:-${BITCOIN_USER:-bitcoin}}
|
|
-BITCOIND_GROUP=${BITCOIND_GROUP:-bitcoin}
|
|
-BITCOIND_BIN=${BITCOIND_BIN:-/usr/bin/bitcoind}
|
|
-BITCOIND_NICE=${BITCOIND_NICE:-${NICELEVEL:-0}}
|
|
-BITCOIND_OPTS="${BITCOIND_OPTS:-${BITCOIN_OPTS}}"
|
|
-
|
|
-name="Bitcoin Core Daemon"
|
|
+name="Bitcoin Core daemon"
|
|
description="Bitcoin cryptocurrency P2P network daemon"
|
|
|
|
-command="/usr/bin/bitcoind"
|
|
-command_args="-pid=\"${BITCOIND_PIDFILE}\" \
|
|
- -conf=\"${BITCOIND_CONFIGFILE}\" \
|
|
- -datadir=\"${BITCOIND_DATADIR}\" \
|
|
- -daemon \
|
|
- ${BITCOIND_OPTS}"
|
|
-
|
|
required_files="${BITCOIND_CONFIGFILE}"
|
|
-start_stop_daemon_args="-u ${BITCOIND_USER} \
|
|
- -N ${BITCOIND_NICE} -w 2000"
|
|
pidfile="${BITCOIND_PIDFILE}"
|
|
-
|
|
-# The retry schedule to use when stopping the daemon. Could be either
|
|
-# a timeout in seconds or multiple signal/timeout pairs (like
|
|
-# "SIGKILL/180 SIGTERM/300")
|
|
-retry="${BITCOIND_SIGTERM_TIMEOUT}"
|
|
+in_background_fake="start"
|
|
|
|
depend() {
|
|
need localmount net
|
|
}
|
|
|
|
-# verify
|
|
-# 1) that the datadir exists and is writable (or create it)
|
|
-# 2) that a directory for the pid exists and is writable
|
|
-# 3) ownership and permissions on the config file
|
|
start_pre() {
|
|
- checkpath \
|
|
- -d \
|
|
- --mode 0750 \
|
|
- --owner "${BITCOIND_USER}:${BITCOIND_GROUP}" \
|
|
- "${BITCOIND_DATADIR}"
|
|
-
|
|
- checkpath \
|
|
- -d \
|
|
- --mode 0755 \
|
|
- --owner "${BITCOIND_USER}:${BITCOIND_GROUP}" \
|
|
- "${BITCOIND_PIDDIR}"
|
|
-
|
|
- checkpath -f \
|
|
- -o "${BITCOIND_USER}:${BITCOIND_GROUP}" \
|
|
- -m 0660 \
|
|
- "${BITCOIND_CONFIGFILE}"
|
|
-
|
|
- checkconfig || return 1
|
|
+ checkpath -f --mode 0660 --owner "${BITCOIND_USER}:${BITCOIND_GROUP}" "${BITCOIND_CONFIGFILE}"
|
|
+ checkpath -d --mode 0750 --owner "${BITCOIND_USER}:${BITCOIND_GROUP}" "${BITCOIND_DATADIR}"
|
|
+ checkpath -d --mode 0755 --owner "${BITCOIND_USER}:${BITCOIND_GROUP}" "${BITCOIND_LOGDIR}"
|
|
+ checkpath -d --mode 0755 --owner "${BITCOIND_USER}:${BITCOIND_GROUP}" "${BITCOIND_PIDDIR}"
|
|
+ checkconfig
|
|
}
|
|
|
|
-checkconfig()
|
|
-{
|
|
- if grep -qs '^rpcuser=' "${BITCOIND_CONFIGFILE}" && \
|
|
- ! grep -qs '^rpcpassword=' "${BITCOIND_CONFIGFILE}" ; then
|
|
+start() {
|
|
+ ebegin "Starting ${name}"
|
|
+ mark_service_inactive
|
|
+ if start-stop-daemon \
|
|
+ --pidfile="${BITCOIND_PIDFILE}" \
|
|
+ --chdir="${BITCOIND_DATADIR}" \
|
|
+ --user="${BITCOIND_USER}:${BITCOIND_GROUP}" \
|
|
+ --nice="${BITCOIND_NICE}" \
|
|
+ --exec="${BITCOIND_BIN}" \
|
|
+ -- \
|
|
+ -daemonwait \
|
|
+ -pid="${BITCOIND_PIDFILE}" \
|
|
+ -conf="${BITCOIND_CONFIGFILE}" \
|
|
+ -datadir="${BITCOIND_DATADIR}" \
|
|
+ -debuglogfile="${BITCOIND_LOGDIR}/debug.log" \
|
|
+ ${BITCOIND_OPTS}
|
|
+ then
|
|
+ chmod g+r "${BITCOIND_DATADIR}/.cookie"
|
|
+ IN_BACKGROUND=yes rc-service "${SVCNAME}" --quiet start
|
|
+ else
|
|
+ rc-service "${SVCNAME}" --quiet zap
|
|
+ fi &
|
|
+}
|
|
+
|
|
+stop() {
|
|
+ ebegin "Stopping ${name}"
|
|
+ start-stop-daemon --stop \
|
|
+ --pidfile="${BITCOIND_PIDFILE}" \
|
|
+ --retry="${BITCOIND_SIGTERM_TIMEOUT}" \
|
|
+ --exec="${BITCOIND_BIN}"
|
|
+ eend $?
|
|
+}
|
|
+
|
|
+checkconfig() {
|
|
+ if grep -qs '^rpcuser=' "${BITCOIND_CONFIGFILE}" &&
|
|
+ ! grep -qs '^rpcpassword=' "${BITCOIND_CONFIGFILE}"
|
|
+ then
|
|
eerror ""
|
|
eerror "ERROR: You must set a secure rpcpassword to run bitcoind."
|
|
eerror "The setting must appear in ${BITCOIND_CONFIGFILE}"
|
|
diff --git a/contrib/init/bitcoind.openrcconf b/contrib/init/bitcoind.openrcconf
|
|
index c8a22a08d9..f5a140ab9d 100644
|
|
--- a/contrib/init/bitcoind.openrcconf
|
|
+++ b/contrib/init/bitcoind.openrcconf
|
|
@@ -4,14 +4,17 @@
|
|
#BITCOIND_CONFIGFILE="/etc/bitcoin/bitcoin.conf"
|
|
|
|
# What directory to write pidfile to? (created and owned by $BITCOIND_USER)
|
|
-#BITCOIND_PIDDIR="/var/run/bitcoind"
|
|
+#BITCOIND_PIDDIR="/run/bitcoind"
|
|
|
|
# What filename to give the pidfile
|
|
-#BITCOIND_PIDFILE="${BITCOIND_PIDDIR}/bitcoind.pid"
|
|
+#BITCOIND_PIDFILE="${BITCOIND_PIDDIR}/${SVCNAME}.pid"
|
|
|
|
# Where to write bitcoind data (be mindful that the blockchain is large)
|
|
#BITCOIND_DATADIR="/var/lib/bitcoind"
|
|
|
|
+# Where to write the debug.log file
|
|
+#BITCOIND_LOGDIR="/var/log/bitcoind"
|
|
+
|
|
# User and group to own bitcoind process
|
|
#BITCOIND_USER="bitcoin"
|
|
#BITCOIND_GROUP="bitcoin"
|
|
diff --git a/contrib/init/bitcoind.service b/contrib/init/bitcoind.service
|
|
index 87da17f955..e1229f300a 100644
|
|
--- a/contrib/init/bitcoind.service
|
|
+++ b/contrib/init/bitcoind.service
|
|
@@ -20,6 +20,7 @@ Wants=network-online.target
|
|
[Service]
|
|
ExecStart=/usr/bin/bitcoind -pid=/run/bitcoind/bitcoind.pid \
|
|
-conf=/etc/bitcoin/bitcoin.conf \
|
|
+ -debuglogfile=/var/log/bitcoind/debug.log \
|
|
-datadir=/var/lib/bitcoind \
|
|
-startupnotify='systemd-notify --ready' \
|
|
-shutdownnotify='systemd-notify --stopping'
|
|
@@ -54,6 +55,10 @@ RuntimeDirectoryMode=0710
|
|
ConfigurationDirectory=bitcoin
|
|
ConfigurationDirectoryMode=0710
|
|
|
|
+# /var/log/bitcoind
|
|
+LogsDirectory=bitcoind
|
|
+LogsDirectoryMode=0755
|
|
+
|
|
# /var/lib/bitcoind
|
|
StateDirectory=bitcoind
|
|
StateDirectoryMode=0710
|
|
--
|
|
2.43.0
|
|
|