CDR de Asterisk usando ODBC (no más MySQL)

Introducción

Vamos a ver como configurar el odbc para que Asterisk lo utilice como conector a la tabla cdr de la base de datos MySQL. En este caso, el Asterisk está instalado en un BeagleBone Black comprado antes de que empezaran a escasear. La distro instalada es la de Asterisk for BeagleBone Black (un Ubuntu).

Instalación y configuración del conector odbc

apt-get install -y unixodbc unixodbc-dev libmyodbc
# cat /etc/odbc.ini 

[MySQL-asteriskcdrdb]
Description           = MySQL connection to 'asterisk' database
Driver                = MySQL
Database              = asteriskcdrdb
Server                = localhost
UserName              = asteriskuser
Password              = rasp_amp
Port                  = 3306
Socket                = /var/run/mysqld/mysqld.sock

Donde está el Driver MySQL?

# find / -name 'libmyodbc.so'
# find / -name 'libodbcmyS.so'
# cat /etc/odbcinst.ini

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

Configurar el cdr de Asterisk, el ODBC y los módulos

# cat /etc/asterisk/cdr_odbc.conf 

;
; cdr_odbc.conf
;

[global]
dsn=asteriskcdrdb
loguniqueid=yes
dispositionstring=yes
table=cdr
usegmtime=no
hrtime=yes
# cat /etc/asterisk/res_odbc_additional.conf 

;--------------------------------------------------------------------------------;
; Do NOT edit this file as it is auto-generated by FreePBX. All modifications to ;
; this file must be done via the web gui. There are alternative files to make    ;
; custom modifications, details at: http://freepbx.org/configuration_files       ;
;--------------------------------------------------------------------------------;
;

[asteriskcdrdb]
enabled => yes
dsn => MySQL-asteriskcdrdb
pre-connect => yes
username => asteriskuser
password => rasp_amp

Probar la configuración del ODBC

# isql -v MySQL-asteriskcdrdb asteriskuser rasp_amp

+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL>
SQL> select * from cdr limit 1
---------
SQLRowCount returns 1
1 rows fetched

Decirle a Asterisk que módulos no cargar

Agregar estas líneas al final del archivo /etc/asterisk/modules.conf

noload => cdr_mysql.so
noload => cdr_csv.so
noload => cdr_custom.so