Wednesday, 19 July 2017

Freeswitch CDR store into Mysql on debian 8

Freeswitch CDR store into Mysql

I assume that freeswitch and MySQL are installed already.

1) First we will need to install unixodbc & libmyodbc, by running following command:

apt-get install unixodbc libmyodbc

2) Please update /etc/odbcinst.ini:

[MySQL]
Description = ODBC for MySQL
Driver = /usr/lib/x86_64-linux-gnu/odbc/libmyodbc.so
Setup = /usr/lib/x86_64-linux-gnu/odbc/libodbcmyS.so
FileUsage = 1

3) In my example MySQL is running on same server where freeswitch, please change localhost to your ip-address if MySQL DB is on separate machine. DB name, username and password is freeswitch in my case, but you will need to update it accordingly. When you are ready with config, please save it to /etc/odbc.ini.

[freeswitch]
Description           = MySQL connection to 'freeswitch' database
Driver                = MySQL
Database              = freeswitch
Server                = localhost
USER                  = freeswitch
PASSWORD              = freeswitch
Port                  = 3306
Socket                = /var/run/mysqld/mysqld.sock
4) Now we need to test if you set-up ODBC correctly, please run echo "select 1" | isql -v freeswitch in shell, you should get something similar to what you see below:

+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> select 1
+---------------------+
| 1                   |
+---------------------+
| 1                   |
+---------------------+
SQLRowCount returns 1
1 rows fetched
5) Now we need to recompile freeswitch with mod_odbc_cdr. Go to freeswitch source category and add line event_handlers/mod_odbc_cdr on top of /usr/src/freeswitch/modules.conf(please update path accordingly if your freeswitch source directory is different):

event_handlers/mod_odbc_cdr
#applications/mod_abstraction
#applications/mod_av
#applications/mod_avmd
#applications/mod_bert
#applications/mod_blacklist
#applications/mod_callcenter
#applications/mod_cidlookup
#applications/mod_cluechoo
applications/mod_commands
...
6) In freeswitch source directory run:

make
make install
7) At this point we need to copy odbc_cdr.conf.xml to freeswich conf directory, I’m assuming that freeswitch source directory is /usr/src/freeswitch

cp /usr/src/freeswitch/src/mod/event_handlers/mod_odbc_cdr/conf/autoload_configs/odbc_cdr.conf.xml /usr/local/freeswitch/conf/autoload_configs/odbc_cdr.conf.xml
8) Please update /usr/local/freeswitch/conf/autoload_configs/odbc_cdr.conf.xml accordingly so it points to MySQL DB(line No4). In line no 4 freeswitch is connection name or value in square brackets in first line of /etc/odbc.ini:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<configuration name="odbc_cdr.conf" description="ODBC CDR Configuration">
  <settings>
    <!-- <param name="odbc-dsn" value="database:username:password"/> -->
 <param name="odbc-dsn" value="odbc://freeswitch"/>
        <!-- global value can be "a-leg", "b-leg", "both" (default is "both") -->
        <param name="log-leg" value="both"/>
    <!-- value can be "always", "never", "on-db-fail" -->
    <param name="write-csv" value="on-db-fail"/>
        <!-- location to store csv copy of CDR -->
    <param name="csv-path" value="/usr/local/freeswitch/log/odbc_cdr"/>
    <!-- if "csv-path-on-fail" is set, failed INSERTs will be placed here as CSV files otherwise they will be placed in "csv-path" -->
    <param name="csv-path-on-fail" value="/usr/local/freeswitch/log/odbc_cdr/failed"/>
    <!-- dump SQL statement after leg ends -->
        <param name="debug-sql" value="true"/>
  </settings>
  <tables>
        <!-- only a-legs will be inserted into this table -->
    <table name="cdr_table_a_leg" log-leg="a-leg">
      <field name="CallId" chan-var-name="call_uuid"/>
      <field name="orig_id" chan-var-name="uuid"/>
      <field name="term_id" chan-var-name="sip_call_id"/>
      <field name="ClientId" chan-var-name="uuid"/>
      <field name="IP" chan-var-name="sip_network_ip"/>
      <field name="IPInternal" chan-var-name="sip_via_host"/>
      <field name="CODEC" chan-var-name="read_codec"/>
      <field name="directGateway" chan-var-name="sip_req_host"/>
      <field name="redirectGateway" chan-var-name="sip_redirect_contact_host_0"/>
      <field name="CallerID" chan-var-name="sip_from_user"/>
      <field name="TelNumber" chan-var-name="sip_req_user"/>
      <field name="TelNumberFull" chan-var-name="sip_to_user"/>
      <field name="sip_endpoint_disposition" chan-var-name="endpoint_disposition"/>
      <field name="sip_current_application" chan-var-name="current_application"/>
    </table>
        <!-- only b-legs will be inserted into this table -->
    <table name="cdr_table_b_leg" log-leg="b-leg">
      <field name="CallId" chan-var-name="call_uuid"/>
      <field name="orig_id" chan-var-name="uuid"/>
      <field name="term_id" chan-var-name="sip_call_id"/>
      <field name="ClientId" chan-var-name="uuid"/>
      <field name="IP" chan-var-name="sip_network_ip"/>
      <field name="IPInternal" chan-var-name="sip_via_host"/>
      <field name="CODEC" chan-var-name="read_codec"/>
      <field name="directGateway" chan-var-name="sip_req_host"/>
      <field name="redirectGateway" chan-var-name="sip_redirect_contact_host_0"/>
      <field name="CallerID" chan-var-name="sip_from_user"/>
      <field name="TelNumber" chan-var-name="sip_req_user"/>
      <field name="TelNumberFull" chan-var-name="sip_to_user"/>
      <field name="sip_endpoint_disposition" chan-var-name="endpoint_disposition"/>
      <field name="sip_current_application" chan-var-name="current_application"/>
    </table>
        <!-- both legs will be inserted into this table -->
    <table name="cdr_table_both">
      <field name="CallId" chan-var-name="uuid"/>
      <field name="orig_id" chan-var-name="Caller-Unique-ID"/>
      <field name="TEST_id" chan-var-name="sip_from_uri"/>
    </table>
  </tables>
