2016-04-01 16:55:46 +00:00
#!/bin/bash
#####################################################################################
# ADS-B RECEIVER #
#####################################################################################
# #
# This script is not meant to be executed directly. #
# Instead execute install.sh to begin the installation process. #
# #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# #
2016-12-28 21:39:55 +00:00
# Copyright (c) 2016, Joseph A. Prochazka & Romeo Golf #
2016-04-01 16:55:46 +00:00
# #
# Permission is hereby granted, free of charge, to any person obtaining a copy #
# of this software and associated documentation files (the "Software"), to deal #
# in the Software without restriction, including without limitation the rights #
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell #
# copies of the Software, and to permit persons to whom the Software is #
# furnished to do so, subject to the following conditions: #
# #
# The above copyright notice and this permission notice shall be included in all #
# copies or substantial portions of the Software. #
# #
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR #
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, #
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE #
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER #
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, #
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE #
# SOFTWARE. #
# #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
2016-12-19 17:50:20 +00:00
### VARIABLES
2016-04-01 16:55:46 +00:00
2016-12-30 23:01:06 +00:00
RECIEVER_ROOT_DIRECTORY = " $PWD "
RECEIVER_BASH_DIRECTORY = " ${ RECIEVER_ROOT_DIRECTORY } /bash "
RECEIVER_BUILD_DIRECTORY = " ${ RECIEVER_ROOT_DIRECTORY } /build "
2016-12-19 17:50:20 +00:00
2016-12-30 23:56:42 +00:00
DECODER_BUILD_DIRECTORY = " ${ RECEIVER_BUILD_DIRECTORY } /ogn "
2016-12-19 17:50:20 +00:00
DECODER_NAME = "RTLSDR-OGN"
2016-12-22 11:18:37 +00:00
DECODER_DESC = "is the Open Glider Network decoder which focuses on tracking aircraft equipped with FLARM, FLARM-compatible devices or OGN tracker"
2016-12-29 17:36:39 +00:00
DECODER_GITHUB = "https://github.com/glidernet/ogn-rf"
2016-12-19 17:50:20 +00:00
DECODER_WEBSITE = "http://wiki.glidernet.org"
2016-12-30 17:05:52 +00:00
DECODER_SERVICE_SCRIPT_NAME = "rtlsdr-ogn"
DECODER_SERVICE_SCRIPT_PATH = " /etc/init.d/ ${ DECODER_SERVICE_SCRIPT_NAME } "
DECODER_SERVICE_SCRIPT_CONFIG = " /etc/ ${ DECODER_SERVICE_SCRIPT_NAME } .conf "
DECODER_SERVICE_SCRIPT_URL = "http://download.glidernet.org/common/service/rtlsdr-ogn"
2016-12-28 21:39:55 +00:00
2016-12-30 21:10:27 +00:00
## INCLUDE EXTERNAL SCRIPTS
2016-12-19 17:50:20 +00:00
2016-12-28 21:39:55 +00:00
source ${ RECEIVER_BASH_DIRECTORY } /variables.sh
source ${ RECEIVER_BASH_DIRECTORY } /functions.sh
2016-12-30 21:27:32 +00:00
# Should be moved to functions.sh.
2016-12-28 21:39:55 +00:00
function CheckReturnCode {
2016-12-30 21:27:32 +00:00
if [ [ $? -eq 0 ] ] ; then
echo -e "\t\e[97m [\e[32mDone\e[97m]\e[39m\n"
else
echo -e "\t\e[97m [\e[31mError\e[97m]\e[31m\n"
fi
2016-12-28 21:39:55 +00:00
}
2016-12-19 17:50:20 +00:00
2016-12-30 21:27:32 +00:00
# Source the automated install configuration file if this is an automated installation.
2016-12-31 05:17:25 +00:00
if [ [ ${ RECEIVER_AUTOMATED_INSTALL } = "true" ] ] ; then
2016-12-30 21:27:32 +00:00
source ${ RECEIVER_CONFIGURATION_FILE }
fi
2016-12-30 21:10:27 +00:00
## BEGIN SETUP
2016-04-01 16:55:46 +00:00
2016-12-31 05:17:25 +00:00
if [ [ ${ RECEIVER_AUTOMATED_INSTALL } = "false" ] ] ; then
2016-12-30 21:27:32 +00:00
clear
echo -e " \e[91m ${ RECEIVER_PROJECT_TITLE } "
fi
2016-12-19 17:50:20 +00:00
echo -e ""
2016-12-30 23:03:02 +00:00
echo -e " \e[92m Setting up ${ DECODER_NAME } ... "
2016-12-19 17:50:20 +00:00
echo -e "\e[93m----------------------------------------------------------------------------------------------------\e[96m"
echo -e ""
2016-12-31 05:17:25 +00:00
if [ [ ${ RECEIVER_AUTOMATED_INSTALL } = "false" ] ] ; then
2016-12-30 22:49:42 +00:00
whiptail --backtitle " ${ RECEIVER_PROJECT_TITLE } " --title " ${ DECODER_NAME } Setup " --yesno " ${ DECODER_NAME } ${ DECODER_DESC } .\n\nPlease note you will need a dedicated RTL-SDR dongle to use this software.\n\n ${ DECODER_WEBSITE } \n\nContinue setup by installing ${ DECODER_NAME } ? " 14 78
2016-12-31 00:51:12 +00:00
if [ [ $? -eq 1 ] ] ; then
2016-12-30 22:49:42 +00:00
# Setup has been halted by the user.
echo -e "\e[91m \e[5mINSTALLATION HALTED!\e[25m"
echo -e " Setup has been halted at the request of the user."
echo -e ""
echo -e "\e[93m----------------------------------------------------------------------------------------------------"
echo -e " \e[92m ${ DECODER_NAME } setup halted.\e[39m "
echo -e ""
2016-12-19 17:50:20 +00:00
read -p "Press enter to continue..." CONTINUE
2016-12-30 22:49:42 +00:00
exit 1
2016-12-19 17:50:20 +00:00
fi
2016-12-14 01:42:31 +00:00
fi
2016-04-01 16:55:46 +00:00
2016-12-30 21:27:32 +00:00
2016-12-30 21:10:27 +00:00
## ASK FOR DEVICE ASSIGNMENTS
2016-12-28 21:39:55 +00:00
2016-12-30 22:52:41 +00:00
### ASSIGN RTL-SDR DONGLE FOR RTL-SDR OGN...
2016-12-30 23:01:06 +00:00
# Potentially obselse tuner detection code.
# Check for multiple tuners...
TUNER_COUNT = ` rtl_eeprom 2>& 1 | grep -c "^\s*[0-9]*:\s" `
# Multiple RTL_SDR tuners found, check if device specified for this decoder is present.
if [ [ ${ TUNER_COUNT } -gt 1 ] ] ; then
# If a device has been specified by serial number then try to match that with the currently detected tuners.
if [ [ -n ${ OGN_DEVICE_SERIAL } ] ] ; then
for DEVICE_ID in ` seq 0 ${ TUNER_COUNT } ` ; do
if [ [ ` rtl_eeprom -d ${ DEVICE_ID } 2>& 1 | grep -c " Serial number:\s* ${ OGN_DEVICE_SERIAL } $" ` -eq 1 ] ] ; then
echo -en " \e[33m RTL-SDR with Serial \" ${ OGN_DEVICE_SERIAL } \" found at device \" ${ OGN_DEVICE_ID } \" and will be assigned to ${ DECODER_NAME } ...\e[97m\t "
OGN_DEVICE_ID = ${ DEVICE_ID }
fi
done
# If no match for this serial then assume the highest numbered tuner will be used.
if [ [ -z ${ OGN_DEVICE_ID } ] ] ; then
echo -en " \e[33m RTL-SDR with Serial \" ${ OGN_DEVICE_SERIAL } \" not found, assigning device \" ${ TUNER_COUNT } \" to ${ DECODER_NAME } ...\e[97m\t "
OGN_DEVICE_ID = ${ TUNER_COUNT }
fi
# Or if a device has been specified by device ID then confirm this is currently detected.
elif [ [ -n ${ OGN_DEVICE_ID } ] ] ; then
if [ [ ` rtl_eeprom -d ${ OGN_DEVICE_ID } 2>& 1 | grep -c " ^\s* ${ OGN_DEVICE_ID } :\s " ` -eq 1 ] ] ; then
echo -en " \e[33m RTL-SDR device \" ${ OGN_DEVICE_ID } \" found and will be assigned to ${ DECODER_NAME } ...\e[97m\t "
# If no match for this serial then assume the highest numbered tuner will be used.
else
echo -en " \e[33m RTL-SDR device \" ${ OGN_DEVICE_ID } \" not found, assigning device \" ${ TUNER_COUNT } \" to ${ DECODER_NAME } ...\e[97m\t "
OGN_DEVICE_ID = ${ TUNER_COUNT }
fi
# Failing that configure it with device ID 0.
else
echo -en " \e[33m No RTL-SDR device specified, assigning device \"0\" to ${ DECODER_NAME } ...\e[97m\t "
OGN_DEVICE_ID = ${ TUNER_COUNT }
fi
# Single tuner present so assign device 0 and stop any other running decoders, or at least dump1090-mutablity for a default install.
elif [ [ ${ TUNER_COUNT } -eq 1 ] ] ; then
echo -en " \e[33m Single RTL-SDR device \"0\" detected and assigned to ${ DECODER_NAME } ...\e[97m\t "
OGN_DEVICE_ID = "0"
sudo /etc/init.d/dump1090-mutability stop > /dev/null 2>& 1
# No tuners present so assign device 0 and stop any other running decoders, or at least dump1090-mutablity for a default install.
elif [ [ ${ TUNER_COUNT } -lt 1 ] ] ; then
echo -en " \e[33m No RTL-SDR device detected so ${ DECODER_NAME } will be assigned device \"0\"...\e[97m\t "
OGN_DEVICE_ID = "0"
sudo /etc/init.d/dump1090-mutability stop > /dev/null 2>& 1
fi
CheckReturnCode
2016-12-30 22:52:41 +00:00
2016-12-30 21:10:27 +00:00
## CHECK FOR PREREQUISITE PACKAGES
2016-04-01 16:55:46 +00:00
2016-12-29 18:35:42 +00:00
echo -e " \e[95m Installing packages needed to fulfill dependencies for ${ DECODER_NAME } ...\e[97m "
2016-12-19 17:50:20 +00:00
echo -e ""
2016-04-01 16:55:46 +00:00
CheckPackage git
CheckPackage rtl-sdr
CheckPackage librtlsdr-dev
CheckPackage libusb-1.0-0-dev
CheckPackage libconfig-dev
2016-12-19 17:50:20 +00:00
CheckPackage libfftw3-dev
CheckPackage libjpeg8
2016-04-01 16:55:46 +00:00
CheckPackage libjpeg-dev
CheckPackage libconfig9
2016-12-19 17:50:20 +00:00
CheckPackage procserv
CheckPackage telnet
2016-12-29 17:49:18 +00:00
CheckPackage curl
2016-12-19 17:50:20 +00:00
CheckPackage lynx
2016-12-28 21:39:55 +00:00
echo -e ""
2016-04-01 16:55:46 +00:00
2016-12-30 21:10:27 +00:00
## BLACKLIST UNWANTED RTL-SDR MODULES FROM BEING LOADED
2016-04-01 16:55:46 +00:00
2016-12-29 17:36:39 +00:00
if [ [ ! -f /etc/modprobe.d/rtlsdr-blacklist.conf ] ] ; then
echo -e "\e[33m Stopping unwanted kernel modules from being loaded..."
echo -e "\e[37m"
2016-12-28 21:39:55 +00:00
sudo tee /etc/modprobe.d/rtlsdr-blacklist.conf > /dev/null <<EOF
2016-04-01 16:55:46 +00:00
blacklist dvb_usb_rtl28xxu
blacklist dvb_usb_v2
blacklist rtl_2830
blacklist rtl_2832
blacklist r820t
blacklist rtl2830
blacklist rtl2832
EOF
2016-12-28 21:39:55 +00:00
fi
2016-04-01 16:55:46 +00:00
2016-12-30 21:10:27 +00:00
## CHECK FOR EXISTING INSTALL AND IF SO STOP IT
2016-12-19 20:27:34 +00:00
2016-12-30 17:05:52 +00:00
if [ [ -f ${ DECODER_SERVICE_SCRIPT_PATH } ] ] ; then
2016-12-30 21:38:06 +00:00
echo -en " \e[33m Stopping the ${ DECODER_NAME } service...\t\t\t\t\t "
2016-12-30 17:05:52 +00:00
sudo service ${ DECODER_SERVICE_SCRIPT_NAME } stop > /dev/null 2>& 1
2016-12-28 21:39:55 +00:00
CheckReturnCode
2016-12-19 20:27:34 +00:00
fi
2016-12-19 17:50:20 +00:00
### DOWNLOAD AND SET UP THE BINARIES
2016-04-01 16:55:46 +00:00
2016-12-19 20:27:34 +00:00
# Create build directory if not already present.
2016-12-29 18:27:03 +00:00
if [ [ ! -d ${ DECODER_BUILD_DIRECTORY } ] ] ; then
echo -en " \e[33m Creating build directory \"\e[37m ${ DECODER_BUILD_DIRECTORY } \e[33m\"...\t "
mkdir ${ DECODER_BUILD_DIRECTORY }
2016-12-28 21:39:55 +00:00
CheckReturnCode
2016-12-19 20:27:34 +00:00
fi
2016-12-28 21:39:55 +00:00
# Enter the build directory.
2016-12-30 17:05:52 +00:00
if [ [ ! ${ PWD } = = ${ DECODER_BUILD_DIRECTORY } ] ] ; then
echo -en " \e[33m Entering build directory \"\e[37m ${ DECODER_BUILD_DIRECTORY } \e[33m\"...\t "
cd ${ DECODER_BUILD_DIRECTORY }
CheckReturnCode
fi
2016-12-19 20:27:34 +00:00
2016-12-30 17:05:52 +00:00
# Detect CPU Architecture.
2016-12-29 18:12:00 +00:00
if [ [ -z ${ CPU_ARCHITECTURE } ] ] ; then
2016-12-30 21:38:06 +00:00
echo -en "\e[33m Detecting CPU architecture...\t\t\t\t\t\t"
2016-12-30 20:23:45 +00:00
CPU_ARCHITECTURE = ` uname -m | tr -d "\n\r" `
2016-12-29 18:12:00 +00:00
CheckReturnCode
fi
2016-12-29 17:36:39 +00:00
2016-12-30 17:05:52 +00:00
# Identify the correct binaries to download.
2016-12-29 17:36:39 +00:00
case ${ CPU_ARCHITECTURE } in
2016-04-01 16:55:46 +00:00
"armv6l" )
# Raspberry Pi 1
2016-12-30 17:05:52 +00:00
DECODER_BINARY_URL = "http://download.glidernet.org/rpi-gpu/rtlsdr-ogn-bin-RPI-GPU-latest.tgz"
2016-04-01 16:55:46 +00:00
; ;
"armv7l" )
2016-12-22 20:43:51 +00:00
# Raspberry Pi 2 onwards
2016-12-30 17:05:52 +00:00
DECODER_BINARY_URL = "http://download.glidernet.org/arm/rtlsdr-ogn-bin-ARM-latest.tgz"
2016-04-01 16:55:46 +00:00
; ;
"x86_64" )
# 64 Bit
2016-12-30 17:05:52 +00:00
DECODER_BINARY_URL = "http://download.glidernet.org/x64/rtlsdr-ogn-bin-x64-latest.tgz"
2016-04-01 16:55:46 +00:00
; ;
*)
# 32 Bit (default install if no others matched)
2016-12-30 17:05:52 +00:00
DECODER_BINARY_URL = "http://download.glidernet.org/x86/rtlsdr-ogn-bin-x86-latest.tgz"
2016-04-01 16:55:46 +00:00
; ;
esac
2016-12-30 17:26:05 +00:00
# Attempt to download and extract binaries.
2016-12-30 20:19:38 +00:00
if [ [ ` echo " ${ DECODER_BINARY_URL } " | grep -c "^http" ` -gt 0 ] ] ; then
2016-12-30 17:05:52 +00:00
# Download binaries.
2016-12-30 21:41:32 +00:00
echo -en " \e[33m Downloading ${ DECODER_NAME } binaries for \"\e[37m ${ CPU_ARCHITECTURE } \e[33m\" architecture...\t\t "
2016-12-30 17:05:52 +00:00
DECODER_BINARY_FILE = ` echo ${ DECODER_BINARY_URL } | awk -F "/" '{print $NF}' `
2016-12-30 20:28:45 +00:00
curl -s ${ DECODER_BINARY_URL } -o ${ DECODER_BUILD_DIRECTORY } /${ DECODER_BINARY_FILE } > /dev/null 2>& 1
2016-12-30 17:05:52 +00:00
CheckReturnCode
# Extract binaries.
2016-12-30 21:38:06 +00:00
echo -en " \e[33m Extracting ${ DECODER_NAME } package \"\e[37m ${ DECODER_BINARY_FILE } \e[33m\"...\t "
2016-12-30 17:05:52 +00:00
tar xzf ${ DECODER_BINARY_FILE } -C ${ DECODER_BUILD_DIRECTORY } > /dev/null 2>& 1
CheckReturnCode
else
2016-12-30 17:26:05 +00:00
# Unable to download bimary due to invalid URL.
2016-12-30 17:05:52 +00:00
echo -e " \e[33m Error invalid DECODER_BINARY_URL \" ${ DECODER_BINARY_URL } \"... "
exit 1
fi
2016-04-01 16:55:46 +00:00
2016-12-30 17:05:52 +00:00
# Change to DECODER work directory for post-build actions.
2016-12-29 18:27:03 +00:00
cd ${ DECODER_BUILD_DIRECTORY } /rtlsdr-ogn
2016-12-21 14:28:25 +00:00
2016-12-30 17:05:52 +00:00
# Create named pipe if required.
2016-12-21 14:28:25 +00:00
if [ [ ! -p ogn-rf.fifo ] ] ; then
2016-12-30 21:43:08 +00:00
echo -en "\e[33m Creating named pipe...\t\t\t\t\t\t"
2016-12-21 14:28:25 +00:00
sudo mkfifo ogn-rf.fifo
2016-12-28 21:39:55 +00:00
CheckReturnCode
2016-12-21 14:28:25 +00:00
fi
2016-04-01 16:55:46 +00:00
# Set file permissions.
2016-12-30 21:38:06 +00:00
echo -en "\e[33m Setting proper file permissions...\t\t\t\t\t"
2016-12-30 17:05:52 +00:00
DECODER_SETUID_BINARIES = "gsm_scan ogn-rf rtlsdr-ogn"
DECODER_SETUID_COUNT = "0"
for DECODER_SETUID_BINARY in ${ DECODER_SETUID_BINARIES } ; do
DECODER_SETUID_COUNT = $(( DECODER_SETUID_COUNT+1))
sudo chown root ${ DECODER_SETUID_BINARY }
sudo chmod a+s ${ DECODER_SETUID_BINARY }
2016-12-28 21:39:55 +00:00
done
2016-12-30 17:05:52 +00:00
# And check that the file permissions have been applied.
if [ [ ` ls -l ${ DECODER_SETUID_BINARIES } | grep -c "\-rwsr-sr-x" ` -eq ${ DECODER_SETUID_COUNT } ] ] ; then
true
else
2016-12-30 17:26:05 +00:00
false
2016-12-30 17:05:52 +00:00
fi
2016-12-28 21:39:55 +00:00
CheckReturnCode
2016-04-01 16:55:46 +00:00
2016-12-30 17:05:52 +00:00
# Creat GPU device if required.
2016-12-21 14:28:25 +00:00
if [ [ ! -c gpu_dev ] ] ; then
2016-12-30 17:05:52 +00:00
# Check if kernel v4.1 or higher is being used.
2016-12-30 21:43:08 +00:00
echo -en "\e[33m Getting the version of the kernel currently running...\t\t"
2016-12-21 14:28:25 +00:00
KERNEL = ` uname -r`
2016-12-28 21:39:55 +00:00
KERNEL_VERSION = " `echo ${ KERNEL } | cut -d \. -f 1`.`echo ${ KERNEL } | cut -d \. -f 2` "
CheckReturnCode
if [ [ ${ KERNEL_VERSION } < 4.1 ] ] ; then
2016-12-21 14:28:25 +00:00
# Kernel is older than version 4.1.
2016-12-30 21:38:06 +00:00
echo -en "\e[33m Executing mknod for older kernels...\e[97m\t\t\t\t\t"
2016-12-21 14:28:25 +00:00
sudo mknod gpu_dev c 100 0
else
# Kernel is version 4.1 or newer.
2016-12-30 21:38:06 +00:00
echo -en "\e[33m Executing mknod for newer kernels...\e[97m\t\t\t\t\t"
2016-12-21 14:28:25 +00:00
sudo mknod gpu_dev c 249 0
fi
2016-12-30 17:05:52 +00:00
CheckReturnCode
2016-04-01 16:55:46 +00:00
fi
2016-12-30 21:10:27 +00:00
## CREATE THE CONFIGURATION FILE
2016-12-19 17:50:20 +00:00
2016-12-23 13:46:40 +00:00
# Use receiver coordinates if already know, otherwise populate with dummy values to ensure valid config generation.
2016-12-19 17:50:20 +00:00
2016-12-29 17:36:39 +00:00
# Latitude.
2016-12-27 21:03:22 +00:00
if [ [ -z ${ OGN_LATITUDE } ] ] ; then
2016-12-22 10:51:55 +00:00
if [ [ -n ${ RECEIVER_LATITUDE } ] ] ; then
2016-12-27 21:03:22 +00:00
OGN_LATITUDE = " ${ RECEIVER_LATITUDE } "
2016-12-22 10:51:55 +00:00
else
2016-12-30 17:05:52 +00:00
OGN_LATITUDE = "0.000"
2016-12-22 10:51:55 +00:00
fi
2016-12-19 17:50:20 +00:00
fi
2016-04-01 16:55:46 +00:00
2016-12-29 17:36:39 +00:00
# Longitude.
2016-12-27 21:03:22 +00:00
if [ [ -z ${ OGN_LONGITUDE } ] ] ; then
2016-12-22 10:51:55 +00:00
if [ [ -n ${ RECEIVER_LONGITUDE } ] ] ; then
2016-12-27 21:03:22 +00:00
OGN_LONGITUDE = " ${ RECEIVER_LONGITUDE } "
2016-12-22 10:51:55 +00:00
else
2016-12-30 17:05:52 +00:00
OGN_LONGITUDE = "0.000"
2016-12-22 10:51:55 +00:00
fi
2016-12-29 17:49:18 +00:00
fi
2016-12-22 10:51:55 +00:00
2016-12-29 17:36:39 +00:00
# Altitude.
2016-12-27 21:03:22 +00:00
if [ [ -z ${ OGN_ALTITUDE } ] ] ; then
2016-12-22 10:51:55 +00:00
if [ [ -n ${ RECIEVER_ALTITUDE } ] ] ; then
2016-12-29 17:36:39 +00:00
OGN_ALTITUDE = " ${ RECIEVER_ALTITUDE } "
2016-12-22 10:51:55 +00:00
else
2016-12-29 17:36:39 +00:00
OGN_ALTITUDE = "0"
2016-12-22 10:51:55 +00:00
fi
2016-12-19 17:50:20 +00:00
fi
2016-04-01 16:55:46 +00:00
2016-12-29 17:36:39 +00:00
# Geoid separation: FLARM transmits GPS altitude, APRS uses means Sea level altitude.
2016-12-19 17:50:20 +00:00
# To find value you can check: http://geographiclib.sourceforge.net/cgi-bin/GeoidEval
2016-12-29 17:36:39 +00:00
# Need to derive from co-ords but will set to altitude as a placeholders.
2016-12-22 13:31:42 +00:00
if [ [ -z ${ OGN_GEOID } ] ] ; then
if [ [ -n ${ RECIEVER_ALTITUDE } ] ] ; then
OGN_GEOID = " ${ RECIEVER_ALTITUDE } "
else
OGN_GEOID = "0"
fi
2016-12-19 17:50:20 +00:00
fi
2016-04-01 16:55:46 +00:00
2016-12-29 17:36:39 +00:00
# Set receiver callsign for this decoder.
# This should be between 3 and 9 alphanumeric charactors, with no punctuation.
2016-12-19 17:50:20 +00:00
# Please see: http://wiki.glidernet.org/receiver-naming-convention
2016-12-27 21:03:22 +00:00
if [ [ -z ${ OGN_RECEIVER_NAME } ] ] ; then
2016-12-29 17:49:18 +00:00
if [ [ -n ${ RECEIVERNAME } ] ] ; then
2016-12-27 21:03:22 +00:00
OGN_RECEIVER_NAME = ` echo ${ RECEIVERNAME } | tr -cd '[:alnum:]' | cut -c -9`
2016-12-22 13:31:42 +00:00
else
2016-12-27 21:03:22 +00:00
OGN_RECEIVER_NAME = ` hostname -s | tr -cd '[:alnum:]' | cut -c -9`
2016-12-22 13:31:42 +00:00
fi
2016-12-19 17:50:20 +00:00
fi
2016-04-01 16:55:46 +00:00
2016-12-30 17:05:52 +00:00
# Check for decoder specific variable, if not set then populate with dummy values to ensure valid config generation.
if [ [ -z ${ OGN_FREQ_CORR } ] ] ; then
OGN_FREQ_CORR = "0"
fi
if [ [ -z ${ OGN_GSM_FREQ } ] ] ; then
OGN_GSM_FREQ = "957.800"
fi
if [ [ -z ${ OGN_GSM_GAIN } ] ] ; then
OGN_GSM_GAIN = "35"
fi
if [ [ -z ${ OGN_WHITELIST } ] ] ; then
OGN_WHITELIST = "0"
fi
2016-12-22 10:51:55 +00:00
# Test if config file exists, if not create it.
2016-12-29 18:27:03 +00:00
if [ [ -s ${ DECODER_BUILD_DIRECTORY } /rtlsdr-ogn/${ OGN_RECEIVER_NAME } .conf ] ] ; then
2016-12-30 21:38:06 +00:00
echo -en " \e[33m Using existing ${ DECODER_NAME } config file at \"\e[37m ${ OGN_RECEIVER_NAME } .conf\e[33m\"...\e [97m\t\t "
2016-12-29 17:49:18 +00:00
else
2016-12-30 21:38:06 +00:00
echo -en " \e[33m Generating new ${ DECODER_NAME } config file as \"\e[37m ${ OGN_RECEIVER_NAME } .conf\e[33m\"...\e [97m\t\t "
2016-12-30 20:23:45 +00:00
sudo tee ${ DECODER_BUILD_DIRECTORY } /rtlsdr-ogn/${ OGN_RECEIVER_NAME } .conf > /dev/null 2>& 1 <<EOF
2016-12-19 17:50:20 +00:00
###########################################################################################
# #
# CONFIGURATION FILE BASED ON http://wiki.glidernet.org/wiki:receiver-config-file #
# #
2016-12-27 21:03:22 +00:00
###########################################################################################
2016-12-19 17:50:20 +00:00
#
RF:
2016-12-29 17:49:18 +00:00
{
2016-12-22 20:36:45 +00:00
FreqCorr = ${ OGN_FREQ_CORR } ; # [ppm] Some R820T sticks have 40-80ppm correction factors, measure it with gsm_scan
2016-12-22 20:43:51 +00:00
Device = ${ OGN_DEVICE_ID } ; # Device index of the USB RTL-SDR device to be selected
# DeviceSerial = ${OGN_DEVICE_SERIAL}; # char[12] Serial number of the USB RTL-SDR device to be selected
2016-12-19 17:50:20 +00:00
GSM:
2016-12-29 17:49:18 +00:00
{
2016-12-22 17:21:34 +00:00
CenterFreq = ${ OGN_GSM_FREQ } ; # [MHz] Fnd the best GSM frequency with gsm_scan
Gain = ${ OGN_GSM_GAIN } ; # [0.1 dB] RF input gain for frequency calibration (beware that GSM signals are very strong)
2016-12-19 17:50:20 +00:00
} ;
} ;
#
Position:
2016-12-29 17:49:18 +00:00
{
2016-12-27 21:03:22 +00:00
Latitude = ${ OGN_LATITUDE } ; # [deg] Antenna coordinates in decimal degrees
Longitude = ${ OGN_LONGITUDE } ; # [deg] Antenna coordinates in decimal degrees
Altitude = ${ OGN_ALTITUDE } ; # [m] Altitude above sea leavel
2016-12-22 20:43:51 +00:00
GeoidSepar = ${ OGN_GEOID } ; # [m] Geoid separation: FLARM transmits GPS altitude, APRS uses means Sea level altitude
2016-12-19 17:50:20 +00:00
} ;
#
APRS:
{
2016-12-27 21:03:22 +00:00
Call = " ${ OGN_RECEIVER_NAME } " ; # APRS callsign (max. 9 characters)
2016-12-19 17:50:20 +00:00
} ;
#
DDB:
{
2016-12-22 20:43:51 +00:00
UseAsWhitelist = ${ OGN_WHITELIST } ; # [0|1] Setting to 1 enforces strict opt in
2016-12-19 17:50:20 +00:00
} ;
#
EOF
2016-12-22 10:51:55 +00:00
fi
2016-12-29 17:36:39 +00:00
2016-12-28 21:39:55 +00:00
# Update ownership of new config file.
2016-12-29 18:27:03 +00:00
chown pi:pi ${ DECODER_BUILD_DIRECTORY } /rtlsdr-ogn/${ OGN_RECEIVER_NAME } .conf > /dev/null 2>& 1
2016-12-28 21:39:55 +00:00
CheckReturnCode
2016-04-01 16:55:46 +00:00
2016-12-19 17:50:20 +00:00
### INSTALL AS A SERVICE
2016-12-30 18:24:19 +00:00
if [ [ -f ${ DECODER_SERVICE_SCRIPT_NAME } ] ] ; then
# Check for local copy of service script.
2016-12-30 18:43:41 +00:00
if [ [ ` grep -c " conf= ${ DECODER_SERVICE_SCRIPT_CONFIG } " ${ DECODER_SERVICE_SCRIPT_NAME } ` -eq 1 ] ] ; then
2016-12-30 21:38:06 +00:00
echo -en " \e[33m Installing service script at \"\e[37m ${ DECODER_SERVICE_SCRIPT_PATH } \e[33m\"...\t\t "
2016-12-30 18:24:19 +00:00
cp ${ DECODER_SERVICE_SCRIPT_NAME } ${ DECODER_SERVICE_SCRIPT_PATH }
sudo chmod +x ${ DECODER_SERVICE_SCRIPT_PATH } > /dev/null 2>& 1
else
2016-12-30 21:38:06 +00:00
echo -en " \e[33m Invalid service script \"\e[37m ${ DECODER_SERVICE_SCRIPT_NAME } \e[33m\"...\t\t\t "
2016-12-30 18:24:19 +00:00
false
fi
elif [ [ -n ${ DECODER_SERVICE_SCRIPT_URL } ] ] ; then
# Otherwise attempt to download service script.
if [ [ ` echo ${ DECODER_SERVICE_SCRIPT_URL } | grep -c "^http" ` -gt 0 ] ] ; then
2016-12-30 21:38:06 +00:00
echo -en " \e[33m Downloading service script to \"\e[37m ${ DECODER_SERVICE_SCRIPT_PATH } \e[33m\"...\t\t "
2016-12-30 18:24:19 +00:00
sudo curl -s ${ DECODER_SERVICE_SCRIPT_URL } -o ${ DECODER_SERVICE_SCRIPT_PATH }
sudo chmod +x ${ DECODER_SERVICE_SCRIPT_PATH } > /dev/null 2>& 1
else
echo -en " \e[33m Invalid service script url \"\e[37m ${ DECODER_SERVICE_SCRIPT_URL } \e[33m\"...\t\t "
false
fi
2016-12-30 17:26:05 +00:00
else
2016-12-30 18:24:19 +00:00
# Otherwise error if unable to use local or downloaded service script
2016-12-30 21:38:06 +00:00
echo -en " \e[33m Unable to install service script at \"\e[37m ${ DECODER_SERVICE_SCRIPT_PATH } \e[33m\"...\t\t "
2016-12-30 18:24:19 +00:00
false
2016-12-30 17:05:52 +00:00
fi
2016-12-28 21:39:55 +00:00
CheckReturnCode
2016-04-01 16:55:46 +00:00
2016-12-30 18:24:19 +00:00
# Generate and install service script configuration file.
2016-12-30 17:05:52 +00:00
if [ [ -n ${ DECODER_SERVICE_SCRIPT_CONFIG } ] ] ; then
2016-12-30 21:38:06 +00:00
echo -en " \e[33m Creating service config file \"\e[37m ${ DECODER_SERVICE_SCRIPT_CONFIG } \e[33m\"...\t\t "
2016-12-30 17:05:52 +00:00
sudo tee ${ DECODER_SERVICE_SCRIPT_CONFIG } > /dev/null 2>& 1 <<EOF
2016-04-01 16:55:46 +00:00
#shellbox configuration file
#Starts commands inside a "box" with a telnet-like server.
#Contact the shell with: telnet <hostname> <port>
#Syntax:
#port user directory command args
2016-12-29 18:27:03 +00:00
50000 pi ${ DECODER_BUILD_DIRECTORY } /rtlsdr-ogn ./ogn-rf ${ OGN_RECEIVER_NAME } .conf
50001 pi ${ DECODER_BUILD_DIRECTORY } /rtlsdr-ogn ./ogn-decode ${ OGN_RECEIVER_NAME } .conf
2016-04-01 16:55:46 +00:00
EOF
2016-12-30 17:05:52 +00:00
chown pi:pi ${ DECODER_SERVICE_SCRIPT_CONFIG } > /dev/null 2>& 1
2016-12-30 20:03:50 +00:00
else
2016-12-30 17:26:05 +00:00
false
2016-12-30 17:05:52 +00:00
fi
2016-12-28 21:39:55 +00:00
CheckReturnCode
2016-04-01 16:55:46 +00:00
2016-12-30 17:05:52 +00:00
# Potentially obselse tuner detection code.
2016-12-22 11:18:37 +00:00
if [ [ ${ TUNER_COUNT } -lt 2 ] ] ; then
2016-12-30 20:44:53 +00:00
# Less than 2 tuners present so we must stop other services before starting this decoder.
2016-12-30 21:48:54 +00:00
echo -en "\e[33m Found less than 2 tuners so other decoders will be disabled...\t"
2016-12-30 20:44:53 +00:00
SERVICES = "dump1090-mutability"
for SERVICE in ${ SERVICES } ; do
if [ [ ` service ${ SERVICE } status | grep -c "Active: active" ` -gt 0 ] ] ; then
sudo update-rc.d ${ SERVICE } disable > /dev/null 2>& 1
fi
done
2016-12-28 21:39:55 +00:00
CheckReturnCode
2016-12-22 11:18:37 +00:00
fi
2016-12-29 17:36:39 +00:00
# Configure $DECODER as a service.
2016-12-30 21:38:06 +00:00
echo -en " \e[33m Configuring ${ DECODER_NAME } as a service...\t\t\t\t "
2016-12-30 17:05:52 +00:00
sudo update-rc.d ${ DECODER_SERVICE_SCRIPT_NAME } defaults > /dev/null 2>& 1
2016-12-28 21:39:55 +00:00
CheckReturnCode
2016-04-01 16:55:46 +00:00
2016-12-29 17:36:39 +00:00
# Start the $DECODER service.
2016-12-30 21:38:06 +00:00
echo -en " \e[33m Starting the ${ DECODER_NAME } service...\t\t\t\t\t "
2016-12-30 17:05:52 +00:00
sudo service ${ DECODER_SERVICE_SCRIPT_NAME } start > /dev/null 2>& 1
2016-12-28 21:39:55 +00:00
CheckReturnCode
2016-12-19 17:50:20 +00:00
2016-12-30 21:10:27 +00:00
## RTL-SDR OGN SETUP COMPLETE
2016-12-19 17:50:20 +00:00
2016-12-22 10:51:55 +00:00
# Return to the project root directory.
2016-12-30 21:38:06 +00:00
echo -en " \e[94m Returning to ${ RECEIVER_PROJECT_TITLE } root directory...\e[97m\t "
2016-12-30 23:01:06 +00:00
cd ${ RECIEVER_ROOT_DIRECTORY }
2016-12-28 21:39:55 +00:00
CheckReturnCode
2016-12-19 17:50:20 +00:00
echo -e ""
2016-12-28 21:39:55 +00:00
echo -e "\e[93m-------------------------------------------------------------------------------------------------------\n"
2016-12-19 17:50:20 +00:00
echo -e " \e[92m ${ DECODER_NAME } setup is complete.\e[39m "
echo -e ""
2016-12-30 21:16:49 +00:00
read -p "Press enter to continue..." CONTINUE
2016-12-19 17:50:20 +00:00
exit 0