2017-11-27

Asterisk の再セットアップ -- Asterisk をインストールする


前回は Raspbian Stretch 版のクリーンインストールまでを行いました。

いよいよ Asterisk をインストールして、使えるまでの最低限の設定を
します。


-------------------------------------------------------------------------------------------
❏ Raspbian STRETCH をクリーンインストールする
❏ Asterisk をインストールする ⇐ いまココ
❏ googletts.agi を使ってみる
❏ Asterisk にボイスメールを設定する
❏ Asterisk で FAX 送受信してみる
❏ Asterisk の各種設定ファイル
-------------------------------------------------------------------------------------------


ソースから make すれば最新バージョン 15.1.2 もインストールできますが、今回はあえて簡便にインストールするやり方を試みてみました。

以前、Raspbian PIXEL 版ではその前の Jessie 版からの流れで、パッケージソースからの make && make install でインストールしていました。

このときのバージョンは 14.0.2 です。



今回、apt-get でインストールしてみたところ、13.14.1 がインストールされ、少しグレードダウンしましたが問題なく使えていました、と思ったのもつかの間、Asterisk 謎のクラッシュをします。

extensions.conf sip.conf などの設定ファイルを修正して CLI> reload を繰り返していると突然、CLI> が終了します。
何度再起動しても以降はすぐに CLI> が勝手に終了する事象に見舞われました。

Asterisk のリムーブと再インストールしてもダメで、CLI> は勝手に終了するのです。



ネットで調べてみましたらどうもバージョン 13 固有の現象みたいです。


apt-get install は2分ほどでインストールできますのですごく便利なのですが、結果的に raspbian Stretch では 13.14.1 しか落としてくれません。


以前の記事を参考なさって apt-get でインストールされた方々がいらっしゃるようなら同様の事象に出くわしておられると思います。

お詫びいたします。



諦めてパッケージ版をソースから  コンパイル/make/make install する
ことにしました。

最新バージョンは 15.1.2 ですが最新版はまだパッチが続いているようなので、14 の最終バージョン 14.7.2 を落とすことに決めました。



ということでインストールします。



【make 環境を整える】


g++ はすでに最初からインストールされているみたいですので、その他のパッケージをインストールします。

# apt-get update
# apt-get install libncurses5-dev uuid-dev libxml2-dev subversion libsqlite3-dev libssl-dev libjansson-dev bison libnewt-dev doxygen bluetooth libbluetooth-dev chkconfig



chkconfig は最新版 ubuntu では sysv-rc-conf に代わっていますが Raspbian では使えます。






【Asterisk をmake しインストールする】


かかる時間の目安はインストールに小1時間くらいです。
設定に 30分〜1時間くらいでしょう。



ディレクトリを移動して、安定版の asterisk-14-current.tar.gz をダウンロードして解凍します。

# cd /usr/src
# wget  http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-14-current.tar.gz
# tar zxvf asterisk-14-current.tar.gz


解凍された asterisk のディレクトリを確認しそのディレクトリに移動します(移動した場所で作成します)。

# ls
# cd asterisk-14.7.2
# ./configure
# make menuselect


メニュー画面が現れるので、「add-ons」→「chan_mobile」を選んでおきます(当面は使いませんが将来モバイルを収容するかも知れないので)。

他にも音声ファイル(日本語 ulaw 形式)を選んで、「save & exit」で終了します。


make ← 約30分くらいかかります。
make install ← モジュール自体はそんなに時間はかかりませんが、サウンドファイルの
         落とし込みに約5分程度かかります。


サンプルファイルをインストールして、自動起動を設定します。

# make samples
# make config
# ldconfig
# chkconfig asterisk -list
    asterisk 0:off 1:0ff 2:on 3:on 4:on 5:on 6:off



以上で Asterisk のインストールは終了です。





設定(各種設定ファイルを編集する)】


最低限、asterisk.conf  sip.conf  extensions.conf  の設定が必要です。


これらを編集していきますが、初期状態のこれらのファイルを残しておきたい場合は、バックアップしておきます(必要はありませんが、英文での設定の仕方などは記述されてますので、あとで参考したいときがあるかもしれません)。


cp /etc/asterisk/asterisk.conf /etc/asterisk/asterisk.conf.bak

# cp /etc/asterisk/sip.conf /etc/asterisk/sip.conf.bak
# cp /etc/asterisk/extensions.conf /etc/asterisk/extensions.conf.bak






asterisk.conf の編集】


エディターでファイルを開いて、


# leafpad /etc/asterisk/asterisk.conf


30行目の

 ;languageprefix = yes ; Use the new sound prefix path syntax.

のコメントを外します。



70行目の

 ;defaultlanguage = en           ; Default language

のコメントを外し、「en」を「ja」に変更します。



保存・終了をします。

asterisk.conf は以上です。






sip.conf の編集】

これは自分の環境に合わせて extensions.conf とともに設定編集するのですが、まずは動作確認できる最低限の設定をしてみます。


