Difference between revisions of "Easy FusionPBX"

From FusionPBX
Jump to: navigation, search
(Permissions)
(Wheezy/Jessie)
 
(36 intermediate revisions by 6 users not shown)
Line 2: Line 2:
 
==Debian==
 
==Debian==
 
===Lenny===
 
===Lenny===
====Notes====
 
 
*Select the Base Install option [on the debian install iso]. All other packages will be added.
 
*Select the Base Install option [on the debian install iso]. All other packages will be added.
 
*When you get a warning about it not being Lucid, go ahead and continue.
 
*When you get a warning about it not being Lucid, go ahead and continue.
Line 12: Line 11:
 
* Databases: sqlite/MySQL/postgres9
 
* Databases: sqlite/MySQL/postgres9
 
**Postgres 8 probably works fine <b>Please confirm</b>
 
**Postgres 8 probably works fine <b>Please confirm</b>
*thanks for cbillen for testing
+
*thank you cbillen for testing
  
 
Get it here: http://www.debian.org/distrib/netinst
 
Get it here: http://www.debian.org/distrib/netinst
 
*Select the Base Install option [on the debian install iso]. All other packages will be added.
 
*Select the Base Install option [on the debian install iso]. All other packages will be added.
 +
 +
===Wheezy/Jessie===
 +
* Webserver: nginx
 +
* Databases: postgresql
 +
* ''Please note this is the ubuntu install script. It is supported and works well with Wheezy''
 +
 +
'''Steps to installation'''
 +
*1.> wget https://raw.githubusercontent.com/fusionpbx/fusionpbx-scripts/master/install/ubuntu/install_fusionpbx.sh
 +
*2.> chmod +x install_fusionpbx.sh
 +
*3.> ./install_fusionpbx.sh ''(this will show you other options if you choose a non-typical install)''
 +
 +
*4.> ./install_fusionpbx.sh install-both auto  ''(Typical install)''
 +
*5.> Continue with the current script [y/N]? ''(Choose 'N' this will get the most recent version of the install script)''
 +
*
 +
*6.>
 +
    The '''pgsql username''' is '''fusionpbx'''
 +
    The '''pgsql database name''' is '''fusionpbx'''
 +
    Please provide a '''password''' for the '''fusionpbx user'''
 +
    '''Password:'''YoL33tPassword
 +
 +
*7.> 30ish mins will pass (lines of code will go by)
 +
 +
*8.> You should be greeted with the following
 +
    Now you'll need to manually finish the install and come back
 +
  This way I can finish up the last bit of permissions issues
 +
  Just go to
 +
  http://ur_domain_or_ip.com
 +
      MAKE SURE YOU CHOOSE PostgreSQL as your Database on the first page!!!
 +
      ON the Second Page:
 +
          Database Name: fusionpbx
 +
          Database Username: fusionpbx
 +
          Database Password: whateveryouentered
 +
          Create Database Username: Leave_Blank
 +
          Create Database Password: Leave_Blank
 +
 +
  I will wait here until you get done with that.
 +
  When PostgreSQL is configured come back and press enter.
 +
 +
*9.> Open the browser of your choice and put the domain and or ip there.
 +
[[File:Gui-login-install.jpg]]
 +
[[File:Gui-login-install2-1.jpg]]
 +
 +
*10.> DONE!  Now login and enjoy ;)
 +
 +
 +
 +
'''**IF you get an error like below''' rm /var/www/fusionpbx/resources/config.php and enter the correct info.
 +
 +
[[File:Gui-login-install-error.jpg]]
 +
 +
==Fedora==
 +
 +
* Fedora Server 21 RPM via. http://ftpsrv01.networklab.ca/misc/deploy_fusionpbx_fedora_server21.zip
  
 
==Ubuntu==
 
==Ubuntu==
 +
What worked for asdf- from freenode:
 +
* Ubuntu 13.04 Server 64bit
 +
* the dev version of Easy FusionPBX ->
 +
http://fusionpbx.googlecode.com/svn/branches/dev/scripts/install/ubuntu/install_fusionpbx.sh
 +
 +
sqlite and postgres are the only options when prompted to select a database.
 +
