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. #
# #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# #
2017-01-02 22:40:20 +00:00
# Copyright (c) 2016-2017, 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. #
# #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
2017-02-07 20:19:52 +00:00
### VARIABLES
2016-04-01 16:55:46 +00:00
2017-01-09 14:51:50 +00:00
RECEIVER_ROOT_DIRECTORY = " ${ PWD } "
RECEIVER_BASH_DIRECTORY = " ${ RECEIVER_ROOT_DIRECTORY } /bash "
RECEIVER_BUILD_DIRECTORY = " ${ RECEIVER_ROOT_DIRECTORY } /build "
2016-12-19 17:50:20 +00:00
2017-02-05 22:20:01 +00:00
# Component specific variables.
2017-02-07 20:19:52 +00:00
COMPONENT_BUILD_DIRECTORY = " ${ RECEIVER_BUILD_DIRECTORY } /ogn "
COMPONENT_GITHUB = "https://github.com/glidernet/ogn-rf"
COMPONENT_WEBSITE = "http://wiki.glidernet.org"
COMPONENT_NAME = "RTLSDR-OGN"
COMPONENT_DESC = "is a combined decoder and feeder for the Open Glider Network which focuses on tracking gilders and other GA aircraft equipped with FLARM, FLARM-compatible devices or OGN tracker."
COMPONENT_RADIO = "Please note that a dedicated RTL-SDR dongle is required to use this decoder"
2016-12-19 17:50:20 +00:00
2017-02-05 22:20:01 +00:00
# Component service script variables.
2017-02-07 20:19:52 +00:00
COMPONENT_SERVICE_NAME = "rtlsdr-ogn"
COMPONENT_SERVICE_SCRIPT_URL = "http://download.glidernet.org/common/service/rtlsdr-ogn"
COMPONENT_SERVICE_SCRIPT_NAME = " ${ COMPONENT_SERVICE_NAME } "
COMPONENT_SERVICE_SCRIPT_PATH = " /etc/init.d/ ${ COMPONENT_SERVICE_NAME } "
COMPONENT_SERVICE_CONFIG_PATH = " /etc/ ${ COMPONENT_SERVICE_SCRIPT_NAME } .conf "
2016-12-28 21:39:55 +00:00
2017-02-05 22:20:01 +00:00
### INCLUDE EXTERNAL SCRIPTS
source ${ RECEIVER_BASH_DIRECTORY } /variables.sh
source ${ RECEIVER_BASH_DIRECTORY } /functions.sh
2017-02-07 20:19:52 +00:00
## SET INSTALLATION VARIABLES
2016-12-30 21:27:32 +00:00
# Source the automated install configuration file if this is an automated installation.
2017-02-05 21:38:26 +00:00
if [ [ " ${ RECEIVER_AUTOMATED_INSTALL } " = "true" ] ] && [ [ -s " ${ RECEIVER_CONFIGURATION_FILE } " ] ] ; then
2016-12-30 21:27:32 +00:00
source ${ RECEIVER_CONFIGURATION_FILE }
fi
2017-02-05 21:38:26 +00:00
### BEGIN SETUP
2016-04-01 16:55:46 +00:00
2017-01-09 14:51:50 +00:00
if [ [ " ${ RECEIVER_AUTOMATED_INSTALL } " = "false" ] ] ; then
2016-12-30 21:27:32 +00:00
clear
2017-01-01 18:48:22 +00:00
echo -e " \n\e[91m ${ RECEIVER_PROJECT_TITLE } "
2016-12-30 21:27:32 +00:00
fi
2016-12-19 17:50:20 +00:00
echo -e ""
2017-02-07 20:19:52 +00:00
echo -e " \e[92m Setting up ${ COMPONENT_NAME } ... "
2017-01-02 20:22:35 +00:00
echo -e ""
2017-01-02 20:19:23 +00:00
echo -e "\e[93m ------------------------------------------------------------------------------\e[96m"
2016-12-19 17:50:20 +00:00
echo -e ""
2017-02-05 21:38:26 +00:00
2017-01-09 14:51:50 +00:00
if [ [ " ${ RECEIVER_AUTOMATED_INSTALL } " = "false" ] ] ; then
2017-02-07 20:19:52 +00:00
whiptail --backtitle " ${ RECEIVER_PROJECT_TITLE } " --title " ${ COMPONENT_NAME } Setup " --yesno " ${ COMPONENT_NAME } ${ COMPONENT_DESC } .\n\n ${ COMPONENT_RADIO } .\n\n ${ COMPONENT_WEBSITE } \n\nContinue setup by installing ${ COMPONENT_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 ""
2017-01-02 20:19:23 +00:00
echo -e "\e[93m ------------------------------------------------------------------------------"
2017-02-07 20:19:52 +00:00
echo -e " \e[92m ${ COMPONENT_NAME } setup halted.\e[39m "
2016-12-30 22:49:42 +00:00
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
2017-02-05 21:38:26 +00:00
### CHECK FOR PREREQUISITE PACKAGES
2016-04-01 16:55:46 +00:00
2017-02-07 20:19:52 +00:00
echo -e " \e[95m Installing packages needed to fulfill dependencies for ${ COMPONENT_NAME } ...\e[97m "
2016-12-19 17:50:20 +00:00
echo -e ""
2017-01-02 17:19:06 +00:00
# Required by install script.
2016-04-01 16:55:46 +00:00
CheckPackage git
2017-01-02 03:36:33 +00:00
# Required for USB SDR devices.
2016-04-01 16:55:46 +00:00
CheckPackage librtlsdr-dev
CheckPackage libusb-1.0-0-dev
2017-01-02 03:36:33 +00:00
CheckPackage rtl-sdr
# Required for RTLSDR-OGN.
CheckPackage curl
CheckPackage libconfig9
2016-04-01 16:55:46 +00:00
CheckPackage libconfig-dev
2017-01-02 05:56:21 +00:00
CheckPackage libcurl3
2017-01-02 04:08:34 +00:00
CheckPackage libfftw3-3
2016-12-19 17:50:20 +00:00
CheckPackage libfftw3-dev
CheckPackage libjpeg8
2016-04-01 16:55:46 +00:00
CheckPackage libjpeg-dev
2017-01-02 03:36:33 +00:00
CheckPackage lynx
2016-12-19 17:50:20 +00:00
CheckPackage procserv
CheckPackage telnet
2017-01-01 18:48:22 +00:00
2017-01-02 17:54:12 +00:00
echo -e ""
2017-02-07 20:19:52 +00:00
echo -e " \e[95m Configuring this device to run the ${ COMPONENT_NAME } binaries...\e[97m "
2016-12-28 21:39:55 +00:00
echo -e ""
2016-04-01 16:55:46 +00:00
2017-02-05 21:38:26 +00:00
### BLACKLIST UNWANTED RTL-SDR MODULES FROM BEING LOADED
2016-04-01 16:55:46 +00:00
2017-02-05 21:38:26 +00:00
if [ [ ! -f "/etc/modprobe.d/rtlsdr-blacklist.conf" ] ] ; then
2017-01-02 21:47:26 +00:00
echo -en "\e[33m Stopping unwanted kernel modules from being loaded...\e[97m"
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
2017-01-02 05:18:44 +00:00
CheckReturnCode
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
2017-02-07 20:19:52 +00:00
if [ [ -f " ${ COMPONENT_SERVICE_SCRIPT_PATH } " ] ] ; then
echo -en " \e[33m Stopping the ${ COMPONENT_NAME } service...\e[97m "
ACTION = $( sudo ${ COMPONENT_SERVICE_SCRIPT_PATH } stop 2>& 1)
2016-12-28 21:39:55 +00:00
CheckReturnCode
2016-12-19 20:27:34 +00:00
fi
2017-01-11 20:19:18 +00:00
## FAILSAFE KILL
2017-01-11 22:03:29 +00:00
PIDS = ` ps -efww | egrep "(\./ogn-rf\ |\./ogn-decode\ )" | awk -vpid= $$ '$2 != pid { print $2 }' | tr '\n\r' ' ' `
2017-01-11 20:19:18 +00:00
if [ ! -z " ${ PIDS } " ] ; then
2017-02-07 20:19:52 +00:00
echo -en " \e[33m Killing any running ${ COMPONENT_NAME } processes...\e[97m "
2017-01-11 21:49:16 +00:00
ACTION = $( sudo kill -9 ${ PIDS } )
2017-01-11 20:19:18 +00:00
CheckReturnCode
fi
2017-01-11 21:32:19 +00:00
unset PIDS
2017-01-11 20:19:18 +00:00
2017-01-03 00:20:02 +00:00
### ASSIGN RTL-SDR DONGLES
2017-01-03 00:31:13 +00:00
2017-02-11 02:25:07 +00:00
# Count the number of tuners available.
RECEIVER_TUNERS_AVAILABLE = ` rtl_eeprom 2>& 1 | grep -c "^\s*[0-9]*:\s" `
# Start counting the number of tuners required with 1 for this component.
RECEIVER_TUNERS_REQUIRED = "1"
# Check which other components are installed.
2017-01-03 00:31:13 +00:00
echo -e "\e[95m Checking for existing decoders...\e[97m"
echo -e ""
2017-02-11 02:25:07 +00:00
# Check if any of the dump1090 forks are installed.
echo -en "\e[94m Checking if the dump1090-mutability package is installed...\e[97m"
2017-01-03 00:31:13 +00:00
# Check if the dump1090-mutability package is installed.
if [ [ $( dpkg-query -W -f= '${STATUS}' dump1090-mutability 2>/dev/null | grep -c "ok installed" ) -eq 1 ] ] ; then
2017-02-11 02:25:07 +00:00
RECEIVER_TUNERS_REQUIRED = $(( RECEIVER_TUNERS_REQUIRED+1))
DUMP1090_IS_INSTALLED = "true"
# Check if the dump1090-fa package is installed.
elif [ [ $( dpkg-query -W -f= '${STATUS}' dump1090-fa 2>/dev/null | grep -c "ok installed" ) -eq 1 ] ] ; then
RECEIVER_TUNERS_REQUIRED = $(( RECEIVER_TUNERS_REQUIRED+1))
2017-01-03 00:31:13 +00:00
DUMP1090_IS_INSTALLED = "true"
else
DUMP1090_IS_INSTALLED = "false"
fi
2017-02-11 02:25:07 +00:00
CheckReturnCode
2017-01-03 00:31:13 +00:00
# Check if the dump978 binaries exist.
2017-02-11 02:25:07 +00:00
echo -en "\e[94m Checking if the dump978 binaries exist on this device...\e[97m"
2017-02-05 21:38:26 +00:00
if [ [ -f " ${ RECEIVER_BUILD_DIRECTORY } /dump978/dump978 " ] ] && [ [ -f " ${ RECEIVER_BUILD_DIRECTORY } /dump978/uat2text " ] ] && [ [ -f " ${ RECEIVER_BUILD_DIRECTORY } /dump978/uat2esnt " ] ] && [ [ -f " ${ RECEIVER_BUILD_DIRECTORY } /dump978/uat2json " ] ] ; then
2017-02-11 02:25:07 +00:00
RECEIVER_TUNERS_REQUIRED = $(( RECEIVER_TUNERS_REQUIRED+1))
2017-01-03 00:31:13 +00:00
DUMP978_IS_INSTALLED = "true"
else
DUMP978_IS_INSTALLED = "false"
fi
2017-02-11 02:25:07 +00:00
CheckReturnCode
2017-01-03 00:20:02 +00:00
2017-01-03 00:24:50 +00:00
# Multiple RTL_SDR tuners found, check if device specified for this decoder is present.
2017-02-11 02:25:07 +00:00
if [ [ " ${ RECEIVER_TUNERS_AVAILABLE } " -gt 1 ] ] ; then
2017-01-03 00:24:50 +00:00
# If a device has been specified by serial number then try to match that with the currently detected tuners.
2017-01-09 15:01:16 +00:00
if [ [ -n " ${ OGN_DEVICE_SERIAL } " ] ] ; then
2017-02-11 02:25:07 +00:00
for DEVICE_ID in ` seq 0 ${ RECEIVER_TUNERS_AVAILABLE } ` ; do
2017-01-03 00:24:50 +00:00
if [ [ ` rtl_eeprom -d ${ DEVICE_ID } 2>& 1 | grep -c " Serial number:\s* ${ OGN_DEVICE_SERIAL } $" ` -eq 1 ] ] ; then
2017-02-07 20:19:52 +00:00
echo -en " \e[33m RTL-SDR with Serial \" ${ OGN_DEVICE_SERIAL } \" found at device \" ${ OGN_DEVICE_ID } \" and will be assigned to ${ COMPONENT_NAME } ...\e[97m "
2017-01-03 00:24:50 +00:00
OGN_DEVICE_ID = ${ DEVICE_ID }
fi
done
# If no match for this serial then assume the highest numbered tuner will be used.
2017-01-09 15:01:16 +00:00
if [ [ -z " ${ OGN_DEVICE_ID } " ] ] ; then
2017-02-11 02:25:07 +00:00
echo -en " \e[33m RTL-SDR with Serial \" ${ OGN_DEVICE_SERIAL } \" not found, assigning device \" ${ RECEIVER_TUNERS_AVAILABLE } \" to ${ COMPONENT_NAME } ...\e[97m "
OGN_DEVICE_ID = ${ RECEIVER_TUNERS_AVAILABLE }
2017-01-03 00:24:50 +00:00
fi
# Or if a device has been specified by device ID then confirm this is currently detected.
2017-01-09 15:01:16 +00:00
elif [ [ -n " ${ OGN_DEVICE_ID } " ] ] ; then
2017-01-03 00:24:50 +00:00
if [ [ ` rtl_eeprom -d ${ OGN_DEVICE_ID } 2>& 1 | grep -c " ^\s* ${ OGN_DEVICE_ID } :\s " ` -eq 1 ] ] ; then
2017-02-07 20:19:52 +00:00
echo -en " \e[33m RTL-SDR device \" ${ OGN_DEVICE_ID } \" found and will be assigned to ${ COMPONENT_NAME } ...\e[97m "
2017-01-03 00:24:50 +00:00
# If no match for this serial then assume the highest numbered tuner will be used.
else
2017-02-11 02:25:07 +00:00
echo -en " \e[33m RTL-SDR device \" ${ OGN_DEVICE_ID } \" not found, assigning device \" ${ RECEIVER_TUNERS_AVAILABLE } \" to ${ COMPONENT_NAME } ...\e[97m "
OGN_DEVICE_ID = ${ RECEIVER_TUNERS_AVAILABLE }
2017-01-03 00:24:50 +00:00
fi
# Failing that configure it with device ID 0.
else
2017-02-07 20:19:52 +00:00
echo -en " \e[33m No RTL-SDR device specified, assigning device \"0\" to ${ COMPONENT_NAME } ...\e[97m "
2017-02-11 02:25:07 +00:00
OGN_DEVICE_ID = ${ RECEIVER_TUNERS_AVAILABLE }
2017-01-03 00:24:50 +00:00
fi
# Single tuner present so assign device 0 and stop any other running decoders, or at least dump1090-mutablity for a default install.
2017-02-11 02:25:07 +00:00
elif [ [ " ${ RECEIVER_TUNERS_AVAILABLE } " -eq 1 ] ] ; then
2017-02-07 20:19:52 +00:00
echo -en " \e[33m Single RTL-SDR device \"0\" detected and assigned to ${ COMPONENT_NAME } ...\e[97m "
2017-01-03 00:24:50 +00:00
OGN_DEVICE_ID = "0"
2017-01-03 03:02:16 +00:00
ACTION = $( sudo /etc/init.d/dump1090-mutability stop 2>& 1)
2017-01-03 00:24:50 +00:00
# No tuners present so assign device 0 and stop any other running decoders, or at least dump1090-mutablity for a default install.
2017-02-11 02:25:07 +00:00
elif [ [ " ${ RECEIVER_TUNERS_AVAILABLE } " -lt 1 ] ] ; then
2017-02-07 20:19:52 +00:00
echo -en " \e[33m No RTL-SDR device detected so ${ COMPONENT_NAME } will be assigned device \"0\"...\e[97m "
2017-01-03 00:24:50 +00:00
OGN_DEVICE_ID = "0"
2017-01-03 03:02:16 +00:00
ACTION = $( sudo /etc/init.d/dump1090-mutability stop 2>& 1)
2017-01-03 00:24:50 +00:00
fi
CheckReturnCode
2017-01-03 00:31:13 +00:00
# If either dump1090 or dump978 is installed we must assign RTL-SDR dongles for each of these decoders.
2017-01-09 14:51:50 +00:00
if [ [ " ${ DUMP1090_IS_INSTALLED } " = "true" ] ] || [ [ " ${ DUMP978_IS_INSTALLED } " = "true" ] ] ; then
2017-01-03 00:31:13 +00:00
# Check if Dump1090 is installed.
2017-01-09 14:51:50 +00:00
if [ [ " ${ DUMP1090_IS_INSTALLED } " = "true" ] ] ; then
2017-01-03 00:31:13 +00:00
# The dump1090-mutability package appear to be installed.
2017-01-09 14:51:50 +00:00
if [ [ " ${ RECEIVER_AUTOMATED_INSTALL } " = "false" ] ] ; then
2017-01-03 00:31:13 +00:00
# Ask the user which USB device is to be used for dump1090.
2017-01-03 03:42:50 +00:00
DUMP1090_DEVICE_ID = $( whiptail --backtitle " ${ RECEIVER_PROJECT_TITLE } " --title "Dump1090 RTL-SDR Dongle" --nocancel --inputbox "\nEnter the ID for your dump1090 RTL-SDR dongle." 8 78 3>& 1 1>& 2 2>& 3)
2017-01-09 15:01:16 +00:00
while [ [ -z " ${ DUMP1090_DEVICE_ID } " ] ] ; do
2017-01-03 03:42:50 +00:00
DUMP1090_DEVICE_ID = $( whiptail --backtitle " ${ RECEIVER_PROJECT_TITLE } " --title "Dump1090 RTL-SDR Dongle (REQUIRED)" --nocancel --inputbox "\nEnter the ID for your dump1090 RTL-SDR dongle." 8 78 3>& 1 1>& 2 2>& 3)
2017-01-03 00:31:13 +00:00
done
else
### GET DONGLE ID FROM THE INSTALLATION CONFIGURATION FILE...
true
fi
fi
# Check if Dump978 is installed.
2017-01-09 14:51:50 +00:00
if [ [ " ${ DUMP978_IS_INSTALLED } " = "true" ] ] ; then
2017-01-03 00:31:13 +00:00
# The dump978 binaries appear to exist on this device.
2017-01-09 14:51:50 +00:00
if [ [ " ${ RECEIVER_AUTOMATED_INSTALL } " = "false" ] ] ; then
2017-01-03 00:31:13 +00:00
# Ask the user which USB device is to be use for dump978.
2017-01-03 03:42:50 +00:00
DUMP978_DEVICE_ID = $( whiptail --backtitle " ${ RECEIVER_PROJECT_TITLE } " --title "Dump978 RTL-SDR Dongle" --nocancel --inputbox "\nEnter the ID for your dump978 RTL-SDR dongle." 8 78 3>& 1 1>& 2 2>& 3)
2017-01-09 15:01:16 +00:00
while [ [ -z " ${ DUMP978_DEVICE_ID } " ] ] ; do
2017-01-03 03:42:50 +00:00
DUMP978_DEVICE_ID = $( whiptail --backtitle " ${ RECEIVER_PROJECT_TITLE } " --title "Dump978 RTL-SDR Dongle (REQUIRED)" --nocancel --inputbox "\nEnter the ID for your dump978 RTL-SDR dongle." 8 78 3>& 1 1>& 2 2>& 3)
2017-01-03 00:31:13 +00:00
done
else
### GET DONGLE ID FROM THE INSTALLATION CONFIGURATION FILE...
true
fi
fi
#
2017-01-09 14:51:50 +00:00
if [ [ " ${ RECEIVER_AUTOMATED_INSTALL } " = "false" ] ] ; then
2017-01-03 00:31:13 +00:00
# Ask the user which USB device is to be use for RTL-SDR OGN.
2017-01-03 03:42:50 +00:00
RTLSDROGN_DEVICE_ID = $( whiptail --backtitle " ${ RECEIVER_PROJECT_TITLE } " --title "RTL-SDR OGN RTL-SDR Dongle" --nocancel --inputbox "\nEnter the ID for your RTL-SDR OGN RTL-SDR dongle." 8 78 3>& 1 1>& 2 2>& 3)
2017-01-09 15:01:16 +00:00
while [ [ -z " ${ DUMP978_DEVICE_ID } " ] ] ; do
2017-01-03 03:42:50 +00:00
RTLSDROGN_DEVICE_ID = $( whiptail --backtitle " ${ RECEIVER_PROJECT_TITLE } " --title "RTL-SDR OGN RTL-SDR Dongle (REQUIRED)" --nocancel --inputbox "\nEnter the ID for your RTL-SDR OGN RTL-SDR dongle." 8 78 3>& 1 1>& 2 2>& 3)
2017-01-03 00:31:13 +00:00
done
else
### GET DONGLE ID FROM THE INSTALLATION CONFIGURATION FILE...
true
fi
# Assign the specified RTL-SDR dongle to dump1090.
2017-01-09 15:01:16 +00:00
if [ [ " ${ DUMP1090_IS_INSTALLED } " = "true" ] ] && [ [ -n " ${ DUMP1090_DEVICE_ID } " ] ] ; then
2017-02-08 16:20:35 +00:00
echo -e " \e[94m Assigning RTL-SDR dongle \" ${ DUMP1090_DEVICE_ID } \" to dump1090-mutability...\e[97m "
2017-01-03 03:42:50 +00:00
ChangeConfig "DEVICE" ${ DUMP1090_DEVICE_ID } "/etc/default/dump1090-mutability"
2017-01-03 00:31:13 +00:00
echo -e "\e[94m Reloading dump1090-mutability...\e[97m"
echo -e ""
2017-01-03 03:02:16 +00:00
ACTION = $( sudo /etc/init.d/dump1090-mutability force-reload 2>& 1)
2017-01-03 00:31:13 +00:00
echo -e ""
fi
# Assign the specified RTL-SDR dongle to dump978
2017-01-09 15:01:16 +00:00
if [ [ " ${ DUMP978_IS_INSTALLED } " = "true" ] ] && [ [ -n " ${ DUMP978_DEVICE_ID } " ] ] ; then
2017-01-03 03:42:50 +00:00
echo -e " \e[94m Assigning RTL-SDR dongle \" ${ DUMP978_DEVICE_ID } \" to dump978...\e[97m "
2017-01-03 00:31:13 +00:00
### ADD DEVICE TO MAINTENANCE SCRIPT...
echo -e "\e[94m Reloading dump978...\e[97m"
### KILL EXISTING DUMP978 PROCESSES...
echo -e ""
### RESTART DUMP978...
echo -e ""
fi
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.
2017-02-07 20:19:52 +00:00
if [ [ ! -d " ${ COMPONENT_BUILD_DIRECTORY } " ] ] ; then
echo -en " \e[33m Creating build directory \"\e[37m ${ COMPONENT_BUILD_DIRECTORY } \e[33m\"...\e[97m "
ACTION = $( mkdir -vp ${ COMPONENT_BUILD_DIRECTORY } 2>& 1)
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.
2017-02-07 20:19:52 +00:00
if [ [ ! " ${ PWD } " = " ${ COMPONENT_BUILD_DIRECTORY } " ] ] ; then
echo -en " \e[33m Entering build directory \"\e[37m ${ COMPONENT_BUILD_DIRECTORY } \e[33m\"...\e[97m "
cd ${ COMPONENT_BUILD_DIRECTORY }
2017-01-03 04:13:26 +00:00
ACTION = ${ PWD }
2016-12-30 17:05:52 +00:00
CheckReturnCode
fi
2016-12-19 20:27:34 +00:00
2016-12-30 17:05:52 +00:00
# Detect CPU Architecture.
2017-01-09 15:58:24 +00:00
Check_CPU
CheckReturnCode
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" )
2017-02-05 21:38:26 +00:00
# Raspberry Pi 1.
2017-02-07 20:19:52 +00:00
COMPONENT_BINARY_URL = "http://download.glidernet.org/rpi-gpu/rtlsdr-ogn-bin-RPI-GPU-latest.tgz"
2016-04-01 16:55:46 +00:00
; ;
"armv7l" )
2017-02-05 21:38:26 +00:00
# Raspberry Pi 2 onwards.
2017-02-07 20:19:52 +00:00
COMPONENT_BINARY_URL = "http://download.glidernet.org/arm/rtlsdr-ogn-bin-ARM-latest.tgz"
2016-04-01 16:55:46 +00:00
; ;
"x86_64" )
2017-02-05 21:38:26 +00:00
# 64 Bit.
2017-02-07 20:19:52 +00:00
COMPONENT_BINARY_URL = "http://download.glidernet.org/x64/rtlsdr-ogn-bin-x64-latest.tgz"
2016-04-01 16:55:46 +00:00
; ;
*)
2017-02-05 21:38:26 +00:00
# 32 Bit (default install if no others matched).
2017-02-07 20:19:52 +00:00
COMPONENT_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.
2017-02-07 20:19:52 +00:00
if [ [ ` echo " ${ COMPONENT_BINARY_URL } " | grep -c "^http" ` -gt 0 ] ] ; then
2016-12-30 17:05:52 +00:00
# Download binaries.
2017-02-07 20:19:52 +00:00
echo -en " \e[33m Downloading ${ COMPONENT_NAME } binaries for \"\e[37m ${ CPU_ARCHITECTURE } \e[33m\" architecture...\e[97m "
COMPONENT_BINARY_FILE = ` echo ${ COMPONENT_BINARY_URL } | awk -F "/" '{print $NF}' `
ACTION = $( curl -L ${ COMPONENT_BINARY_URL } -o ${ COMPONENT_BUILD_DIRECTORY } /${ COMPONENT_BINARY_FILE } 2>& 1)
2016-12-30 17:05:52 +00:00
CheckReturnCode
# Extract binaries.
2017-02-07 20:19:52 +00:00
echo -en " \e[33m Extracting ${ COMPONENT_NAME } package \"\e[37m ${ COMPONENT_BINARY_FILE } \e[33m\"...\e[97m "
ACTION = $( tar -vxzf " ${ COMPONENT_BUILD_DIRECTORY } / ${ COMPONENT_BINARY_FILE } " -C " ${ COMPONENT_BUILD_DIRECTORY } " 2>& 1)
2016-12-30 17:05:52 +00:00
CheckReturnCode
else
2016-12-30 17:26:05 +00:00
# Unable to download bimary due to invalid URL.
2017-02-11 02:25:07 +00:00
echo -e " \e[33m Error invalid COMPONENT_BINARY_URL \"\e[37m ${ COMPONENT_BINARY_URL } \e[33m\"...\e[97m "
2016-12-30 17:05:52 +00:00
exit 1
fi
2016-04-01 16:55:46 +00:00
2017-02-07 20:19:52 +00:00
# Change to component work directory for post-build actions.
COMPONENT_PROJECT_DIRECTORY = " ${ COMPONENT_BUILD_DIRECTORY } /rtlsdr-ogn "
if [ [ -d " ${ COMPONENT_PROJECT_DIRECTORY } " ] ] ; then
cd ${ COMPONENT_PROJECT_DIRECTORY }
2017-01-02 04:34:37 +00:00
else
2017-02-11 02:25:07 +00:00
echo -e " \e[33m Error unable to access \"\e[37m ${ COMPONENT_PROJECT_DIRECTORY } \e[33m\"...\e[97m "
2017-01-02 04:34:37 +00:00
exit 1
fi
2016-12-21 14:28:25 +00:00
2016-12-30 17:05:52 +00:00
# Create named pipe if required.
2017-02-07 20:19:52 +00:00
if [ [ ! -p " ${ COMPONENT_PROJECT_DIRECTORY } /ogn-rf.fifo " ] ] ; then
2017-01-02 21:47:26 +00:00
echo -en "\e[33m Creating named pipe...\e[97m"
2017-02-07 20:19:52 +00:00
ACTION = $( sudo mkfifo ${ COMPONENT_PROJECT_DIRECTORY } /ogn-rf.fifo 2>& 1)
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.
2017-01-02 21:47:26 +00:00
echo -en "\e[33m Setting proper file permissions...\e[97m"
2017-02-07 20:19:52 +00:00
COMPONENT_SETUID_BINARIES = "gsm_scan ogn-rf rtlsdr-ogn"
COMPONENT_SETUID_COUNT = "0"
for COMPONENT_SETUID_BINARY in ${ COMPONENT_SETUID_BINARIES } ; do
COMPONENT_SETUID_COUNT = $(( COMPONENT_SETUID_COUNT+1))
ACTION = $( sudo chown -v root ${ COMPONENT_SETUID_BINARY } 2>& 1)
ACTION = $( sudo chmod -v a+s ${ COMPONENT_SETUID_BINARY } 2>& 1)
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.
2017-02-07 20:19:52 +00:00
if [ [ ` ls -l ${ COMPONENT_SETUID_BINARIES } | grep -c "\-rwsr-sr-x" ` -eq " ${ COMPONENT_SETUID_COUNT } " ] ] ; then
2016-12-30 17:05:52 +00:00
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.
2017-02-07 20:19:52 +00:00
if [ [ ! -c " ${ COMPONENT_PROJECT_DIRECTORY } /gpu_dev " ] ] ; then
2017-02-11 02:25:07 +00:00
# The mknod major_version number varies with kernel version.
2017-01-02 21:47:26 +00:00
echo -en "\e[33m Getting the version of the kernel currently running...\e[97m"
2016-12-21 14:28:25 +00:00
KERNEL = ` uname -r`
2017-01-09 15:14:44 +00:00
KERNEL_VERSION = ` echo ${ KERNEL } | cut -d \. -f 1` .` echo ${ KERNEL } | cut -d \. -f 2`
2016-12-28 21:39:55 +00:00
CheckReturnCode
2017-02-11 02:25:07 +00:00
# Check if kernel v4.1 or higher is being used.
2017-01-09 15:14:44 +00:00
if [ [ " ${ KERNEL_VERSION } " < 4.1 ] ] ; then
2016-12-21 14:28:25 +00:00
# Kernel is older than version 4.1.
2017-01-02 20:05:51 +00:00
echo -en "\e[33m Executing mknod for older kernels...\e[97m"
2017-02-07 20:19:52 +00:00
ACTION = $( sudo mknod ${ COMPONENT_PROJECT_DIRECTORY } /gpu_dev c 100 0 2>& 1)
2016-12-21 14:28:25 +00:00
else
# Kernel is version 4.1 or newer.
2017-01-02 20:05:51 +00:00
echo -en "\e[33m Executing mknod for newer kernels...\e[97m"
2017-02-07 20:19:52 +00:00
ACTION = $( sudo mknod ${ COMPONENT_PROJECT_DIRECTORY } /gpu_dev c 249 0 2>& 1)
2016-12-21 14:28:25 +00:00
fi
2016-12-30 17:05:52 +00:00
CheckReturnCode
2016-04-01 16:55:46 +00:00
fi
2017-02-11 02:25:07 +00:00
# Calculate RTL-SDR device error rate.
2017-01-02 04:55:49 +00:00
if [ [ -z " ${ OGN_FREQ_CORR } " ] ] || [ [ -z " ${ OGN_GSM_FREQ } " ] ] ; then
2017-01-02 05:04:27 +00:00
# Attempt to calibrate if required values are not provided.
2017-01-02 22:11:16 +00:00
# Should probably confirm if user wishes to calibrate.
2017-01-02 04:55:49 +00:00
# GSM Band is GSM850 in US and GSM900 elsewhere.
DERIVED_GSM_BAND = "GSM900"
2017-02-11 02:25:07 +00:00
DERIVED_GAIN = "-10"
# Check for Kalibrates 'kal' binary.
2017-01-02 04:55:49 +00:00
if [ [ -x "`which kal`" ] ] ; then
2017-01-02 22:11:16 +00:00
echo -en "\e[33m Calibrating RTL-SDR device using Kalibrate, may take up to 10 minutes...\e[97m"
2017-01-02 04:55:49 +00:00
DERIVED_GSM_SCAN = ` kal -d " ${ OGN_DEVICE_ID } " -g " ${ DERIVED_GAIN } " -s ${ DERIVED_GSM_BAND } 2>& 1 | grep "power:" | sort -n -r -k 7 | grep -m1 "power:" `
DERIVED_GSM_FREQ = ` echo ${ DERIVED_GSM_SCAN } | awk '{print $3}' | sed -e 's/(//g' -e 's/MHz//g' `
DERIVED_GSM_CHAN = ` echo ${ DERIVED_GSM_SCAN } | awk '{print $2}' `
DERIVED_ERROR = ` kal -d " ${ OGN_DEVICE_ID } " -g " ${ DERIVED_GAIN } " -c " ${ DERIVED_GSM_CHAN } " 2>& 1 | grep "^average absolute error:" | awk '{print int($4)}' | sed -e 's/\-//g' `
2017-02-11 02:25:07 +00:00
# Otherwise fall back to gsm_scan binary provided with OGN code.
2017-02-07 20:19:52 +00:00
elif [ [ -x " ${ COMPONENT_PROJECT_DIRECTORY } /gsm_scan " ] ] ; then
2017-01-02 22:11:16 +00:00
echo -en "\e[33m Calibrating RTL-SDR device using gsm_scan, may take up to 20 minutes...\e[97m"
2017-01-02 04:55:49 +00:00
if [ [ " ${ DERIVED_GSM_BAND } " = "GSM850" ] ] ; then
2017-01-02 21:30:10 +00:00
DERIVED_GSM_OPTS = "--gsm850"
2017-01-02 04:55:49 +00:00
else
2017-01-02 21:30:10 +00:00
DERIVED_GSM_OPTS = ""
2017-01-02 04:55:49 +00:00
fi
2017-01-02 21:30:10 +00:00
DERIVED_GSM_SCAN = ` gsm_scan --device " ${ OGN_DEVICE_ID } " --gain " ${ DERIVED_GAIN } " ${ DERIVED_GSM_OPTS } | grep "^[0-9]*\.[0-9]*MHz:" | sed -e 's/dB://g' -e 's/\+//g' | sort -n -r -k 2 | grep -m1 "ppm" `
2017-01-02 04:55:49 +00:00
DERIVED_GSM_FREQ = ` echo ${ DERIVED_GSM_SCAN } | awk '{print $1}' | sed -e 's/00MHz://g' `
DERIVED_ERROR = ` echo ${ DERIVED_GSM_SCAN } | awk '{print int(($3 + $4)/2)}' `
2017-01-02 05:04:27 +00:00
else
2017-02-11 02:25:07 +00:00
# No suitable tool found to perform cailbrations.
2017-01-02 20:05:51 +00:00
echo -en "\e[33m Unable to calibrate RTL-SDR device...\e[97m"
2017-01-11 21:59:29 +00:00
false
2017-01-02 03:54:40 +00:00
fi
2017-01-02 05:04:27 +00:00
CheckReturnCode
2017-01-02 03:10:09 +00:00
fi
2017-01-02 02:57:15 +00:00
2017-02-05 21:38:26 +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.
2017-01-09 15:01:16 +00:00
if [ [ -z " ${ OGN_LATITUDE } " ] ] ; then
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.
2017-01-09 15:01:16 +00:00
if [ [ -z " ${ OGN_LONGITUDE } " ] ] ; then
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.
2017-01-09 15:01:16 +00:00
if [ [ -z " ${ OGN_ALTITUDE } " ] ] ; then
if [ [ -n " ${ RECEIVER_ALTITUDE } " ] ] ; then
2017-01-09 14:51:50 +00:00
OGN_ALTITUDE = " ${ RECEIVER_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
2017-02-11 02:25:07 +00:00
# Check for component specific variables, otherwise populate with dummy values to ensure valid config generation.
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.
2017-01-09 15:01:16 +00:00
if [ [ -z " ${ OGN_GEOID } " ] ] ; then
if [ [ -n " ${ RECEIVER_ALTITUDE } " ] ] ; then
2017-01-09 14:51:50 +00:00
OGN_GEOID = " ${ RECEIVER_ALTITUDE } "
2016-12-22 13:31:42 +00:00
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
2017-01-09 15:01:16 +00:00
if [ [ -z " ${ OGN_RECEIVER_NAME } " ] ] ; then
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
2017-01-02 05:04:27 +00:00
# Frequency Correction
2017-01-09 15:01:16 +00:00
if [ [ -z " ${ OGN_FREQ_CORR } " ] ] ; then
2017-01-02 18:10:57 +00:00
if [ [ -n " ${ DERIVED_ERROR } " ] ] ; then
OGN_FREQ_CORR = " ${ DERIVED_ERROR } "
2017-01-02 05:04:27 +00:00
else
2017-01-02 18:10:57 +00:00
OGN_FREQ_CORR = "30"
2017-01-02 05:04:27 +00:00
fi
2016-12-30 17:05:52 +00:00
fi
2017-01-02 05:04:27 +00:00
# GSM Reference signal frequency.
2017-01-09 15:01:16 +00:00
if [ [ -z " ${ OGN_GSM_FREQ } " ] ] ; then
2017-01-02 18:10:57 +00:00
if [ [ -n " ${ DERIVED_GSM_FREQ } " ] ] ; then
2017-01-02 05:04:27 +00:00
OGN_GSM_FREQ = " ${ DERIVED_GSM_FREQ } "
else
OGN_GSM_FREQ = "958"
fi
2016-12-30 17:05:52 +00:00
fi
2017-01-02 05:04:27 +00:00
# Gain value for RTL-SDR device.
2017-01-09 15:01:16 +00:00
if [ [ -z " ${ OGN_GSM_GAIN } " ] ] ; then
2017-01-02 18:10:57 +00:00
if [ [ -n " ${ DERIVED_GAIN } " ] ] ; then
2017-01-02 05:04:27 +00:00
OGN_GSM_GAIN = " ${ DERIVED_GAIN } "
else
2017-02-11 02:25:07 +00:00
OGN_GSM_GAIN = "-10"
2017-01-02 05:04:27 +00:00
fi
2016-12-30 17:05:52 +00:00
fi
2017-01-02 05:04:27 +00:00
# Enforce OGN whitelist.
2017-01-09 15:01:16 +00:00
if [ [ -z " ${ OGN_WHITELIST } " ] ] ; then
2016-12-30 17:05:52 +00:00
OGN_WHITELIST = "0"
fi
2016-12-22 10:51:55 +00:00
# Test if config file exists, if not create it.
2017-02-07 20:19:52 +00:00
COMPONENT_CONFIG_FILE_NAME = " ${ OGN_RECEIVER_NAME } .conf "
if [ [ -s " ${ COMPONENT_PROJECT_DIRECTORY } / ${ COMPONENT_CONFIG_FILE_NAME } " ] ] ; then
echo -en " \e[33m Using existing ${ COMPONENT_NAME } config file at \"\e[37m ${ COMPONENT_CONFIG_FILE_NAME } \e[33m\"...\e[97m "
2016-12-29 17:49:18 +00:00
else
2017-02-07 20:19:52 +00:00
echo -en " \e[33m Generating new ${ COMPONENT_NAME } config file as \"\e[37m ${ COMPONENT_CONFIG_FILE_NAME } \e[33m\"...\e[97m "
sudo tee ${ COMPONENT_PROJECT_DIRECTORY } /${ COMPONENT_CONFIG_FILE_NAME } > /dev/null 2>& 1 <<EOF
2017-02-05 21:38:26 +00:00
#########################################################
# #
# CONFIGURATION FILE BASED ON #
# #
# http://wiki.glidernet.org/wiki:receiver-config-file #
# #
#########################################################
2016-12-19 17:50:20 +00:00
#
RF:
2016-12-29 17:49:18 +00:00
{
2017-01-01 20:35:51 +00:00
FreqCorr = ${ OGN_FREQ_CORR } ; # [ppm] Some R820T sticks have 40-80ppm correction factors, measure it with gsm_scan.
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
{
2017-01-02 13:26:47 +00:00
CenterFreq = ${ OGN_GSM_FREQ } ; # [MHz] Fnd the best GSM frequency with gsm_scan.
2017-01-01 20:35:51 +00:00
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
{
2017-01-01 20:35:51 +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.
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:
{
2017-01-01 20:35:51 +00:00
Call = " ${ OGN_RECEIVER_NAME } " ; # char[9] APRS callsign (max. 9 characters).
2016-12-19 17:50:20 +00:00
} ;
#
DDB:
{
2017-01-01 20:35: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.
2017-02-07 20:19:52 +00:00
ACTION = $( chown -v pi:pi ${ COMPONENT_PROJECT_DIRECTORY } /${ COMPONENT_CONFIG_FILE_NAME } 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
2017-01-02 21:02:00 +00:00
# Install service script.
2017-02-07 20:19:52 +00:00
if [ [ -f " ${ COMPONENT_SERVICE_SCRIPT_NAME } " ] ] ; then
2016-12-30 18:24:19 +00:00
# Check for local copy of service script.
2017-02-07 20:19:52 +00:00
if [ [ ` grep -c " conf= ${ COMPONENT_SERVICE_CONFIG_PATH } " ${ COMPONENT_SERVICE_SCRIPT_NAME } ` -eq 1 ] ] ; then
echo -en " \e[33m Installing service script at \"\e[37m ${ COMPONENT_SERVICE_SCRIPT_PATH } \e[33m\"...\e[97m "
ACTION = $( cp -v ${ COMPONENT_SERVICE_SCRIPT_NAME } ${ COMPONENT_SERVICE_SCRIPT_PATH } 2>& 1)
ACTION = $( sudo chmod -v +x ${ COMPONENT_SERVICE_SCRIPT_PATH } 2>& 1)
2016-12-30 18:24:19 +00:00
else
2017-02-07 20:19:52 +00:00
echo -en " \e[33m Invalid service script \"\e[37m ${ COMPONENT_SERVICE_SCRIPT_NAME } \e[33m\"...\e[97m "
2016-12-30 18:24:19 +00:00
false
fi
2017-02-07 20:19:52 +00:00
elif [ [ -n " ${ COMPONENT_SERVICE_SCRIPT_URL } " ] ] ; then
2016-12-30 18:24:19 +00:00
# Otherwise attempt to download service script.
2017-02-07 20:19:52 +00:00
if [ [ ` echo ${ COMPONENT_SERVICE_SCRIPT_URL } | grep -c "^http" ` -gt 0 ] ] ; then
echo -en " \e[33m Downloading service script to \"\e[37m ${ COMPONENT_SERVICE_SCRIPT_PATH } \e[33m\"...\e[97m "
ACTION = $( sudo curl -L ${ COMPONENT_SERVICE_SCRIPT_URL } -o ${ COMPONENT_SERVICE_SCRIPT_PATH } 2>& 1)
ACTION = $( sudo chmod -v +x ${ COMPONENT_SERVICE_SCRIPT_PATH } 2>& 1)
2016-12-30 18:24:19 +00:00
else
2017-02-07 20:19:52 +00:00
echo -en " \e[33m Invalid service script url \"\e[37m ${ COMPONENT_SERVICE_SCRIPT_URL } \e[33m\"...\e[97m "
2016-12-30 18:24:19 +00:00
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
2017-02-07 20:19:52 +00:00
echo -en " \e[33m Unable to install service script at \"\e[37m ${ COMPONENT_SERVICE_SCRIPT_PATH } \e[33m\"...\e[97m "
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.
2017-02-07 20:19:52 +00:00
if [ [ -n " ${ COMPONENT_SERVICE_CONFIG_PATH } " ] ] ; then
echo -en " \e[33m Creating service config file \"\e[37m ${ COMPONENT_SERVICE_CONFIG_PATH } \e[33m\"...\e[97m "
sudo tee ${ COMPONENT_SERVICE_CONFIG_PATH } > /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
2017-02-07 20:19:52 +00:00
50000 pi ${ COMPONENT_PROJECT_DIRECTORY } ./ogn-rf ${ OGN_RECEIVER_NAME } .conf
50001 pi ${ COMPONENT_PROJECT_DIRECTORY } ./ogn-decode ${ OGN_RECEIVER_NAME } .conf
2016-04-01 16:55:46 +00:00
EOF
2017-02-07 20:19:52 +00:00
ACTION = $( chown -v pi:pi ${ COMPONENT_SERVICE_CONFIG_PATH } 2>& 1)
2016-12-30 20:03:50 +00:00
else
2017-02-07 20:19:52 +00:00
echo -en " \e[33m Unable to create service config file \"\e[37m ${ COMPONENT_SERVICE_CONFIG_PATH } \e[33m\"...\e[97m "
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
2017-02-07 20:19:52 +00:00
# Potentially obsolete tuner detection code.
2017-02-11 02:25:07 +00:00
if [ [ " ${ RECEIVER_TUNERS_AVAILABLE } " -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.
2017-01-02 21:47:26 +00:00
echo -en "\e[33m Found less than 2 tuners so other decoders will be disabled...\e[97m"
2017-01-11 21:59:29 +00:00
SERVICES_DISABLE = "dump1090-mutability"
for SERVICE in ${ SERVICES_DISABLE } ; do
2016-12-30 20:44:53 +00:00
if [ [ ` service ${ SERVICE } status | grep -c "Active: active" ` -gt 0 ] ] ; then
2017-01-03 03:02:16 +00:00
ACTION = $( sudo update-rc.d ${ SERVICE } disable 2>& 1)
2016-12-30 20:44:53 +00:00
fi
done
2016-12-28 21:39:55 +00:00
CheckReturnCode
2016-12-22 11:18:37 +00:00
fi
2017-02-07 20:19:52 +00:00
# Configure component as a service.
echo -en " \e[33m Configuring ${ COMPONENT_NAME } as a service...\e[97m "
ACTION = $( sudo update-rc.d ${ COMPONENT_SERVICE_NAME } defaults 2>& 1)
2016-12-28 21:39:55 +00:00
CheckReturnCode
2016-04-01 16:55:46 +00:00
2017-02-11 02:25:07 +00:00
# (re)start the component service.
COMPONENT_SERVICE_STATUS = $( sudo systemctl status ${ COMPONENT_SERVICE_NAME } 2>& 1)
if [ [ ` echo ${ COMPONENT_SERVICE_STATUS } | egrep "Active:" | egrep -c ": active" ` -gt 0 ] ] ; then
echo -e " \e[33m Restarting the ${ COMPONENT_NAME } service... "
ACTION = $( sudo systemctl reload-or-restart ${ COMPONENT_SERVICE_NAME } 2>& 1)
else
echo -e " \e[33m Starting the ${ COMPONENT_NAME } service... "
ACTION = $( sudo systemctl start ${ COMPONENT_SERVICE_NAME } 2>& 1)
fi
2016-12-28 21:39:55 +00:00
CheckReturnCode
2016-12-19 17:50:20 +00:00
2017-02-05 21:38:26 +00:00
### SETUP COMPLETE
2016-12-19 17:50:20 +00:00
2016-12-22 10:51:55 +00:00
# Return to the project root directory.
2017-01-02 20:05:51 +00:00
echo -en " \e[94m Returning to ${ RECEIVER_PROJECT_TITLE } root directory...\e[97m "
2017-01-09 14:51:50 +00:00
cd ${ RECEIVER_ROOT_DIRECTORY }
2017-01-03 04:13:26 +00:00
ACTION = ${ PWD }
2016-12-28 21:39:55 +00:00
CheckReturnCode
2016-12-19 17:50:20 +00:00
2017-01-02 20:19:23 +00:00
echo -e "\e[93m ------------------------------------------------------------------------------\n"
2017-02-07 20:19:52 +00:00
echo -e " \e[92m ${ COMPONENT_NAME } setup is complete.\e[39m "
2016-12-19 17:50:20 +00:00
echo -e ""
2017-01-09 14:51:50 +00:00
if [ [ " ${ RECEIVER_AUTOMATED_INSTALL } " = "false" ] ] ; then
2017-01-02 20:19:23 +00:00
read -p "Press enter to continue..." CONTINUE
fi
2016-12-19 17:50:20 +00:00
exit 0