エディターでファイルを開いて、


 leafpad /etc/asterisk/sip.conf



すべて選択して delete し中身を空にします。

そして、以下を記述していきます。


【前提】

 ・HGW + ひかり電話が使える設定をする
 ・ブラステル電番のアカウントの設定をする
 ・FUSION IP-Phone Smart 電番のアカウントの設定をする
 ・内線は 210、220 を使う

という設定を想定しています。

ご自分の環境に合わせて不要部分を割愛するかしていただければ結構です。


ここでは Asterisk の動作確認のためなので、本格的には別途見直しをしてください。



[general]
allowguest=no
bindport=5063
defaultexpiry=3600
maxexpiry=3600
language=ja
externhost=hogehoge.ddns.net
localnet=192.168.xxx.0/24
;localnet=10.x.0.0/24 ➡ OpenVPN 使用時の OpenVPN が割り当てのアドレス帯
;
srvlookup=no
nat=force_rport,comedia ; nat 設定
qualify=10000

sendrpid=yes
; 転送電話のときに大もとの呼出し電番を転送先に表示できるようにするため
;;;;;;;;;;;;;;;
;
videosupport=NO

;**** ひかり電話のレジスト
register => HGWのIP電話内線番号(1〜6):パスワード:ユーザー名@hikari-denwa/1000
;

;**** ブラステル (050-aaaa-bbbb)のレジスト
register => ユーザーID@softphone.spc.brastel.ne.jp:パスワード:ユーザーID@softphone.spc.brastel.ne.jp
;

;**** FUSION IP-Phone Smart (050-cccc-dddd)のレジスト
register => ユーザーID:パスワード:ユーザーID@smart.0038.net
;

[hikari-denwa]
;;** ひかり電話のコンテキスト
type=friend
secret=パスワード
defaultuser=ユーザー名
fromuser=IP電話内線番号(1〜6)
fromdomain=192.168.xxx.zzz  ; HGW のアドレス
insecure=port,invite
dtmfmode=rfc2833
directmedia=no
disallow=all
allow=ulaw
allow=gsm
;

[brastel]
;;** ブラステルのコンテキスト
type=friend
secret=パスワード
defaultuser=ユーザーID
fromuser=ユーザーID(同上)
host=softphone.spc.brastel.ne.jp
fromdomain=softphone.spc.brastel.ne.jp
insecure=port,invite
dtmfmode=rfc2833
directmedia=no
disallow=all
allow=ulaw
allow=gsm
;

[fusion]
; ** FUSIONのコンテキスト
type=friend
secret=パスワード
defaultuser=ユーザーID
fromuser=ユーザーID(同上)
host=smart.0038.net
fromdomain=smart.0038.net
insecure=port,invite
dtmfmode=rfc2833
directmedia=no
disallow=all
allow=ulaw
allow=gsm

;

;#*#*# 内線210--220
[210]
type=friend
secret=パスワード(なるべく長い英数大小文字と#で構成)
directmedia=no
host=dynamic
dtmfmode=rfc2833
disallow=all
allow=ulaw
allow=gsm
;

[220]
type=friend
secret=パスワード(なるべく長い英数大小文字と#で構成)
directmedia=no
host=dynamic
dtmfmode=rfc2833
disallow=all
allow=ulaw
allow=gsm
;
;:::: end of sip.conf ::::



記述を終えたら保存・終了します。






extensions.conf の編集】


続いて extensions.conf を記述します。


エディターでファイルを開いて、


# leafpad /etc/asterisk/extensions.conf



すべて選択し delete して中身を空にします。

そして、以下を記述していきます。

例はダイヤルプランの一例を示しているだけですので、ダイヤルプラン自体に「意味があるのか」という点は追及しないでいただきたい。



[general]
;
writeprotect=no     ; CLIでの exten 変更を許可しない
priorityjumping=no  ; n+101 ジャンプ処理を無効
;
;[ダイヤルプラン]
;
;    内線100番は音声追っかけ再生テストができる
;    内線200番は一斉呼出し
;    内線間で相互呼出しができる
;    外線発信は210だけができる
;    外線発信はひかり電話からとし国際電話への発信はできない
;    ひかり電話に着信の場合はブラステルからFUSION IP Phone Smartに転送する
;

[globals]
HIKARI = ひかり電話番号
FUSION= 050ccccdddd

[default]
;
;**内線100番で音声追っかけ再生を使う
exten => 100,1,Answer()
exten => 100,n,Wait(1)
exten => 100,n,Playback(demo-echotest) ;「エコーテストモードを…」
exten => 100,n,Playback(beep) ; ビープ音
exten => 100,n,Echo() ; 追っかけ再生
exten => 100,n,Playback(hello-world) ; 「ありがとうございます」
exten => 100,n,Hangup()

;**内線一斉呼出し
exten => 200,1,Dial(SIP/210&SIP/220,30)
exten => 200,2,Hangup()

;**内線の相互呼出し
exten => _2[1-2]0,1,Dial(SIP${EXTEN},30)
exten => _2[1-2]0,2,Hangup()

;**ひかり電話着信時はブラステルをゲートウェイにしてFUSION IP-Phone Smart に転送電話
exten => 1000,1,(SIP/${FUSION}@brastel,30,tT)
exten => 1000,2,Hangup()

;**外線発信 01X[0-9]X.[任意桁の0-9]。 00発信(海外発信)不可
exten => _0ZX.,1,GotoIF($[${CALLERID(num)}=210]?call-allowed)
exten => _0ZX.,n,Hangup()
exten => _0ZX.,n(call-allowed),Set(CALLERID(num)=${HIKARI})
exten => _0ZX.,n,Set(CALLERID(name)=${HIKARI})
exten => _0ZX.,n,Dial(SIP/$EXTEN}@hikari-denwa,30)
exten => _0ZX.,n,Hangup()
;**↑外線発信は内線210からのみ許可
;
;:::: end of extensions.conf ::::



記述を終えたら保存・終了します。



'CLI> reload' または '# reboot' して設定内容を反映させます。



注)このダイヤルプランは完全ではありません。

