Asterisk 22


Asterisk 22.0.0が2024年10月16日(現地時間)リリースされました。

メンテナンス終了は2028年10月16日
セキュリティフィックス提供終了は2029年10月

目次

概要

Asterisk 22は最新のAsteriskのメジャーリリースで、Asterisk 20同様にLTS(Long Term Support:通常4年)になります。

https://docs.asterisk.org/About-the-Project/Asterisk-Versions/

Asterisk 20からの変更点で重要なもの

  • chan_sipは廃止(ソースコードも含まれない)
  • chan_alsa,chan_mgcp,chan_skinnyも廃止
  • app_macroは廃止

make menuselectで確認するとわかりますが、廃止予定だったチャネルはすべて廃止されています。

                       **************************************************
                           Asterisk Module and Build Option Selection
                       **************************************************

                                Press 'h' for help.

                                --- Core ---
                            [*] chan_bridge_media
                            [*] chan_dahdi
                            [*] chan_iax2
                            XXX chan_motif
                            [*] chan_pjsip
                            [*] chan_rtp
                                --- Extended ---
                            [*] chan_audiosocket
                            [*] chan_console
                            [*] chan_unistim

Asterisk 22で使用できるチャネルは上記だけです。
なおH.323やbluetooth(mobile)チャネルはこれまで通り、addon扱いです。

                       **************************************************
                           Asterisk Module and Build Option Selection
                       **************************************************

                                Press 'h' for help.

                                --- Extended ---
                            [ ] chan_mobile
                            [ ] chan_ooh323
                            [ ] format_mp3
                            XXX res_config_mysql

新機能

Asterisk 21で採用されたものを継承します。

テナントID

pjsip.confで tenantid= が設定できるようになりました。CHANNEL()ファンクションでこの値を参照/設定できるようになりました(CHANNEL(tenantid))。

pjsip_wizard

res_pjsip_config_wizard.so がリロード可能になりました。

RECORD_TIME

変数 RECORD_TIME が追加され、Record()で録音した場合の録音時間(ミリ秒)を返すようになりました。

削除されたもの

CDR

NoCDRが削除、ResetCDRの'e'オプションが削除

app_macro

Macroは完全に削除。Macroを利用していたextenは要注意。
Asterisk app_ のオプション類でマクロを呼び出せたものもマクロは使用不可となったのでGosubに置換すること。

app_dialのMオプションも削除
app_minivmマクロを使用した記述は動作しない
app_queue 呼び出し先でマクロは使用できない
ccss コールバックマクロはなし gosubのみ
app_voicemail マクロサポートはなし
チャネル マクロコンテキスト/プライオリティは削除
オプション stdexten
pbx マクロロックが削除
pbx_dundi マクロはサーチしない
snmp マクロコンテキスト,exten,プライオリティは削除

app_osplookup

このモジュールは削除(Asterisk 19で非推奨)

chan_alsa

このモジュールは削除(Asterisk 19で非推奨)
chan_console へ移行のこと

chan_mgcp

このモジュールは削除(Asterisk 19で非推奨)

chan_sip

このモジュールは削除(Asterisk 17で非推奨)
要注意:完全に削除。明示指定してコンパイルすることも不可。

chan_skinny

このモジュールは削除(Asterisk 19で非推奨)
Cisco電話機(skinny)は使用不可。

pbx_builtins

ImportVar、SetAMAFlagsは削除

res_monitor

このモジュールは削除(Asterisk 16で非推奨)
これによりapp_queueのWおよびwオプションも削除
MixMonitorを使用すること。

その他

ドキュメントの整備がまだのようです(2024/10/18)。
https://docs.asterisk.org/Asterisk_22_Documentation/WhatsNew/

注意

  • SIPチャネル要注意
SIPチャネルはPjSipが標準となりました。chan_sipはソースも配布されず完全に廃止されました。

Asterisk pjsip

  • Macro廃止
Macroが完全廃止されました。Gosub/Returnへの書き換えが必要です。
extenでMacroを多用している例は多いので22へ移行する場合には対応してください。

現状

2024/10 : Asterisk 20からのアップグレードで問題はなさそうです。API周り等で細かいところまではチェックしていませんが、Asterisk 18ベースのextenでは特に問題がないようにみえています。

インストール

前提となるパッケージ類

GCC、G++(GNU-C++)、OpenSSL、Ncurses、bison、カーネルソース(DAHDIを使う場合)、libxml2、SQLite3、libuuid-devel
dnsutilsは使う人がいるかもなので追加。libsrtp2はブラウザフォン対応用、libunboundはRTX/NVRで直収のため。
Debianで説明します。
以下の例はbookworm最小インストール(netinstall)からパッケージを追加した例です。

apt -y install build-essential libedit-dev uuid-dev libxml2-dev ncurses-dev libsqlite3-dev sqlite3 libssl-dev subversion git net-tools dnsutils libsrtp2-dev libunbound-dev

Asteriskの基本的な部分は上記のパッケージ追加で問題ないと思います。なおJanssonはAsteriskのバンドルでインストールしますので、configure時に指定します。
Asterisk 20と同様の環境でコンパイルできました。

Asteriskソースの入手

Asterisk 22のソースは以下からダウンロードできます。なお asterisk-22-current.tar.gz が最新バージョンへのシンボリックリンクとなっていますので、これをダウンロードすれば最新バージョンが入手できます。

http://downloads.asterisk.org/pub/telephony/asterisk/

展開するディレクトリはどこでもかまいませんが、ここでは/usr/src/とします。

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

