4. sip.conf の移行

modules.conf の変更

Asterisk が MySQL に設定情報を格納するために必要なモジュールをロードするように /etc/asterisk/modules.conf を変更します。

[modules]
autoload=yes

autoload を yes か、明示的にロードするモジュールを指示

load => res_config_mysql.so

extconfig.conf の変更

sip.conf のリアルタイム構成を実現するために、リアルタイム構成のグループとデータベースドライバー、データベース、テーブルの対応付けを行います。
/etc/asterisk/extconfig.conf の [settings] コンテキストに例がありますので、それを参考にすると:

group => driver,database,table

という構文なのがわかります。

;
; Static and realtime external configuration
; engine configuration
;
; Please read doc/extconfig.txt for basic table
; formatting information.
;
... (省略) ...

[settings]
... (省略) ...
;----------------------------------------
; MySQL Realtime settings
;----------------------------------------
sipusers => mysql,Asterisk,sip_buddies
sippeers => mysql,Asterisk,sip_buddies

チャ ネルタイプ = friend なので、sipusers と sippeers のグループ を MySQL ドライバー、”Asterisk” データベースの “sip_buddies” テーブルへ対応付けをするため、extconfig.conf に上記2行を追加します。

res_mysql.conf の変更

res_mysql.conf に、Asterisk がデータベースにアクセスのための情報を設定します。
/etc/asterisk/res_mysql.conf の [general] コンテキストに以下の情報を追加します。

[general]
dbhost = 127.0.0.1 ; データベースの IPアドレス
dbname = Asterisk ; データベース名
dbuser = Asterisk ; ユーザー名
dbpass = Asterisk ; パスワード
;dbport = 3306 ; ポートはデフォルト
;dbsock = /var/run/mysqld/mysqld.sock ; ソケットファイルはデフォルト
;dbcharset = latin1 ; charset はデフォルト

Asterisk の再起動

ここで、一度 Asterisk を再起動して、動作確認をしてみます。

# service asterisk restart
Stopping safe_asterisk: [ OK ]
Shutting down asterisk: [ OK ]
Starting asterisk: [ OK ]

そして、CLIを接続します。コマンドラインに “-rvvvvvvvvvvvvvvvvvvvvv” と “v” を多く付加してみてください。

# /usr/sbin/asterisk -rvvvvvvvvvvvvvvvvvv
Asterisk 1.4.42, Copyright (C) 1999 - 2010 Digium, Inc. and others.
Created by Mark Spencer <markster@digium.com>
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type 'core show license' for details.
=========================================================================
== Parsing '/etc/asterisk/asterisk.conf': Found
== Parsing '/etc/asterisk/extconfig.conf': Found
== Binding sipusers to msql/Asterisk/sip_buddies
== Binding sippeers to mysql/Asterisk/sip_buddies
Connected to Asterisk 1.4.42 currently running on localhost (pid = 18904)
Verbosity was 3 and is now 18
localhost*CLI>

上記のように、sipusers と sippeers が sip_buddies へバインドされたメッセージが出れば成功です。

sip.conf の設定を MySQL へ移行

次に、sip.conf で設定した SIP 電話機の設定を sip_buddies テーブルへ移します。

/etc/asterisk/sip.conf ファイルの以下の設定をすべてコメントアウトします。

;[2001]
;type=friend ; friend は着呼(user)および発呼(peer)の両方
;defaultuser=2001 ; 認証ユーザー名
;secret=1234 ; 認証パスワード
;canreinvite=no ; Asterisk が介在する
;host=dynamic ; ホストに登録を実行する
;context=internal ; このデバイスのコンテクストをセット

ファイルを保存したら、SIP 電話機の情報をクリアするため、X-Lite を接続している場合は、終了して、サービスを再起動します。

# service asterisk restart

次に、sip_buddies テーブルへ、上記の設定情報を挿入します。

# mysql -u Asterisk -p
Enter password:
mysql> use Asterisk;
mysql> INSERT INTO sip_buddies (name, host, secret, canreinvite, context, allow) VALUES ('2001', 'dynamic', '1234', 'no', 'internal', 'gsm;ulaw;alaw');

挿入結果を確認します。

mysql> SELECT name, host, canreinvite, context, ipaddr, port FROM sip_buddies;
+------+---------+-------------+----------+---------+------+
| name | host | canreinvite | context | ipaddr | port |
+------+---------+-------------+----------+---------+------+
| 2001 | dynamic | no | internal | | 0 |
+------+---------+-------------+----------+---------+------+
1 row in set (0.00 sec)

このように表示されます。
次に、X-Lite を起動して接続を確認します。 起動が完了したら、もう一度 SELECT 文で確認してみます。

mysql> SELECT name, host, canreinvite, context, ipaddr, port FROM sip_buddies;
+------+---------+-------------+----------+-------------+-------+
| name | host | canreinvite | context | ipaddr | port |
+------+---------+-------------+----------+-------------+-------+
| 2001 | dynamic | no | internal | 192.168.0.3 | 11486 |
+------+---------+-------------+----------+-------------+-------+
1 row in set (0.01 sec)

上記のように IP アドレスとポートが割り当てられていれば sip.conf の移行は完了です。
1000 をダイアルして “Hello world.” を確認してください。

以上です。