RasPi2 Asterisk sip.confとextensions.confとmeetme

Asteriskの設定ファイルは/etc/asteriskに設置されています。
されていない場合は、source dir で make sample とすれば、/etc/asterisk以下にサンプルファイルが作成されます。

/etc/astersik

:/etc/asterisk# ls
adsi.conf		 cel_pgsql.conf		  func_odbc.conf    queues.conf
agents.conf		 cel_sqlite3_custom.conf  gtalk.conf	    res_config_mysql.conf
ais.conf		 cel_tds.conf		  h323.conf	    res_config_sqlite.conf
alarmreceiver.conf	 chan_dahdi.conf	  http.conf	    res_curl.conf
alsa.conf		 chan_mobile.conf	  iax.conf	    res_fax.conf
amd.conf		 chan_ooh323.conf	  iaxprov.conf	    res_ldap.conf
app_mysql.conf		 cli.conf		  indications.conf  res_odbc.conf
asterisk.adsi		 cli_aliases.conf	  jabber.conf	    res_pgsql.conf
asterisk.conf		 cli_permissions.conf	  jingle.conf	    res_pktccops.conf
calendar.conf		 codecs.conf		  logger.conf	    res_snmp.conf
ccss.conf		 console.conf		  manager.conf	    res_stun_monitor.conf
cdr.conf		 dbsep.conf		  manager.d	    rtp.conf
cdr_adaptive_odbc.conf	 dnsmgr.conf		  meetme.conf	    say.conf
cdr_custom.conf		 dsp.conf		  mgcp.conf	    sip.conf
cdr_manager.conf	 dundi.conf		  minivm.conf	    sip_notify.conf
cdr_mysql.conf		 enum.conf		  misdn.conf	    skinny.conf
cdr_odbc.conf		 extconfig.conf		  modules.conf	    sla.conf
cdr_pgsql.conf		 extensions.ael		  musiconhold.conf  smdi.conf
cdr_sqlite3_custom.conf  extensions.conf	  muted.conf	    telcordia-1.adsi
cdr_syslog.conf		 extensions.lua		  osp.conf	    udptl.conf
cdr_tds.conf		 extensions_minivm.conf   oss.conf	    unistim.conf
cel.conf		 features.conf		  phone.conf	    users.conf
cel_custom.conf		 festival.conf		  phoneprov.conf    voicemail.conf
cel_odbc.conf		 followme.conf		  queuerules.conf   vpb.conf

複雑な多くの設定ファイルがありますが、まず最小設定で内線通話が可能になるよう設定していきます。
問題の切り分けのため、サンプルファイルはmvしておきます。

# cp -r /etc/asterisk /etc/asterisk.org
# mkdir /etc/asterisk
# cd /etc/asterisk

asteriskの音声はRTPで行います。
RTPはIP電話のデジタルデータを元にRTPパケットを構成し、IPネットワークに音声を送出します。IPパケットなので、ポートの指定をします。
今回は、内線のみの運用なのでポート使用は最小限に止めておきます。

rtp.conf

[general]
rtpstart=4000
rtpend=4010

読み込むモジュールの設定
読み込むモジュールの設定は、modules.confを使います。
多くのモジュール設定がありますから、sampleファイルを加工して使います。

# cp /etc/asterisk.org/modules.conf /etc/asterisk/modules.conf
# vi modules.conf

ほとんどのモジュールは、modules.confの

[modules]
autoload=yes

で自動的に読み込まれますから、不要なmoduleは”noload =>module_name”で読み込まないように設定します。

modules.conf

[modules]
autoload=yes
;
noload => pbx_gtkconsole.so
noload => pbx_kdeconsole.so
;
noload => app_intercom.so
;
noload => chan_mgcp.so
noload => chan_skinny.so
noload => chan_phone.so
;
noload => chan_modem.so
noload => chan_modem_aopen.so
noload => chan_modem_bestdata.so
noload => chan_modem_i41.so
noload => chan_misdn.so
;
load => res_susiconhold.so
;
noload => chan_alsa.so
noload => cham_oss.so
;
noload =>app_adsiprog.so
[global]
chan_modem.so=y

