miércoles, 3 de octubre de 2012

Instalación FreePBX en Debian



Instalación FreePBX

Una vez instalado asterisk siguiendo el siguiente tutorial

Procedemos de la siguiente manera para instalar freePBX2.8

Preparando el Asterisk Manager


~#vim /etc/asterisk/manager.conf

Cambiar la linea 25 de
enabled = no
por:
enabled = yes

Agregar esto al final del archivo

[aabbccAABBCC]
secret = ddeeffDDEEFF
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

donde aabbccAABBCC es el usuario
y ddeeffDDEEFF es su password.

Preparando usuario y grupo

addgroup asterisk

useradd -g asterisk -c "Asterisk PBX" -d /var/lib/asterisk asterisk

Creamos PID path

mkdir -p /var/run/asterisk


vim /etc/asterisk/asterisk.conf
cambiar la linea:
astrundir => /var/run
por:
astrundir => /var/run/asterisk


chown asterisk.asterisk /var/run/asterisk

Cambiamos los permisos

chown -Rf asterisk.asterisk /var/log/asterisk

Instalamos Apache y Mysql

apt-get install apache2
apt-get install libapache2-mod-php5
apt-get install mysql-common
apt-get install mysql-server-5.0

password

apt-get install mysql-client-5.0
apt-get install php5-mysql
apt-get install php-pear
apt-get install php-db
apt-get install php5-gd

Configuración PHP

vim /etc/php5/apache2/php.ini
cambiamos esta linea:
magic_quotes_gpc = On
por:
magic_quotes_gpc = Off

Configuración web server

vim /etc/apache2/envvars

cambiar las lineas:
export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

por:
export APACHE_RUN_USER=asterisk
export APACHE_RUN_GROUP=asterisk

Reiniciamos el servicio de Apache:
/etc/init.d/apache2 restart

Download y descoprimir FreePBX



/usr/src# wget http://mirror.freepbx.org/freepbx-2.8.0.tar.gz

/usr/src# tar xzvf freepbx-2.8.0.tar.gz

/usr/src# cd  freepbx-2.8.0

Creamos la base de datos para asterisk

mysql –p
Enter password:

mysql> create database asterisk;

mysql> create database asteriskcdrdb;

mysql> exit

Ejecutar lo siguiente desde el path /usr/src/freepbx-2.8.0

mysql -p asterisk < SQL/newinstall.sql

mysql -p asteriskcdrdb < SQL/cdr_mysql_table.sql

Primera ejecucion de Asterisk

asterisk -U asterisk -G asterisk –vvvc


Instalacion de  FreePBX



Ejecutar lo siguiente desde el path /usr/src/freepbx-2.8.0


/usr/src/freepbx-2.8.0# ./install_amp

Enter your USERNAME to connect to the 'asterisk' database:
 [asteriskuser] root
Enter your PASSWORD to connect to the ‘asterisk’ database: el passw que colocamos en la base
Enter the hostname of the ‘asterisk’ database: 
Enter a USERNAME to connect to the Asterisk Manager interface: aabbccAABBCC’
Enter a PASSWORD to connect to the Asterisk Manager interface: ddeeffDDEEFF’
Enter the path to use for your AMP web root: /var/www
Enter the IP ADDRESS or hostname used to access the AMP web-admin: ipde mi asterisk XX.XX.XX.XX
Enter a PASSWORD to perform call transfers with the Flash Operator Panel:
[passw0rd]
Use simple Extensions [extensions] admin or separate Devices and Users [deviceanduser]? directory in which to store AMP executable scripts:
[/var/lib/asterisk/bin]
Enter directory in which to store super-user scripts:
 [/usr/local/sbin]



rm /etc/asterisk/sip_notify.conf


Por ultimo reiniciar apache

/etc/init.d/apache2 restart


Para iniciar asterisk la primera vez

asterisk - vvvvgc



Usuario FreePBX

Para que FreePBX pida usuario al inicio

Ir al archivo /etc/amportal.conf y modificar lo siguiente:

vim /etc/amportal.conf

AUTHTYPE=database

Donde dice no reemplazarlo por database

El usuario y contraseña son los que se encuentran en las variables AMPDBUSER/AMPDBPASS

jueves, 7 de junio de 2012