入手したら展開しておきます。展開すると現在のAsteriskのバージョンのディレクトリに展開されます。以降それぞれの作業は、それぞれの展開したサブディレクトリで行います。

# tar zxvf asterisk-22-current.tar.gz
# cd asterisk-22.x.x

Asteriskのコンパイルとインストール

基本的にconfigureしてmakeするだけですが、Janssonをバンドルで行うので以下のオプションでconfigureします。。

# ./configure --with-jansson-bundled


以前のバージョンからアップグレードを行う場合、変更されたモジュール類が多いので、一旦、以前のモジュールをディレクトリごと名前変更してバックアップしてからインストールしてください。

mv /usr/lib/asterisk/module /usr/lib/asterisk/module.20.bak

あとはコンパイルとインストールを行うだけです(新規インストールの場合)。

# make
# make install
# make samples
# make config

これで新規インストールは完了します。最後の make config で起動時に自動起動するようになります。
アップグレード時の注意:以前のバージョンからアップグレードする場合、/etc/asterisk の設定ファイル類をバックアップしてから行ってください。make samplesすると /etc/asterisk の内容を上書きしてしまいます。アップグレード時は make installするだけで事足りることが多いです。(make configはシステムのスタートアップファイル類を更新するので大きな変更がない場合には更新の必要はありません。

『何か』が足りない場合のヒント

Asteriskのモジュールでコンパイルされないものが出てきた場合には以下の方法で対処してください。Asteriskの機能アップとともに依存するパッケージも増えているので『新しい機能を使いたいのに動かない』ような場合には要チェックです。
make menuselectを実行します。コンパイルされていないモジュールを探します。例えば以下はLUAが使いたいけど、使えない場合に調べてみると'pbx_lua'がコンパイルされていない例です。

                              **************************************************
                                  Asterisk Module and Build Option Selection
                              **************************************************

                                       Press 'h' for help.

                                       --- Core ---
                                   [*] pbx_config
                                   [*] pbx_loopback
                                   [*] pbx_spool
                                       --- Extended ---
                                   [*] pbx_ael
                                   XXX pbx_dundi
                                   XXX pbx_lua
                                   [*] pbx_realtime

XXXで表示されるものは『何か』が足りないのでコンパイル/インストールされないものです。カーソルを該当する箇所に移動すると、画面の下の方をみると次のような表示があるはずです。

                              Lua PBX Switch

                              Depends on: lua(E)

                              Support Level: extended

Depends onが何に依存しているかの情報で要するに"lua"に依存していることがわかります。
ではluaのパッケージを追加すればOKかというと、それだけでは不足で、Asteriskはソースからコンパイルするので、単純なパッケージ追加だけではなく-devも追加する必要うがあります。なので、例えばLUAならば。

apt install lua5.3
apt install lua5.3-dev

のように、devパッケージも併せてインストールします。
インストールが終わったら再度configureとmake menuselectをしてみましょう。

# ./configure --with-jansson-bundled
# make menuselect

再度確認すると次のようになっているはずです。

                                       --- Extended ---
                                   [*] pbx_ael
                                   XXX pbx_dundi
                                   [*] pbx_lua
                                   [*] pbx_realtime

これで表示が[*]となったので、コンパイル/インストールされることがわかります。このようにして何のパッケージが不足しているかを確認/追加します。
ただしAsteriskのmake menuselectで表示されるパッケージ名称は『一般的な』ものなので自分のディストリでそれが何に相当するのかは調べてください。

日本語音声のインストール

Asteriskの本体に付随する日本語音声は古いためGoogle TTSで合成した日本語音声(トーキー)を用意してあります(Asterisk 18ベース)。githubに用意してありますのでご利用ください。
※core-sounds.txtを確認したところ、18と20,22で音声の差異は無いようです。

git clone https://github.com/takao-t/asterisk-sound-ja.git

tarでまとめたものを展開します。

cd asterisk-sound-ja
cp core-sound-ja.tgz /var/lib/asterisk/sounds/.
cd /var/lib/asterisk/sounds/
tar zxvf core-sound-ja.tgz

これで sounds/ja の下に日本語音声ファイル類が入ります。LANGUAGE系の設定をjaにすると日本語音声が使えます。
日本語文法に必要なパッチ類を以前提供していましたが、現在ではAsterisk本体にマージされているため文法はLANGUAGEの設定のみで対応できます。

ユーザの追加と設定

Asteriskをasterisk:asteriskで起動させるために以下のようにグループ/ユーザを追加します。UID,GIDの5060は単なる趣味です。

addgroup --gid 5060 asterisk
adduser --uid 5060 --gid 5060 asterisk --disabled-password

Asteriskの実行ユーザ/グループは /etc/defaults/asterisk を編集します。以下の部分のコメントを外します。

# Uncomment the following and set them to the user/groups that you
# want to run Asterisk as. NOTE: this requires substantial work to
# be sure that Asterisk's environment has permission to write the
# files required  for  its  operation, including logs, its comm
# socket, the asterisk database, etc.
AST_USER="asterisk"     <==ここと
AST_GROUP="asterisk"    <==ここ

ディレクトリ/ファイル類の権限も調整しておきましょう。

chown -R asterisk:asterisk /var/log/asterisk
chown -R asterisk:asterisk /var/lib/asterisk
chown -R asterisk:asterisk /var/spool/asterisk
chown -R asterisk:asterisk /usr/lib/asterisk
chown -R asterisk:asterisk /etc/asterisk

これでsystemctlで起動すればAsteriskが動くはずです。

サンプル設定ファイルと応用例