SIP電話機(sip client)から接続する際のIDとパスワード等を設定するファイルが、sip.confです。
sip.confを設定しますが、内線のみでテストするので、2台分のIDを登録します。

sip.conf

[general]
maxexpirey=3600
defaultexpirey=3600
content=test
port=5060
bindaddr=0.0.0.0
srvlookup=yes
disallow=all
allow=ulaw
allow=gsm
language=jp
localnet=192.168.1.0/255.255.255.0

[201]
type=friend
username=201
secret=password
canreinvite=no
host=dynamic
dtmfmode=auto
callgroup=1
pickupgroup=1

[202]
type=friend
username=201
secret=password
canreinvite=no
host=dynamic
dtmfmode=auto
callgroup=1
pickupgroup=1

ダイアルプランの作成
ダイアルプランは、何番を回せば、どういった処理をすると言ったことを記述していきます。
運用する上で非常に重要なファイルです。

extensions.conf

[general]
writeprotect=yes

[default]
exten => _20Z,1,Dial(SIP/${EXTEN},60,tT)
exten => _20Z,n,Congestion

ここまで設定が終われば、内線通話が可能になります。
asteriskを再起動するか、CLIで、

*CLI> sip reload
*CLI> dialplan reload

設定をreloadします。

SIP電話で内線の確認が出来れば、保留音と会議室を実装していきます。
保留音は、musiconhold.confを編集します。

musiconhold.conf

[default]
mode=mp3
directory=/var/lib/asterisk/mohmp3
;random=yes

/var/lib/asterisk/mohmp3が無いので、作成して適当なMP3ファイルを配置します。

# mkdir /var/lib/asterisk/mohmp3
# cp hoge.mp3 /var/lib/asterisk/mohmp3/
# chown -R asterisk:asterisk /var/lib/asterisk/mohmp3

会議室の設定
会議室(音声会議)の設定はmeetme.soで実現されます。この機能を利用するためにdahdiを作成したわけです。
設定は、meetme.confを使います。
ここでは、会議室の番号を「300」としました。

記述 意味 定義例
[general]
audiobuffers
audio bufferを設定
音声会議のジッタバッファとして動作
2-32
[room]
conf =>
会議室の設定を定義 会議室番号

[room]

conf => 300,4343 ←4343がPASSWORD

meetme.conf

[rooms]
conf => 300

300をダイアルすれば、会議室に繋がるようextensions.confに書き加えます。

extensions.conに追加

exten => 300,1,Meetme(300)
exten => 300,n,Hangup

すこしmeetme.confの説明を付け加える。
300番をダイアルすると、スグに会議室に繋がるが、誰も接続していない場合、無音になり稼働しているのかわからなくなります。そこで、extensions.confで、
exten => 300,1,Meetme(300|M) ← M を付け加えています。
こうすることによって、会議室に1人しか接続していない場合、保留音が流れるようになります。

ここまでの設定が終われば、asteriskを再起動するか、CLIでreloadします。

reload app_meetme.so
dialplan reload

RasPi2 Asterisk 050plus 収容準備

簡単なhtmlを書いて、050plusの接続情報を入手する。
先人たちの情報を有り難く頂戴し、情報を入手出来ました。
ifVerが違うと取得出来ないとこや、apVerなどいろいろ書き換えてやってみました。
何度か間違った情報をpostすると弾かれます。その場合は、パスワードを初期化して翌日にでもチャレンジすればOKのようです。

</html>
<html>
<form method="post" action="https://start.050plus.com/sFMCWeb/other/InitSet.aspx">
<p><input type="text" name="ifVer" value="3.0"/>
<p><input type="text" name="apVer" value="2.0.4"/>
<p><input type="text" name="buildOS" value="IOS"/>
<p><input type="text" name="buildVer" value="5.1"/>
<p><input type="text" name="buildModel" value="Android"/>
<p><input type="text" name="earlyStFlg" value="0"/>
<p><input type="text" name="no050" value="050電話番号"/>
<p><input type="text" name="pw050" value="パスワード"/>
<P><input type="submit" value="送信" />
</form>
</html>

2015/4/25取得できることを確認した。

正常に処理されると、xmlでデータが返されます。

