Asterisk 18をRocky Linux 8でビルドして動かす

はじめに

現在、自宅に建っているAsteriskサーバが13なのでそろそろサポートが切れる頃合いとなってきてしまったので、ついでにOSもCentOS 7からRocky Linux 8へと移行して、Asteriskを立て直してみました。

voip-infoの情報だけではRocky Linuxにインストール出来なかったので、その辺の知見を備忘録がてら記載しておきます。

以下が構築手順です。

SELinuxを一時的に無効にする

SELinuxを一時的にログを出すけれども、動作の制限は行わないモードにする

sudo setenforce permissive
sudo sed -i.bak -e 's/enforcing$/permissive/g' /etc/selinux/config

asteriskユーザの作成

asteriskを動作させるユーザを作成する

sudo useradd -s /sbin/nologin asterisk

ビルドに必要なパッケージのインストール

一部パッケージが標準リポジトリから入れられないので、epelとPower Toolsの力を借りる。

sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
sudo dnf groupinstall "Development Tools"
sudo dnf install opus-devel libedit libuuid libuuid-devel  libxml2 libxml2-devel ncurses ncurses-devel sqlite-devel sqlite-libs sqlite openssl-devel openssl-libs xmlstartlet subversion git
sudo dnf install --enablerepo=powertools libedit-devel

tarballを落としてビルドとインストール

ver.18の最新版を落としてきて、ビルドする。
インストール先は/opt/asteriskにする

curl -LO http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-18-current.tar.gz
tar -xf asterisk-18-current.tar.gz
cd asterisk-18.x.x
./configure --prefix=/opt/asterisk --with-jansson-bundled
make menuselect
# Codec Translatorsでcodec_opusとcodec_g729aを選択
# メインメニューは左キーで戻れる
# Core Sound Packagesで「CORE-SOUND-JA」で始まるものを全て選択
# 「Q」キーで終了出来る(設定を保存するかを訊かれるので「S」キーで保存)
make -j$(nproc)
sudo make install
sudo make sample
sudo make config
# systemdを使って起動するのでinitスクリプトは削除
sudo rm /etc/rc.d/init.d/asterisk
# asteriskをインストールしたディレクトリの所有権をasteriskユーザにする
sudo chown -R asterisk: /opt/asterisk
# asteriskコマンドを使いやすいようにパスを通しておく
echo -e "PATH=\"\$PATH:/opt/asterisk/sbin\"" | sudo tee /etc/profile.d/asterisk-path.sh
# また、visudoでsudoersのsecure_pathにも/opt/asterisk/sbinを追加しておく
sudo visudo # 88行目付近

systemdのunitファイルを書く

asteriskをサーバが立ち上がったときに自動起動するようにsystemdの定義ファイルを書いて/etc/systemd/system/asterisk.serviceに設置する。

[Unit]
Description=Asterisk PBX and telephony daemon.
After=network.target
#include these if asterisk need to bind to a specific IP (other than 0.0.0.0)
#Wants=network-online.target
#After=network-online.target network.target

[Service]
Type=simple
Environment=HOME=/opt/asterisk
#if systemd do not provide hostname and you need to use ${ENV(HOSTNAME)}
#Environment=HOSTNAME=%H
WorkingDirectory=/opt/asterisk
User=asterisk
Group=asterisk
ExecStart=/opt/asterisk/sbin/asterisk -mqf -C /opt/etc/asterisk/asterisk.conf
ExecReload=/opt/asterisk/sbin/asterisk -rx 'core reload'
#if /var/run is a tmpfs, this will create /var/run/asterisk on start
#RuntimeDirectory=asterisk

#Nice=0
#UMask=0002
LimitCORE=infinity
#LimitNOFILE=
Restart=always
RestartSec=4

# Prevent duplication of logs with color codes to /var/log/messages
StandardOutput=null

PrivateTmp=true

[Install]
WantedBy=multi-user.target

systemdに変更を適用

sudo systemctl daemon-reload

asteriskを起動させてみる

asteriskを起動させてみて、正常に起動するか確認する。

sudo systemctl start asterisk.service

起動したことを確認する。

$ sudo systemctl status asterisk.service
● asterisk.service - Asterisk PBX and telephony daemon.
Loaded: loaded (/etc/systemd/system/asterisk.service; disabled; vendor preset: disabled)
Active: active (running) since Sun 2021-08-22 07:57:39 JST; 2s ago
Main PID: 116929 (asterisk)
Tasks: 76 (limit: 11394)
Memory: 37.7M
CGroup: /system.slice/asterisk.service
└─116929 /opt/asterisk/sbin/asterisk -mqf -C /opt/etc/asterisk/asterisk.conf

8月 22 07:57:39 localhost.localdomain systemd[1]: Started Asterisk PBX and telephony daemon..

※もし起動しない場合はカレントディレクトリを/opt/asteriskに移動してから以下のコマンドでasteriskを実行し、エラーなどを見る。

cd /opt/asterisk
sudo -s -u asterisk /opt/asterisk/sbin/asterisk -mqf -C /opt/etc/asterisk/asterisk.conf

asteriskがOSが立ち上がる際に自動起動するように設定する。

sudo systemctl enable asterisk.service

以上でasteriskのビルド及び実行方法の解説を終了する。

参考文献

Asterisk 18 – VoIP-Info.jp

Asterisk Startup systemd – VoIP-Info.jp