実際には、ダイヤルの後処理やレジストが外れているときの処理等々を考慮する必要がありますが、とりあえずインストールした Asterisk テストにはなんら差し支えないはずです。





次に、クライアントのスマホに内線を設定します。

2台あればそれぞれ、210 220 を 設定して、相互に通話テストできますが、1台しかなければ内線相互呼出しのテストはできません。

クライアントで使用するソフトフォンは GS Wave を使います。

大変すぐれたソフトフォンアプリですので、Asterisk にはマッチすると思います。

アプリを GooglePlay からダウンロードして起動します。

最初にアカウントを設定します。

右下の「Settings」をクリックし、Account Settings の右上のをクリックします。

 ・Account Name : 210
 ・SIP Server : 192.168.xxx.yyy:5063
 ・SIP User ID : 210
 ・Password : 210 のパスワード

右上の✔をクリックして設定を終えます。この時点でアカウントが ● にならなければ、アプリ設定を誤っているかまたは sip.conf が間違っています。

 GENERAL SETTINGS
 ・Preferred Vocoder でコーデックの設定をします。
  WiFi : PCMU(μLaw)、GSMの2つにチェックを入れます。
  2G/3G/4G : WiFi と同じ設定で結構です。

これら以外はいまはまだ、細かく設定しなくても結構です。
詳細はブログの Grandstream Wave の設定欄を参照ください。


次に Advanced Settings の設定です。

 ・Edit Before Dial : オン
 ・Default Account Registration Notification : オン
 ・Varidate When Ringing : オン
 ・Use hard encoder : オン
 ・Noise Reduction Level : Low
 ・Speaker Gain : 0db
 ・Microphone Gain : 0db
 ・Network : すべてチェック

とりあえず、ここまでの設定で使えるはずです。

Asterisk は自動起動されているはずですので、Asterisk のコマンドラインモードにして、Asterisk の動作状況を見れるようにします。

# asterisk -vvvrT
~
~
~
raspberrypi*CLI> 

このようなメッセージがでて、CLI> から Asterisk のコマンドを打てるようになります。

クライアントから呼出しテストなどをして Asterisk がちゃんと稼働していることを確認します。


Asterisk の一部モジュールがインストールされていないため、'CLI> reload' でエラーになるものがあります。

多分使わない機能なので、モジュールの読み込みをしないよう、設定しておきます。

# leafpad /etc/asterisk/modules.conf 

として最終行に以下の2行を追加しておきます。

noload => res_phoneprov.so
noload => res_ari.so


Asterisk の再起動で反映されます。



※ ログローテションのエラー通知メールが飛んでくることがあります。
  以下のような内容です。

/etc/cron.daily/logrotate:
error: error running shared postrotate script for '/var/log/asterisk/debug /var/log/asterisk/messages /var/log/asterisk/full /var/log/asterisk/*_log '
run-parts: /etc/cron.daily/logrotate exited with return code 1

  これは、/var/log/ディレクトリ名” におけるディレクトリの権限が 644 でない
  ことが原因として大きい。また配下のログファイルの権限も同じです。

  下記のように書き込み権限をルートに限定します。

   chmod 644 /ver/log/ディレクトリ名
   chmod 644 /var/log/ディレクトリ名/*

  そして以下のコマンドでエラーが消えていることを確認します。

   logrotate -v /etc/logrotate.d

  ですべてのプログラムの状態かまたは、

   logrotate -v /etc/logrotate.d/asterisk

  のように個別の状態を見ます。

  メール通知のようなエラーがなければ OK です。






root 以外で(例えば asterisk ユーザー)起動する場合の設定方法については割愛します。


ネット検索でいくつかの事例がありますので、そちらをご参考ください。





今回はここまでです。

次回は googletts を使ってみます。









0 件のコメント: