#!/bin/sh # Updated by A.Lang on 2012-08-20 # This script is used for upgrading/fresh install 1.9.4 # # System requirement: PIAF + Asterisk 1.6.x # version="1.9.4" # MySQL root password, it's passw0rd by default. DBPASS='passw0rd' #GET_URL='https://github.com/Star2Billing/a2billing/tarball/v1-current' GET_URL='https://github.com/Star2Billing/a2billing/tarball/v1.9.4' WEB_ROOT="/var/www/html" #DATETAG=`date +%Y%m%d%H%k%M%S` # Make sure only root can run our script [ "$(id -u)" != "0" ] && { echo "Abort: This script must be run as root" 1>&2 exit 1 } # checkifdone() { if [ $1 -eq 0 ];then echo "---> done" echo "" else echo "*** Aborting the process, please try it again after you made the correction." exit 1 fi } clear echo "*******************************************************************************" echo "" echo " Installing A2Billing $version for PIAF+Asterisk 1.6.x" echo "" echo " (c)alang.hsu[AT]gmail.com." echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" echo "WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING" echo "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" echo "This script assumes you have not changed the default root username For MySQL" echo "If you have, e.g. if you use PBX-Management, press CTRL-C to exit" echo "Then change the MySQL root password in the script to suit your installation." echo " " echo "If an earlier copy of A2Billing is already installed, this script will clean " echo "out origianal DB and entire configuration related to a2billing." echo "*******************************************************************************" echo "" read -p "Press any key to continue or ctrl-C to exit" echo "" # Step1: Removing A2billing Old files rm -f -R $WEB_ROOT/A2Billing_UI/ rm -f -R $WEB_ROOT/A2BCustomer_UI/ rm -f -R /var/lib/asterisk/agi-bin/a2billing.php rm -f -R /var/lib/asterisk/agi-bin/libs_a2billing/ rm -f -R /var/lib/asterisk/agi-bin/lib/ rm -f /etc/asterisk/additional_a2billing_iax.conf rm -f /etc/asterisk/additional_a2billing_sip.conf rm -f /etc/asterisk/extensions_a2billing*.conf rm -f /etc/asterisk/a2billing.conf rm -f /etc/a2billing.conf rm -f -R $WEB_ROOT/agent/ rm -f -R $WEB_ROOT/common/ rm -f -R /usr/src/a2billing/ rm -f /usr/src/Star2Billing-a2billing-* rm -f -R /var/log/a2billing # Remove the old cron jobs that included the path name '.../libs_a2billing/crontjob/...'. sed -i "/a2billing/d" /var/spool/cron/asterisk # Drop the old database (if it exists) echo "+++ Dropping DB if DB existed... you have to type 'y' so go on. " # Checking if DB mya2billing existed # if existed, return 0 mysql -uroot -p$DBPASS --batch --skip-column-names -e "SHOW DATABASES LIKE '"mya2billing"';" | grep "mya2billing" > /dev/null if [ $? -eq 0 ];then mysqladmin drop mya2billing -u root -p$DBPASS checkifdone $? else checkifdone 0 fi # Step2: A2billing installation cd /usr/src rm -f -R a2billing/ echo -e "\n+++ Downloading the source files, please wait a moment..." wget -c --no-check-certificate $GET_URL -O Star2Billing-a2billing-$version.tar.gz tar xzf Star2Billing-a2billing-$version.tar.gz mv Star2Billing-a2billing-*/ a2billing/ checkifdone $? # Importing database echo "+++ Importing the database..." mysql -u root -p$DBPASS < /usr/src/a2billing/DataBase/mysql-5.x/a2billing-createdb-user.sql mysql mya2billing -u root -p$DBPASS < /usr/src/a2billing/DataBase/mysql-5.x/a2billing-mysql-schema-v1.7.0.sql mysql mya2billing -u root -p$DBPASS < /usr/src/a2billing/DataBase/mysql-5.x/UPDATE-a2billing-v1.7.0-to-v1.7.1.sql mysql mya2billing -u root -p$DBPASS < /usr/src/a2billing/DataBase/mysql-5.x/UPDATE-a2billing-v1.7.1-to-v1.7.2.sql mysql mya2billing -u root -p$DBPASS < /usr/src/a2billing/DataBase/mysql-5.x/UPDATE-a2billing-v1.7.2-to-v1.8.0.sql mysql mya2billing -u root -p$DBPASS < /usr/src/a2billing/DataBase/mysql-5.x/UPDATE-a2billing-v1.8.0-to-v1.8.1.sql mysql mya2billing -u root -p$DBPASS < /usr/src/a2billing/DataBase/mysql-5.x/UPDATE-a2billing-v1.8.1-to-v1.8.2.sql mysql mya2billing -u root -p$DBPASS < /usr/src/a2billing/DataBase/mysql-5.x/UPDATE-a2billing-v1.8.2-to-v1.8.3.sql mysql mya2billing -u root -p$DBPASS < /usr/src/a2billing/DataBase/mysql-5.x/UPDATE-a2billing-v1.8.3-to-v1.8.4.sql mysql mya2billing -u root -p$DBPASS < /usr/src/a2billing/DataBase/mysql-5.x/UPDATE-a2billing-v1.8.4-to-v1.8.5.sql mysql mya2billing -u root -p$DBPASS < /usr/src/a2billing/DataBase/mysql-5.x/UPDATE-a2billing-v1.8.5-to-v1.8.6.sql mysql mya2billing -u root -p$DBPASS < /usr/src/a2billing/DataBase/mysql-5.x/UPDATE-a2billing-v1.8.6-to-v1.9.0.sql mysql mya2billing -u root -p$DBPASS < /usr/src/a2billing/DataBase/mysql-5.x/UPDATE-a2billing-v1.9.0-to-v1.9.1.sql mysql mya2billing -u root -p$DBPASS < /usr/src/a2billing/DataBase/mysql-5.x/UPDATE-a2billing-v1.9.1-to-v1.9.2.sql mysql mya2billing -u root -p$DBPASS < /usr/src/a2billing/DataBase/mysql-5.x/UPDATE-a2billing-v1.9.2-to-v1.9.3.sql mysql mya2billing -u root -p$DBPASS < /usr/src/a2billing/DataBase/mysql-5.x/UPDATE-a2billing-v1.9.3-to-v1.9.4.sql checkifdone $? # Step3: A2billing web interfaces installation echo "+++ A2billing web interfaces installation." cp -rf /usr/src/a2billing/customer $WEB_ROOT/A2BCustomer_UI chmod 777 $WEB_ROOT/A2BCustomer_UI/templates_c cp -rf /usr/src/a2billing/agent $WEB_ROOT chmod 777 $WEB_ROOT/agent/templates_c cp -rf /usr/src/a2billing/admin $WEB_ROOT/A2Billing_UI chmod 777 $WEB_ROOT/A2Billing_UI/templates_c cp -Rf /usr/src/a2billing/common $WEB_ROOT cp /usr/src/a2billing/AGI/a2billing*.php /var/lib/asterisk/agi-bin/ cp -rf /usr/src/a2billing/common/lib /var/lib/asterisk/agi-bin/ chmod +x /var/lib/asterisk/agi-bin/a2billing.php chown -R asterisk:asterisk /var/lib/asterisk/agi-bin checkifdone $? # Step4: A2billing configuration files echo "+++ A2billing configuration files." cp /usr/src/a2billing/a2billing.conf /etc/asterisk chown asterisk:asterisk /etc/asterisk/a2billing.conf ln -sf /etc/asterisk/a2billing.conf /etc/a2billing.conf cp /usr/src/a2billing/addons/Doc/extensions_a2billing_1_6.conf /etc/asterisk chown asterisk:asterisk /etc/asterisk/extensions_a2billing_1_6.conf sed -i "s/\(port *= *\)\(.*\)/\13306/" /etc/asterisk/a2billing.conf sed -i "s/\(user *= *\)\(.*\)/\1a2billinguser/" /etc/asterisk/a2billing.conf sed -i "s/\(password *= *\)\(.*\)/\1a2billing/" /etc/asterisk/a2billing.conf sed -i "s/\(dbname *= *\)\(.*\)/\1mya2billing/" /etc/asterisk/a2billing.conf checkifdone $? # A2billing Extra sounds echo "+++ A2billing Extra sounds" cd /usr/src/a2billing/addons/sounds ./install_a2b_sounds.sh checkifdone $? # Step6: Asterisk files echo "" echo "+++ Setting Asterisk" cd /etc/asterisk/ touch additional_a2billing_iax.conf touch additional_a2billing_sip.conf [ "xx$(grep '#include additional_a2billing_sip.conf' /etc/asterisk/sip_custom.conf)" == "xx" ] && echo "#include additional_a2billing_sip.conf" >> /etc/asterisk/sip_custom.conf [ "xx$(grep '#include additional_a2billing_iax.conf' /etc/asterisk/iax_custom.conf)" == "xx" ] && echo "#include additional_a2billing_iax.conf" >> /etc/asterisk/iax_custom.conf if [ "xx$(grep '#include extensions_a2billing_1_6.conf' /etc/asterisk/extensions_custom.conf)" == "xx" ]; then echo -e >> /etc/asterisk/extensions_custom.conf echo "#include extensions_a2billing_1_6.conf" >> /etc/asterisk/extensions_custom.conf fi if [ "xx$(grep '\[myasterisk\]' /etc/asterisk/manager_custom.conf)" == "xx" ]; then echo -e >> /etc/asterisk/manager_custom.conf echo " [myasterisk] secret = mycode deny = 0.0.0.0/0.0.0.0 permit = 127.0.0.1/255.255.255.0 read = system,call,log,verbose,command,agent,user write = system,call,log,verbose,command,agent,user" >> /etc/asterisk/manager_custom.conf fi checkifdone $? # Step7: A2billing file permissions chmod 664 /etc/asterisk/additional_a2billing_iax.conf chmod 664 /etc/asterisk/additional_a2billing_sip.conf chmod 664 /etc/asterisk/extensions_a2billing_1_6.conf chown -R asterisk:asterisk /etc/asterisk/ chown -R asterisk:asterisk $WEB_ROOT/common chown -R asterisk:asterisk $WEB_ROOT/A2Billing_UI chown -R asterisk:asterisk $WEB_ROOT/A2BCustomer_UI chown -R asterisk:asterisk $WEB_ROOT/agent chown -R asterisk:asterisk /var/lib/asterisk/ checkifdone $? # Cronjobs echo "+++ Setting Cronjobs" echo "# Automatically added for A2Billing 0 * * * * php /usr/src/a2billing/Cronjobs/a2billing_alarm.php 0 12 * * * php /usr/src/a2billing/Cronjobs/a2billing_archive_data_cront.php 0 10 21 * * php /usr/src/a2billing/Cronjobs/a2billing_autorefill.php #Batch process at 00:20 each day 20 0 * * * php /usr/src/a2billing/Cronjobs/a2billing_batch_process.php #Bill DID usage at 00:00 each day 0 0 * * * php /usr/src/a2billing/Cronjobs/a2billing_bill_diduse.php #Generate Invoices at 6am everyday 0 6 * * * php /usr/src/a2billing/Cronjobs/a2billing_batch_billing.php #Check if balance below preset value, and email user if so. 1 * * * * php /usr/src/a2billing/Cronjobs/a2billing_notify_account.php #Charge subscriptions at 06:05 on the 1st of each month 0 6 1 * * php /usr/src/a2billing/Cronjobs/a2billing_subscription_fee.php #Update currencies at 01:00 each day 0 1 * * * php /usr/src/a2billing/Cronjobs/currencies_update_yahoo.php " >> /var/spool/cron/asterisk checkifdone $? # Create Log Files # Log files and Permissions echo "+++ Create Log files" [ -d /var/log/a2billing ] || { mkdir -p /var/log/a2billing } touch /var/log/asterisk/a2billing-daemon-callback.log touch /var/log/a2billing/a2billing-daemon-callback.log touch /var/log/a2billing/cront_a2b_alarm.log touch /var/log/a2billing/cront_a2b_autorefill.log touch /var/log/a2billing/cront_a2b_batch_process.log touch /var/log/a2billing/cront_a2b_bill_diduse.log touch /var/log/a2billing/cront_a2b_subscription_fee.log touch /var/log/a2billing/cront_a2b_currency_update.log touch /var/log/a2billing/cront_a2b_invoice.log touch /var/log/a2billing/cront_a2b_check_account.log touch /var/log/a2billing/a2billing_paypal.log touch /var/log/a2billing/a2billing_epayment.log touch /var/log/a2billing/api_ecommerce_request.log touch /var/log/a2billing/api_callback_request.log touch /var/log/a2billing/a2billing_agi.log chown asterisk:asterisk /var/log/asterisk/a2billing-daemon-callback.log chown -R asterisk:asterisk /var/log/a2billing checkifdone $? # for Predictive Call(Campaigns) echo "+++ For predictive call required" [ -d /var/run/a2billing ] || { mkdir /var/run/a2billing } chown asterisk:asterisk /var/run/a2billing checkifdone $? echo "" echo "" echo "" echo "" echo "" echo "*******************************************************************" echo "A2Billing is installed" echo "" echo "Please Restart the Asterisk service" echo "" echo "The default username is [root]" echo "The default password is [changepassword]" echo "*******************************************************************" #EOF