CDR-STATS en Asterisk

Prerequisitos tener instalado asterisk Addons, el tuto de como instalarlo esta en este mismo blog
http://it-yoda.blogspot.com.ar/2012/01/instalacion-de-asterisk-16.html

apt-get -y install python-setuptools python-dev build-essential
apt-get -y install libapache2-mod-python libapache2-mod-wsgi
easy_install pip
easy_install virtualenv

Instalamos MySQL y establecemos nuestra contraseña para el usuario root de la base de datos.

apt-get -y install mysql-server libmysqlclient-dev
apt-get -y install git-core
apt-get install mercurial
mkdir /usr/share/django_app/
cd /usr/src/
wget --no-check-certificate https://github.com/Star2Billing/cdr-stats/tarball/v1.4.0
mv v1.4.0 Star2Billing-cdr-stats-v1.4.0.tar.gz
tar xvzf Star2Billing-cdr-stats-*.tar.gz
rm -rf Star2Billing-cdr-stats-*.tar.gz 
mv cdr-stats cdr-stats-$DATETIME
mkdir /usr/share/django_app/cdr_stats
mv Star2Billing-cdr-stats-* cdr-stats
mv /usr/share/django_app/cdr_stats archive_cdr-stats-$DATETIME
ln -s /usr/src/cdr-stats/cdr_stats /usr/share/django_app/cdr_stats


pip install -r /usr/share/django_app/cdr_stats/requirements.txt
RANDPASSW=`</dev/urandom tr -dc A-Za-z0-9| (head -c $1 > /dev/null 2>&1 || head -c 50)`
sed -i "s/^SECRET_KEY.*/SECRET_KEY = \'$RANDPASSW\'/g" /usr/share/django_app/cdr_stats/settings.py
sed -i "s/DEBUG = True/DEBUG = False/g" /usr/share/django_app/cdr_stats/settings.py
sed -i "s/TEMPLATE_DEBUG = DEBUG/TEMPLATE_DEBUG = False/g" /usr/share/django_app/cdr_stats/settings.py

# Setup settings.py
sed -i "s/backends.sqlite3/backends.mysql/" /usr/share/django_app/cdr_stats/settings.py
sed -i "s/.*'NAME'/ 'NAME': 'cdrstats',#/" /usr/share/django_app/cdr_stats/settings.py
sed -i "/'USER'/s/''/'root'/" /usr/share/django_app/cdr_stats/settings.py
sed -i "/'PASSWORD'/s/''/'mi_password_root'/" /usr/share/django_app/cdr_stats/settings.py
sed -i "/'HOST'/s/''/'localhost'/" /usr/share/django_app/cdr_stats/settings.py
sed -i "/'PORT'/s/''/'3306'/" /usr/share/django_app/cdr_stats/settings.py
mysql -u root -p
Enter password:mi_password_root

#Creamos la base de datos

mysql> CREATE DATABASE cdrstats;
GRANT SELECT,INSERT ON cdrstats.* TO root@localhost IDENTIFIED BY 'mi_password_root';


mysql>USE cdrstats;
Database changed
mysql> CREATE TABLE cdr (
    ->   calldate datetime NOT NULL default '0000-00-00 00:00:00',
    ->   clid varchar(80) NOT NULL default '',
    ->   src varchar(80) NOT NULL default '',
    ->   dst varchar(80) NOT NULL default '',
    ->   dcontext varchar(80) NOT NULL default '',
    ->   channel varchar(80) NOT NULL default '',
    ->   dstchannel varchar(80) NOT NULL default '',
    ->   lastapp varchar(80) NOT NULL default '',
    ->   lastdata varchar(80) NOT NULL default '',
    ->   duration int(11) NOT NULL default '0',
    ->   billsec int(11) NOT NULL default '0',
    ->   disposition varchar(45) NOT NULL default '',
    ->   amaflags int(11) NOT NULL default '0',
    ->   accountcode varchar(20) NOT NULL default '',
    ->   uniqueid varchar(32) NOT NULL default '',
    ->   userfield varchar(255) NOT NULL default ''
    -> );
Query OK, 0 rows affected (0.03 sec)
quit 
python manage.py syncdb


#Collect static files from apps and other locations in a single location.
python manage.py collectstatic -l --noinput