</configuration>
9) Please enable auto-load of mod_odbc_cdr. For this you need to edit /usr/local/freeswitch/conf/autoload_configs/modules.conf.xml and add <load module="mod_odbc_cdr"/> on top of <load module="mod_cdr_csv"/>. In my minimal set-up it looks in following way(line No12):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
<configuration name="modules.conf" description="Modules">
  <modules>

    <!-- Loggers (I'd load these first) -->
    <load module="mod_console"/>
    <load module="mod_logfile"/>

    <!-- XML Interfaces -->
    <load module="mod_xml_rpc"/>

    <!-- Event Handlers -->
    <load module="mod_odbc_cdr"/>
    <load module="mod_cdr_csv"/>
    <load module="mod_event_socket"/>

    <!-- Endpoints -->
    <load module="mod_sofia"/>
    <load module="mod_loopback"/>

    <!-- Applications -->
    <load module="mod_commands"/>
    <load module="mod_conference"/>
    <load module="mod_db"/>
    <load module="mod_dptools"/>
    <load module="mod_expr"/>
    <load module="mod_hash"/>
    <load module="mod_esf"/>

    <!-- Dialplan Interfaces -->
    <load module="mod_dialplan_xml"/>

    <!-- Codec Interfaces -->

    <!-- File Format Interfaces -->
    <load module="mod_sndfile"/>
    <load module="mod_native_file"/>

    <!-- Third party modules -->

  </modules>
</configuration>
10) Now we need to create tables:

CREATE TABLE IF NOT EXISTS `cdr_table_a_leg` (
`CallId` varchar(80) DEFAULT NULL,
`orig_id` varchar(80) DEFAULT NULL,
`term_id` varchar(80) DEFAULT NULL,
`ClientId` varchar(80) DEFAULT NULL,
`IP` varchar(80) DEFAULT NULL,
`IPInternal` varchar(80) DEFAULT NULL,
`CODEC` varchar(80) DEFAULT NULL,
`directGateway` varchar(80) DEFAULT NULL,
`redirectGateway` varchar(80) DEFAULT NULL,
`CallerID` varchar(80) DEFAULT NULL,
`TelNumber` varchar(80) DEFAULT NULL,
`TelNumberFull` varchar(80) DEFAULT NULL,
`sip_endpoint_disposition` varchar(80) DEFAULT NULL,
`sip_current_application` varchar(80) DEFAULT NULL
);

CREATE TABLE IF NOT EXISTS `cdr_table_b_leg` (
`CallId` varchar(80) DEFAULT NULL,
`orig_id` varchar(80) DEFAULT NULL,
`term_id` varchar(80) DEFAULT NULL,
`ClientId` varchar(80) DEFAULT NULL,
`IP` varchar(80) DEFAULT NULL,
`IPInternal` varchar(80) DEFAULT NULL,
`CODEC` varchar(80) DEFAULT NULL,
`directGateway` varchar(80) DEFAULT NULL,
`redirectGateway` varchar(80) DEFAULT NULL,
`CallerID` varchar(80) DEFAULT NULL,
`TelNumber` varchar(80) DEFAULT NULL,
`TelNumberFull` varchar(80) DEFAULT NULL,
`sip_endpoint_disposition` varchar(80) DEFAULT NULL,
`sip_current_application` varchar(80) DEFAULT NULL
);

CREATE TABLE IF NOT EXISTS `cdr_table_both` (
`CallId` varchar(80) DEFAULT NULL,
`orig_id` varchar(80) DEFAULT NULL,
`TEST_id` varchar(80) DEFAULT NULL
);
11) Please restart freeswitch: service freeswitch restart
12) On this point you can check if module mod_odbc_cdr loaded. Please run following command in freeswitch CLI:

module_exists mod_odbc_cdr
If everything is ok, you will get following output:

freeswitch@internal> module_exists mod_odbc_cdr
true
freeswitch@internal>
13) On this point you CDRs should be written to MySQL DB, if somehow you still do not get CDRs in DB, you need to check /usr/local/freeswitch/log/freeswitch.log for errors or any other hints. Keep in mind that you might need to add some additional fields to DB and update odbc_cdr.conf.xml accordingly. Please take a closer look on data type used in CDRs table, probably it is not optimal and you might need to update it.

please refer below link
http://blog.volunge.net/jekyll/update/2016/02/16/freeswitch-mysql-CDRs.html

Freeswitch Module installation

Freeswitch Module installation

Freeswitch does not install sounds by default. By using below command default sounds will be loaded/installed.

make all cd-sounds-install cd-moh-install

For installing a module follow below steps(example mod_shout).

Enable module in build --> modules.conf (mod_shout,mod_shell_stream,mod_http_cache)

Configure/Make --->./configure && make install

Enable module in runtime  ---> In /usr/local/freeswitch/conf/autoload_configs/modules.conf.xml  file uncomment <load module="mod_shout"/>

Load the Module ---> load mod_shout

check module loaded/not in CLI ---> module_exists mod_shout {returns true if exists else false}.




To check if there are any new modules execute:

diff build/modules.conf.in modules.conf

If a previously disabled module is now enabled, or there is a requirement to rebuild a single module, execute the following (replace mod_name with the name of the module to build):

make mod_name-install

Freeswitch Conf Directory Structure

Freeswitch Conf Directory Structure

