diff --git a/debian/dump1090-fa.install b/debian/dump1090-fa.install index d83abf8..94ca9e6 100644 --- a/debian/dump1090-fa.install +++ b/debian/dump1090-fa.install @@ -4,4 +4,6 @@ debian/lighttpd/* etc/lighttpd/conf-available bladerf/* usr/share/dump1090-fa/bladerf debian/start-dump1090-fa usr/share/dump1090-fa/ debian/generate-wisdom usr/share/dump1090-fa/ +debian/upgrade-config usr/share/dump1090-fa/ +debian/dump1090-fa.default usr/share/dump1090-fa/ starch-benchmark /usr/lib/dump1090-fa/ diff --git a/debian/dump1090-fa.postinst b/debian/dump1090-fa.postinst index c717459..c5caa28 100644 --- a/debian/dump1090-fa.postinst +++ b/debian/dump1090-fa.postinst @@ -63,6 +63,17 @@ case "$1" in fi fi + # on upgrade from pre-6.0, update the defaults file to the new syntax + if dpkg --compare-versions "$2" lt-nl "6.0" + then + if [ -f /etc/default/dump1090-fa ] + then + echo "Trying to upgrade existing config to new syntax.." >&2 + /usr/share/dump1090-fa/upgrade-config /etc/default/dump1090-fa /usr/share/dump1090-fa/dump1090-fa.default \ + || echo "Something went wrong upgrading the config; your config may be broken. Sorry!" >&1 + fi + fi + if dpkg --compare-versions "$2" le "5.0" then echo "Enabling lighttpd skyaware module.." >&2 diff --git a/debian/upgrade-config b/debian/upgrade-config new file mode 100755 index 0000000..6c42ec7 --- /dev/null +++ b/debian/upgrade-config @@ -0,0 +1,165 @@ +#!/bin/sh + +# This script runs during upgrade from pre-6.0 to try to +# update /etc/default/dump1090-fa to the new-style +# config. + +if [ $# -lt 2 ] +then + echo "syntax: $0 path-to-config path-to-package-defaults" >&2 + exit 2 +fi + +OLDCONFIG="$1" +NEWCONFIG="${OLDCONFIG}.v6-upgrade" +BACKUPCONFIG="${OLDCONFIG}.pre-v6-upgrade" +PACKAGECONFIG="$2" + +if [ ! -f $OLDCONFIG ] +then + echo "$OLDCONFIG does not exist, nothing to upgrade" >&2 + exit 0 +fi + +# Use EXTRA_OPTIONS as a marker for a new-style config file +if grep -q EXTRA_OPTIONS ${OLDCONFIG} +then + echo "$OLDCONFIG seems to already be a new-style config, nothing to upgrade" >&2 + exit 0 +fi + +if [ ! -f $PACKAGECONFIG ] +then + echo "$PACKAGECONFIG does not exist, cannot continue" >&2 + exit 1 +fi + +if [ -f $BACKUPCONFIG ] +then + echo "$BACKUPCONFIG already exists, I'm not going to clobber it" >&2 + exit 1 +fi + +# set some assumed defaults (5.0 dump1090 binary defaults if no command-line options are given) +ENABLED="no" +RECEIVER="rtlsdr" +RECEIVER_SERIAL="" +RECEIVER_GAIN="50" +WISDOM="" +ERROR_CORRECTION="no" +MAX_RANGE="" +NET_RAW_INPUT_PORTS="30001" +NET_RAW_OUTPUT_PORTS="30002" +NET_SBS_OUTPUT_PORTS="30003" +NET_BEAST_INPUT_PORTS="30004,30104" +NET_BEAST_OUTPUT_PORTS="30005" +EXTRAS_NET_RO_SIZE="0" +EXTRAS_NET_RO_INTERVAL="0" +EXTRAS_NET_HEARTBEAT="60" + +# read the old config +. "$OLDCONFIG" + +# process all the options from the old config file and accumulate settings in env vars +process_options() { + while [ $# -gt 0 ] + do + opt="$1" + shift + case "$opt" in + --device-type) RECEIVER="$1"; shift ;; + --device-index) RECEIVER_SERIAL="$1"; shift ;; + --gain) RECEIVER_GAIN="$1"; shift ;; + --max-range) MAX_RANGE="$1"; shift ;; + --fix) ERROR_CORRECTION="yes" ;; + --net) ;; + --net-ri-port) NET_RAW_INPUT_PORTS="$1"; shift ;; + --net-ro-port) NET_RAW_OUTPUT_PORTS="$1"; shift ;; + --net-sbs-port) NET_SBS_OUTPUT_PORTS="$1"; shift ;; + --net-bi-port) NET_BEAST_INPUT_PORTS="$1"; shift ;; + --net-bo-port) NET_BEAST_OUTPUT_PORTS="$1"; shift ;; + --json-location-accuracy) JSON_LOCATION_ACCURACY="$1"; shift ;; + --wisdom) WISDOM="$1"; shift ;; + + --ppm) EXTRAS_PPM="$1"; shift ;; + --net-heartbeat) EXTRAS_NET_HEARTBEAT="$1"; shift ;; + --net-ro-size) EXTRAS_NET_RO_SIZE="$1"; shift ;; + --net-ro-interval) EXTRAS_NET_RO_INTERVAL="$1"; shift ;; + + *) EXTRA_OPTIONS="$EXTRA_OPTIONS ${opt}" ;; + esac + done +} + +process_options $RECEIVER_OPTIONS $DECODER_OPTIONS $NET_OPTIONS $JSON_OPTIONS + +# update EXTRA_OPTIONS for any non-default special settings +if [ "${EXTRAS_PPM:-0}" != "0" ]; then EXTRA_OPTIONS="$EXTRA_OPTIONS --ppm $EXTRAS_PPM"; fi +if [ "${EXTRAS_NET_HEARTBEAT:-60}" != "60" ]; then EXTRA_OPTIONS="$EXTRA_OPTIONS --net-heartbeat $EXTRAS_NET_HEARTBEAT"; fi +if [ "${EXTRAS_NET_RO_SIZE:-1300}" != "1300" ]; then EXTRA_OPTIONS="$EXTRA_OPTIONS --net-ro-size $EXTRAS_NET_RO_SIZE"; fi +if [ "${EXTRAS_NET_RO_INTERVAL:-1300}" != "0.2" ]; then EXTRA_OPTIONS="$EXTRA_OPTIONS --net-ro-interval $EXTRAS_NET_RO_INTERVAL"; fi + +# special case for device index 0 (the default) +if [ "${RECEIVER_SERIAL}" = "0" ]; then RECEIVER_SERIAL=""; fi + +# special case for ports set to zero (new config uses a blank entry for that) +if [ "${NET_RAW_INPUT_PORTS}" = "0" ]; then NET_RAW_INPUT_PORTS=""; fi +if [ "${NET_RAW_OUTPUT_PORTS}" = "0" ]; then NET_RAW_OUTPUT_PORTS=""; fi +if [ "${NET_SBS_INPUT_PORTS}" = "0" ]; then NET_SBS_OUTPUT_PORTS=""; fi +if [ "${NET_BEAST_INPUT_PORTS}" = "0" ]; then NET_BEAST_INPUT_PORTS=""; fi +if [ "${NET_BEAST_OUTPUT_PORTS}" = "0" ]; then NET_BEAST_OUTPUT_PORTS=""; fi + +SEDSCRIPT=$(mktemp -t dump1090XXX.sed) + +# set up the sedscript +# nb: all values either derived from env vars or the package defaults, +# except for adaptive gain settings which we default to off on upgraded +# installs. New installs using the package defaults will default to on. +cat >>$SEDSCRIPT <$NEWCONFIG +then + echo "Something went wrong trying to upgrade $OLDCONFIG, giving up.." >&2 + exit 1 +fi +rm $SEDSCRIPT + +# back up the old config and install the new config +if ! cp -p $OLDCONFIG $BACKUPCONFIG +then + echo "Something went wrong trying to back up $OLDCONFIG, giving up.." >&2 + exit 1 +fi + +if ! mv $NEWCONFIG $OLDCONFIG +then + echo "Something went wrong trying to install the new version of $NEWCONFIG, giving up.." >&2 + exit 1 +fi + +# all good +cat >&2 <