Ubuntu20.04でAsterisk18 Realtime Databaseのセットアップ(MariaDB ODBC)

Asterisk Realtime Databaseを利用すると sip.confextensions.conf の設定をRDBMSから読み込むことができます。

PHPやNode.js等のプログラミング言語からダイヤルプランを制御できるようになるため便利です。

 

当初、ドキュメントを読んでも文献が情報が古く導入に苦戦しましたが、開発者ブログの記事が大変参考になりました 🙏

AsteriskでODBCを利用してDB連携しよう

 

MariaDB側(192.168.2.51)の準備

今回はAsteriskサーバ、MariaDBサーバを別々に用意した。

MariaDBをインストール

apt install mariadb-server
mysql_secure_installation
mysql
> GRANT ALL privileges ON asterisk.* TO 'asterisk'@'%' IDENTIFIED BY 'password';
> quit
vi /etc/mysql/mariadb.conf.d/50-server.cnf
bind-address = 0.0.0.0

テーブルを追加

SQLファイルはAsteriskソースの中(前回記事参照)に収録されていたものを用いた。

ls -l /usr/local/src/asterisk-18.9.0/contrib/realtime/mysql/
total 56
-rw-rw-r-- 1 root root 1059 Dec 10 01:44 mysql_cdr.sql
-rw-rw-r-- 1 root root 45160 Dec 10 01:44 mysql_config.sql
-rw-rw-r-- 1 root root 1021 Dec 10 01:44 mysql_voicemail.sql

mysql -Dasterisk < mysql_config.sql
mysql -Dasterisk -e "DROP TABLE alembic_version"
mysql -Dasterisk < mysql_cdr.sql
mysql -Dasterisk -e "DROP TABLE alembic_version"
mysql -Dasterisk < mysql_voicemail.sql

Asterisk側(192.168.1.6)の準備

unixODBCのインストール

apt install unixodbc unixodbc-dev 

MariaDB ODBCドライバのインストール

入手先: https://mariadb.com/kb/en/about-mariadb-connector-odbc/#installing-mariadb-connectorodbc

cd /usr/local/src
wget https://dlm.mariadb.com/1936476/connectors/odbc/connector-odbc-3.1.15/mariadb-connector-odbc-3.1.15-ubuntu-focal-amd64.tar.gz
tar xvzf mariadb-connector-odbc-3.1.15-ubuntu-focal-amd64.tar.gz

展開が終わったら、ここを参考にしながら手動で配置していく。

install lib64/mariadb/libmaodbc.so /usr/lib
install -d /usr/lib/mariadb/
install -d /usr/lib/mariadb/plugin/
install lib/mariadb/plugin/auth_gssapi_client.so /usr/lib/mariadb/plugin/
install lib/mariadb/plugin/caching_sha2_password.so /usr/lib/mariadb/plugin/
install lib/mariadb/plugin/client_ed25519.so /usr/lib/mariadb/plugin/
install lib/mariadb/plugin/dialog.so /usr/lib/mariadb/plugin/
install lib/mariadb/plugin/mysql_clear_password.so /usr/lib/mariadb/plugin/
install lib/mariadb/plugin/sha256_password.so /usr/lib/mariadb/plugin/
# 動作確認時にエラーが出たのでこちらも追加
install lib64/mariadb/libmariadb.so.3 /usr/lib

/etc/odbcinst.ini

[MariaDB]
Description=ODBC for MariaDB
Driver=/usr/lib/libmaodbc.so 
UsageCount=1

/etc/odbc.ini

[asterisk]
Description = Database for Asterisk
Driver = MariaDB
Database = asterisk
Server = 192.168.2.51
Port = 3306
UID = asterisk
PWD = asterisk

接続確認

echo 'select now()' | isql asterisk
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> select now()
+--------------------+
| now()              |
+--------------------+
| 2021-12-09 16:57:54|
+--------------------+
SQLRowCount returns 1
1 rows fetched

extensions.confをDB化

/etc/asterisk/res_odbc.conf でODBCの接続情報を設定する

diff --git a/res_odbc.conf b/res_odbc.conf
index 58671fc..787d197 100644
--- a/res_odbc.conf
+++ b/res_odbc.conf
@@ -17,18 +17,18 @@
;
; Permit disabling sections without needing to comment them out.
; If not specified, it is assumed the section is enabled.
-enabled => no
+enabled => yes
;
; This value should match an entry in /etc/odbc.ini
; (or /usr/local/etc/odbc.ini, on FreeBSD and similar systems).
dsn => asterisk
;
; Username for connecting to the database. The user defaults to the context name if unspecified.
-;username => myuser
+username => asterisk
;
; Password for authenticating the user to the database. The default
; password is blank.
-;password => mypass
+password => asterisk
;
; Build a connection at startup?
pre-connect => yes

保存したら再起動しておく

systemctl restart asterisk

接続を確認

asterisk -vvvvvr
pbx*CLI> odbc show
ODBC DSN Settings
-----------------
Name: asterisk
DSN: asterisk
  Number of active connections: 1 (out of 1)
  Logging: Disabled

/etc/asterisk/extensions.conf

[general]
static=yes
writeprotect=no
clearglobalvars=no

[default]
switch => Realtime/default@extensions

extconfig.conf

コメントアウトを外す

extensions => odbc,asterisk

接続確認

rm extensions.ael res_parking.conf
service asterisk restart
asterisk -vvvvvr
> dialplan show
[ Context 'default' created by 'pbx_config' ]
Alt. Switch => 'Realtime/default@extensions' [pbx_config]

お疲れさまでした。

おすすめ