#!/bin/sh NAME=dump1090-mutability CONFIGFILE=/etc/default/$NAME set -e . /usr/share/debconf/confmodule db_set_yn() { if [ "x$2" = "xyes" ]; then db_set $1 true; else db_set $1 false; fi } # Load config file, if it exists. if [ -e $CONFIGFILE ]; then . $CONFIGFILE || true # Store values from config file into # debconf db. db_set_yn $NAME/auto-start "$START_DUMP1090" db_set $NAME/run-as-user "$DUMP1090_USER" db_set $NAME/log-file "$LOGFILE" db_set $NAME/rtlsdr-device "$DEVICE" db_set $NAME/rtlsdr-gain "$GAIN" db_set $NAME/rtlsdr-ppm "$PPM" db_set_yn $NAME/decode-fixcrc "$FIX_CRC" db_set $NAME/decode-lat "$LAT" db_set $NAME/decode-lon "$LON" db_set $NAME/decode-max-range "$MAX_RANGE" db_set $NAME/net-ri-port "$RAW_INPUT_PORT" db_set $NAME/net-ro-port "$RAW_OUTPUT_PORT" db_set $NAME/net-bi-port "$BEAST_INPUT_PORT" db_set $NAME/net-bo-port "$BEAST_OUTPUT_PORT" db_set $NAME/net-sbs-port "$SBS_OUTPUT_PORT" db_set $NAME/net-heartbeat "$NET_HEARTBEAT" db_set $NAME/net-out-size "$NET_OUTPUT_SIZE" db_set $NAME/net-out-interval "$NET_OUTPUT_INTERVAL" db_set $NAME/net-buffer "$NET_BUFFER" db_set $NAME/net-bind-address "$NET_BIND_ADDRESS" db_set $NAME/stats-interval "$STATS_INTERVAL" db_set $NAME/json-dir "$JSON_DIR" db_set $NAME/json-interval "$JSON_INTERVAL" db_set $NAME/json-location-accuracy "$JSON_LOCATION_ACCURACY" db_set_yn $NAME/log-decoded-messages "$LOG_DECODED_MESSAGES" db_set $NAME/extra-args "$EXTRA_ARGS" fi # Ask questions. db_input_verify() { # $1 = priority # $2 = db key # $3 = verification function, should return 0 if OK PRI=$1; KEY=$2; VERIFY=$3 set +e db_input $PRI $KEY; RESULT=$? db_go set -e ASKED=0 while : do db_get $KEY if $VERIFY "$RET"; then return 0; fi if [ $RESULT -ne 0 ]; then # db_input failed, and the existing value does not validate if [ $RESULT = 30 ] && [ $ASKED = 0 ] then # question was skipped, but existing value is invalid # bump priority and try again (once) PRI=high ASKED=1 else # give up, use the default value db_reset $KEY return 0 fi else # db_input was OK, but the value did not verify. # show an error message db_input high dump1090-mutability/invalid-$VERIFY || true fi # try again set +e db_fset $KEY seen false db_input high $KEY; RESULT=$? db_go set -e done } is_unsigned_int() { if echo "$1" | grep -Eq '^(0|+?[1-9][0-9]*)$'; then return 0; else return 1; fi } is_unsigned_int_or_empty() { if [ -z "$1" ]; then return 0 elif is_unsigned_int "$1"; then return 0 else return 1; fi } is_positive_int() { if echo "$1" | grep -Eq '^(+?[1-9][0-9]*)$'; then return 0; else return 1; fi } is_signed_int() { if echo "$1" | grep -Eq '^(0|[+-]?[1-9][0-9]*)$'; then return 0; else return 1; fi } is_signed_int_or_empty() { if [ -z "$1" ]; then return 0 elif is_signed_int "$1"; then return 0 else return 1; fi } is_ipaddrish() { if echo "$1" | grep -Eq '^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$'; then return 0; else return 1; fi } is_ipaddrish_or_empty() { if [ -z "$1" ]; then return 0 elif is_ipaddrish "$1"; then return 0 else return 1; fi } is_number() { if echo "$1" | grep -Eq '^([+-]?[0-9][0-9]*)(\.[0-9]+)?$'; then return 0; else return 1; fi } is_unsigned_number() { if echo "$1" | grep -Eq '^([+]?[0-9][0-9]*)(\.[0-9]+)?$'; then return 0; else return 1; fi } is_positive_number() { if echo "$1" | grep -Eq '^(([+]?0\.[0-9]*[1-9]+[0-9]*)|([+]?[1-9][0-9]*)(\.[0-9]+)?)$'; then return 0; else return 1; fi } is_number_or_empty() { if [ -z "$1" ]; then return 0 elif is_number "$1"; then return 0; else return 1; fi } is_valid_gain() { if is_number "$1"; then return 0; elif [ "$1" = "max" ]; then return 0; elif [ "$1" = "agc" ]; then return 0; else return 1; fi } is_not_empty() { if [ -z "$1" ]; then return 1; else return 0; fi } # "adduser: To avoid problems, the username should consist only of # letters, digits, underscores, full stops, at signs and dashes, and not start with # a dash (as defined by IEEE Std 1003.1-2001). For compatibility with Samba # machine accounts $ is also supported at the end of the username" is_non_root_user() { if [ -z "$1" ]; then return 1; elif [ "$1" = "root" ]; then return 1; elif echo "$1" | grep -Eq '^[a-zA-Z0-9_.@-]+\$?$'; then return 0; else return 1; fi } is_port_number() { if is_unsigned_int "$1"; then if [ "$1" -eq 0 ]; then return 0; fi if [ "$1" -lt 1024 ]; then return 1; fi if [ "$1" -gt 65535 ]; then return 1; fi return 0 else return 1 fi } is_port_list() { for port in $(echo $1 | sed 's@,@ @g'); do if ! is_port_number "$port"; then return 1; fi done return 0 } db_input high $NAME/auto-start || true db_input_verify low $NAME/run-as-user is_non_root_user || true db_input_verify low $NAME/log-file is_not_empty || true db_go || true; db_get $NAME/auto-start; if [ "$RET" = "true" ]; then # all of these are only relevant if the init script is enabled db_input medium $NAME/rtlsdr-device || true db_go || true; db_get $NAME/rtlsdr-device; if [ "x$RET" != "xnone" ]; then # only if a real device was chosen: db_input_verify medium $NAME/rtlsdr-gain is_valid_gain || true db_input_verify medium $NAME/rtlsdr-ppm is_signed_int || true fi db_input low $NAME/decode-fix-crc || true db_input_verify medium $NAME/decode-max-range is_number || true db_input_verify medium $NAME/decode-lat is_number_or_empty || true db_go || true; db_get $NAME/decode-lat; if [ -n "$RET" ]; then # only if latitude was given: db_input_verify medium $NAME/decode-lon is_number_or_empty || true fi db_input_verify low $NAME/net-ri-port is_port_list || true db_input_verify low $NAME/net-ro-port is_port_list || true db_input_verify low $NAME/net-bi-port is_port_list || true db_input_verify low $NAME/net-bo-port is_port_list || true db_input_verify low $NAME/net-sbs-port is_port_list || true db_input_verify low $NAME/net-heartbeat is_unsigned_number || true db_input_verify low $NAME/net-out-size is_unsigned_int || true db_input_verify low $NAME/net-out-interval is_unsigned_number || true db_input_verify low $NAME/net-buffer is_unsigned_int || true db_input_verify medium $NAME/net-bind-address is_ipaddrish_or_empty || true db_input_verify low $NAME/stats-interval is_unsigned_int || true db_input_verify low $NAME/json-interval is_positive_number || true db_input low $NAME/json-location-accuracy || true db_input low $NAME/json-dir || true db_input low $NAME/log-decoded-messages || true db_input low $NAME/extra-args || true db_go || True fi # Done. db_stop