(Thank you NYSolutions, of #fusionpbx on freenode, for your help)
 +
 
===10.04 LTS Lucid===
 
===10.04 LTS Lucid===
 
* Webserver: apache/nginx
 
* Webserver: apache/nginx
Line 28: Line 88:
  
 
===12.04 LTS Precise===
 
===12.04 LTS Precise===
*Download the iso: http://www.ubuntu.com/download/server
+
Get it here: http://www.ubuntu.com/download/server
 
Currently testing.  Please try it and let us know if anything is broken.
 
Currently testing.  Please try it and let us know if anything is broken.
 
*Webserver
 
*Webserver
 
**nginx works
 
**nginx works
**apache unknown
+
**apache works
 
*Databases
 
*Databases
**sqlite works
+
**sqlite works with apache, nginx untested
**mysql unknown
+
**mysql db create error (with apache), nginx untested.
 
**postgres 8: Not available [or recommended]
 
**postgres 8: Not available [or recommended]
**postgres 9: works
+
**postgres 9: works with apache, nginx untested
 +
*Switching Webservers
 +
**Apache->Nginx: works
 +
**Nginx->Apache: untested
 +
 
 +
===Ubuntu 12.04 on Digital Ocean===
 +
http://wiki.fusionpbx.com/index.php?title=Ubuntu12onDigitalOcean
 +
<br>
 +
<br>
  
 
= Get the latest install script =
 
= Get the latest install script =
 
==Project==
 
==Project==
 +
*2013-10-29
 +
**<b>YOU SHOULD USE THE DEV BRANCH SCRIPT FOR NOW.
 +
**http://fusionpbx.googlecode.com/svn/branches/dev/scripts/install/ubuntu/install_fusionpbx.sh
 +
***FIND FPBXBRANCH UNDER DEFINES AND CHOOSE WHETHER OR NOT YOU WANT THE STABLE OR DEV BRANCH!!!
 +
</B>
 
<b>migrated to fusionpbx googlecode svn (2011-11-10)</b>
 
<b>migrated to fusionpbx googlecode svn (2011-11-10)</b>
 
*http://fusionpbx.googlecode.com/svn/trunk/scripts/install/ubuntu/install_fusionpbx.sh
 
*http://fusionpbx.googlecode.com/svn/trunk/scripts/install/ubuntu/install_fusionpbx.sh
 +
 +
If you use this script, it may error out, unable to git the project.  If so, change the following:
 +
<pre>
 +
#staying with default repository, feel free to change this to github. Some report faster downloads.
 +
FSGIT=git://git.freeswitch.org/freeswitch.git
 +
#FSGIT=git://github.com/FreeSWITCH/FreeSWITCH.git
 +
</pre>
 +
 +
To:
 +
<pre>
 +
#staying with default repository, feel free to change this to github. Some report faster downloads.
 +
FSGIT=http://git.freeswitch.org/freeswitch.git
 +
#FSGIT=http://github.com/FreeSWITCH/FreeSWITCH.git
 +
</pre>
  
 
==Install Script==
 
==Install Script==
Line 57: Line 144:
 
To download with wget:
 
To download with wget:
 
<pre>
 
<pre>
sudo wget -O /usr/local/bin/install_fusionpbx.sh http://fusionpbx.googlecode.com/svn/trunk/scripts/install/ubuntu /usr/local/bin/install_fusionpbx.sh
+
sudo wget -O /usr/local/bin/install_fusionpbx.sh http://fusionpbx.googlecode.com/svn/trunk/scripts/install/ubuntu/install_fusionpbx.sh /usr/local/bin/install_fusionpbx.sh
 
sudo chmod 755 /usr/local/bin/install_fusionpbx.sh
 
sudo chmod 755 /usr/local/bin/install_fusionpbx.sh
 
</pre>
 
</pre>
Line 104: Line 191:
 
  ------------------------------------------------------------------------------
 
  ------------------------------------------------------------------------------
 
<b>Under no conditions, should a donation be considered to my loving wife until you've first donated to FusionPBX, and FreeSWITCH</b> ''(so requests soapee01)''
 
<b>Under no conditions, should a donation be considered to my loving wife until you've first donated to FusionPBX, and FreeSWITCH</b> ''(so requests soapee01)''
 +
=Options=
 +
==Command Line Options==
 +
<pre>
 +
This script should be called as:
 +
  install_fusionpbx option1 option2
 +
 +
    option1:
 +
      install-freeswitch
 +
      install-fusionpbx
 +
      install-both
 +
      upgrade-freeswitch
 +
      upgrade-fusionpbx
 +
      fix-https
 +
      fix-permissions
 +
      version|--version|-v
 +
 +
    option2:
 +
      user: option waits in certain places for the user to check for errors
 +
            it is interactive and prompts you about what to install"
 +
      auto: tries an automatic install. Get a cup of coffee, this will
 +
        take a while. FOR THE BRAVE!
 +
 +
      EXAMPLE
 +
        install_fusionpbx install-both user
 +
</pre>
 +
==Script Variables==
 +
These are included to make the auto mode more flexible. Open the script and set them however you wish.
 +
 +
*for apache set to a, for nginx/php-fpm set to n -> for an auto install, user mode will prompt
 +
:APACHENGINX=n
 +
 +
*for mysql set m. for sqlite set s. for postgresql set p
 +
:SQLITEMYSQL=s
 +
 +
*for postgresql v 9.0 (from ppa) set to 9, otherwise stick with 8
 +
*must set SQLITEMYSQL to p
 +
:POSTGRES9=8
 +
 +
*to start FreeSWITCH with -nonat option set SETNONAT to y
 +
:SETNONAT=n
 +
 +
*rm -Rf /opt? A default install doesn't have /opt so no worries
 +
*if you do, set to no, and it will link /usr/local/freeswitch to /opt/freeswitch
 +
:RMOPT=y
 +
 +
*below is a list of modules we want to add to provide functionality for FusionPBX don't worry about the applications/mod_ format.  This script will find that in modules.conf
 +
*PAY ATTENTION TO THE SPACES POST AND PRE PARENTHESIS
 +
:modules_add=( mod_dingaling mod_portaudio mod_callcenter mod_lcr mod_cidlookup mod_directory mod_flite mod_pocketsphinx mod_xml_rpc mod_xml_cdr mod_xml_curl mod_say_es )
  
 
=Notes=
 
=Notes=
Line 109: Line 244:
  
 
=Errata=
 
=Errata=
 +
==init.d==
 +
2013
 +
 +
The init.d script in /usr/src/freeswitch hasn't been as stable as hoped, so the script is not successfully modifying it in all cases.  Until it is properly heredoc'ed in the script, you can copy/paste this one.
 +
<pre>
 +
#!/bin/sh
 +
### -*- mode:shell-script; indent-tabs-mode:nil; sh-basic-offset:2 -*-
 +
### BEGIN INIT INFO
 +
# Provides: freeswitch
 +
# Required-Start: $network $remote_fs $local_fs
 +
# Required-Stop: $network $remote_fs $local_fs
 +
# Default-Start: 2 3 4 5
 +
# Default-Stop: 0 1 6
 +
# Short-Description: FreeSWITCH Softswitch
 +
# Description: FreeSWITCH Softswitch
 +
### END INIT INFO
 +
 +
# Author: Travis Cross <tc@traviscross.com>
 +
 +
PATH=/sbin:/usr/sbin:/bin:/usr/bin
 +
DESC=freeswitch
 +
NAME=freeswitch
 +
DAEMON=/usr/local/freeswitch/bin/freeswitch
 +
DAEMON_ARGS="-u www-data -g www-data -nc -rp -nonat"
 +
USER=www-data
 +
GROUP=www-data
 +
RUNDIR=/usr/local/freeswitch/run
 +
PIDFILE=$RUNDIR/$NAME.pid
 +
SCRIPTNAME=/etc/init.d/$NAME
 +
WORKDIR=/usr/local/freeswitch
 +
 +
[ -x $DAEMON ] || exit 0
 +
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
 +
. /lib/init/vars.sh
 +
. /lib/lsb/init-functions
 +
 +
do_start() {
 +
  # Directory in /var/run may disappear on reboot (e.g. when tmpfs used for /var/run).
 +
  mkdir -p $RUNDIR
 +
  chown -R $USER:$GROUP $RUNDIR
 +
  chmod -R ug=rwX,o= $RUNDIR
 +
 +
  start-stop-daemon --start --quiet \
 +
    --pidfile $PIDFILE --exec $DAEMON --name $NAME --user $USER \
 +
    --test > /dev/null \
 +
    || return 1
 +
  ulimit -s 240
 +
  start-stop-daemon --start --quiet \
 +
    --pidfile $PIDFILE --exec $DAEMON --name $NAME --user $USER \
 +
    --chdir $WORKDIR -- $DAEMON_ARGS $DAEMON_OPTS \
 +
    || return 2
 +
  return 0
 +
}
 +
 +
stop_fs() {
 +
  start-stop-daemon --stop --quiet \
 +
    --pidfile $PIDFILE --name $NAME --user $USER \
 +
    --retry=TERM/30/KILL/5
 +
}
 +
 +
stop_fs_children() {
 +
  start-stop-daemon --stop --quiet \
 +
    --exec $DAEMON \
 +
    --oknodo --retry=0/30/KILL/5
 +
}
 +
 +
do_stop() {
 +
  stop_fs
 +
  RETVAL="$?"
 +
  [ "$RETVAL" -eq 2 ] && return 2
 +
  stop_fs_children
 +
  [ "$?" -eq 2 ] && return 2
 +
  rm -f $PIDFILE
 +
  return "$RETVAL"
 +
}
 +
 +
do_reload() {
 +
  start-stop-daemon --stop --quiet \
 +
    --pidfile $PIDFILE --name $NAME --user $USER \
 +
    --signal HUP
 +
}
 +
 +
case "$1" in
 +
  start)
 +
    [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC " "$NAME"
 +
    do_start
 +
    case "$?" in
 +
      0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
 +
      2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
 +
    esac
 +
    ;;
 +
  stop)
 +
    [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
 +
    do_stop
 +
    case "$?" in
 +
      0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
 +
      2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
 +
    esac
 +
    ;;
 +
  status)
 +
    status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
 +
    ;;
 +
  reload|force-reload)
 +
    log_daemon_msg "Reloading $DESC" "$NAME"
 +
    do_reload
 +
    log_end_msg $?
 +
    ;;
 +
  restart)
 +
    log_daemon_msg "Restarting $DESC" "$NAME"
 +
    do_stop
 +
    case "$?" in
 +
      0|1)
 +
        do_start
 +
        case "$?" in
 +
          0) log_end_msg 0 ;;
 +
          1|*) log_end_msg 1 ;;
 +
        esac
 +
        ;;
 +
      *) log_end_msg 1 ;;
 +
    esac
 +
    ;;
 +
  *)
 +
    echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
 +
    exit 3
 +
    ;;
 +