<replyInfo>
   <resultInfo>
     <resCd>N0000</resCd>
     <resMsg>正常に終了しました</resMsg>
     <errCd/>
   </resultInfo>
   <resultEarlySt>
      <sipID>xxxxxxxx</sipID>
      <sipPwd>xxxxxxxx</sipPwd>
   <tranGwInfo>
      <tranGwAd>xxxx-xxxxx.050plus.com</tranGwAd>
      <payTranGwPNm>xxx</payTranGwPNm>
      <freeTranGwPNm>xxxx</freeTranGwPNm>
      <nicNm>xxxxxxxxxxx</nicNm>
      <pingTm>600</pingTm>
      <pongTm>120</pongTm>
   </tranGwInfo>
   <ticketInfo>
      <ticketEx/>
   </ticketInfo>
      <chargPlan>xx</chargPlan>
      <frdCd>xxxxxxxx</frdCd>
      <rNo050>050xxxxxxxx</rNo050>
      <rDistingId>xxxxxxxxx</rDistingId>
   </resultEarlySt>
</replyInfo>

この情報をもとに、後日sip.confに書き加えます。

OCN モバイル ONEを使うと、050plus番号が1つサービスで付与されるので、お得です。

sakura internet レンタルサーバーのターミナル設定

Mac OSXからssh でログインしていますが、日本語が表示されてなかったので、すこし調べてみた。
結果は、単純にLANGが指定されていなかっただけですが、viやその他すこし設定した内容を覚書しておく。
まず、使っているサーバーはやはりFreeBSDなのですね。

uname -a
FreeBSD www385.sakura.ne.jp 9.1-RELEASE-p22 FreeBSD 9.1-RELEASE-p22 #0: Wed Dec  3 15:24:48 JST 2014     root@www3304.sakura.ne.jp:/usr/obj/usr/src/sys/SAKURA17  amd64

しかも知らない間に9.1-RELEASEになってた。

まず、.bash_profile , .bashrc .vimrcを作成していく。
.vimrc
文字コードを自動認識してくれるrcがあるようで、そのまま有り難く頂戴する。

.vimrc
.vimrc
"#####表示設定#####
set number "行番号を表示する
set title "編集中のファイル名を表示
set showmatch "括弧入力時の対応する括弧を表示
syntax on "コードの色分け
set tabstop=4 "インデントをスペース4つ分に設定
set smartindent "オートインデント

"#####検索設定#####
set ignorecase "大文字/小文字の区別なく検索する
set smartcase "検索文字列に大文字が含まれている場合は区別して検索する
set wrapscan "検索時に最後まで行ったら最初に戻る

" 文字コードの自動認識
if &encoding !=# 'utf-8'
  set encoding=japan
  set fileencoding=japan
endif
if has('iconv')
  let s:enc_euc = 'euc-jp'
  let s:enc_jis = 'iso-2022-jp'
  " iconvがeucJP-msに対応しているかをチェック
  if iconv("\x87\x64\x87\x6a", 'cp932', 'eucjp-ms') ==# "\xad\xc5\xad\xcb"
    let s:enc_euc = 'eucjp-ms'
    let s:enc_jis = 'iso-2022-jp-3'
  " iconvがJISX0213に対応しているかをチェック
  elseif iconv("\x87\x64\x87\x6a", 'cp932', 'euc-jisx0213') ==# "\xad\xc5\xad\xcb"
    let s:enc_euc = 'euc-jisx0213'
    let s:enc_jis = 'iso-2022-jp-3'
  endif
  " fileencodingsを構築
  if &encoding ==# 'utf-8'
    let s:fileencodings_default = &fileencodings
    let &fileencodings = s:enc_jis .','. s:enc_euc .',cp932'
    let &fileencodings = &fileencodings .','. s:fileencodings_default
    unlet s:fileencodings_default
  else
    let &fileencodings = &fileencodings .','. s:enc_jis
    set fileencodings+=utf-8,ucs-2le,ucs-2
    if &encoding =~# '^\(euc-jp\|euc-jisx0213\|eucjp-ms\)$'
      set fileencodings+=cp932
      set fileencodings-=euc-jp
      set fileencodings-=euc-jisx0213
      set fileencodings-=eucjp-ms
      let &encoding = s:enc_euc
      let &fileencoding = s:enc_euc
    else
      let &fileencodings = &fileencodings .','. s:enc_euc
    endif
  endif
  " 定数を処分
  unlet s:enc_euc
  unlet s:enc_jis
