フリー・エンジニア 高橋隆雄 |
第20回,第21回とAsteriskのインストールを解説した。当然だがインストールしただけの状態ではAsteriskはIP電話機のサーバーとして使うことはできない。そこで,AsteriskをIP電話のサーバーとして使うための最低限の設定を今回は説明する。
これまで何度かAsteriskの設定についても解説してきたが,最も多い質問は「どこから始めればよいか分からない」というものである。今回は順を追って,Asteriskを一から立ち上げて実際に稼働させる方法を解説する。なお前回と前々回のインストール作業は終了されているものとして話を進めるので,まだの方はまずはインストールを。
どこから手をつければよいのか?
Asteriskは設定ファイルの数がかなり多い。これは各機能やモジュールなどの各単位で設定ファイルを持っているためだ。ならば逆に考えてみよう。“設定ファイルがなければどうなるのか?”。試す方法は実に「簡単」である。設定ファイルを全て削除して起動してみればよい。
# cd /etc
# mv asterisk asterisk.bak
# mkdir asterisk
これでAsteriskの設定ファイルは一切,なくなったことになる。この状態でAsteriskをフォアグランド起動してみれば何が起こるかを確認することができる。
# asterisk -U asterisk -G asterisk -vvvvvc
~略~
[Wait]
== Registered application 'Wait'
[WaitExten]
== Registered application 'WaitExten'
== Manager registered action DBGet
== Manager registered action DBPut
Asterisk Dynamic Loader Starting:
[Jun 24 22:12:53] WARNING[6177]: loader.c:750 load_modules: No 'modules.conf' found, no modules will be loaded.
Asterisk Ready.
*CLI>
おやおや。ちゃんと起動してしまった。ではこれは使えるのかというと一切使えない。「Asterisk Ready.」の上に出ているメッセージ「WARNING[6177]: loader.c:750 load_modules: No 'modules.conf' found, no modules will be loaded.」に注目すると分かるが,「modules.conf」ファイルがないので一切のモジュールが読み込まれていない。確認してみよう。
*CLI> module show
Module Description Use Count
0 modules loaded
ご覧の通り何のモジュールも読み込まれていない。Asteriskはモジュール化構造をとっており,各種機能はモジュールをロードすることで始めて提供される。モジュールを読み込むための設定ファイルである「module.conf」が存在しない場合,モジュールを一切読み込まれない。Asteriskは何の機能も使えないことになる。ただし,PBXコアに組み込み済みの機能は使用することができるため,下のようなメッセージが表示される。
[Wait]
== Registered application 'Wait'
この「Registered application」の一覧はコマンド・ライン・インタフェース(CLI)の core show applicationsというコマンドを使って確認することができる。それを表示したのが下記である。
*CLI> core show applications
-= Registered Asterisk Applications =-
Answer | : | Answer a channel if ringing |
BackGround | : | Play an audio file while waiting for digits of an extension to go to. |
Busy | : | Indicate the Busy condition |
Congestion | : | Indicate the Congestion condition |
ExecIfTime | : | Conditional application execution based on the current time |
Goto | : | Jump to a particular priority, extension, or context |
GotoIf | : | Conditional goto |
GotoIfTime | : | Conditional Goto based on the current time |
Hangup | : | Hang up the calling channel |
ImportVar | : | Import a variable from a channel into a new variable |
NoOp | : | Do Nothing |
Progress | : | Indicate progress |
ResetCDR | : | Resets the Call Data Record |
Ringing | : | Indicate ringing tone |
SayAlpha | : | Say Alpha |
SayDigits | : | Say Digits |
SayNumber | : | Say Number |
SayPhonetic | : | Say Phonetic |
Set | : | Set channel variable(s) or function value(s) |
SetAMAFlags | : | Set the AMA Flags |
SetGlobalVar | : | Set a global variable to a given value |
Wait | : | Waits for some time |
WaitExten | : | Waits for an extension to be entered |
ここに表示される23のアプリケーションはモジュールを読み込まなくても使えることになる。とはいえ,電話機を接続するためのモジュールや回線の定義が読み込まれていないため,このままではAsteriskはIP電話サーバーの用をなさない。
電話機を接続するためには,sip.confやiax.confが必要となる。これらが存在しないためチャネル・ドライバが一切読み込まれていない。この状態では電話機を接続することができないという困った状況になっている。
例えば呼制御プロトコルであるSIP(session initiation prptpcol)は「chan_sip.so」というモジュールによって提供されるが,このモジュールを強制読み込みさせようとすると次のようにエラーが発生する。
*CLI> module load chan_sip.so
[Jun 24 22:20:39] NOTICE[6177]: chan_sip.c:16385 reload_config: Unable to load config sip.conf
SIPの設定ファイルsip.confが無いのでchan_sipがロードできない。
さて,ここまで挙動を確認したので一旦,STOP NOWコマンドでAsteriskを停止させてみよう。
*CLI> STOP NOW
Beginning asterisk shutdown....
Executing last minute cleanups
Asterisk cleanly ending (0).