#!/bin/bash 
install()
{
    apt-get update
    DEBIAN_FRONTEND=noninteractive apt-get -y \
        -o DPkg::Options::=--force-confdef \
        -o DPkg::Options::=--force-confold \
        install $@
}

cleanup_apt()
{
    rm -r /var/cache/apt/*
    mkdir /var/cache/apt/archives
    mkdir /var/cache/apt/archives/partial
}

# Set Hostname
HOSTNAME=asterisk
echo "$HOSTNAME" > /etc/hostname
sed -i "s|127.0.1.1 \(.*\)|127.0.1.1 $HOSTNAME|" /etc/hosts
hostname asterisk

# Add sources of universe repository
echo deb-src http://archive.ubuntu.com/ubuntu lucid universe >> /etc/apt/sources.list.d/sources.list

# Install required packages
install apache2 php5 mysql-server php5-mysql php5-cli php-pear php-db makepasswd asterisk sox ssl-cert asterisk-sounds-extra mpg123

# Install some asterisk-addons compiled from source. 
cd /usr/src/
apt-get -y build-dep asterisk-addons
apt-get -b source asterisk-addons
dpkg -i *.deb

#Change apache user and group to asterisk to prevent ownership and permissions conflicts between asterisk and freepbx.
sed -i "s/www-data/asterisk/" /etc/apache2/envvars

# Get freePBX. 
wget http://mirror.freepbx.org/freepbx-2.8.0.tar.gz
tar xzf freepbx-2.8.0.tar.gz
rm freepbx-2.8.0.tar.gz
cd freepbx-2.8.0/

#Create mysql database
mysqladmin -u root create asterisk
mysqladmin -u root create asteriskcdrdb
mysql -u root asterisk < SQL/newinstall.sql
mysql -u root asteriskcdrdb < SQL/cdr_mysql_table.sql
mysql -u root <<-END_PRIVS
GRANT ALL PRIVILEGES ON asterisk.* TO asteriskuser@localhost IDENTIFIED BY "amp109";
GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO asteriskuser@localhost IDENTIFIED BY "amp109";
flush privileges;
END_PRIVS

#Increase maximum allowed size for uploaded files in php
sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php5/apache2/php.ini

# Backup asterisk modules settings as freePBX mess them up. 
cp /etc/asterisk/modules.conf /etc/asterisk/modules.conf.bak

# Initial run of installation
./install_amp
# Second run to bypass the Cannot redeclare __parse_DialRulesFile() error
if [ $? = 255 ]; then
echo "Second run..."
./install_amp
fi

# Restore asterisk modules settings. 
cp /etc/asterisk/modules.conf.bak /etc/asterisk/modules.conf

#Final symlinks and permissions needed
mv /etc/asterisk/sip_notify.conf /etc/asterisk/sip_notify.conf.bak
ln -s /var/www/admin/modules/core/etc/sip_notify.conf /etc/asterisk/
ln -s /var/lib/asterisk/moh /var/lib/asterisk/mohmp3
mkdir -p /var/lib/asterisk/agi-bin
chown -R asterisk:asterisk /var/www
chown -R asterisk:asterisk /var/lib/asterisk
chown -R asterisk:asterisk /etc/asterisk
chown -R asterisk:asterisk /usr/share/asterisk
chown asterisk:asterisk /etc/amportal.conf

# Upgrade modules 
/var/lib/asterisk/bin/module_admin upgradeall

# Set amportal to start on system boot
sed -i -e "s/^\(exit 0\)$/\/usr\/local\/sbin\/amportal start\n\1\n/" /etc/rc.local

# Set amportal to control asterisk service
update-rc.d -f asterisk remove
sed -i "s/BACKGROUND=0/BACKGROUND=1/" /usr/sbin/safe_asterisk

a2dissite default
a2ensite freepbx 
a2ensite freepbx-ssl
a2enmod ssl
service apache2 stop
service mysql stop

# Clean apt cache and sources
cleanup_apt
cd /
rm -Rf /usr/src/
mkdir -p /usr/src