esac
 +
 +
exit 0
 +
</pre>
 +
 
==Nginx==
 
==Nginx==
 
4/16/2012
 
4/16/2012
Line 120: Line 385:
 
restart nginx
 
restart nginx
 
  /etc/init.d/nginx restart
 
  /etc/init.d/nginx restart
 +
 
==<del>Bison</del>==
 
==<del>Bison</del>==
 
<del>install bison first (new FS dependency)</del>Fixed
 
<del>install bison first (new FS dependency)</del>Fixed
Line 159: Line 425:
 
  /var/log/fusionpbx_gui.error_log
 
  /var/log/fusionpbx_gui.error_log
 
----
 
----
 
==Options==
 
<pre>
 
This script should be called as:
 
  install_fusionpbx option1 option2
 
 
    option1:
 
      install-freeswitch
 
      install-fusionpbx
 
      install-both
 
      upgrade-freeswitch
 
      upgrade-fusionpbx
 
      fix-https
 
      fix-permissions
 
      version|--version|-v
 
 
    option2:
 
      user: option waits in certain places for the user to check for errors
 
            it is interactive and prompts you about what to install"
 
      auto: tries an automatic install. Get a cup of coffee, this will
 
        take a while. FOR THE BRAVE!
 
 
      EXAMPLE
 
        install_fusionpbx install-both user
 
