From 373ac8ef0cccd51249aec2961ff70cb47b245ad1 Mon Sep 17 00:00:00 2001 From: Oliver Jowett Date: Fri, 5 Dec 2014 22:37:33 +0000 Subject: [PATCH] Add init script, defaults from /etc/default/, postinst to create a user to run as. --- debian/dump1090-mr.default | 89 +++++++++++++++++ debian/dump1090-mr.init | 185 ++++++++++++++++++++++++++++++++++++ debian/dump1090-mr.postinst | 40 ++++++++ 3 files changed, 314 insertions(+) create mode 100644 debian/dump1090-mr.default create mode 100644 debian/dump1090-mr.init create mode 100644 debian/dump1090-mr.postinst diff --git a/debian/dump1090-mr.default b/debian/dump1090-mr.default new file mode 100644 index 0000000..8a96f0a --- /dev/null +++ b/debian/dump1090-mr.default @@ -0,0 +1,89 @@ +# Defaults for dump1090-mr +# This is a POSIX shell fragment + +# Set to "yes" to start dump1090 on boot. +START_DUMP1090="no" + +# User to run dump1090 as. +DUMP1090_USER="dump1090" + +# +# The following options are all optional - defaults if not provided are +# shown below. +# + +# +# Receiver options +# + +# RTLSDR device index to use +# If set to "none", dump1090 will be started in --net-only mode +#DEVICE=0 + +# RTLSDR gain in dB. +# If set to "max" (the default) the maximum supported gain is used. +# If set to "agc", the tuner AGC is used to set the gain. +#GAIN=max + +# RTLSDR frequency correction in PPM +#PPM=0 + +# +# Decoding options +# + +# If yes, fixes messages with correctable CRC errors. +# Otherwise, discards messages with errors. +#FIX_CRC=no + +# If yes, enables phase-enhancement of messages that fail to decode +# the first time around. +#PHASE_ENHANCE=no + +# If yes, enables aggressive fixes to damaged messages. +# Use with caution - it can increase the rate of undetected errors. +#AGGRESSIVE=no + +# If set, supplies a reference location for local position decoding. +#LAT=decimal.latitude.value +#LON=decimal.longitude.value + +# +# Networking options +# + +# Port to listen on for HTTP connections. 0 disables. +#HTTP_PORT=8080 + +# Port to listen on for raw (AVR-format) input connections. 0 disables. +#RAW_INPUT_PORT=30001 + +# Port to listen on for raw (AVR-format) output connections. 0 disables. +#RAW_OUTPUT_PORT=30002 + +# Port to listen on for SBS-format output connections. 0 disables. +#SBS_OUTPUT_PORT=30003 + +# Port to listen on for Beast-format input connections. 0 disables. +#BEAST_INPUT_PORT=30004 + +# Port to listen on for Beast-format output connections. 0 disables. +#BEAST_OUTPUT_PORT=30005 + +# TCP heartbeat interval in seconds. 0 disables. +#NET_HEARTBEAT=60 + +# Minimum output buffer size per write, in bytes. +#NET_OUTPUT_SIZE=5 + +# Maximum buffering time before writing. In units of approx 64ms (don't ask..). +#NET_OUTPUT_RATE=5 + +# TCP buffer size order. Power-of-two based - buffer size is 2^(n+16). +#NET_BUFFER=0 + +# Bind ports on a particular address. If unset, binds to all interfaces. +#BIND_ADDRESS= + +# Additional options that are passed to the Daemon. +#EXTRA_ARGS="" diff --git a/debian/dump1090-mr.init b/debian/dump1090-mr.init new file mode 100644 index 0000000..bf526b3 --- /dev/null +++ b/debian/dump1090-mr.init @@ -0,0 +1,185 @@ +#!/bin/sh +### BEGIN INIT INFO +# Provides: dump1090-mr +# Required-Start: $remote_fs +# Required-Stop: $remote_fs +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: dump1090 daemon (MalcolmRobb variant) +# Description: Receives ADS-B messages from a RTLSDR dongle +# and makes them available to other applications via +# a variety of network protocols. +### END INIT INFO + +# Do NOT "set -e" + +# PATH should only include /usr/* if it runs after the mountnfs.sh script +PATH=/sbin:/usr/sbin:/bin:/usr/bin +DESC="dump1090-mr daemon" +NAME=dump1090-mr +DAEMON=/usr/bin/$NAME +ARGS="--quiet" +PIDFILE=/var/run/$NAME.pid +SCRIPTNAME=/etc/init.d/$NAME + +# Exit if the package is not installed +[ -x "$DAEMON" ] || exit 0 + +# Set defaults: +START_DUMP1090=no +DUMP1090_USER=dump1090 +DEVICE=0 +GAIN=max +PPM=0 +FIX_CRC=no +PHASE_ENHANCE=no +AGGRESSIVE=no +LAT= +LON= +HTTP_PORT=8080 +RAW_INPUT_PORT=30001 +RAW_OUTPUT_PORT=30002 +SBS_OUTPUT_PORT=30003 +BEAST_INPUT_PORT=30004 +BEAST_OUTPUT_PORT=30005 +NET_HEARTBEAT=60 +NET_OUTPUT_SIZE=5 +NET_OUTPUT_RATE=5 +NET_BUFFER=0 +BIND_ADDRESS= +EXTRA_ARGS= + +# Read configuration variable file if it is present +[ -r /etc/default/$NAME ] && . /etc/default/$NAME + +# work out daemon args + +# receiver: +case "x$DEVICE" in + x|x0) ARGS="$ARGS --net" ;; + xnone) ARGS="$ARGS --net-only" ;; + *) ARGS="$ARGS --net --device-index $DEVICE" ;; +esac +case "x$GAIN" in + x|xmax) ;; + xagc) ARGS="$ARGS --gain -10" ;; + *) ARGS="$ARGS --gain $GAIN" ;; +esac +if [ "x$PPM" != "x0" ]; then ARGS="$ARGS --ppm $PPM"; fi + +# decoder: +if [ "x$FIX_CRC" = "xyes" ]; then ARGS="$ARGS --fix"; fi +if [ "x$PHASE_ENHANCE" = "xyes" ]; then ARGS="$ARGS --phase-enhance"; fi +if [ "x$AGGRESSIVE" = "xyes" ]; then ARGS="$ARGS --aggressive"; fi +if [ -n "$LAT" ]; then ARGS="$ARGS --lat $LAT"; fi +if [ -n "$LON" ]; then ARGS="$ARGS --lon $LON"; fi + +# net: +if [ "x$HTTP_PORT" != "x8080" ]; then ARGS="$ARGS --net-http-port $HTTP_PORT"; fi +if [ "x$RAW_INPUT_PORT" != "x30001" ]; then ARGS="$ARGS --net-ri-port $RAW_INPUT_PORT"; fi +if [ "x$RAW_OUTPUT_PORT" != "x30002" ]; then ARGS="$ARGS --net-ro-port $RAW_OUTPUT_PORT"; fi +if [ "x$SBS_OUTPUT_PORT" != "x30003" ]; then ARGS="$ARGS --net-sbs-port $SBS_OUTPUT_PORT"; fi +if [ "x$BEAST_INPUT_PORT" != "x30004" ]; then ARGS="$ARGS --net-bi-port $BEAST_INPUT_PORT"; fi +if [ "x$BEAST_OUTPUT_PORT" != "x30005" ]; then ARGS="$ARGS --net-bo-port $BEAST_OUTPUT_PORT"; fi +if [ "x$NET_HEARTBEAT" != "x60" ]; then ARGS="$ARGS --net-heartbeat $NET_HEARTBEAT"; fi +if [ "x$NET_OUTPUT_SIZE" != "x0" ]; then ARGS="$ARGS --net-ro-size $NET_OUTPUT_SIZE"; fi +if [ "x$NET_OUTPUT_RATE" != "x0" ]; then ARGS="$ARGS --net-ro-rate $NET_OUTPUT_RATE"; fi +if [ "x$NET_BUFFER" != "x0" ]; then ARGS="$ARGS --net-buffer $NET_BUFFER"; fi +if [ -n "$BIND_ADDRESS" ]; then ARGS="$ARGS --net-bind-address $BIND_ADDRESS"; fi +if [ -n "$EXTRA_ARGS" ]; then ARGS="$ARGS $EXTRA_ARGS"; fi + +# Load the VERBOSE setting and other rcS variables +. /lib/init/vars.sh + +# Define LSB log_* functions. +# Depend on lsb-base (>= 3.2-14) to ensure that this file is present +# and status_of_proc is working. +. /lib/lsb/init-functions + +# +# Function that starts the daemon/service +# +do_start() +{ + # Return + # 0 if daemon has been started + # 1 if daemon was already running + # 2 if daemon could not be started + + if [ "x$START_DUMP1090" != "xyes" ]; then + log_warning_msg "Not starting $NAME daemon, disabled via /etc/default/$NAME" + return 0 + fi + + start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \ + || return 1 + start-stop-daemon --start --quiet --pidfile $PIDFILE --chuid $DUMP1090_USER --make-pidfile --background --exec $DAEMON -- \ + $ARGS \ + || return 2 + sleep 1 +} + +# +# Function that stops the daemon/service +# +do_stop() +{ + # Return + # 0 if daemon has been stopped + # 1 if daemon was already stopped + # 2 if daemon could not be stopped + # other if a failure occurred + start-stop-daemon --stop --retry=TERM/30/KILL/5 --pidfile $PIDFILE --user $DUMP1090_USER --name $NAME + RETVAL="$?" + [ "$RETVAL" = 2 ] && return 2 + sleep 1 + # Many daemons don't delete their pidfiles when they exit. + rm -f $PIDFILE + return "$RETVAL" +} + +case "$1" in + start) + [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC:" "$NAME" + do_start + case "$?" in + 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; + 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; + esac + ;; + stop) + [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC:" "$NAME" + do_stop + case "$?" in + 0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;; + 2) [ "$VERBOSE" != no ] && log_end_msg 1 ;; + esac + ;; + status) + status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $? + ;; + restart|force-reload) + log_daemon_msg "Restarting $DESC" "$NAME" + do_stop + case "$?" in + 0|1) + do_start + case "$?" in + 0) log_end_msg 0 ;; + 1) log_end_msg 1 ;; # Old process is still running + *) log_end_msg 1 ;; # Failed to start + esac + ;; + *) + # Failed to stop + log_end_msg 1 + ;; + esac + ;; + *) + echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2 + exit 3 + ;; +esac + +: diff --git a/debian/dump1090-mr.postinst b/debian/dump1090-mr.postinst new file mode 100644 index 0000000..e727c02 --- /dev/null +++ b/debian/dump1090-mr.postinst @@ -0,0 +1,40 @@ +#!/bin/sh +# postinst script for dump1090 +# +# see: dh_installdeb(1) + +set -e + +# summary of how this script can be called: +# * `configure' +# * `abort-upgrade' +# * `abort-remove' `in-favour' +# +# * `abort-remove' +# * `abort-deconfigure' `in-favour' +# `removing' +# +# for details, see http://www.debian.org/doc/debian-policy/ or +# the debian-policy package + + +case "$1" in + configure) + adduser --system --home /usr/share/dump1090-mr --no-create-home --quiet dump1090 + ;; + + abort-upgrade|abort-remove|abort-deconfigure) + ;; + + *) + echo "postinst called with unknown argument \`$1'" >&2 + exit 1 + ;; +esac + +# dh_installdeb will replace this with shell code automatically +# generated by other debhelper scripts. + +#DEBHELPER# + +exit 0