dump1090-fa/debian/upgrade-config

188 lines
6.5 KiB
Bash
Executable File

#!/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
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"
# if there's no CONFIG_STYLE, infer a version
if [ -z "$CONFIG_STYLE" ]
then
if [ -n "$RECEIVER_OPTIONS" -o -n "$DECODER_OPTIONS" -o -n "$NET_OPTIONS" -o -n "$JSON_OPTIONS" ]
then
CONFIG_STYLE=5
else
CONFIG_STYLE=6
fi
fi
# process all the options from the old config file and accumulate settings in env vars
process_v5_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
# 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 gain -10 -> gain 60
if [ "${RECEIVER_GAIN}" = "-10" ]; then RECEIVER_GAIN="60"; 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)
if [ "$CONFIG_STYLE" = "5" ]
then
echo "Generating a v6-style config from the v5-style config in $OLDCONFIG" >&2
# nb: all values either derived from env vars or the package defaults
process_v5_options $RECEIVER_OPTIONS $DECODER_OPTIONS $NET_OPTIONS $JSON_OPTIONS
FROMCONFIG=$PACKAGECONFIG
cat >>$SEDSCRIPT <<EOF
s@^ENABLED=.*@ENABLED=${ENABLED}@
s@^RECEIVER=.*@RECEIVER=${RECEIVER}@
s@^RECEIVER_SERIAL=.*@RECEIVER_SERIAL="${RECEIVER_SERIAL}"@
s@^RECEIVER_GAIN=.*@RECEIVER_GAIN=${RECEIVER_GAIN}@
s@^WISDOM=.*@WISDOM=${WISDOM}@
s@^ERROR_CORRECTION=.*@ERROR_CORRECTION=${ERROR_CORRECTION}@
s@^MAX_RANGE=.*@MAX_RANGE=${MAX_RANGE}@
s@^NET_RAW_INPUT_PORTS=.*@NET_RAW_INPUT_PORTS=${NET_RAW_INPUT_PORTS}@
s@^NET_RAW_OUTPUT_PORTS=.*@NET_RAW_OUTPUT_PORTS=${NET_RAW_OUTPUT_PORTS}@
s@^NET_SBS_OUTPUT_PORTS=.*@NET_SBS_OUTPUT_PORTS=${NET_SBS_OUTPUT_PORTS}@
s@^NET_BEAST_INPUT_PORTS=.*@NET_BEAST_INPUT_PORTS=${NET_BEAST_INPUT_PORTS}@
s@^NET_BEAST_OUTPUT_PORTS=.*@NET_BEAST_OUTPUT_PORTS=${NET_BEAST_OUTPUT_PORTS}@
s@^JSON_LOCATION_ACCURACY=.*@JSON_LOCATION_ACCURACY=${JSON_LOCATION_ACCURACY}@
s@^EXTRA_OPTIONS=.*@EXTRA_OPTIONS="$EXTRA_OPTIONS"@
EOF
else
# Existing config file doesn't seem to be a v5, just turn off adaptive gain settings
# as this is an upgrade but otherwise leave it unchanged. (This happens when
# there were no changes made by the user to the config file before upgrading; dpkg
# will install the new v6 default config file automatically in that case)
FROMCONFIG=$OLDCONFIG
fi
# All upgrades get adaptive gain defaulting to off, to preserve the behaviour of
# existing installs. New installs using the package defaults will default to on.
echo "Disabling adaptive gain in $OLDCONFIG as this is an upgrade from pre-v6" >&2
cat >>$SEDSCRIPT <<EOF
s@^ADAPTIVE_DYNAMIC_RANGE=.*@ADAPTIVE_DYNAMIC_RANGE=no@
s@^ADAPTIVE_BURST=.*@ADAPTIVE_BURST=no@
EOF
# substitute into the config file template to generate our customized config
if ! sed -f $SEDSCRIPT <$FROMCONFIG >$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 <<EOF
Upgraded existing config $OLDCONFIG to the new config syntax.
Please doublecheck that it looks ok!
The old config file has been preserved at $BACKUPCONFIG
EOF
exit 0