Asterisk CDR setup

cdr_adaptive_odbc

Debian 9 Stretch
Asterisk 13.14.1 from debian repo.
MariaDB 10.3.7 from MariaaDB repo.

apt install unixodbc unixodbc-dev 

/etc/odbcinst.ini

[mariadb]
Description=MariaDB Connector/ODBC v.2.0
Driver=/usr/lib/x86_64-linux-gnu/odbc/libmaodbc.so
Setup=/usr/lib/x86_64-linux-gnu/odbc/libodbcmyS.so
FileUsage=1
UsageCount=2

/etc/odbc.ini

[asteriskcdr-odbc]
Description=ODBC for Asterisk CDR
Driver=mariadb 
# 
Database={asterisk_db} 
Server=127.0.0.1
User={db_login_asterisk}
Password={db_password_asterisk}
PORT=3306
option=3

/etc/asterisk/res_odbc.conf

[asterisk]
enabled => yes
dsn => asteriskcdr-odbc 
pre-connect => yes
pooling => no
limit => 1

Проверка:

[asterisk]
odbcinst -q -d
[mariadb]

Troubleshooting:

Trouble1: Can’t open lib ‘/usr/lib/x86_64-linux-gnu/odbc/libmaodbc.so’ : file not found

$ isql -v asteriskcdr-odbc asterisk passwordasterisk

[01000][unixODBC][Driver Manager]Can't open lib '/usr/lib/x86_64-linux-gnu/odbc/libmaodbc.so' : file not found
[ISQL]ERROR: Could not SQLConnect
# mariadb-connector-odbc-3.0.3-ga-debian-x86_64
$ ldd libmaodbc.so
linux-vdso.so.1 (0x00007fff15bc7000)
libodbcinst.so.2 => /usr/lib/x86_64-linux-gnu/libodbcinst.so.2 (0x00007fea2cb5d000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fea2c859000)
libssl.so.1.0.0 => not found
libcrypto.so.1.0.0 => not found
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fea2c4ba000)
libltdl.so.7 => /usr/lib/x86_64-linux-gnu/libltdl.so.7 (0x00007fea2c2b0000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fea2c093000)
/lib64/ld-linux-x86-64.so.2 (0x00007fea2d01f000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fea2be8f000)

Solution:  download and install version 2.0.* : https://downloads.mariadb.com/Connectors/odbc/

# mariadb-connector-odbc-2.0.16-ga-debian-x86_64
$ ldd libmaodbc.so

linux-vdso.so.1 (0x00007ffcf47ca000)
libodbcinst.so.2 => /usr/lib/x86_64-linux-gnu/libodbcinst.so.2 (0x00007f5b72683000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f5b7237f000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5b71fe0000)
libltdl.so.7 => /usr/lib/x86_64-linux-gnu/libltdl.so.7 (0x00007f5b71dd6000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f5b71bb9000)
/lib64/ld-linux-x86-64.so.2 (0x00007f5b72b43000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f5b719b5000)

Result:

$ isql -v asteriskcdr-odbc asterisk passwordasterisk
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+

Connection problems testing

odbc show 

ODBC DSN Settings
-----------------

  Name:   asterisk
  DSN:    asteriskcdr-odbc
    Last connection attempt: 2066-10-21 05:00:18
    Number of active connections: 0 (out of 1)
cdr show status

Call Detail Record (CDR) settings
----------------------------------
  Logging:                    Enabled
  Mode:                       Simple
  Log unanswered calls:       No
  Log congestion:             No

* Registered Backends
  -------------------
    cdr-custom
    csv
    cdr_manager (suspended) 
    Adaptive ODBC
module reload cdr_adaptive_odbc.so

Module 'cdr_adaptive_odbc.so' reloaded successfully.
    -- Reloading module 'cdr_adaptive_odbc.so' (Adaptive ODBC CDR backend)
  == Parsing '/etc/asterisk/cdr_adaptive_odbc.conf': Found
WARNING[22096]: res_odbc.c:958 odbc_obj_connect: res_odbc: Error SQLConnect=-1 errno=1045 [unixODBC][ma-2.0.18]Access denied for user 'asterisk'@'localhost' (using password: YES)
WARNING[22096]: cdr_adaptive_odbc.c:135 load_config: No such connection 'asterisk' in the 'cdr_adaptive_connection' section of cdr_adaptive_odbc.conf.  Check res_odbc.conf.

Fields aliases

cat /etc/asterisk/cdr_adaptive_odbc.conf

[cdr_adaptive_connection]
connection=asterisk
table=cdr
alias start => calldate
alias filename => filename
alias wastersync => wastersync
alias worktime => worktime