# WARNING: This script is under development ... use for reference only!
#
# Version 0.4 - July 20, 2014
# This installation script downloads/installs/configures Asterisk-12 and FreePBX-12
# for ArchLinux ARM. It has not yet been tested on ArchLinux, but there are no
# indications why it would not work on ArchLinux.
# Known Issues:
# - FreePBX still complaining about fail2ban even though it's installed and running
# - ./install_amp still throwning (sed: -e expression #1, char 1: unknown command: `"') error, will eventually dig into this.
# - Running ./install_amp still issues PHP Warning even with /var/log/asterisk permissions set to 777
# PHP Warning: file_put_contents(/var/log/asterisk/freepbx.log): failed to open stream: Permission denied in /srv/http/freepbx/admin/libraries/utility.functions.php on line 111
# Set variables per FreePBX notes
VER_FREEPBX=12.0
ASTERISK_DB_PW=amp109
PHPINI=/etc/php/php.ini
APACHECONF=/etc/httpd/conf/httpd.conf
# Install Asterisk, MySQL (aka MariaDB), Apache, PHP and associated dependencies
pacman -Sy asterisk mariadb apache php php-apache php-gd php-pear php-ldap php-sqlite php-xsl git fail2ban
# Enable/start MySQL
echo "Enable/Start MySQL"
systemctl enable mysqld.service
systemctl start mysqld.service
# Enable/start Apache
echo "Enable/Start Apache"
systemctl enable httpd.service
systemctl start httpd.service
# Enable/start Fail2Ban
echo "Enable/Start Fail2Ban"
systemctl enable fail2ban.service
systemctl start fail2ban.service
# Setup pear db
echo "Enable Pear DB"
pear install db
# Move to /usr/src then download/extract the FreePBX files
echo "Download/Extract FreePBX"
cd /usr/src
git clone http://git.freepbx.org/scm/freepbx/framework.git freepbx
cd freepbx
git checkout release/${VER_FREEPBX}
# Changes to PHP
echo "Adjusting PHP"
cp ${PHPINI} ${PHPINI}_orig
# Activate gd.so
sed -i 's/;extension=gd.so/extension=gd.so/' $PHPINI
# Activate ldap.so
sed -i 's/;extension=ldap.so/extension=ldap.so/' $PHPINI
# Activate mysqli.so
sed -i 's/;extension=mysqli.so/extension=mysqli.so/' $PHPINI
# Activate mysql.so
sed -i 's/;extension=mysql.so/extension=mysql.so/' $PHPINI
# Activate openssl.so
sed -i 's/;extension=openssl.so/extension=openssl.so/' $PHPINI
# Activate pdo_mysql.so (thanks tm1000)
sed -i 's/;extension=pdo_mysql.so/extension=pdo_mysql.so/' $PHPINI
# Activate pdo_sqlite.so (thanks tm1000)
sed -i 's/;extension=pdo_sqlite.so/extension=pdo_sqlite.so/' $PHPINI
# Activate phar.so
sed -i 's/;extension=phar.so/extension=phar.so/' $PHPINI
# Activate posix.so
sed -i 's/;extension=posix.so/extension=posix.so/' $PHPINI
# Activate sysvmsg.so
sed -i 's/;extension=sysvmsg.so/extension=sysvmsg.so/' $PHPINI
# Activate sysvsem.so
sed -i 's/;extension=sysvsem.so/extension=sysvsem.so/' $PHPINI
# Activate sysvshm.so
sed -i 's/;extension=sysvshm.so/extension=sysvshm.so/' $PHPINI
# Activate xmlrpc.so
sed -i 's/;extension=xmlrpc.so/extension=xmlrpc.so/' $PHPINI
# Activate xsl.so
sed -i 's/;extension=xsl.so/extension=xsl.so/' $PHPINI
# Activate zip.so
sed -i 's/;extension=zip.so/extension=zip.so/' $PHPINI
# Deactivate open_basedir
sed -i 's/open_basedir =/; open_basedir =/' $PHPINI
# Increase upload_max_filesize
sed -i 's/\(^upload_max_filesize = \).*/\120M/' $PHPINI
# Set session.save_path to /usr/include/php/ext/session/
sed -i '/session.save_path/asession.save_path=\"\/usr\/include\/php\/ext\/session\"' $PHPINI
# Changes to Apache
echo "Adjusting Apache"
cp ${APACHECONF} ${APACHECONF}_orig
# Set User & Group to asterisk
sed -i 's/^\(User\|Group\).*/\1 asterisk/' $APACHECONF
# Change to mod_mpm_preform.so allowing libphp5.so to work preventing "threaded MPM" error
sed -i 's/LoadModule mpm_event_module modules\/mod_mpm_event.so/LoadModule mpm_prefork_module modules\/mod_mpm_prefork.so/' $APACHECONF
# Add LoadModule for libphp5.so after "LoadModule dir_module modules/mod_dir.so"
sed -i '/LoadModule dir_module modules\/mod_dir.so/aLoadModule php5_module modules\/libphp5.so' $APACHECONF
# Add Include php5_module.conf at end of Includes
sed -i '/Include conf\/extra\/httpd-default.conf/aInclude conf\/extra\/php5_module.conf' $APACHECONF
# Enable .htaccess (hypertext access)
echo " " >> $APACHECONF
echo "# HTAccess for FreePBX" >> $APACHECONF
echo "<Directory \"/srv/http/freepbx\">" >> $APACHECONF
echo "AllowOverride all" >> $APACHECONF
echo "</Directory>" >> $APACHECONF
# Changes to install_amp - change webroot directory from /var/www/html to /srv/http/freepbx
# Leaving this here for now, but I am generally against making any changes to any FreePBX scripts
cp install_amp install_amp_orig
sed -i 's/\/var\/www\/html/\/srv\/http\/freepbx/' install_amp
# Change permissions on /var/log/asterisk
# Still not sure if this command is needed, but leaving it here for now
chmod 777 /var/log/asterisk
# Restart Apache
echo "Restart Apache"
systemctl restart httpd.service
# Create MySQL (MariaDB) databases
echo "Configure MySQL Database"
mysqladmin -u root create asterisk
mysqladmin -u root create asteriskcdrdb
# Set privileges on database
echo "Set Privileges on Database"
mysql -u root -e "GRANT ALL PRIVILEGES ON asterisk.* TO asteriskuser@localhost IDENTIFIED BY '${ASTERISK_DB_PW}';"
mysql -u root -e "GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO asteriskuser@localhost IDENTIFIED BY '${ASTERISK_DB_PW}';"
mysql -u root -e "flush privileges;"
# Subsequent commands to be run to finalize intallation
# At some point may need to embrace systemctl for starting/stopping/restarting Asterisk
# but for now leaving the FreePBX script "start_asterisk" as the method for controlling Asterisk
./start_asterisk start
./install_amp --installdb --username=asteriskuser --password=${ASTERISK_DB_PW}
./start_asterisk stop
./start_asterisk start
amportal a ma installall
amportal a reload
amportal chown