#preparamos el Apache y cargamos la configuracion en el archivo cdr-stats.conf


echo '
Listen *:9000

<VirtualHost *:9000>
DocumentRoot /usr/share/django_app/cdr_stats/
ErrorLog /var/log/err-cdr-stats.log
LogLevel warn

WSGIPassAuthorization On
WSGIDaemonProcess cdr_stats user=www-data user=www-data threads=25
WSGIProcessGroup cdr_stats
WSGIScriptAlias / /usr/share/django_app/cdr_stats/django.wsgi

<Directory /usr/share/django_app/cdr_stats>
Order deny,allow
Allow from all
</Directory>

</VirtualHost>


' > /etc/apache2/sites-enabled/cdr-stats.conf

#corregimos el archvode arriba
sed -i "s/@/'/g" /etc/apache2/sites-enabled/cdr-stats.conf

#asignamos permisos en python-egg
mkdir /usr/share/django_app/cdr_stats/.python-eggs
chmod 777 /usr/share/django_app/cdr_stats/.python-eggs


chown -R www-data.www-data /usr/share/django_app/cdr_stats/database/
#Reiniciamos el servicio de Apache
service apache2 restart

==========================================

Como ya dijimos en los prerequisitos que tenemos que tener  instalado el modulo cdr_addon_mysql, presente en los addons de Asterisk, es preciso indicar que se utilizara el campo uniqueid, este de manera predeterminada no viene activo cuando trabajamos con MySQL al guardar el CDR, así que debemos agregar la siguiente linea en el archivo Makefile que se encuentra de la carpeta de asterisk-addons-* y despues de esto compilar e instalar.
colocar en el archivo Makefile que se encuentra en /usr/src/asterisk-addons-*/Makefile
#agregar al final la siguiente línea tal como está


#Esta opcion es para Asterisk 1.4.18 o anterior

ASTCFLAGS+=-DMYSQL_LOGUNIQUEID  
# sino utilizar esta linea
CFLAGS+=-DMYSQL_LOGUNIQUEID


#Luego en /usr/src/asterisk-addons-*/ compilamos

make clean
./configure
make
make install


# y esta otra linea en el  /usr/src/asterisk-addons-*/cdr/cdr_addon_mysql.c :

#define MYSQL_LOGUNIQUEID

========================
Especificamos los parametros de conexión en /etc/asterisk/cdr_mysql.conf


[global]
hostname=localhost
dbname=cdrstats
table=cdr
password=mi_password_root
user=root
port=3306
loguniqueid=yes
userfield=1
===================
# verificamos que se haya cargado el módulo de mysql para asterisk
asterisk -rvvvv
asteriskpbx*CLI> module show like mysql
# y debería mostrar algo como lo siguiente
Module                         Description                              Use Count
cdr_addon_mysql.so             MySQL CDR Backend                        0
app_addon_sql_mysql.so         Simple Mysql Interface                   0
res_config_mysql.so            MySQL RealTime Configuration Driver      0
3
modules loadedI>
#ahora vemos el status de la conexión de MySQL
asteriskpbx*CLI> cdr mysql status
# mostrara algo como lo siguiente
Connected to cdrstats@localhost, port 3306 using table cdr for 1 hours, 1 minutes, 0 seconds.
  Wrote 1 records since last restart.
    -- Registered IAX2 '300' (AUTHENTICATED) at 127.0.0.1:32768
#Si dice Not Connected entonces verificar los parámetros de conexión a la base de datos e igual checar que la base de datos esté dada de alta.
#salimos
asteriskpbx*CLI> exit

#Checamos el registro de la base de datos
mysql -u root -p 
mi_password_root
mysql> select * from cdr;
+---------------------+-------------+-----+--------+-----------+------------------+
| calldate            | clid        | src | dst    | dcontext  | channel
+---------------------+-------------+-----+--------+-----------+------------------+
| 2012-07-06 21:36:44 | "1110" <Soporte > | 1110   |
+---------------------+-------------+-----+--------+-----------+------------------+
1
row in set (0.00 sec)
  ============


jueves, 19 de abril de 2012

Servidor DHCP en debian


Para instalar el servidor DHCP, ejecutamos el siguiente comando:

# apt-get install dhcp3-server

