adsb-receiver/bash/portal/install.sh

326 wiersze
14 KiB
Bash
Czysty Zwykły widok Historia

2015-12-01 11:37:40 +00:00
#!/bin/bash
#####################################################################################
2016-02-18 15:41:39 +00:00
# ADS-B RECEIVER #
2015-12-01 11:37:40 +00:00
#####################################################################################
# #
# This script is not meant to be executed directly. #
# Instead execute install.sh to begin the installation process. #
# #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
# #
# Copyright (c) 2015 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. #
# #
# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
2016-01-08 17:02:34 +00:00
BUILDDIR=$PWD
BASHDIR=$BUILDDIR/../bash
2016-01-22 21:07:08 +00:00
HTMLDIR=$BUILDDIR/portal/html
# Assign the Lighthttpd document root directory to a variable.
RAWDOCUMENTROOT=`/usr/sbin/lighttpd -f /etc/lighttpd/lighttpd.conf -p | grep server.document-root`
DOCUMENTROOT=`sed 's/.*"\(.*\)"[^"]*$/\1/' <<< $RAWDOCUMENTROOT`
2015-12-01 11:37:40 +00:00
2016-01-08 17:02:34 +00:00
source ../bash/functions.sh
2015-12-01 11:37:40 +00:00
clear
echo -e "\033[31m"
echo "-------------------------------------------"
2016-01-22 21:07:08 +00:00
echo " Now ready to install ADS-B Portal."
2015-12-01 11:37:40 +00:00
echo "-------------------------------------------"
2016-01-22 21:07:08 +00:00
echo -e "\033[33mThe goal of the ADS-B Portal project is to create a very"
2016-02-22 14:30:10 +00:00
echo "light weight easy to manage web interface for dump-1090 installations."
2015-12-01 11:37:40 +00:00
echo "This project is at the moment very young with only a few of the planned"
2016-02-22 14:30:10 +00:00
echo "features currently available at this time."
2015-12-01 11:37:40 +00:00
echo ""
2016-02-22 14:30:10 +00:00
echo "https://github.com/jprochazka/adsb-receiver"
2015-12-01 11:37:40 +00:00
echo -e "\033[37m"
read -p "Press enter to continue..." CONTINUE
clear
2016-04-01 13:46:32 +00:00
echo -e "\033[31m"
echo "Do you wish to enable advanced features?"
echo -e "\033[33m"
echo "ENABLING ADVANCED FEATURES ON DEVICES USING SD CARDS CAN SHORTEN THE LIFE OF THE SD CARD IMMENSELY"
echo -e "\033[33m"
echo "By enabling advanced features the portal will log all flights seen as well as the path of the flight."
echo "This data is stored in either a MySQL or SQLite database. This will result in a lot more data being"
echo "stored on your devices hard drive. Keep this and your devices hardware capabilities in mind before"
echo "selecting to enable these features."
echo ""
echo "You have been warned."
echo -e "\033[37m"
2016-04-03 03:01:04 +00:00
read -p "Use portal with advanced features? [y/N] " ADVANCED
2016-04-01 13:46:32 +00:00
if [[ $ADVANCED =~ ^[yY]$ ]]; then
echo -e "\033[31m"
echo "Select Database Engine"
echo -e "\033[33m"
echo " 1) MySQL"
echo " 2) SQLLite"
echo -e "\033[37m"
read -p "Use portal with advanced features? [1] " DATABASEENGINE
fi
2015-12-01 11:37:40 +00:00
## CHECK FOR PREREQUISITE PACKAGES
echo -e "\033[33m"
echo "Installing packages needed to build and fulfill dependencies..."
echo -e "\033[37m"
2015-12-30 16:13:28 +00:00
CheckPackage cron
2016-01-26 16:23:53 +00:00
CheckPackage collectd-core
2015-12-01 11:37:40 +00:00
CheckPackage rrdtool
2016-01-24 01:53:27 +00:00
CheckPackage lighttpd
CheckPackage php5-cgi
2016-02-05 16:30:11 +00:00
CheckPackage libpython2.7
2016-04-03 03:01:04 +00:00
if [[ $ADVANCED =~ ^[yY]$ ]]; then
2016-04-01 13:46:32 +00:00
if [[ $DATABASEENGINE == 2 ]]; then
CheckPackage sqlite3
CheckPackage php5-sqlite
else
CheckPackage mysql-server
CheckPackage mysql-client
CheckPackage php5-mysql
CheckPackage python-mysqldb
fi
fi
## CREATE THE DATABASE IF ADVANCED FEATURES WAS SELECTED
2016-04-03 03:01:04 +00:00
if [[ $ADVANCED =~ ^[yY]$ ]]; then
2016-04-01 13:46:32 +00:00
if [[ $DATABASEENGINE != 2 ]]; then
echo -e "\033[31m"
echo "Create Database and User"
echo -e "\033[33m"
echo "A database will now be created for you."
echo "Please supply the information pertaining to the new password when asked."
echo -e "\033[37m"
read -p "Password for MySQL root user: " MYSQLROOTPASSWORD
read -p "New Database Name: " DATABASENAME
read -p "New Database User Name: " DATABASEUSER
read -p "New Database User Password: " DATABASEPASSWORD
if [[ $DATABASEENGINE == 1 ]] || [[ $DATABASEENGINE == "" ]]; then
echo -e "\033[33m"
2016-04-03 23:01:41 +00:00
echo -e "Creating MySQL database and user...\033[37m"
2016-04-03 03:01:04 +00:00
mysql -uroot -p${MYSQLROOTPASSWORD} -e "CREATE DATABASE ${DATABASENAME};"
2016-04-03 05:07:53 +00:00
mysql -uroot -p${MYSQLROOTPASSWORD} -e "CREATE USER '${DATABASEUSER}'@'localhost' IDENTIFIED BY \"${DATABASEPASSWORD}\";";
mysql -uroot -p${MYSQLROOTPASSWORD} -e "GRANT ALL PRIVILEGES ON ${DATABASENAME}.* TO '${DATABASEUSER}'@'localhost';"
2016-04-03 03:01:04 +00:00
mysql -uroot -p${MYSQLROOTPASSWORD} -e "FLUSH PRIVILEGES;"
2016-04-01 13:46:32 +00:00
fi
echo -e "\033[31m"
echo "BE SURE TO WRITE THIS INFORMATION DOWN."
echo -e "\033[33m"
echo "Ii will be needed in order to complete the installation of the portal."
echo ""
echo "Database Server: localhost"
echo "Database User: ${DATABASEUSER}"
echo "Database Password: ${DATABASEPASSWORD}"
echo "Database Name: ${DATABASENAME}"
echo -e "\033[37m"
2016-04-03 03:01:04 +00:00
read -p "Press enter to continue..." CONTINUE
2016-04-01 13:46:32 +00:00
fi
2016-04-03 03:01:04 +00:00
## SETUP FLIGHT LOGGING SCRIPT
2016-04-01 13:46:32 +00:00
echo -e "\033[33m"
echo -e "Creating configuration file...\033[37m"
2016-04-01 13:46:32 +00:00
case $DATABASEENGINE in
2016-04-03 03:01:04 +00:00
"2")
2016-04-03 23:09:31 +00:00
tee $BUILDDIR/portal/logging/config.json > /dev/null <<EOF
2016-04-01 13:46:32 +00:00
{
"database":{"type":"sqlite",
"host":"",
"user":"",
"passwd":"",
"db":"${HTMLDIR}/data/portal.sqlite"}
}
2016-04-03 03:01:04 +00:00
EOF
2016-04-01 13:46:32 +00:00
;;
*)
2016-04-03 23:09:31 +00:00
tee $BUILDDIR/portal/logging/config.json > /dev/null <<EOF
2016-04-01 13:46:32 +00:00
{
"database":{"type":"mysql",
"host":"localhost",
"user":"${DATABASEUSER}",
"passwd":"${DATABASEPASSWORD}",
"db":"${DATABASENAME}"}
}
EOF
;;
esac
2016-04-03 23:09:31 +00:00
# Create and set permissions on the flight logging maintainance script.
2016-04-03 03:01:04 +00:00
PYTHONPATH=`which python`
2016-04-03 23:09:31 +00:00
tee $BUILDDIR/portal/logging/flights-maint.sh > /dev/null <<EOF
2016-04-03 03:01:04 +00:00
#!/bin/sh
while true
do
sleep 30
2016-04-03 03:01:04 +00:00
${PYTHONPATH} ${BUILDDIR}/portal/logging/flights.py
done
EOF
2016-04-03 23:09:31 +00:00
chmod +x $BUILDDIR/portal/logging/flights-maint.sh
# Add flight logging maintainance script to rc.local.
2016-04-03 03:01:04 +00:00
if ! grep -Fxq "${BUILDDIR}/portal/logging/flights-maint.sh &" /etc/rc.local; then
echo -e "\033[33m"
echo -e "Adding startup line to rc.local...\033[37m"
lnum=($(sed -n '/exit 0/=' /etc/rc.local))
((lnum>0)) && sudo sed -i "${lnum[$((${#lnum[@]}-1))]}i ${BUILDDIR}/portal/logging/flights-maint.sh &\n" /etc/rc.local
fi
# Start flight logging.
echo -e "\033[33m"
echo -e "Starting flight logging...\033[37m"
2016-04-03 03:01:04 +00:00
${PYTHONPATH} ${BUILDDIR}/portal/logging/flights-maint.sh &
2016-04-01 13:46:32 +00:00
fi
2015-12-01 11:37:40 +00:00
2016-01-22 21:07:08 +00:00
## SETUP THE PORTAL WEBSITE
2015-12-01 11:37:40 +00:00
2016-01-22 21:07:08 +00:00
echo -e "\033[33m"
echo -e "Placing portal files in Lighttpd's root directory...\033[37m"
sudo cp -R ${HTMLDIR}/* ${DOCUMENTROOT}
2016-01-24 05:09:19 +00:00
echo -e "\033[33m"
echo "Setting permissions on portal folders...\033[37m"
2016-02-02 15:38:32 +00:00
sudo chmod 777 ${DOCUMENTROOT}/graphs/
sudo chmod 777 ${DOCUMENTROOT}/data/
sudo chmod 666 ${DOCUMENTROOT}/data/*
sudo chmod 666 ${DOCUMENTROOT}/classes/settings.class.php
2016-01-24 05:09:19 +00:00
echo -e "\033[33m"
echo "Setting up performance graphs..."
echo -e "\033[37m"
chmod +x $BASHDIR/portal/graphs.sh
$BASHDIR/portal/graphs.sh
2016-01-24 01:53:27 +00:00
## CHECK IF DUMP978 HAS BEEN BUILT
if [ -f $BUILDDIR/dump978/dump978 ] && [ -f $BUILDDIR/dump978/uat2text ] && [ -f $BUILDDIR/dump978/uat2esnt ] && [ -f $BUILDDIR/dump978/uat2json ]; then
echo -e "\033[33m"
echo -e "Configuring dump978 map...\033[37m"
# Check if the heywhatsthis.com range position file has already been downloaded.
if [ ! -f ${HTMLDIR}/dump978/upintheair.json ]; then
# Check if a heywhatsthat.com range file exists in the dump1090 HTML folder.
if [ -f /usr/share/dump1090-mutability/html/upintheair.json ]; then
echo -e "\033[33m"
echo -e "Copying heywhatsthat.com range file from dump1090 installation...\033[37m"
sudo cp /usr/share/dump1090-mutability/html/upintheair.json ${HTMLDIR}/dump978/
else
echo -e "\033[33m"
echo "The dump978 map is able to display terrain limit rings using data obtained"
echo "from the website http://www.heywhatsthat.com. Some work will be required on your"
echo "part including visiting http://www.heywhatsthat.com and generating a new"
echo "panorama set to your location."
echo -e "\033[37m"
read -p "Do you wish to add terrain limit rings to the dump1090 map? [Y/n] " ADDTERRAINRINGS
if [[ ! $ADDTERRAINRINGS =~ ^[Nn]$ ]]; then
echo -e "\033[31m"
echo "READ THE FOLLOWING INSTRUCTION CAREFULLY!"
echo -e "\033[33m"
echo "To set up terrain limit rings you will need to first generate a panorama on the website"
echo "heywhatsthat.com. To do so visit the following URL:"
echo ""
echo " http://www.heywhatsthat.com"
echo ""
echo "Once the webpage has loaded click on the tab titled New panorama. Fill out the required"
echo "information in the form to the left of the map."
echo ""
echo "After submitting the form your request will be put into a queue to be generated shortly."
echo "You will be informed when the generation of your panorama has been completed."
echo ""
echo "Once generated visit your newly created panorama. Near the top left of the page you will"
echo "see a URL displayed which will point you to your newly created panorama. Within this URL's"
echo "query string you will see ?view=XXXXXXXX where XXXXXXXX is the identifier for this panorama."
echo "Enter below the letters and numbers making up the view identifier displayed there."
echo ""
echo "Positions for terrain rings for both 10,000 and 40,000 feet will be downloaded by this"
echo "script once the panorama has been generated and you are ready to continue."
echo -e "\033[37m"
read -p "Your heywhatsthat.com view identifier: " HEYWHATSTHATVIEWID
read -e -p "First ring altitude in meters (default 3048 meters or 10000 feet): " -i "3048" HEYWHATSTHATRINGONE
read -e -p "Second ring altitude in meters (default 12192 meters or 40000 feet): " -i "12192" HEYWHATSTHATRINGTWO
# Download the generated panoramas JSON data.
echo -e "\033[33m"
echo "Downloading JSON data pertaining to the panorama ID you supplied..."
echo -e "\033[37m"
sudo wget -O ${HTMLDIR}/dump978/upintheair.json "http://www.heywhatsthat.com/api/upintheair.json?id=${HEYWHATSTHATVIEWID}&refraction=0.25&alts=$HEYWHATSTHATRINGONE,$HEYWHATSTHATRINGTWO"
fi
fi
fi
fi
2016-01-22 21:07:08 +00:00
echo -e "\033[33m"
echo -e "Setting permissions on data files...\033[37m"
2016-01-26 16:23:53 +00:00
sudo chmod 777 ${DOCUMENTROOT}/data/*.xml
2016-01-22 21:07:08 +00:00
echo -e "\033[33m"
echo -e "Removing conflicting redirect from the Lighttpd dump1090.conf file...\033[37m"
# Remove this line completely.
2016-01-24 05:09:19 +00:00
sudo sed -i "/$(echo ' "^/dump1090$" => "/dump1090/gmap.html"' | sed -e 's/\\/\\\\/g' -e 's/\//\\\//g' -e 's/&/\\\&/g')/d" /etc/lighttpd/conf-available/89-dump1090.conf
2016-01-22 21:07:08 +00:00
# Remove the trailing coma from this line.
2016-01-24 05:09:19 +00:00
sudo sed -i "s/$(echo '"^/dump1090/$" => "/dump1090/gmap.html",' | sed -e 's/\\/\\\\/g' -e 's/\//\\\//g' -e 's/&/\\\&/g')/$(echo '"^/dump1090/$" => "/dump1090/gmap.html"' | sed -e 's/\\/\\\\/g' -e 's/\//\\\//g' -e 's/&/\\\&/g')/g" /etc/lighttpd/conf-available/89-dump1090.conf
2016-01-22 21:07:08 +00:00
echo -e "\033[33m"
echo -e "Configuring Lighttpd...\033[37m"
2016-01-26 16:23:53 +00:00
sudo tee /etc/lighttpd/conf-available/89-adsb-portal.conf > /dev/null <<EOF
2016-01-22 21:07:08 +00:00
# Block all access to the data directory accept for local requests.
2016-01-24 05:09:19 +00:00
\$HTTP["remoteip"] !~ "127.0.0.1" {
\$HTTP["url"] =~ "^/data/" {
2016-01-22 21:07:08 +00:00
url.access-deny = ( "" )
}
}
EOF
2016-01-24 05:09:19 +00:00
echo -e "\033[33m"
echo -e "Enabling Lighttpd portal configuration...\033[37m"
sudo ln -s /etc/lighttpd/conf-available/89-adsb-portal.conf /etc/lighttpd/conf-enabled/89-adsb-portal.conf
2016-01-22 21:07:08 +00:00
echo -e "\033[33m"
2016-01-24 01:53:27 +00:00
echo -e "Enabling the Lighttpd fastcgi-php module...\033[37m"
sudo lighty-enable-mod fastcgi-php
echo -e "\033[33m"
if pgrep "lighttpd" > /dev/null; then
echo "Reloading Lighttpd..."
2016-01-24 05:09:19 +00:00
echo -e "\033[37m"
2016-01-24 01:53:27 +00:00
sudo /etc/init.d/lighttpd force-reload
else
echo "Starting Lighttpd..."
2016-01-24 05:09:19 +00:00
echo -e "\033[37m"
2016-01-24 01:53:27 +00:00
sudo /etc/init.d/lighttpd start
fi
2016-01-22 21:07:08 +00:00
## SETUP COMPLETE
2015-12-01 11:37:40 +00:00
echo -e "\033[33m"
echo "Installation and configuration of the performance graphs is now complete."
echo "Please look over the output generated to be sure no errors were encountered."
echo -e "\033[37m"
read -p "Press enter to continue..." CONTINUE