aports/main/djbdns/tinydns.initd

93 lines
2.0 KiB
Plaintext
Executable File

#!/sbin/openrc-run
# control an instance of tinydns, without daemontools
# written for alpine linux - NBA April 2007
extra_commands="reload"
depend() {
need net
after firewall
}
# -- Statrup variables
DAEMON=/usr/bin/tinydns
COMPILER=/usr/bin/tinydns-data
IFACE="${SVCNAME#*.}"
if [ -n "$IFACE" ] && [ "${SVCNAME}" != "tinydns" ]; then
ROOT=${ROOT:-/var/cache/tinydns.$IFACE}
VARRUN=${VARRUN:-/var/run/tinydns.$IFACE}
DATADIR=${DATADIR:-/etc/tinydns.$IFACE}
else
ROOT=${ROOT:-/var/cache/tinydns}
VARRUN=${VARRUN:-/var/run/tinydns}
DATADIR=${DATADIR:-/etc/tinydns}
fi
#-----------------------------------------------------------------
# Main program
reload() {
local rc opwd="$opwd"
UID=$(id -u tinydns)
GID=$(id -g tinydns)
# Create the $ROOT directory if necessary
if [ ! -d "$ROOT" ]; then
mkdir -p "$ROOT"
chown $UID:$GID "$ROOT"
fi
# If a file named "data" exists in the $ROOT dir
# Then we just use it and ignore anything else
# If the "data" file does not exist, we attempt
# to build one out of the "zone files".
ebegin "Generating tinydns cache"
rm -f "$ROOT/data"
if [ -e $DATADIR/data ]; then
ln -sf "$DATADIR/data" "$ROOT/data"
else
set -- $( find $DATADIR -type f )
if [ $# -eq 0 ]; then
eend 1 "Missing data or zone files in $DATADIR"
return 1
fi
cat "$@" > "$ROOT/data"
fi
cd "$ROOT" || return 1
[ -e data ] || rm -f data.cdb
$COMPILER
rc=$?
cd "$opwd"
eend $rc
return $rc
}
start() {
# Always do a reload on start
reload || return 1
ebegin "Starting tinydns"
if [ -z "$UID" ] || [ -z "$GID" ]; then
eend 1 "tinydns user or group missing"
return 1
fi
if [ -z "$IP" ]; then
eend 1 "IP is not specified in /etc/conf.d/$SVCNAME"
return 1
fi
start-stop-daemon --start --env "UID=$UID" --env "GID=$GID" \
--env "ROOT=$ROOT" --env "IP=$IP" --pidfile ${VARRUN}.pid \
--background --make-pidfile --exec $DAEMON
eend $?
}
stop() {
ebegin "Stopping tinydns"
start-stop-daemon --stop --pidfile ${VARRUN}.pid --exec $DAEMON
eend $?
}