</pre>
 
 
==Install==
 
----
 
sudo install_fusionpbx install-both user
 
 
==Variables==
 
----
 
These are included to make the auto mode more flexible. Open the script and set them however you wish.
 
 
*for apache set to a, for nginx/php-fpm set to n -> for an auto install, user mode will prompt
 
:APACHENGINX=n
 
 
*for mysql set m. for sqlite set s. for postgresql set p
 
:SQLITEMYSQL=s
 
 
*for postgresql v 9.0 (from ppa) set to 9, otherwise stick with 8
 
*must set SQLITEMYSQL to p
 
:POSTGRES9=8
 
 
*to start FreeSWITCH with -nonat option set SETNONAT to y
 
:SETNONAT=n
 
 
*rm -Rf /opt? A default install doesn't have /opt so no worries
 
*if you do, set to no, and it will link /usr/local/freeswitch to /opt/freeswitch
 
:RMOPT=y
 
 
*below is a list of modules we want to add to provide functionality for FusionPBX don't worry about the applications/mod_ format.  This script will find that in modules.conf
 
*PAY ATTENTION TO THE SPACES POST AND PRE PARENTHESIS
 
:modules_add=( mod_dingaling mod_portaudio mod_callcenter mod_lcr mod_cidlookup mod_directory mod_flite mod_pocketsphinx mod_xml_rpc mod_xml_cdr mod_xml_curl mod_say_es )
 
  
 
= Bugs and Getting Help =
 
= Bugs and Getting Help =
soapee01 on #fusionpbx (freenode) wrote this script.  For help, go there.  Bugs and feature requests can be handled on the sourceforge  project page:
+
soapee01 on #fusionpbx (freenode) wrote this script.  For help, go there.  Bugs and feature requests can be handled on the google code project page:
  
  
Line 281: Line 493:
 
*Install NTPD
 
*Install NTPD
 