endif
" 日本語を含まない場合は fileencoding に encoding を使うようにする
if has('autocmd')
  function! AU_ReCheck_FENC()
    if &fileencoding =~# 'iso-2022-jp' && search("[^\x01-\x7e]", 'n') == 0
      let &fileencoding=&encoding
    endif
  endfunction
  autocmd BufReadPost * call AU_ReCheck_FENC()
endif
" 改行コードの自動認識
set fileformats=unix,dos,mac
" □とか○の文字があってもカーソル位置がずれないようにする
if exists('&ambiwidth')
  set ambiwidth=double
endif

つづいて、.bash_profile

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
       . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin
export PATH

LANG=ja_JP.UTF-8
export LANG

最後に、.bashrc

# .bashrc
 
# Source global definitions
if [ -f /etc/bashrc ]; then
       . /etc/bashrc
fi

# User specific aliases and functions
#export LANG=ja_JP.UTF-8

# path
export PATH="$PATH":/usr/sbin:/sbin
alias vi='vim'

ちなみに、.profileはこんな感じ

# $FreeBSD: src/share/skel/dot.profile,v 1.19.2.2 2002/07/13 16:29:10 mp Exp $
#
# .profile - Bourne Shell startup script for login shells
#
# see also sh(1), environ(7).
#

# remove /usr/games and /usr/X11R6/bin if you want
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/usr/X11R6/bin:$HOME/bin; export PATH

# Setting TERM is normally done through /etc/ttys.  Do only override
# if you're sure that you'll never log in via telnet or xterm or a
# serial line.
# Use cons25l1 for iso-* fonts
# TERM=cons25;  export TERM

BLOCKSIZE=K;    export BLOCKSIZE
EDITOR=vi;      export EDITOR
PAGER=more;     export PAGER

# set ENV to a file invoked each time sh is started for interactive use.
ENV=$HOME/.shrc; export ENV

[ -x /usr/games/fortune ] && /usr/games/fortune freebsd-tips
PS1="[\u@\h \W]\\$ "

alias ls="ls -G"

ここまで設定して再ログインすると、日本語表示出来ました。

現状のwww.club535.comについて

先ほど、データベースから削除してしまったサイトのデータのみ復旧しました。

しかしながら、写真に関するデータは全て飛んでしまっており復旧不可能です。

あしからず・・・

以前の記事を少し見てみましたが、やっぱりほとんど身についてませんねー。

こんな事やってたのかー!とかemacsを使ってた時があったんだ!とかemacsでメールまで受信してたわ!とか、少しだけれど自分で読んで自分で突っこんでみたくなったわ。

404pageをclub535用に書き換えました。

書換は、ja.poを編集してja.moにコンパイルするという流れなのですね。
今日初めて知りました。

$ vi ja.po
日本語で表示変更したい箇所を修正する。
$ msgfmt -o ja.mo ja.po

RasPi2 Asterisk + g729 codec

g729 codec は有料なのですが、open source版があるようなのでこちらをインストールしてみます。

このサイトが参考になりました。

open source版を使うには、INTEL COMPILERが必要になってくるみたいですが、面倒なので、bcg729+g729 codecの組み合わせでやってみます。

bcg729のインストール

$ cd ~/src
$ wget http://download-mirror.savannah.gnu.org/releases/linphone/plugins/sources/bcg729-1.0.0.tar.gz
$ tar zxvf bcg729-1.0.0.tar.gz
$ cd bcg729-1.0.0
$ ./configure --libdir=/lib
$ make
$ sudo make install

g729 codecのインストール
autogenを使っているので、libtoolをインストールしておく