autoload_configs: It contains configuration information for all the core modules and these configuration files will automatically load into freeswitch.
dialplan: This is the place where we write dialplans. There are some example dialplans exists.
directory: It contains all users that may register and use freeswitch as their PBX.
jingle_profiles : This is a module which handles XMPP.
lang: It tells FS in which language  to say the like currency etc.
mrcp_profiles: MRCP is used to allow freeswitch to use speech recognition and TTS
sip_profiles:  Tells FS how to talk sip. Each profile has it's own port.

Create a SIP User

1. cp  ${Prefix}/conf/directory/default/1000.xml ${Prefix}/conf/directory/default/newuser.xml

2. vi  ${Prefix}/conf/directory/default/newuser.xml and change 1000 to newuser.

3. usercontext  parameter is used to connect to dialplan.  usercontext parameter  value is default. we can change this to any but create that in dialplan.


4. create a dialplan in ${Prefix}/conf/dialplan/default.xml by seeing the example one.

bridge local SIP: <action application="bridge"  data="user/${destination_number}"/>

Group Call:  ring all the members in a group.

make a group in ${Prefix}/conf/directory/default.xml
<group name="support">
<users>
<user id="1001" type="pointer"/>
<user id="1004" type="pointer"/>
<user id="1003" type="pointer"/>
</users>
</group>


dialplan:
<action application="bridge" data="group/smsc"/>.



Freeswitch SIP Trunk

SIP TRUNK

1. get the account details from domain.com
   
    username:siptrunk
    password: 123456


2. create a external profile as  gateway as below
open sip_profiles/external/onsip-trunk.xml a file

add below lines
<include>
  <gateway name="siptrunk">
  <param name="username" value="siptrunk"/>
  <param name="password" value="123456"/>
  <param name="proxy" value="domain.com:5080"/>
  <param name="register-proxy" value="domain.com:5080"/>
  <param name="register" value="false"/>
  <param name="register-transport" value="udp"/>
  <!--How many seconds before a retry when a failure or timeout occurs -->
  <param name="retry-seconds" value="30"/>
  <!--Use the callerid of an inbound call in the from field on outbound calls via this gateway -->
  <param name="caller-id-in-from" value="false"/>
  <param name="from-domain" value="domain.com"/>
  <param name="extension-in-contact" value="true"/>
  <param name="liberal-dtmf" value="true"/>
  </gateway>
</include>



3.reload the external profile

sofia profile external restart.

4. check the gateway with  below command

sofia status




5. Make a dialplan with gateway


<extension name="domain.com">
    <!-- The following line detects 11 digit outbound calls -->
    <condition field="destination_number" expression="^(\d{11})$">     
      <!-- This sets the outbound gateway as "siptrunk" ,
           which was defined in your OnSIP Trunking user profile 
           as the "gateway name" parameter.                      
           We've also appended the "000" outbound prefix         
           to the dialed number.-->
      <action application="bridge" data="sofia/gateway/onsip-trunk.com/000$1"/>
    </condition>
  </extension>

6. Reload the dialplan xml  in cli reloadxml

7. Make a call it will hit the siptrunk.

Refer: https://support.onsip.com/hc/en-us/articles/203675304-FreeSwitch-Configuration-for-OnSIP-Trunking
 

Friday, 18 November 2016

ERROR[4599]: cdr_csv.c:237 csv_log: Unable to re-open master file /var/log/asterisk//cdr-csv//Master.csv : Read-only file system

ERROR[4599]: cdr_csv.c:237 csv_log: Unable to re-open master file /var/log/asterisk//cdr-csv//Master.csv : Read-only file system

Check the disk space using  df -h if everything is fine try to restart

When suddenly permission issue received try to restart the machine once.
After restart everything works fine it is ok otherwise
do the following

Goautodial/vicidial runs asterisk in root permission only.
You can safely ignore those warnings. To fix them, ran the following and reboot:

1. chkconfig --level 2345 asterisk off
This turns off the default system Asterisk startup scripts which runs Asterisk as user Asterisk (that's why permission denied in /var/lib/asterisk/astdb). The default GOautodial Asterisk startup script is ran automatically if this is disabled.

2. chown asterisk:asterisk /var/lib/asterisk/astdb

Unable to open Asterisk Database.

[Nov 15 15:14:56] WARNING[23509]: db.c:124 dbinit: Unable to open Asterisk database '/var/lib/asterisk/astdb': Permission denied
[Nov 15 15:14:56] WARNING[23509]: db.c:649 ast_db_gettree: Database unavailable

First Check the disk space using df -h . If everything fine try to restart.

When suddenly permission issue received try to restart the machine once.
After restart everything works fine it is ok otherwise
do the following

Goautodial/vicidial runs asterisk in root permission only.
You can safely ignore those warnings. To fix them, ran the following and reboot:

1. chkconfig --level 2345 asterisk off
This turns off the default system Asterisk startup scripts which runs Asterisk as user Asterisk (that's why permission denied in /var/lib/asterisk/astdb). The default GOautodial Asterisk startup script is ran automatically if this is disabled.

2. chown asterisk:asterisk /var/lib/asterisk/astdb

Wednesday, 9 November 2016

Step By Step guide for Vicidial scratch installation with asterisk 1.8 with latest Vicidial svn

Vicidial scratch installation in Centos 6.5 , with asterisk 1.8, latest dahdi and latest SVN version








Steps to install VICIDIAL SETUP

1. Install the CENTOS
2. Install all the dependencies like update and pre requisites
3. asterisk , Dahdi ,libpri installation
4. vicidial installation
5. Final Touch

Step 1. Install the CENTOS

 The Centos 6.X can be download from the following Link
http://wiki.centos.org/Download

Centos 6.X installation steps can be found from following Link
http://www.tecmint.com/centos-6-5-installation-guide-with-screenshots/


Disable the SELINUX

To disable selinx open the below file and change parameter SELINUX to disabled

vi /etc/selinux/config

# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
#       enforcing - SELinux security policy is enforced.
#       permissive - SELinux prints warnings instead of enforcing.
#       disabled - SELinux is fully disabled.
SELINUX=disabled
# SELINUXTYPE= type of policy in use. Possible values are:
#       targeted - Only targeted network daemons are protected.
#       strict - Full SELinux protection.
SELINUXTYPE=targeted # SETLOCALDEFS= Check local definition changes SETLOCALDEFS=0


Stop Firewall/IP tables

iptables -F
service iptables save
service iptables stop


 update the OS

yum -y update 

After doing the changes reboot the machine once

Reboot

Step 2. Install all the dependencies,prerequisites Perl module

Dependencies

yum install gcc gcc-c++ php php-devel php-gd gd-devel php-mbstring php-mcrypt php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc curl curl-devel perl-libwww-perl ImageMagick libxml2 libxml2-devel httpd libpcap libpcap-devel ncurses ncurses-devel screen sox mysql-server mysql-devel ntp kernel-devel mutt


Setup Mysql 

/etc/init.d/mysqld start
mysql_secure_installation  
chkconfig mysqld on

service mysqld stop
cp /etc/my.cnf /etc/my.cnf.original
echo "" > /etc/my.cnf

vi /etc/my.cnf    ; copy the below config to this file.

[mysql.server]
user = mysql
#basedir = /var/lib

[client]
port = 3306
socket = /var/lib/mysql/mysql.sock

[mysqld]
datadir = /var/lib/mysql
#tmpdir = /home/mysql_tmp
socket = /var/lib/mysql/mysql.sock
user = mysql
old_passwords = 0
ft_min_word_len = 3
max_connections = 800
max_allowed_packet = 32M
skip-external-locking

log-error = /var/log/mysqld/mysqld.log

query-cache-type = 1
query-cache-size = 32M

long_query_time = 1
#slow_query_log = 1
#slow_query_log_file = /var/log/mysqld/slow-queries.log

tmp_table_size = 128M
table_cache = 1024

join_buffer_size = 1M
key_buffer = 512M
sort_buffer_size = 6M
read_buffer_size = 4M
read_rnd_buffer_size = 16M
myisam_sort_buffer_size = 64M

max_tmp_tables = 64

thread_cache_size = 8
thread_concurrency = 8

# If using replication, uncomment log-bin below
#log-bin = mysql-bin

[mysqldump]
quick
max_allowed_packet = 16M

[mysql]
no-auto-rehash

[isamchk]
key_buffer = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M

[myisamchk]
key_buffer = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

[mysqld_safe]
#log-error = /var/log/mysqld/mysqld.log
#pid-file = /var/run/mysqld/mysqld.pid


mkdir /var/log/mysqld
mv /var/log/mysqld.log /var/log/mysqld/mysqld.log
touch /var/log/mysqld/slow-queries.log
chown -R mysql:mysql /var/log/mysqld
service mysqld restart

Update the Timezone

Configure the system time and update it.
Customize the timezone. Take a look inside /usr/share/zoneinfo/ for all possible values.
rm /etc/localtime
ln -sf /usr/share/zoneinfo/Asia/Kolkata /etc/localtime
rdate -s nist1-ny.ustiming.org

Setup CPAN and install libraries
yum install perl-CPAN
yum install perl-YAML
perl -MCPAN -e shell     ; just press enter for all the questions.

You will then go through CPAN setup, just hit ENTER for most prompts except
for the mirrors list, you will want to select at least 4 mirrors
yes for manual configuration
enter for the next 18 prompts
for the "make install" option, it's a good idea to add UNINST=1
enter for the next 4 prompts
select your continent and country
select a few cpan mirrors
enter for the next 2 prompts
Once you see the cpan> prompt you can begin installing modules.

install CPAN::Meta::Requirements
install CPAN
reload cpan
install YAML
install MD5
install Digest::MD5
install Digest::SHA1
install readline
install Bundle::CPAN
reload cpan
install DBI
force install DBD::mysql
install Net::Telnet
install Time::HiRes
install Net::Server
install Switch
install Mail::Sendmail
install Unicode::Map
install Jcode
install Spreadsheet::WriteExcel
install OLE::Storage_Lite
install Proc::ProcessTable
install IO::Scalar
install Spreadsheet::ParseExcel
install Curses
install Getopt::Long
install Net::Domain
install Term::ReadKey
install Term::ANSIColor
install Spreadsheet::XLSX
install Spreadsheet::Read
install LWP::UserAgent
install HTML::Entities
install HTML::Strip
install HTML::FormatText
install HTML::TreeBuilder
install Time::Local
install MIME::Decoder
install Mail::POP3Client
install Mail::IMAPClient
install Mail::Message
install IO::Socket::SSL
install MIME::Base64
install MIME::QuotedPrint
install Crypt::Eksblowfish::Bcrypt
quit

In the end, I usually run all these commands once again to make sure its all installed. and make sure you get following output for each module

cpan> install Mail::Message
Mail::Message is up to date (2.115).

                                                                                                                                                                        cpan> install MIME::QuotedPrint 
MIME::QuotedPrint is up to date (3.13).

Installing the Asterisk-Perl module
cd /usr/src
wget http://download.vicidial.com/required-apps/asterisk-perl-0.08.tar.gz
tar -zxf asterisk-perl-0.08.tar.gz
cd asterisk-perl-0.08
perl Makefile.PL
make all
make install

Installing additional software from source

Next, you will download, compile and install the following software.
lame
ttyload
iftop
mtop
mytop
htop
sipsak
ploticus 

LAME
LAME is an MP3 encoder used to convert audio files from WAV to MP3. Some prefer GSM usually, but others have standardized on MP3 so you would need this utility to be loaded to use that option.
cd /usr/src
wget http://downloads.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz
tar -zxf lame-3.99.5.tar.gz
cd lame-3.99.5
./configure
make
make install

SOX:
SoX is a cross-platform command line utility that can convert various formats of computer audio files in to other formats.
cd /usr/src
wget http://downloads.sourceforge.net/project/sox/sox/14.4.1/sox-14.4.1.tar.gz
tar -zxf sox-14.4.1.tar.gz
cd sox-14.4.1
./configure
make -s
make install
TTYLOAD:
ttyload is a simple terminal application that shows the processor load in a graphical time-based scrolling graph. I use it to view how loaded the system is and it visualizes load spikes very well.
 cd /usr/src
wget http://download.vicidial.com/required-apps/ttyload-0.5.tar.gz
tar -xvzf ttyload-0.5.tar.gz
cd ttyload-0.5
nano ttyload.h

   insert this #include directive just above the #define directives, then save and close the ttyload.h file
   #include <time.h>

make
ln -s /usr/src/ttyload-0.5/ttyload /usr/bin/ttyload
IFTOP:
iftop is a good console bandwidth visualization tool that shows you active connections, where they are going to/from and how much of your precious bandwidth they are using.
cd /usr/src
wget http://www.ex-parrot.com/~pdw/iftop/download/iftop-0.17.tar.gz
tar -zxf iftop-0.17.tar.gz
cd iftop-0.17
./configure
make
make install

MYTOP:
mytop is is an optional utility for monitoring the threads and overall performance of mysqlNote: the root mysql password must be blank before installing this
cd /usr/src
wget http://jeremy.zawodny.com/mysql/mytop/mytop-1.6.tar.gz
tar -zxf mytop-1.6.tar.gz
cd mytop-1.6
perl Makefile.PL
make
make test
make install

HTOP:
htop is an interactive process viewer for Linux
cd /usr/src
wget http://downloads.sourceforge.net/project/htop/htop/1.0.2/htop-1.0.2.tar.gz
tar -zxf htop-1.0.2.tar.gz
cd htop-1.0.2
./configure
make
make install

SIPSAK:
sipsak is an optional utility that VICIDIAL can use to send messages to an agent's SIP-based phone(like the Snom 320) to display text on their LCD screen.
cd /usr/src
wget http://download.vicidial.com/required-apps/sipsak-0.9.6-1.tar.gz
tar -zxf sipsak-0.9.6-1.tar.gz
cd sipsak-0.9.6
./configure
make
make install
/usr/local/bin/sipsak --version
PLOTICUS:
ploticus is a free graph creation package that allows you to create line graphs within PNG files simply by creating a config file and a data file. ViciDial uses this package to generate server performance graphs that can be displayed real-time within the ViciDial reports page.

cd /usr/src
wget http://downloads.sourceforge.net/project/ploticus/ploticus/2.42/ploticus242_src.tar.gz
tar -zxf ploticus242_src.tar.gz
cd ploticus242/src/
make clean
make
make install
mkdir -p /var/www/html/vicidial/ploticus/
cp pl /var/www/html/vicidial/ploticus/
eAccelerator :
cd /usr/src
wget http://downloads.sourceforge.net/project/eaccelerator/eaccelerator/eAccelerator%200.9.6.1/eaccelerator-0.9.6.1.zip
unzip eaccelerator-0.9.6.1.zip
cd eaccelerator-0.9.6.1
export PHP_PREFIX="/usr"
$PHP_PREFIX/bin/phpize
./configure --enable-eaccelerator=shared --with-php-config=$PHP_PREFIX/bin/php-config
make
make install


Configure php.ini
vi /etc/php.ini
Change the following values in your php.ini file.
Customize the date.timezone so you don't end up with a bunch of php errors complaining about it not being defined
error_reporting  =  E_ALL & ~E_NOTICE
memory_limit = 48M
short_open_tag = On
max_execution_time = 330
max_input_time = 360
post_max_size = 48M
upload_max_filesize = 42M
default_socket_timeout = 360
date.timezone = Asia/Kolkata
Add the following lines to the dynamic extensions section of php.ini:        
Note: For CentOS 32-bit, use this below: zend_extension="/usr/lib/php/modules/eaccelerator.so"
;Dynamic Extensions
zend_extension="/usr/lib64/php/modules/eaccelerator.so"
;For CentOS 32-bit: zend_extension="/usr/lib/php/modules/eaccelerator.so"
eaccelerator.shm_size="48"
eaccelerator.cache_dir="/tmp/eaccelerator"
eaccelerator.enable="1"
eaccelerator.optimizer="1"
eaccelerator.check_mtime="1"
eaccelerator.debug="0"
eaccelerator.filter=""
eaccelerator.shm_max="0"
eaccelerator.shm_ttl="0"
eaccelerator.shm_prune_period="0"
eaccelerator.shm_only="0"
eaccelerator.compress="1"
eaccelerator.compress_level="9"

mkdir /tmp/eaccelerator
chmod 0777 /tmp/eaccelerator
php –v

Editing the Apache config file
vi /etc/httpd/conf/httpd.conf
To disable logging, change:
CustomLog logs/access_log common
        to this: 
CustomLog /dev/null common
To enable web browsing of Recordings on Asterisk server, add the below line  at last line of httpd.conf
Alias /RECORDINGS/ "/var/spool/asterisk/monitorDONE/"

<Directory "/var/spool/asterisk/monitorDONE">
    Options Indexes MultiViews
    AllowOverride None
    Order allow,deny
    Allow from all
        <files *.mp3>
            Forcetype application/forcedownload
        </files>
</Directory>


Restart the Apache web server to apply the changes
service httpd restart
chkconfig httpd on
Installing Asterisk
Any time you upgrade the Linux kernel you must recompile/install dahdi for the new kernel.
Asterisk must be compiled with dahdi support.
Note: The install MUST be done in the following order:
Minor note: dahdi-linux-complete-current.tar.gz and libpri-1.4-current.tar.gz may contain an updated version than what I am currently using, therefore the directory names may be different than shown below.
mkdir /usr/src/asterisk
cd /usr/src/asterisk
wget http://download.vicidial.com/required-apps/asterisk-1.8.23.0-vici.tar.gz
wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz
wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-1.4-current.tar.gz
tar -zxf asterisk-1.8.23.0-vici.tar.gz
tar -zxf dahdi-linux-complete-current.tar.gz
tar -zxf libpri-1.4-current.tar.gz
cd ../dahdi-linux-complete-2.9.1.1+2.9.1
make clean
make all
make install
make config
cd ../../libpri-1.4.15
make clean
make
make install
cd ../asterisk-1.8.23.0
./configure
make clean
make
make install
make samples

cp /usr/src/asterisk/asterisk-1.8.23.0/contrib/init.d/rc.redhat.asterisk /etc/init.d/asterisk
chkconfig asterisk on
service dahdi restart
chkconfig dahdi on
modprobe dahdi
Installing audio files
Download the audio files
cd /usr/src
wget http://downloads.digium.com/pub/telephony/sounds/asterisk-core-sounds-en-ulaw-current.tar.gz
wget http://downloads.digium.com/pub/telephony/sounds/asterisk-core-sounds-en-wav-current.tar.gz
wget http://downloads.digium.com/pub/telephony/sounds/asterisk-core-sounds-en-gsm-current.tar.gz
wget http://downloads.digium.com/pub/telephony/sounds/asterisk-extra-sounds-en-ulaw-current.tar.gz
wget http://downloads.digium.com/pub/telephony/sounds/asterisk-extra-sounds-en-wav-current.tar.gz
wget http://downloads.digium.com/pub/telephony/sounds/asterisk-extra-sounds-en-gsm-current.tar.gz
wget http://downloads.asterisk.org/pub/telephony/sounds/asterisk-moh-opsound-gsm-current.tar.gz
wget http://downloads.asterisk.org/pub/telephony/sounds/asterisk-moh-opsound-ulaw-current.tar.gz
wget http://downloads.asterisk.org/pub/telephony/sounds/asterisk-moh-opsound-wav-current.tar.gz
Place the audio files in their proper places
cd /var/lib/asterisk/sounds
tar -zxf /usr/src/asterisk-core-sounds-en-gsm-current.tar.gz
tar -zxf /usr/src/asterisk-core-sounds-en-ulaw-current.tar.gz
tar -zxf /usr/src/asterisk-core-sounds-en-wav-current.tar.gz
tar -zxf /usr/src/asterisk-extra-sounds-en-gsm-current.tar.gz
tar -zxf /usr/src/asterisk-extra-sounds-en-ulaw-current.tar.gz
tar -zxf /usr/src/asterisk-extra-sounds-en-wav-current.tar.gz

mkdir /var/lib/asterisk/mohmp3
mkdir /var/lib/asterisk/quiet-mp3
ln -s /var/lib/asterisk/mohmp3 /var/lib/asterisk/default

cd /var/lib/asterisk/mohmp3
tar -zxf /usr/src/asterisk-moh-opsound-gsm-current.tar.gz
tar -zxf /usr/src/asterisk-moh-opsound-ulaw-current.tar.gz
tar -zxf /usr/src/asterisk-moh-opsound-wav-current.tar.gz
rm -f CHANGES*
rm -f LICENSE*
rm -f CREDITS*

cd /var/lib/asterisk/moh
rm -f CHANGES*
rm -f LICENSE*
rm -f CREDITS*

cd /var/lib/asterisk/sounds
rm -f CHANGES*
rm -f LICENSE*
rm -f CREDITS*


cd /var/lib/asterisk/quiet-mp3
sox ../mohmp3/macroform-cold_day.wav macroform-cold_day.wav vol 0.25
sox ../mohmp3/macroform-cold_day.gsm macroform-cold_day.gsm vol 0.25
sox -t ul -r 8000 -c 1 ../mohmp3/macroform-cold_day.ulaw -t ul macroform-cold_day.ulaw vol 0.25
sox ../mohmp3/macroform-robot_dity.wav macroform-robot_dity.wav vol 0.25
sox ../mohmp3/macroform-robot_dity.gsm macroform-robot_dity.gsm vol 0.25
sox -t ul -r 8000 -c 1 ../mohmp3/macroform-robot_dity.ulaw -t ul macroform-robot_dity.ulaw vol 0.25
sox ../mohmp3/macroform-the_simplicity.wav macroform-the_simplicity.wav vol 0.25
sox ../mohmp3/macroform-the_simplicity.gsm macroform-the_simplicity.gsm vol 0.25
sox -t ul -r 8000 -c 1 ../mohmp3/macroform-the_simplicity.ulaw -t ul macroform-the_simplicity.ulaw vol 0.25
sox ../mohmp3/reno_project-system.wav reno_project-system.wav vol 0.25
sox ../mohmp3/reno_project-system.gsm reno_project-system.gsm vol 0.25
sox -t ul -r 8000 -c 1 ../mohmp3/reno_project-system.ulaw -t ul reno_project-system.ulaw vol 0.25
sox ../mohmp3/manolo_camp-morning_coffee.wav manolo_camp-morning_coffee.wav vol 0.25
sox ../mohmp3/manolo_camp-morning_coffee.gsm manolo_camp-morning_coffee.gsm vol 0.25
sox -t ul -r 8000 -c 1 ../mohmp3/manolo_camp-morning_coffee.ulaw -t ul manolo_camp-morning_coffee.ulaw vol 0.25
Installing astGUIclient (ViciDial)
First, login to mysql to create the database, add a couple users and assign privileges.
mysql -u root –p
Enter these MySQL commands:
CREATE DATABASE `asterisk` DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
CREATE USER 'cron'@'localhost' IDENTIFIED BY '1234';
GRANT SELECT,INSERT,UPDATE,DELETE,LOCK TABLES on asterisk.* TO cron@'%' IDENTIFIED BY '1234';
GRANT SELECT,INSERT,UPDATE,DELETE,LOCK TABLES on asterisk.* TO cron@localhost IDENTIFIED BY '1234';
GRANT RELOAD ON *.* TO cron@'%';
GRANT RELOAD ON *.* TO cron@localhost;
flush privileges;
quit
I am going to install the latest 2.x SVN trunk which happens to be version 2.8 at the time of writing this guide
mkdir /usr/src/astguiclient
cd /usr/src/astguiclient
svn checkout svn://svn.eflo.net:3690/agc_2-X/trunk
cd trunk
perl install.pl
You will have to define various things like IP address of the server
It will also ask you where is the web root, use /var/www/html
Leave the other login settings as-is unless you already know how to update the database and other asterisk config files.
Import sample data
Login to mysql to run some commands
mysql -u root -p
Enter these MySQL commands:
mysql>SET GLOBAL connect_timeout=60;
mysql>use asterisk;

mysql>\. /usr/src/astguiclient/trunk/extras/MySQL_AST_CREATE_tables.sql
mysql>\. /usr/src/astguiclient/trunk/extras/first_server_install.sql
mysql>\. /usr/src/astguiclient/trunk/extras/sip-iax_phones.sql

mysql>quit
In the Linux terminal, enter these commands
/usr/share/astguiclient /ADMIN_area_code_populate.pl
Final Adjustments
Make several entries in the rc.local of your system.
vi /etc/rc.d/rc.local
On a new system I just overwrite the file with the following:
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
# OPTIONAL enable ip_relay(for same-machine trunking and blind monitoring)
/usr/share/astguiclient/ip_relay/relay_control start 2>/dev/null 1>&2
# Disable console blanking and powersaving
/usr/bin/setterm -blank
/usr/bin/setterm -powersave off
/usr/bin/setterm -powerdown
### start up the MySQL server
/etc/init.d/mysqld start
### start up the apache web server
/etc/init.d/httpd start
### roll the Asterisk logs upon reboot
/usr/share/astguiclient/ADMIN_restart_roll_logs.pl
### clear the server-related records from the database
/usr/share/astguiclient/AST_reset_mysql_vars.pl
### load dahdi drivers
modprobe dahdi
/usr/sbin/dahdi_cfg -vvvvvvvvvvvvv
### sleep for 20 seconds before launching Asterisk
sleep 20
### start up asterisk
/usr/share/astguiclient/start_asterisk_boot.pl

Make several entries in the crontab of your system:
crontab –e

### recording mixing/compressing/ftping scripts
#0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 * * * * /usr/share/astguiclient/AST_CRON_audio_1_move_mix.pl
0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 * * * * /usr/share/astguiclient/AST_CRON_audio_1_move_mix.pl --MIX
0,3,6,9,12,15,18,21,24,27,30,33,36,39,42,45,48,51,54,57 * * * * /usr/share/astguiclient/AST_CRON_audio_1_move_VDonly.pl
1,4,7,10,13,16,19,22,25,28,31,34,37,40,43,46,49,52,55,58 * * * * /usr/share/astguiclient/AST_CRON_audio_2_compress.pl –-MP3
#2,5,8,11,14,17,20,23,26,29,32,35,38,41,44,47,50,53,56,59 * * * * /usr/share/astguiclient/AST_CRON_audio_3_ftp.pl --GSM
### keepalive script for astguiclient processes
* * * * * /usr/share/astguiclient/ADMIN_keepalive_ALL.pl --cu3way
### kill Hangup script for Asterisk updaters
* * * * * /usr/share/astguiclient/AST_manager_kill_hung_congested.pl
### updater for voicemail
* * * * * /usr/share/astguiclient/AST_vm_update.pl
### updater for conference validator
* * * * * /usr/share/astguiclient/AST_conf_update.pl
### flush queue DB table every hour for entries older than 1 hour
11 * * * * /usr/share/astguiclient/AST_flush_DBqueue.pl -q
### fix the vicidial_agent_log once every hour and the full day run at night
33 * * * * /usr/share/astguiclient/AST_cleanup_agent_log.pl
50 0 * * * /usr/share/astguiclient/AST_cleanup_agent_log.pl --last-24hours
## uncomment below if using QueueMetrics
#*/5 * * * * /usr/share/astguiclient/AST_cleanup_agent_log.pl --only-qm-live-call-check
## uncomment below if using Vtiger
#1 1 * * * /usr/share/astguiclient/Vtiger_optimize_all_tables.pl --quiet
### updater for VICIDIAL hopper
* * * * * /usr/share/astguiclient/AST_VDhopper.pl -q
### adjust the GMT offset for the leads in the vicidial_list table
1 1,7 * * * /usr/share/astguiclient/ADMIN_adjust_GMTnow_on_leads.pl --debug
### reset several temporary-info tables in the database
2 1 * * * /usr/share/astguiclient/AST_reset_mysql_vars.pl
### optimize the database tables within the asterisk database
3 1 * * * /usr/share/astguiclient/AST_DB_optimize.pl
## adjust time on the server with ntp
30 * * * * /usr/sbin/ntpdate -u pool.ntp.org 2>/dev/null 1>&2
### VICIDIAL agent time log weekly and daily summary report generation
2 0 * * 0 /usr/share/astguiclient/AST_agent_week.pl
22 0 * * * /usr/share/astguiclient/AST_agent_day.pl
### VICIDIAL campaign export scripts (OPTIONAL)
#32 0 * * * /usr/share/astguiclient/AST_VDsales_export.pl
#42 0 * * * /usr/share/astguiclient/AST_sourceID_summary_export.pl
### remove old recordings more than 7 days old
#24 0 * * * /usr/bin/find /var/spool/asterisk/monitorDONE -maxdepth 2 -type f -mtime +7 -print | xargs rm -f
### roll logs monthly on high-volume dialing systems
#30 1 1 * * /usr/share/astguiclient/ADMIN_archive_log_tables.pl
### remove old vicidial logs and asterisk logs more than 2 days old
28 0 * * * /usr/bin/find /var/log/astguiclient -maxdepth 1 -type f -mtime +2 -print | xargs rm -f
29 0 * * * /usr/bin/find /var/log/asterisk -maxdepth 3 -type f -mtime +2 -print | xargs rm -f
30 0 * * * /usr/bin/find / -maxdepth 1 -name "screenlog.0*" -mtime +4 -print | xargs rm -f
### cleanup of the scheduled callback records
25 0 * * * /usr/share/astguiclient/AST_DB_dead_cb_purge.pl --purge-non-cb -q
### GMT adjust script - uncomment to enable
#45 0 * * * /usr/share/astguiclient/ADMIN_adjust_GMTnow_on_leads.pl --list-settings
### Dialer Inventory Report
1 7 * * * /usr/share/astguiclient/AST_dialer_inventory_snapshot.pl -q --override-24hours
### inbound email parser
* * * * * /usr/share/astguiclient/AST_inbound_email_parser.pl

Run this perl script to update the server_ip fields in the asterisk tables (copy the command as- it is)
/usr/share/astguiclient/ADMIN_update_server_ip.pl --old-server_ip=10.10.10.15
Update music on hold configuration
vi /etc/asterisk/musiconhold.conf            ; remove the word old
;
; Music on Hold -- Sample Configuration
;
[default]
mode=files
directory=/var/lib/asterisk/mohmp3
[quiet]
mode=files
directory=/var/lib/asterisk/quiet-mp3
#include musiconhold-vicidial.conf
Lastly, reboot the machine
reboot
Diagnostics
After reboot, check your logs for any errors, make sure asterisk is up and running.
Be proactive and look for problems before you start configuring vicidial.
Run these commands to view log files:
tail -f -n 50 /var/log/asterisk/messages
tail -f -n 50 /var/log/messages
more /var/log/dmesg
tail -f -n 40 /etc/httpd/logs/error_log
tail -f -n 40 /var/log/maillog
tail -f -n 40 /var/log/cron
Run this command:
screen -ls
The output should look similar to this: 9or 10 sockets
There are screens on:
        2307.ASTVDauto  (Detached)
        2147.astshell20140626063212     (Detached)
        2105.ASTVDadapt (Detached)
        2304.ASTlisten  (Detached)
        2301.ASTsend    (Detached)
        2153.asterisk   (Detached)
        2109.ASTconf3way        (Detached)
        2107.ASTfastlog (Detached)
        2310.ASTVDremote        (Detached)
        2298.ASTupdate  (Detached)
10 Sockets in /var/run/screen/S-root.
Start using vicidial
Login to vicidial and configure it.
Add users, campaigns, in-group, DID's, server, etc....
Go to: http://youripaddress/vicidial/admin.php

The default username is: 6666 and the password is: 1234

Trouble shooting:
1. IF default modules are not loaded then try to install the other version of asterisk
http://downloads.asterisk.org/pub/telephony/asterisk/releases/asterisk-1.8.23.0.tar.gz

2. Failed to start dahdi.service: Unit dahdi.service failed to load: No such file or directory.
yum install kernel-devel
There is an issue in the 2.11 releases where "make config" no longer functions as expected in DAHDI tools.

For a temporary work around either install a version older than 2.11.0 or, in dahdi tools, run "make install-config"
dmesg

dahdi_genconf -v
dahdi_cfg -v

/etc/init.d/dahdi restart

3.  Asterisk not reloading
asterisk is not reloaded automatically whenever there is a change in Vicidial gui.
check the screen
screen -ls
There are screens on:
4467.ASTVDadapt (Detached)
4588.ASTsend (Detached)
3430.astshell20110326150232 (Detached)
4591.ASTlisten (Detached)
3435.asterisk (Detached)
3558.ASTfastlog (Detached)
4594.ASTVDauto (Detached)
4597.ASTVDremote (Detached)
4455.ASTupdate (Detached)
9 Sockets in /var/run/screen/S-root.

If it is ok. then check the below things

check the /etc/rc3.d/ directory for S90asterisk file. If it exists try to move to K90asterisk
cd /etc/rc3.d/
ls
 mv S90asterisk K90asterisk

Explanation:
I had a startup script S90asterisk in my /etc/rc3.d/ directory which was starting Asterisk on boot. I also had a "sleep 20; start_asterisk_boot.pl" in my /etc/rc.local which starts Asterisk the Vicidial way. 

All I did is disable the S90asterisk by renaming to K90asterisk. So now, this script does not start Asterisk on boot, but instead the one in rc.local does. It also starts up all the screens in the correct manner. 

For all who don't know how to troubleshoot with screen (like I did not): 
The "screen -r" shows all current screen sessions. "screen -x ID" fires up a screen. You should see the Asterisk console like in "asterisk -r" when you log on to the Asterisk screen session. 


I am able to see the Asterisk console on its screen session. Any changes made to the configuration are being reflected in the config files AND Asterisk is being reloaded every time a change is made.