mirror of
https://gitlab.alpinelinux.org/alpine/aports.git
synced 2025-08-08 06:47:09 +02:00
93 lines
2.3 KiB
Plaintext
93 lines
2.3 KiB
Plaintext
#!/sbin/openrc-run
|
|
|
|
: ${conffile:="/etc/tor/torrc"}
|
|
: ${user:="tor"}
|
|
: ${graceful_timeout:="${GRACEFUL_TIMEOUT:-60}"}
|
|
|
|
command="/usr/bin/tor"
|
|
command_args="-f $conffile --runasdaemon 0"
|
|
command_background="yes"
|
|
start_stop_daemon_args="--chdir /var/lib/tor"
|
|
pidfile="/run/tor/tor.pid"
|
|
|
|
extra_commands="checkconfig"
|
|
extra_started_commands="gracefulstop reload"
|
|
|
|
description="Anonymizing overlay network for TCP"
|
|
description_checkconfig="Check if config file is valid."
|
|
description_reload="Reload the configuration."
|
|
# See bug #523552, and https://trac.torproject.org/projects/tor/ticket/5525
|
|
description_gracefulstop="Gracefully stop (wait $gracefulstop until all connections are properly closed)."
|
|
|
|
|
|
depend() {
|
|
need net
|
|
}
|
|
|
|
checkconfig() {
|
|
# First check that it exists.
|
|
if [ ! -f "$conffile" ] ; then
|
|
eerror "You need to setup $conffile first, see $conffile.sample for example"
|
|
return 1
|
|
fi
|
|
|
|
# Now verify whether the configuration is valid.
|
|
# If User directive is set in $conffile, then we must run tor as root,
|
|
# even --verify-config, otherwise it fails when verifying permissions
|
|
# of DataDirectory.
|
|
if conf_has User; then
|
|
local user="root"
|
|
fi
|
|
local out
|
|
out="$(su -s /bin/sh -c "$command $command_args --verify-config" $user 2>&1)" || {
|
|
eerror "Tor configuration $conffile is not valid"
|
|
printf '%s\n' "$out"
|
|
return 1
|
|
}
|
|
}
|
|
|
|
start_pre() {
|
|
checkconfig || return 1
|
|
|
|
# If User directive is set in $conffile, start tor as root and let it
|
|
# drop privileges itself (may be needed e.g. to bind to a privileged
|
|
# port). Otherwise run tor as $user (recommended).
|
|
if conf_has User; then
|
|
local user="$(conf_get User)"
|
|
else
|
|
start_stop_daemon_args="$start_stop_daemon_args --user $user"
|
|
fi
|
|
|
|
if conf_has DataDirectory; then
|
|
checkpath -d -m 0700 -o "$user" "$(conf_get DataDirectory)"
|
|
fi
|
|
checkpath -d -m 0755 -o "$user" "$(dirname "$pidfile")"
|
|
}
|
|
|
|
gracefulstop() {
|
|
ebegin "Gracefully stopping Tor, this can take up to $graceful_timeout seconds"
|
|
start-stop-daemon --stop \
|
|
--progress \
|
|
--signal INT \
|
|
--retry $graceful_timeout \
|
|
--pidfile "$pidfile" \
|
|
--exec $command -- $command_args
|
|
eend $?
|
|
}
|
|
|
|
reload() {
|
|
start_pre || return 1
|
|
|
|
ebegin "Reloading Tor configuration"
|
|
start-stop-daemon --signal HUP --pidfile "$pidfile"
|
|
eend $?
|
|
}
|
|
|
|
conf_get() {
|
|
sed -n "s/^\s*$1 \([^#]*\)/\1/p" "$conffile"
|
|
}
|
|
|
|
conf_has() {
|
|
grep -q "^\s*$1 " "$conffile"
|
|
}
|