$ sudo apt-get install libtool
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
以下の特別パッケージがインストールされます:
libltdl-dev
提案パッケージ:
libtool-doc gfortran fortran95-compiler gcj
以下のパッケージが新たにインストールされます:
libltdl-dev libtool
アップグレード: 0 個、新規インストール: 2 個、削除: 0 個、保留: 0 個。
821 kB のアーカイブを取得する必要があります。
この操作後に追加で 2,360 kB のディスク容量が消費されます。
続行しますか [Y/n]? Y

$ cd ~/src
$ wget http://asterisk.hosting.lv/src/asterisk-g72x-1.3.tar.bz2
$ tar jxvf asterisk-g72x-1.3.tar.bz2
$ cd asterisk-g72x-1.3

configure.acを修正する。

$ vi configure.ac
$ diff configure.ac configure.ac-
30,32c30,32
<   armv7l-*-linux-gnueabihf*)
<     cflags="-Os -pipe -mcpu=cortex-a9 -mtune=cortex-a9 -mfpu=vfp -mfloat-abi=hard"
<     march="armv7-a"
---
>   armv6l-*-linux-gnueabihf*)
>     cflags="-mcpu=arm1176jzf-s -mfloat-abi=hard -mfpu=vfp -O3 -Wall"
>     march="armv6zk"

autogen.shを走らせる

$ ./autogen.sh
$ ./configure --with-bcg729 --with-asterisk18
$ make
$ sudo make install

g729 codecが読み込まれているか確認するため、asteriskを再起動する。

$ sudo /etc/init.d/asterisk restart
$ sudo asterisk -vvvvv
CLI> core show translation
         Translation times between formats (in microseconds) for one second of data
          Source Format (Rows) Destination Format (Columns)

           g723   gsm  ulaw  alaw g726aal2 adpcm  slin lpc10  g729 speex  ilbc  g726  g722 siren7 siren14 slin16  g719 speex16 testlaw
     g723     -     -     -     -        -     -     -     -     -     -     -     -     -      -       -      -     -       -       -
      gsm     -     -     2     2    10001     2     1 10001 40001     - 50001 10001     2      -       -      3     -       -       2
     ulaw     - 10001     -     1    10001     2     1 10001 40001     - 50001 10001     2      -       -      3     -       -       2
     alaw     - 10001     1     -    10001     2     1 10001 40001     - 50001 10001     2      -       -      3     -       -       2
 g726aal2     - 10001     2     2        -     2     1 10001 40001     - 50001 10001     2      -       -      3     -       -       2
    adpcm     - 10001     2     2    10001     -     1 10001 40001     - 50001 10001     2      -       -      3     -       -       2
     slin     - 10000     1     1    10000     1     - 10000 40000     - 50000 10000     1      -       -      2     -       -       1
    lpc10     - 20000 10001 10001    20000 10001 10000     - 50000     - 60000 20000 10001      -       -  10002     -       -   10001
     g729     - 10001     2     2    10001     2     1 10001     -     - 50001 10001     2      -       -      3     -       -       2
    speex     -     -     -     -        -     -     -     -     -     -     -     -     -      -       -      -     -       -       -
     ilbc     - 20000 10001 10001    20000 10001 10000 20000 50000     -     - 20000 10001      -       -  10002     -       -   10001
     g726     - 20000 10001 10001    20000 10001 10000 20000 50000     - 60000     - 10001      -       -  10002     -       -   10001
     g722     - 10001     2     2    10001     2     1 10001 40001     - 50001 10001     -      -       -      1     -       -       2
   siren7     -     -     -     -        -     -     -     -     -     -     -     -     -      -       -      -     -       -       -
  siren14     -     -     -     -        -     -     -     -     -     -     -     -     -      -       -      -     -       -       -
   slin16     - 10002     3     3    10002     3     2 10002 40002     - 50002 10002     1      -       -      -     -       -       3
     g719     -     -     -     -        -     -     -     -     -     -     -     -     -      -       -      -     -       -       -
  speex16     -     -     -     -        -     -     -     -     -     -     -     -     -      -       -      -     -       -       -
  testlaw     - 10001     2     2    10001     2     1 10001 40001     - 50001 10001     2      -       -      3     -       -       -

g729が使えるようになってますね。

sip.confとextentions.confを書けばとりあえずは、使える状態になりました。

後は、時間をかけてsip.conf , extentions.confを作成していきます。