**Package in repository is just 'ntp'
 
**Package in repository is just 'ntp'
 +
 +
= Need to reinstall? =
 +
 +
ever on the compiled install get to the stage where you need to reinstall, in most cases, the following will get you back to a clean position and only take a couple of minutes at most.....
 +
rm -fR /usr/local/freeswitch/scripts/*
 +
rm /var/www/fusionpbx/secure/fusionpbx.db
 +
If you have used postgres as the database you will have to drop it.
 +
If using sqlite then the following.
 +
rm /var/www/fusionpbx/resources/config.php
 +
The from where your install script is run:
 +
./install_fusionpbx.sh install-fusionpbx user
 +
Then revisit https://yourip

Latest revision as of 03:22, 5 October 2015

Supported Distributions

Debian

Lenny

  • Select the Base Install option [on the debian install iso]. All other packages will be added.
  • When you get a warning about it not being Lucid, go ahead and continue.
  • nginx and php5-fpm options do not work (since the script uses ppa's). Select Apache instead.
  • Dahdi isn't included in the official repositories.

Squeeze

  • Webserver: apache/nginx
  • Databases: sqlite/MySQL/postgres9
    • Postgres 8 probably works fine Please confirm
  • thank you cbillen for testing

Get it here: http://www.debian.org/distrib/netinst

  • Select the Base Install option [on the debian install iso]. All other packages will be added.

Wheezy/Jessie

  • Webserver: nginx
  • Databases: postgresql
  • Please note this is the ubuntu install script. It is supported and works well with Wheezy

Steps to installation

  • 4.> ./install_fusionpbx.sh install-both auto (Typical install)
  • 5.> Continue with the current script [y/N]? (Choose 'N' this will get the most recent version of the install script)
  • 6.>
   The pgsql username is fusionpbx
   The pgsql database name is fusionpbx
   Please provide a password for the fusionpbx user
   Password:YoL33tPassword
  • 7.> 30ish mins will pass (lines of code will go by)
  • 8.> You should be greeted with the following
    Now you'll need to manually finish the install and come back
 This way I can finish up the last bit of permissions issues
 Just go to
 http://ur_domain_or_ip.com
      MAKE SURE YOU CHOOSE PostgreSQL as your Database on the first page!!!
      ON the Second Page:
         Database Name: fusionpbx
         Database Username: fusionpbx
         Database Password: whateveryouentered
         Create Database Username: Leave_Blank
         Create Database Password: Leave_Blank
 I will wait here until you get done with that.
 When PostgreSQL is configured come back and press enter.
  • 9.> Open the browser of your choice and put the domain and or ip there.

Gui-login-install.jpg Gui-login-install2-1.jpg

  • 10.> DONE! Now login and enjoy ;)


**IF you get an error like below rm /var/www/fusionpbx/resources/config.php and enter the correct info.

Gui-login-install-error.jpg

Fedora

Ubuntu

What worked for asdf- from freenode:

  • Ubuntu 13.04 Server 64bit
  • the dev version of Easy FusionPBX ->
http://fusionpbx.googlecode.com/svn/branches/dev/scripts/install/ubuntu/install_fusionpbx.sh

sqlite and postgres are the only options when prompted to select a database. (Thank you NYSolutions, of #fusionpbx on freenode, for your help)

10.04 LTS Lucid

  • Webserver: apache/nginx
  • Databases: sqlite/MySQL/postgres9/postgres8
  • Fully Functional

Get it here: http://www.ubuntu.com/server/get-ubuntu/download

  • Select Ubuntu 10.04 LTS Long Term Support
  • Choose 32 bit or 64 bit depending on your hardware

When you install ubuntu, you should select the "Manual package selection" option. This way we can keep the install to the bare minimum. Just quit tasksel during the install.

12.04 LTS Precise

Get it here: http://www.ubuntu.com/download/server Currently testing. Please try it and let us know if anything is broken.

  • Webserver
    • nginx works
    • apache works
  • Databases
    • sqlite works with apache, nginx untested
    • mysql db create error (with apache), nginx untested.
    • postgres 8: Not available [or recommended]
    • postgres 9: works with apache, nginx untested
  • Switching Webservers
    • Apache->Nginx: works
    • Nginx->Apache: untested

Ubuntu 12.04 on Digital Ocean

http://wiki.fusionpbx.com/index.php?title=Ubuntu12onDigitalOcean

Get the latest install script

Project

migrated to fusionpbx googlecode svn (2011-11-10)

If you use this script, it may error out, unable to git the project. If so, change the following:

#staying with default repository, feel free to change this to github. Some report faster downloads.
FSGIT=git://git.freeswitch.org/freeswitch.git
#FSGIT=git://github.com/FreeSWITCH/FreeSWITCH.git

To:

#staying with default repository, feel free to change this to github. Some report faster downloads.
FSGIT=http://git.freeswitch.org/freeswitch.git
#FSGIT=http://github.com/FreeSWITCH/FreeSWITCH.git

Install Script

via subversion

to install the script with subversion (preferred)

sudo apt-get install subversion
sudo svn checkout https://fusionpbx.googlecode.com/svn/trunk/scripts/install/ubuntu/ /usr/src/install_fusionpbx
sudo chmod 755 /usr/src/install_fusionpbx/install_fusionpbx.sh
sudo ln -s /usr/src/install_fusionpbx/install_fusionpbx.sh /usr/local/bin/

with wget

To download with wget:

sudo wget -O /usr/local/bin/install_fusionpbx.sh http://fusionpbx.googlecode.com/svn/trunk/scripts/install/ubuntu/install_fusionpbx.sh /usr/local/bin/install_fusionpbx.sh
sudo chmod 755 /usr/local/bin/install_fusionpbx.sh

Run Script

sudo /usr/local/bin/install_fusionpbx.sh

Better way to run:

sudo /usr/local/bin/install_fusionpbx.sh install-both user |tee /tmp/install_fusion.log

Features

  • FreeSWITCH
    • It installs all necessary dependencies.
    • It grabs the latest FreeSWITCH git and compile it, including dealing with a mod_dingaling issue.
    • It sets permissions properly for FreeSWITCH.
    • Sets up Fail2Ban (for FreeSWITCH)
    • Sets up LogRotate (for FreeSWITCH)
    • Checks for public IP address, optionally starts FreeSWITCH with -nonat for faster startup
  • FusionPBX (optional)
    • It sets permissions properly FusionPBX to edit FreeSWITCH config files. FreeSWITCH is now running as www-data starting with v4.3.3
    • Grabs the latest FusionPBX from SVN and dependencies (php5-cli, php5-sqlite, sqlite)
    • OPTION: Installs and configures: apache2 with mod-php5 OR nginx with php5-fpm.
    • OPTION: Install MySQL for the FusionPBX database (instead of default sqlite).
    • OPTION: PostgreSQL 8 (or 9) beginning with v4.3.3
      • If using odbc for voicemail, FusionPBX requires php5-odbc!

Everything should automatically configured!

License

------------------------------------------------------------------------------

 "THE WAF LICENSE" (version 1)
 This is the Wife Acceptance Factor (WAF) License.
 jamesdotfsatstubbornrosesd0tcom  wrote this file.  As long as you retain this
 notice you can do whatever you want with it. If you appreciate the work,
 please consider purchasing something from my wife's wishlist. That pays
 bigger dividends to this coder than anything else I can think of ;).  It also
 keeps her happy while she's being ignored; so I can work on this stuff.
   James Rose

 latest wishlist: http://www.stubbornroses.com/waf.html

 Credit: Based off of the BEER-WARE LICENSE (REVISION 42) by Poul-Henning Kamp

------------------------------------------------------------------------------

Under no conditions, should a donation be considered to my loving wife until you've first donated to FusionPBX, and FreeSWITCH (so requests soapee01)

Options

Command Line Options

This script should be called as:
  install_fusionpbx option1 option2

    option1:
      install-freeswitch
      install-fusionpbx
      install-both
      upgrade-freeswitch
      upgrade-fusionpbx
      fix-https
      fix-permissions
      version|--version|-v

    option2:
      user: option waits in certain places for the user to check for errors
            it is interactive and prompts you about what to install"
      auto: tries an automatic install. Get a cup of coffee, this will
        take a while. FOR THE BRAVE!

      EXAMPLE
         install_fusionpbx install-both user

Script Variables

These are included to make the auto mode more flexible. Open the script and set them however you wish.

  • for apache set to a, for nginx/php-fpm set to n -> for an auto install, user mode will prompt
APACHENGINX=n
  • for mysql set m. for sqlite set s. for postgresql set p
SQLITEMYSQL=s
  • for postgresql v 9.0 (from ppa) set to 9, otherwise stick with 8
  • must set SQLITEMYSQL to p
POSTGRES9=8
  • to start FreeSWITCH with -nonat option set SETNONAT to y
SETNONAT=n
  • rm -Rf /opt? A default install doesn't have /opt so no worries
  • if you do, set to no, and it will link /usr/local/freeswitch to /opt/freeswitch
RMOPT=y
  • below is a list of modules we want to add to provide functionality for FusionPBX don't worry about the applications/mod_ format. This script will find that in modules.conf
  • PAY ATTENTION TO THE SPACES POST AND PRE PARENTHESIS
modules_add=( mod_dingaling mod_portaudio mod_callcenter mod_lcr mod_cidlookup mod_directory mod_flite mod_pocketsphinx mod_xml_rpc mod_xml_cdr mod_xml_curl mod_say_es )

Notes


Errata

init.d

2013

The init.d script in /usr/src/freeswitch hasn't been as stable as hoped, so the script is not successfully modifying it in all cases. Until it is properly heredoc'ed in the script, you can copy/paste this one.

#!/bin/sh
### -*- mode:shell-script; indent-tabs-mode:nil; sh-basic-offset:2 -*-
### BEGIN INIT INFO
# Provides: freeswitch
# Required-Start: $network $remote_fs $local_fs
# Required-Stop: $network $remote_fs $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: FreeSWITCH Softswitch
# Description: FreeSWITCH Softswitch
### END INIT INFO

# Author: Travis Cross <tc@traviscross.com>

PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC=freeswitch
NAME=freeswitch
DAEMON=/usr/local/freeswitch/bin/freeswitch
DAEMON_ARGS="-u www-data -g www-data -nc -rp -nonat"
USER=www-data
GROUP=www-data
RUNDIR=/usr/local/freeswitch/run
PIDFILE=$RUNDIR/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
WORKDIR=/usr/local/freeswitch

[ -x $DAEMON ] || exit 0
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
. /lib/init/vars.sh
. /lib/lsb/init-functions

do_start() {
  # Directory in /var/run may disappear on reboot (e.g. when tmpfs used for /var/run).
  mkdir -p $RUNDIR
  chown -R $USER:$GROUP $RUNDIR
  chmod -R ug=rwX,o= $RUNDIR

  start-stop-daemon --start --quiet \
    --pidfile $PIDFILE --exec $DAEMON --name $NAME --user $USER \
    --test > /dev/null \
    || return 1
  ulimit -s 240
  start-stop-daemon --start --quiet \
    --pidfile $PIDFILE --exec $DAEMON --name $NAME --user $USER \
    --chdir $WORKDIR -- $DAEMON_ARGS $DAEMON_OPTS \
    || return 2
  return 0
}

stop_fs() {
  start-stop-daemon --stop --quiet \
    --pidfile $PIDFILE --name $NAME --user $USER \
    --retry=TERM/30/KILL/5
}

stop_fs_children() {
  start-stop-daemon --stop --quiet \
    --exec $DAEMON \
    --oknodo --retry=0/30/KILL/5
}

do_stop() {
  stop_fs
  RETVAL="$?"
  [ "$RETVAL" -eq 2 ] && return 2
  stop_fs_children
  [ "$?" -eq 2 ] && return 2
  rm -f $PIDFILE
  return "$RETVAL"
}

do_reload() {
  start-stop-daemon --stop --quiet \
    --pidfile $PIDFILE --name $NAME --user $USER \
    --signal HUP
}

case "$1" in
  start)
    [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC " "$NAME"
    do_start
    case "$?" in
      0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
      2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
    esac
    ;;
  stop)
    [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
    do_stop
    case "$?" in
      0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
      2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
    esac
    ;;
  status)
    status_of_proc "$DAEMON" "$NAME" && exit 0 || exit $?
    ;;
  reload|force-reload)
    log_daemon_msg "Reloading $DESC" "$NAME"
    do_reload
    log_end_msg $?
    ;;
  restart)
    log_daemon_msg "Restarting $DESC" "$NAME"
    do_stop
    case "$?" in
      0|1)
        do_start
        case "$?" in
          0) log_end_msg 0 ;;
          1|*) log_end_msg 1 ;;
        esac
        ;;
      *) log_end_msg 1 ;;
    esac
    ;;
  *)
    echo "Usage: $SCRIPTNAME {start|stop|status|restart|force-reload}" >&2
    exit 3
    ;;
esac

exit 0

Nginx

4/16/2012

Latest PPA versions of nginx have changed the default configuration, so that when you upgrade it won't work. An example would be post installation of the current iso.

Open this file:

vim /etc/nginx/fastcgi_params

comment out (with #):

fastcgi_param HTTPS $https;

restart nginx

/etc/init.d/nginx restart

Bison

install bison first (new FS dependency)Fixed

Apache Config

Bug reported about setting the Document root path in the apache configuration. Variable substitution wasn't working. In /etc/apache2/sites-enabled/fusionpbx change the root directory to /var/www/fusionpbx and it should be fine. Fixed

Logrotate

The logrotate script doesn't necessarily work as advertised. The cause is due to the way FS handles the sighup. When received, FS will automatically mv /usr/local/freeswitch/log/freeswitch.log to /usr/local/freeswitch/log/freeswitch.log.`date "+%whatever" In some rare instances, logrotate can cause FS to crash when it tries to write/mv to a file that has already been handled by logrotate. Solution is here Changed

Call Detail Records (CDRs)

If your CDRs do not work and you see something like:

18:46:11.070791 [ERR] mod_xml_cdr.c:384 Unable to post to web server, writing to file

The issue here is in /usr/local/freeswitch/conf/autoload_configs/xml_cdr.conf.xml

You'll see:

<param name="url" value="http://PUBLIC_IP_ADDRESS/mod/xml_cdr/v_xml_cdr_import.php"/>

Change it to:

<param name="url" value="http://localhost/mod/xml_cdr/v_xml_cdr_import.php"/>

This is due to the nginx https redirect for the public IP. There's an exception in the config file for localhost.

This issue also affects outbound CID when using an Asterisk gateway.

  • install.php needs to tweak for this...

Permissions

  • run 'install_fusionpbx fix-permissions'

Permissions aren't perfect (sorry), there's a script bug. Fixed

Setting group ID sticky for FreeSWITCH
/usr/bin/find: `freeswitch': No such file or directory

The script has had:

/usr/bin/find freeswitch -type d -exec /bin/chmod u=rwx,g=srx,o= {} \;

This needs to be is:

/usr/bin/find /usr/local/freeswitch -type d -exec /bin/chmod u=rwx,g=srx,o= {} \;

NGinx Log Files

Nginx logs for FusionPBX are stored in a non-standard location. See:Fixed

/var/log/fusionpbx_gui.access_log
/var/log/fusionpbx_gui.error_log

Bugs and Getting Help

soapee01 on #fusionpbx (freenode) wrote this script. For help, go there. Bugs and feature requests can be handled on the google code project page:


PortAudio

Have fun with your sound card. Make sure the modules are loaded

lsmod |grep snd
lspci

It's already compiled (script and iso), but alsa is not present.

apt-get install alsa alsa-utils alsa-tools

You'll need to add your users to the audio group.

adduser www-data audio

Run alsamixer and unmute the channgels (with M) and crank the volume all the way up.

alsamixer
Reboot is now required (/etc/init.d/alsa might work, didn't for me)

Check that the soundcard is there.

cat /proc/asound/cards

Try playing a file from the CLI

aplay /usr/local/freeswitch/sounds/music/8000/suite-espanola-op-47-leyenda.wav

It should be working. reference with nice alsamixer pics

Enable the module in FusionPBX

  • System->Modules->PortAudio
    • Enable it
    • Start it

Example Port Audio Commands

Tested with VMWare Player 2011/02/27

Certificates

Information on importing the self signed certificates can be found here Self-Signed CA

Wishlist

  • Option to download FreeSWITCH compiled source as tar.gz for iso
  • Option --fix-permissions
    • Needs to check FreeSWITCH init script
  • upgrade-fusionpbx needs to fix permissions, since a FS upgrade kills them.
  • Logrotate for nginx
  • Fail2ban for FusionPBX failed login attempts
    • Need information on attempts/rate/etc
  • Change Fail2ban on FreeSWITCH with attempts/rate/etc in config file (not default settings)
  • Change or have option to download GIT from GitHub repository (It's faster)
    • git://github.com/FreeSWITCH/FreeSWITCH.git
  • Make nginx/apache https by default
    • iso needs to regenerate certificates post install, ideally with 10 year expirations.
  • fix nginx config to not block html files... Don't block ~ .ht
       # Disable viewing .htaccess & .htpassword & .db
       location ~ .htaccess {
               deny all;
       }
       location ~ .htpassword {
               deny all;
       }
  • Install TFTPD, change permissions to www-data.
    • /var/lib/tftpboot is root dir.
    • /etc/default/tftpd-hpa is config file
TFTP_USERNAME="www-data"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure"
  • Install NTPD
    • Package in repository is just 'ntp'

Need to reinstall?

ever on the compiled install get to the stage where you need to reinstall, in most cases, the following will get you back to a clean position and only take a couple of minutes at most.....

rm -fR /usr/local/freeswitch/scripts/*
rm /var/www/fusionpbx/secure/fusionpbx.db

If you have used postgres as the database you will have to drop it. If using sqlite then the following.

rm /var/www/fusionpbx/resources/config.php

The from where your install script is run:

./install_fusionpbx.sh install-fusionpbx user

Then revisit https://yourip