#!/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 $? }