Hacemos un backup de nuestro archivo de configuración original para esto copiamos el archivo /etc/dhcp3/dhcpd.conf a /etc/dhcp3/dhcpd.conf.ori.

#cp /etc/dhcp3/dhcpd.conf /etc/dhcp3/dhcpd.conf.ori

Borramos el archivo dhcpd.conf y lo volvemos a crear vacio.

#rm etc/dhcp3/dhcpd.conf
#vim etc/dhcp3/dhcpd.conf

Editamos el archivo y colocamos los parámetros de nuestra red.

authoritative;
subnet 10.5.0.0 netmask 255.255.0.0 {
   range 10.5.100.1 10.5.120.254;
   option domain-name-servers 10.5.0.17;
   option domain-name "mired.interna";
   option routers 10.5.0.1;
   option broadcast-address 10.5.255.255;
   default-lease-time 600000;
   max-lease-time 720000;
}

Una vez que guardamos los cambios en el archivo /etc/dhcp3/dhcpd.conf.

Restarteamos el servicio

# /etc/init.d/dhcp3-server restart

La configuración anterior es para nuestra red 10.5.0.0/24 donde dara IPs automáticas con el rango 10.5.100.1 10.5.120.254.
El nombre del dominio es mired.interna. La dirección de router o puerta de enlace es 10.5.0.1. , el servidor de dns es el 10.5.0.17

Para ver las direcciones IP que asigna ejecutamos el siguiente comando

#cat /var/lib/dhcp3/dhcpd.leases

lunes, 16 de abril de 2012

Significado campos Master.csv asterisk

Muchas veces nos preguntamos cual es el significado de los campos del archivo que nos informa los detalles de las llamadas que se realizaron, por tal motivo publico lo que significa cada campo.

La informacion se guarda en el siguiente archivo /var/log/asterisk/cdr-csv/Master.csv que tiene los siguientes campos:

;Master.csv => ${CSV_QUOTE(${CDR(clid)})},${CSV_QUOTE(${CDR(src)})},${CSV_QUOTE(${CDR(dst)})},${CSV_QUOTE(${CDR(dcontext)})},${CSV_QUOTE(${CDR(channel)})},${CSV_QUOTE(${CDR(dstchannel)})},${CSV_QUOTE(${CDR(lastapp)})},${CSV_QUOTE(${CDR(lastdata)})},${CSV_QUOTE(${CDR(start)})},${CSV_QUOTE(${CDR(answer)})},${CSV_QUOTE(${CDR(end)})},${CSV_QUOTE(${CDR(duration)})},${CSV_QUOTE(${CDR(billsec)})},${CSV_QUOTE(${CDR(disposition)})},${CSV_QUOTE(${CDR(amaflags)})},${CSV_QUOTE(${CDR(accountcode)})},${CSV_QUOTE(${CDR(uniqueid)})},${CSV_QUOTE(${CDR(userfield)})}


clid: Caller*ID con el texto (80 characters)
src: número del caller ID (string, 80 characters)
dst: extensión destino (string, 80 characters)
dcontext: contexto destino (string, 80 characters)
channel: canal utilizado (80 characters)
dstchannel: Destination channel if appropriate (80 characters)
lastapp: La última aplicación o accion realizada (80 characters) por lo general es HANGUP     cuando el destino corta la llamada sin contestar y es DIAL cuando el origen llama y la llamada es atendida o no por el destinatario.
lastdata: La última solicitud de datos (arguments) (80 characters) es a quien se solicita que atienda la llamada. esta informacion la saca del extensions.conf
start: comienzo de la llamada (date/time)
answer: respuesta de la llamada (date/time)
end: fin de la llamada (date/time)
duration: duración de la llamada en segundos, desde que fue discada hasta el corte (integer)
billsec: duración de la llamada en segundos, desde que fue atendida hasta el corte (integer)
disposition: estado de la llamada (atendida, no atentendida, ocupado, fallida).
amaflags: Se usa para guardar en los CDR  temas de facturación . Puede ser "default", "omit", "billing", o "documentation"
accountcode: código de la cuenta a utilizar: cuenta de facturación de Asterisk, (string, 20 characters)
uniqueid: identificador de canal unico (32 characters)
user field: A user-defined field, maximum 255 characters