#!/bin/bash # BerryIO setup script # Make sure this script is being run by root if [[ $EUID -ne 0 ]]; then echo "You must be root to install BerryIO" 1>&2 echo "Try: sudo "$0 1>&2 exit 1 fi echo -e "\nBerryIO Installer\n-----------------" echo -e "\nInstalling the prerequisites...." apt -y install ethtool wireless-tools msmtp apache2 php libapache2-mod-php pwauth git || { echo -e "Install failed!" 1>&2; exit 1; } echo -e "\nRemoving any old copies of BerryIO...." rm -fr /usr/share/berryio || { echo -e "Install failed!" 1>&2; exit 1; } echo -e "\nRetrieving latest copy of BerryIO from GitHub...." git clone https://github.com/NeonHorizon/berryio.git /usr/share/berryio/ echo -e "\nCopying in the default config...." cp -R /usr/share/berryio/default_config/berryio /etc || { echo -e "Install failed!" 1>&2; exit 1; } cp -R /usr/share/berryio/default_config/apache2 /etc || { echo -e "Install failed!" 1>&2; exit 1; } cp -R /usr/share/berryio/default_config/php /etc || { echo -e "Install failed!" 1>&2; exit 1; } cp -R /usr/share/berryio/default_config/network /etc || { echo -e "Install failed!" 1>&2; exit 1; } cp -R /usr/share/berryio/default_config/sudoers.d /etc || { echo -e "Install failed!" 1>&2; exit 1; } chmod 440 /etc/sudoers.d/berryio || { echo -e "Install failed!" 1>&2; exit 1; } if [ ! -f /etc/msmtprc ]; then cp /usr/share/berryio/default_config/msmtprc /etc/msmtprc || { echo -e "Install failed!" 1>&2; exit 1; } fi if [ -f /etc/apache2/sites-available/berryio ]; then a2dissite berryio rm /etc/apache2/sites-available/berryio fi echo -e "\nCreating the log file directories...." if [ ! -d /var/log/berryio ]; then mkdir /var/log/berryio fi if [ ! -d /var/log/msmtp ]; then mkdir /var/log/msmtp fi echo -e "\nGranting the webserver access to the email configuration...." chmod 640 /etc/msmtprc || { echo -e "Install failed!" 1>&2; exit 1; } chgrp www-data /etc/msmtprc || { echo -e "Install failed!" 1>&2; exit 1; } echo -e "\nGranting the webserver access to the GPIO...." addgroup gpio &> /dev/null adduser www-data gpio || { echo -e "Install failed!" 1>&2; exit 1; } echo -e "\nEnabling the required Apache modules...." a2enmod rewrite authnz_external || { echo -e "Install failed!" 1>&2; exit 1; } echo -e "\nEnabling the BerryIO site configuration...." a2dissite default 2> /dev/null a2dissite default-ssl 2> /dev/null a2dissite 000-default 2> /dev/null a2dissite default.conf 2> /dev/null a2dissite default-ssl.conf 2> /dev/null a2dissite 000-default.conf 2> /dev/null a2ensite berryio.conf || { echo -e "Install failed!" 1>&2; exit 1; } echo -e "\nRestarting Apache...." service apache2 restart || { echo -e "Install failed!" 1>&2; exit 1; } echo -e "\nSetting up the BerryIO command line...." rm -f /usr/bin/berryio # Just in case any older versions are present ln -s /usr/share/berryio/scripts/berryio.php /usr/bin/berryio || { echo -e "Install failed!" 1>&2; exit 1; } echo -e "\n\nConfiguring email settings\n--------------------------\n" defaultMailTo="pi@localhost" defaultMailFrom="pi@localhost" emailConfigured="N"; until [[ "$emailConfigured" =~ ^[yY]$ ]]; do read -p "Email address messages should be sent to [$defaultMailTo]: " mailTo read -p "Email address messages should be sent from [$defaultMailFrom]: " mailFrom if [[ -z "$mailTo" ]]; then mailTo="$defaultMailTo"; else defaultMailTo="$mailTo" fi if [[ -z "$mailFrom" ]]; then mailFrom="$defaultMailFrom"; else defaultMailFrom="$mailFrom" fi echo -e "\nMail To: $mailTo\nMail From: $mailFrom\n" emailConfigured="X" until [[ "$emailConfigured" =~ ^[yYnN]$ || -z "$emailConfigured" ]]; do read -p "Is this correct? [y/N]: " -n1 emailConfigured echo done done echo -e " /etc/berryio/email.php echo -e "\n\nConfiguring GPIO settings\n-------------------------" GPIOConfig="rev2.0"; cat /proc/cpuinfo | grep 'Revision' | grep '900092\|920092\|900093\|920093\|9000c1' >> /dev/null && GPIOConfig='zero'; cat /proc/cpuinfo | grep 'Revision' | grep '0002\|0003' >> /dev/null && GPIOConfig='rev1.0'; cat /proc/cpuinfo | grep 'Revision' | grep '0004\|0005\|0006\|000d\|000e\|000f' >> /dev/null && GPIOConfig='rev2.0'; cat /proc/cpuinfo | grep 'Revision' | grep '0007\|0008\|0009' >> /dev/null && GPIOConfig='rev2.0'; cat /proc/cpuinfo | grep 'Revision' | grep '0012\|0015\|900021' >> /dev/null && GPIOConfig='a_plus'; cat /proc/cpuinfo | grep 'Revision' | grep '0010\|0013\|900032' >> /dev/null && GPIOConfig='b_plus'; cat /proc/cpuinfo | grep 'Revision' | grep 'a01040\|a01041\|a21041\|a22042' >> /dev/null && GPIOConfig='2b'; cat /proc/cpuinfo | grep 'Revision' | grep 'a02082\|a22082\|a32082\|a52082\|a020d3' >> /dev/null && GPIOConfig='3b'; cat /proc/cpuinfo | grep 'Revision' | grep '0011\|0014\|a020a0' >> /dev/null && GPIOConfig='compute_module'; echo -e "\nYour Pi has been detected as a $GPIOConfig" gpioConfigured="N"; until [[ "$gpioConfigured" =~ ^[yY]$ || -z "$gpioConfigured" ]]; do gpioConfigured="X"; echo -e "The GPIO configuration for a $GPIOConfig will be set" until [[ "$gpioConfigured" =~ ^[yYnN]$ || -z "$gpioConfigured" ]]; do read -p "Is this correct? [Y/n]: " -n1 gpioConfigured echo done if [[ "$gpioConfigured" =~ ^[nN]$ ]]; then GPIOConfig=''; until [[ "$GPIOConfig" = 'rev1.0' ]] || [[ "$GPIOConfig" = 'rev2.0' ]] || [[ "$GPIOConfig" = 'a_plus' ]] || [[ "$GPIOConfig" = 'b_plus' ]] || [[ "$GPIOConfig" = 'compute_module' ]] || [[ "$GPIOConfig" = '2b' ]] || [[ "$GPIOConfig" = '3b' ]]; do read -p "Please enter your Pi variant [rev1.0|rev2.0|a_plus|b_plus|2b|3b|compute_module]: " GPIOConfig done echo fi done cp "/usr/share/berryio/default_config/berryio/gpio.$GPIOConfig.example.php" /etc/berryio/gpio.php || { echo -e "Install failed!" 1>&2; exit 1; } echo -e "\nInstall successful!" echo -e "Finish the configuration as described in /usr/share/berryio/INSTALL.README.txt" echo -e "...and you're ready to go!\n"