Asterisk 18 LTSをUbuntu 20.04に導入する手順&ひかり電話HGWに接続して発信者番号を記録する方法
オープンソースのIP-PBXソフトウェアAsteriskを自宅のひかり電話に繋げたくなり、ラズパイ4上のUbuntu 20.04環境にAsteriskをインストールすることにしました。
ちなみに私は、Asteriskで音声応答などを行うつもりは今のところ無く、Asteriskをひかり電話HGW配下での子機としておき、「自宅のひかり電話に着信があった時にAsteriskが外部プログラムをキック (起動) して発信者番号を調べる仕掛け」を作りたいと思っていまして、今回の記事はその下準備となります。
Asteriskをソースからインストール
Asteriskのインストールは次のページをめいっぱい参考にしながら進めます。
“Step 1: Update Ubuntu System”
Ubuntu環境を諸々最新にしておきます。
sudo apt update
sudo apt upgrade
sudo reboot # 必要に応じて
“Step 2: Install Build Dependencies”
Asteriskのビルドに必要となる依存関係パッケージを導入します。
sudo apt update
sudo add-apt-repository universe
sudo apt install build-essential curl git libjansson-dev libncurses5-dev libnewt-dev libsqlite3-dev libssl-dev libxml2-dev subversion uuid-dev wget
“Step 3: Download Asterisk 18 tarball”
Asteriskのソースをダウンロードして、事前処理します。
cd ~/tmp
# https://www.asterisk.org/downloads/ からダウンロードできるLTS版が18系ならば asterisk-18-current.tar.gz
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-18-current.tar.gz
tar xvf asterisk-18-current.tar.gz
cd asterisk-18*/
contrib/scripts/get_mp3_source.sh
sudo contrib/scripts/install_prereq install
「Configuring libvpb1」の画面で「ITU-T telephone code:」の入力を求められたら、「81」を入力します (導入環境が日本国内の場合)。
“Step 4: Build and Install Asterisk 18 on Ubuntu 20.04|18.04”
Asteriskのソースをconfigureします。
./configure
「Error 4」対応
./configure
が次の内容でエラー終了してしまう時。私のネットワーク環境の問題なのかタイムアウト (短め?) でエラーになっているようなので、configureの前にあらかじめpjproject-2.10.tar.bz2
を手動でダウンロードしておくと良いようです。
[pjproject] Downloading https://raw.githubusercontent.com/asterisk/third-party/master/pjproject/2.10/pjproject-2.10.tar.bz2 to /tmp/pjproject-2.10.tar.bz2
[pjproject] Retrying download
[pjproject] Downloading https://raw.githubusercontent.com/asterisk/third-party/master/pjproject/2.10/pjproject-2.10.tar.bz2 to /tmp/pjproject-2.10.tar.bz2
make: *** [Makefile:102: /tmp/pjproject-2.10.tar.bz2] Error 4
make: *** Deleting file '/tmp/pjproject-2.10.tar.bz2'
failed
configure: Unable to configure third-party/pjproject
configure: error: Re-run the ./configure command with 'NOISY_BUILD=yes' appended to see error details.
具体的には次のようにpjproject-2.10.tar.bz2
を別途ダウンロードしておいた後、./configure
します。
$ wget -O /tmp/pjproject-2.10.tar.bz2 https://raw.githubusercontent.com/asterisk/third-party/master/pjproject/2.10/pjproject-2.10.tar.bz2
$ ./configure
(snip)
[pjproject] Verifying /tmp/pjproject-2.10.tar.bz2
[pjproject] Verify successful
[pjproject] Unpacking /tmp/pjproject-2.10.tar.bz2
(snip)
うまく行けば次のようにconfigureは正常終了します。
では、makeしましょう。
$ make menuselect # 何を選んだら良いかよく分からないので事実上pass
$ time make -j4 # 4並列で実行
(snip)
+--------- Asterisk Build Complete ---------+
+ Asterisk has successfully been built, and +
+ can be installed by running: +
+ +
+ make install +
+-------------------------------------------+
real 10m50.305s
user 28m12.658s
sys 4m16.878s
次のようにして管理者権限でインストールを進めます。
sudo make install
sudo make progdocs
sudo make samples
sudo make config
sudo ldconfig
“Step 5: Start Asterisk Service on Ubuntu 20.04|18.04”
asteriskを実行するユーザとグループを作成します。
sudo groupadd asterisk
sudo useradd -r -d /var/lib/asterisk -g asterisk asterisk
sudo usermod -aG audio,dialout asterisk
sudo chown -R asterisk.asterisk /etc/asterisk
sudo chown -R asterisk.asterisk /var/{lib,log,spool}/asterisk
sudo chown -R asterisk.asterisk /usr/lib/asterisk
asteriskを実行するユーザとグループを指定します。
$ sudo cp -a /etc/default/asterisk{,.original}
$ sudo vim /etc/default/asterisk
$ diff /etc/default/asterisk{.original,}
8,9c8,9
< #AST_USER="asterisk"
< #AST_GROUP="asterisk"
---
> AST_USER="asterisk"
> AST_GROUP="asterisk"
$ sudo cp -a /etc/asterisk/asterisk.conf{,.original}
$ sudo vim /etc/asterisk/asterisk.conf
$ diff /etc/asterisk/asterisk.conf{.original,}
75,76c75,76
< ;runuser = asterisk ; The user to run as.
< ;rungroup = asterisk ; The group to run as.
---
> runuser = asterisk ; The user to run as.
> rungroup = asterisk ; The group to run as.
asteriskサービスを起動してみて、とりあえずrunningとなっていればサービスをenableにします。
$ sudo systemctl restart asterisk
$ systemctl status asterisk
● asterisk.service - LSB: Asterisk PBX
Loaded: loaded (/etc/init.d/asterisk; generated)
Active: active (running) since Fri 2021-12-31 00:49:31 JST; 24s ago
Docs: man:systemd-sysv-generator(8)
Process: 1627227 ExecStart=/etc/init.d/asterisk start (code=exited, status=0/SUCCESS)
Tasks: 73 (limit: 629145)
CGroup: /system.slice/asterisk.service
└─1627242 /usr/sbin/asterisk -U asterisk -G asterisk
Dec 31 00:49:31 raspi4 systemd[1]: Starting LSB: Asterisk PBX...
Dec 31 00:49:31 raspi4 asterisk[1627227]: * Starting Asterisk PBX: asterisk
Dec 31 00:49:31 raspi4 asterisk[1627227]: ...done.
Dec 31 00:49:31 raspi4 systemd[1]: Started LSB: Asterisk PBX.
Dec 31 00:49:33 raspi4 asterisk[1627242]: radcli: rc_read_config: rc_read_config: can't open /etc/radiusclient-ng/radiusclient.conf: No such file or directory
Dec 31 00:49:33 raspi4 asterisk[1627242]: radcli: rc_read_config: rc_read_config: can't open /etc/radiusclient-ng/radiusclient.conf: No such file or directory
$ sudo systemctl enable asterisk
asteriskのCLIが動作するか確認します。
$ sudo asterisk -rvv
Asterisk 18.9.0, Copyright (C) 1999 - 2021, Sangoma Technologies Corporation 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.
=========================================================================
Running as user 'asterisk'
Running under group 'asterisk'
Connected to Asterisk 18.9.0 currently running on raspi4 (pid = 1627242)
raspi4*CLI> exit
Asterisk cleanly ending (0).
Executing last minute cleanups
asteriskが使用するポートを、必要があれば開放しておきます。
$ sudo ufw status
Status: inactive
# もしufwのStatusがactiveならば
$ sudo ufw allow proto tcp from any to any port 5060,5061
以上で、Asterisk 18をUbuntu 20.04にインストールする手順は終わりです。
Asteriskをひかり電話HGWに接続して発信者番号を記録する方法
次のページをめいっぱい参考にして、構築したasteriskをひかり電話HGWに接続します。
下記の例では、ひかり電話HGWのLAN内IPアドレスを「192.168.2.1
」としています。
Step-1: 設定ファイル編集
pjsip.conf
/etc/asterisk/pjsip.conf
を次の内容のみに編集します。
[simpletrans]
type=transport
protocol=udp
bind=0.0.0.0
[hikari-denwa]
type=registration
transport=simpletrans
outbound_auth=hikari-trunk
server_uri=sip:192.168.2.1
client_uri=sip:【HGWでasteriskに割り当てた内線番号】@192.168.2.1
retry_interval=60
[hikari-trunk]
type=auth
auth_type=userpass
password=【当該内線番号のpassword】
username=【当該内線番号のusername】
[hikari-trunk]
type=aor
contact=sip:192.168.2.1
[hikari-trunk]
type=endpoint
transport=simpletrans
context=from-hikari
disallow=all
allow=ulaw
outbound_auth=hikari-trunk
aors=hikari-trunk
direct_media=no
from_user=【asteriskの内線番号】
from_domain=192.168.2.1
dtmf_mode=inband
[hikari-trunk]
type=identify
endpoint=hikari-trunk
match=192.168.2.1
extensions.conf
続いて、/etc/asterisk/extensions.conf
を次の内容のみに編集します。
[globals]
COMMAND_TEST=/usr/bin/logger
[from-hikari]
exten => s,1,Ringing()
exten => s,n,System(${COMMAND_TEST} -i -t asterisk 'call_from=${CALLERID(num)}')
Step-2: 動作確認
asteriskサービスを再起動した後、asteriskがひかり電話HGWへ登録できていること (Registered) を確認します。
$ sudo systemctl restart asterisk
$ sudo asterisk -rvv
(snip)
raspi4*CLI> pjsip show registrations
<Registration/ServerURI..............................> <Auth..........> <Status.......>
==========================================================================================
hikari-denwa/sip:192.168.2.1 hikari-trunk Registered
Objects found: 1
この状態で外線から自宅 (ひかり電話) へ電話を掛けてみますと、定義している外部プログラムlogger
がキック (起動) され、引数の発信者電話番号 (070********
) がasteriskサーバのsyslogに記録されます。これは応用が利きそうで良い感じです。
$ tail -f /var/log/syslog | grep asterisk
Dec 31 03:05:52 raspi4 asterisk[32061]: call_from=070********
追記 [2021-12-31,2023-01-11]
Asteriskから外部プログラムを起動する応用として、続きを書きました。
- 自宅ひかり電話で着信した電話番号等をAsteriskからLINEに通知する [2021-12-31]
- Asteriskが自動応答して相手にメロディ等を聴かせる仕掛けで既知の迷惑電話に対応してみる [2023-01-11]