kopia lustrzana https://github.com/jprochazka/adsb-receiver
220 wiersze
8.9 KiB
Bash
Executable File
220 wiersze
8.9 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
#####################################################################################
|
|
# ADS-B RECEIVER #
|
|
#####################################################################################
|
|
# #
|
|
# A set of scripts created to automate the process of installing the software #
|
|
# needed to setup a Mode S decoder as well as feeders which are capable of #
|
|
# sharing your ADS-B results with many of the most popular ADS-B aggregate sites. #
|
|
# #
|
|
# Project Hosted On GitHub: https://github.com/jprochazka/adsb-receiver #
|
|
# #
|
|
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
|
# #
|
|
# Copyright (c) 2015-2016 Joseph A. Prochazka #
|
|
# #
|
|
# 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. #
|
|
# #
|
|
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
|
|
|
|
## VARIABLES
|
|
|
|
AUTOMATED_INSTALL="false"
|
|
PROJECT_BRANCH="master"
|
|
CONFIGURATION_FILE="default"
|
|
ENABLE_LOGGING="false"
|
|
|
|
export RECEIVER_ROOT_DIRECTORY="${PWD}"
|
|
export RECEIVER_BASH_DIRECTORY="${PWD}/bash"
|
|
export RECEIVER_BUILD_DIRECTORY="${PWD}/build"
|
|
export RECEIVER_OS_DISTRIBUTION=`. /etc/os-release; echo ${ID/*, /}`
|
|
export RECEIVER_OS_RELEASE=`. /etc/os-release; echo ${VERSION_ID/*, /}`
|
|
|
|
## SOURCE EXTERNAL SCRIPTS
|
|
|
|
source ${RECEIVER_BASH_DIRECTORY}/functions.sh
|
|
|
|
## FUNCTIONS
|
|
|
|
# Display the help message.
|
|
function DisplayHelp() {
|
|
echo ""
|
|
echo "Usage: $0 [OPTIONS] [ARGUMENTS]"
|
|
echo ""
|
|
echo "Option GNU long option Meaning"
|
|
echo "-a --automated-install Use a configuration file to automate the install process somewhat."
|
|
echo "-b <BRANCH> --branch=<BRANCH> Specifies the repository branch to be used."
|
|
echo "-c <FILE> --config-file=<FILE> The configuration file to be use for an unattended installation."
|
|
echo "-d --development Skips local repository update so changes are not overwrote."
|
|
echo "-h --help Shows this message."
|
|
echo "-l --log-output Logs all output to a file in the logs directory."
|
|
echo "-m <MTA> --mta=<MTA> Specify which email MTA to use currently Exim or Postfix."
|
|
echo "-u --apt-update Forces the apt update command to be ran."
|
|
echo "-v --verbose Provides extra confirmation at each stage of the install."
|
|
echo ""
|
|
}
|
|
|
|
## CHECK FOR OPTIONS AND ARGUMENTS
|
|
|
|
while [[ $# -gt 0 ]] ; do
|
|
case "$1" in
|
|
-h|--help)
|
|
# Display a help message.
|
|
DisplayHelp
|
|
exit 0
|
|
;;
|
|
-a|--automated-install)
|
|
# Automated install.
|
|
AUTOMATED_INSTALL="true"
|
|
shift 1
|
|
;;
|
|
-b)
|
|
# The specified branch of github.
|
|
PROJECT_BRANCH="$2"
|
|
shift 2
|
|
;;
|
|
--branch*)
|
|
# The specified branch of github.
|
|
PROJECT_BRANCH=`echo $1 | sed -e 's/^[^=]*=//g'`
|
|
shift 1
|
|
;;
|
|
-c)
|
|
# The specified installation configuration file.
|
|
CONFIGURATION_FILE="$2"
|
|
shift 2
|
|
;;
|
|
--config-file*)
|
|
# The specified installation configuration file.
|
|
CONFIGURATION_FILE=`echo $1 | sed -e 's/^[^=]*=//g'`
|
|
shift 1
|
|
;;
|
|
-d|--development)
|
|
# Skip adsb-receiver repository update.
|
|
DEVELOPMENT_MODE="true"
|
|
shift 1
|
|
;;
|
|
-l|--log-output)
|
|
# Enable logging to a file in the logs directory.
|
|
ENABLE_LOGGING="true"
|
|
shift 1
|
|
;;
|
|
-m)
|
|
# The MTA to use.
|
|
MTA=${2^^}
|
|
if [ $MTA != "EXIM" ] && [ $MTA != "POSTFIX" ]; then
|
|
echo "MTA can only be either EXIM or POSTFIX."
|
|
exit 1
|
|
fi
|
|
shift 2
|
|
;;
|
|
--mta*)
|
|
MTA=`echo ${1^^} | sed -e 's/^[^=]*=//g'`
|
|
if [ $MTA != "EXIM" ] && [ $MTA != "POSTFIX" ]; then
|
|
echo "MTA can only be either EXIM or POSTFIX."
|
|
exit 1
|
|
fi
|
|
shift 1
|
|
;;
|
|
-u|--apt-update)
|
|
# Force apt update.
|
|
FORCE_APT_UPDATE="true"
|
|
shift 1
|
|
;;
|
|
-v|--verbose)
|
|
# Provides extra confirmation at each stage of the install.
|
|
VERBOSE="true"
|
|
shift 1
|
|
;;
|
|
*)
|
|
# Unknown options were set so exit.
|
|
echo -e "Error: Unknown option: $1" >&2
|
|
DisplayHelp
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
## AUTOMATED INSTALL
|
|
|
|
# If the automated installation option was selected set the needed environmental variables.
|
|
if [[ "${AUTOMATED_INSTALL}" = "true" ]] ; then
|
|
# If no configuration file was specified use the default configuration file path and name.
|
|
if [[ -n "${CONFIGURATION_FILE}" ]] || [[ "${CONFIGURATION_FILE}" = "default" ]] ; then
|
|
CONFIGURATION_FILE="${RECEIVER_ROOT_DIRECTORY}/install.config"
|
|
# If either the -c or --config-file= flags were set a valid file must reside there.
|
|
elif [[ ! -f "${CONFIGURATION_FILE}" ]] ; then
|
|
echo "Unable to locate the installation configuration file."
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Add any environmental variables needed by any child scripts.
|
|
export RECEIVER_AUTOMATED_INSTALL=${AUTOMATED_INSTALL}
|
|
export RECEIVER_PROJECT_BRANCH=${PROJECT_BRANCH}
|
|
export RECEIVER_CONFIGURATION_FILE=${CONFIGURATION_FILE}
|
|
export RECEIVER_MTA=${MTA}
|
|
export RECEIVER_FORCE_APT_UPDATE=$FORCE_APT_UPDATE
|
|
export RECEIVER_VERBOSE=${VERBOSE}
|
|
|
|
## EXECUTE BASH/INIT.SH
|
|
|
|
chmod +x ${RECEIVER_BASH_DIRECTORY}/init.sh
|
|
if [[ -n "${ENABLE_LOGGING}" ]] && [[ "${ENABLE_LOGGING}" = "true" ]] ; then
|
|
# Execute init.sh logging all output to the log drectory as the file name specified.
|
|
LOG_FILE="${RECEIVER_ROOT_DIRECTORY}/logs/install_$(date +"%m_%d_%Y_%H_%M_%S").log"
|
|
${RECEIVER_BASH_DIRECTORY}/init.sh 2>&1 | tee -a "${LOG_FILE}"
|
|
echo -e "\e[95m Cleaning up log file...\e[97m"
|
|
CleanLogFile "${LOG_FILE}"
|
|
else
|
|
# Execute init.sh without logging any output to the log directory.
|
|
${RECEIVER_BASH_DIRECTORY}/init.sh
|
|
fi
|
|
|
|
## CLEAN UP
|
|
|
|
# Remove any files created by whiptail.
|
|
for WHIPTAIL in FEEDER_CHOICES EXTRAS_CHOICES ; do
|
|
if [[ -f "${RECEIVER_ROOT_DIRECTORY}/${WHIPTAIL}" ]] ; then
|
|
rm -f ${RECEIVER_ROOT_DIRECTORY}/${WHIPTAIL}
|
|
fi
|
|
done
|
|
|
|
# Remove any global variables assigned by this script.
|
|
unset RECEIVER_ROOT_DIRECTORY
|
|
unset RECEIVER_BASH_DIRECTORY
|
|
unset RECEIVER_BUILD_DIRECTORY
|
|
unset RECEIVER_PROJECT_BRANCH
|
|
unset RECEIVER_AUTOMATED_INSTALL
|
|
unset RECEIVER_CONFIGURATION_FILE
|
|
unset RECEIVER_FORCE_APT_UPDATE
|
|
unset RECEIVER_VERBOSE
|
|
unset RECEIVER_PROJECT_TITLE
|
|
unset RECEIVER_MTA
|
|
unset RECEIVER_OS_DISTRIBUTION
|
|
unset RECEIVER_OS_RELEASE
|
|
|
|
# Check if any errors were encountered by any child scripts.
|
|
# If no errors were encountered then exit this script cleanly.
|
|
if [[ $? -ne 0 ]] ; then
|
|
exit 1
|
|
else
|
|
exit 0
|
|
fi
|