Asteriskを使ってみる(1)

Asteriskをインストール

以前、スマホを自宅の子機にする話を書いたのですが、その後、フリーのIP-PBXであるAsteriskにも興味が沸いたので構築してみることにしました。

とりあえずの目標は「ひかり電話の着信をIP-PBXを介し、指定したスマホで受ける」です。その先は鳴り分けとかもやってみたいですね。

まあ、とにもかくにもフリーのIP-PBXであるAsteriskのインストールですね。voip-info.jp様のページを参考にしてインストールしました。結構、いろんな組み合わせを試しましたが、最終的には以下の組み合わせで構築しました。

ハイパーバイザ:Citrix Hypervisor 8.1

OS:CentOS 6.10

IP-PBX:Asterisk1.6

(1) CentOS 6.10のセットアップ

CentOS6.10用のVMをHypervisorに作ります。今回はストレージを30GBで割り当てました。仮想DVDにはCentOS 6.10 のインストール用ISOをダウンロードしてセットします。

あとはServerモードでGUIなしのインストールをし、ネットワークの設定(/etc/sysconfig/network-scripts/ )を確認し、プライベートの固定IPを割り当てておきます。

(2) Asteriskのダウンロード

Asteriskのバージョンは1.6を選定しました。ネットでも情報が多そうなのと、新しすぎず、古すぎずといったところで選びました。 (実はCentOS8 + Asterisk1.8 や、 CentOS 7 + Asterisk1.3 も試したりしました。いずれも、私の環境ではコンパイルエラーになったり、Asteriskが起動できても停止と起動を頻繁に繰り返したりとうまくいきませんでした)

#Asterisk 1.6ダウンロードと展開

wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-16-current.tar.gz

tar zxvf asterisk-16-current.tar.gz

cd asterisk-16

(3) Asteriskのコンパイル準備

各種ツールをインストールします。

#開発ツールのインストール

yum install wget bzip2 patch

yum install subversion

yum install gcc gcc-c++

yum groupinstall “Additional Development”

yum groupinstall “Development tools”

yum install libxml2 libxml2-devel openssl-devel ncurses-devel sqlite-devel newt-devel libuuid-devel libedit-devel

#json-c

yum install json-c json-c-devel

#mysql

wget https://repo.mysql.com/yum/mysql-connectors-community/el/8/x86_64/mysql-connector-odbc-8.0.19-1.el8.x86_64.rpm

yum install mysql-connector-odbc

yum install unixODBC unixODBC-devel mysql-connector-odbc

yum install libtool-ltdl libtool-ltdl-devel

最後にインストール済みパッケージをまとめてupdate。

#update

yum update

ここまでできたらコンパイルの準備OKです。

(4) Asterisk 1.6 インストール

いよいよAsterisk1.6をコンパイルしてインストールします。

#configure

./configure –with-jansson-bundled

あと、日本語音声ファイルを追加するためにAsteriskの日本語音声モジュールを追加するためにmenuselect画面で「CoreSoundPakages – CORE_SOUNDS_JA_*」 にチェックをつけます。

#Asteriskモジュール選択

make menuselect

#インストール実行

make

make install

make samples

make config

ここまでエラーが出なければもうひと踏ん張りです。

この後、Asterisk1.6の設定サンプルファイルをダウンロードして配置します。

#Asterisk1.6 サンプルファイルダウンロード元

https://voip-info.jp/downloads/asterisk/conf/


#Asteriskの設定ファイル配置場所

/etc/asterisk

(5)実行権限設定

この後、Asteriskをrootで実行しないようにするために、ユーザー「asterisk」を作成して権限を割り当てます。

#パーミッション設定

groupadd asterisk

useradd -d /var/lib/asterisk -s /sbin/nologin -g asterisk asterisk

chown -R asterisk:asterisk /var/lib/asterisk

chown -R asterisk:asterisk /var/log/asterisk

chown -R asterisk:asterisk /var/spool/asterisk

chown -R asterisk:asterisk /etc/asterisk

chmod -R u=rwX,g=rX,o= /var/lib/asterisk

chmod -R u=rwX,g=rX,o= /var/log/asterisk

chmod -R u=rwX,g=rX,o= /var/spool/asterisk

chmod -R u=rwX,g=rX,o= /etc/asterisk

「vi /etc/asterisk/asterisk.conf」の設定変更も必要です。 runuser, rungroupを「asterisk」に設定します。作業としてはコメントアウトされていたrunuserとrungroupを探して、コメントアウトを外すだけでした。

(6) 起動確認

最後にasteriskを起動して実行ユーザーを確認します。

#起動確認

/etc/init.d/asterisk start

/etc/init.d/asterisk status

ps -u asterisk

これで一応、Asteriskのインストールは完了です。

尚、この後、SIPクライアントから接続できるようにファイアウォールの設定変更が必要です。OSで iptables が自動起動されるようになっていたので、Asteriskが利用できるようにするために5060番のポートを開放する必要がありました。

ディスクの使用容量は以下の通りで、30GBのうち16%しか消費していませんでした。

メモリは2Gしか割り当てていませんが、私一人でテストするだけなので、とりあえずはこれで十分。

Citrix Hypervisor にSRを追加

先日購入したマザーボードASUS H310M-A R2.0 のマシンにCitrix Hypervisor Express Edition (無償版)をインストールして、LinuxやWindowsのVM (virtual machine)を構築しました。

あとはバックアップの方法ですが、メールや文書ファイル、資料などはOffice 365 (Microsoft 365)でクラウド保管なので、何らかのシステム変更があったときだけディスクイメージを取るというやり方です。

ディスクイメージはバックアップソフトでも取れますが、Hypervisorにストレージを追加してVM Copyを実行するのがお金もかからず手っ取り早いです。

いざというときはコピーしておいたVMをそのまま起動しちゃえば復活です!

この方法なら、リカバリ時間はほぼゼロ。とっても楽です。

大規模になれば「どこに冗長化を置くのか」「復元ポリシーをどう定義するのか」などを入念に検討する必要がありますが、小規模な開発環境のバックアップならとりあえずSRを増やして、SRをとっかえひっかえして小回りよく動くことが得策かと思います。

今回は手元に古いHitachiの1TBのSATAのHDDがあったので、これをHypervisorのSR(Storage Repository)に追加します。

XenCenterでコンソールを開き、fdiskコマンドで追加したハードディスクを初期化して単一パーティションを作成した後、「ll /dev/disk/by-id」でHitachiのディスクがsdb1として認識されていることが確認できました。

後はコンソールにて以下の手順でHDDをSRに登録します。

(1) host uuid を調べる

# xe host-list

(2) SR作成します。「Local Hitachi_HDE721010SLA330」という名前で作成しました。 ここでSRのuuidが生成されますのでメモしておきます。

# xe sr-create type=lvm content-type=user host-uuid=<host uuid> device-config:device=/dev/sdb1 name-label=”Local Hitachi_HDE721010SLA330″

(3) SRをスキャンしてエラーが出ないことを確認します。 尚、ローカルハードディスクを使う場合は typeパラメータを「lvmohba」にします。iSCSIなら「lvmoiscsi」、 NFSなら「nfs」を指定します。

# xe sr-probe type=lvmohba device-config:device=/dev/sdb1

(4) SRのuuidをイントロデュースします

# xe sr-introduce uuid=<sr uuid> shared=false type=lvmohba name-label=”Local Hitachi_HDE721010SLA330″

(4) SRに添付するPBDを作成します。これにより、新規PBDのUUIDが返されます。

# xe pbd-create sr-uuid=<sr uuid> device-config:device=/dev/sdb1 host-uuid=<host uuid>

(5) 作成したpbdをプラグします。

# xe pbd-plug uuid=<pbd uuid>

以上をもってXenCenterにてSRが追加されたことが確認できました。めでたし。

尚、SRを他のHypervisorで使いたくなったら、「xe pbd-list」でpbd uuidを確認してからアンプラグしてHypervisorから離脱させ、移動先のHypervisorでさきほどの手順を実行してプラグしてやれば、SR内のデータを壊さずに復元できます。

# xe pbd-list

# xe pbd-unplug uuid=<pbd uuid>

# xe sr-forget uuid=<sr uuid>

参考URL: https://support.citrix.com/article/CTX220536

しかし、あれですね、Citrix XenServerから製品名を変えたCitrix Hypervisorの行く末はどうなるのでしょう? 

管理ツールはなぜか「XenCenter」から名称が変更されておらず、Xenの名が残っていますが・・・。

無償版のハイパーバイザはKVMが人気のようで、自分は10年以上もXenServerを触っているので慣れているというだけで使っています。今後、KVMの勢力がどれぐらい大きくなるのかが気になります。

ASUS H310M-A R2.0 購入

開発作業用PCのマザーボード ASUS P5B-Vに載せているメモリが破損。

もう、12年も使ったので仕方ないです。CPUもCore2Duo E6300 なので時代遅れも甚だしい。

なぜかストレージだけは交換していて、Samsungの860 EVO 1TB と高スペック。860 EVOの性能を引き出すためにもマザーボードごとの交換を決意しました。

仕事にならないので早速、近所のアプライドへいそいそと。

これを機会に仮想サーバー (Citrix Hypervisor 8.1)をお安く導入しようと思いました。CentOS6 (テスト用)、CentOS7 (Samba用)、Windows10(開発用)の最低3つのOSは稼働させたいのです。

電源と1TBのSSDと筐体はそのまま流用するとして、購入するのは、

・マザーボード

・CPU

・メモリ

です。マザーボードを買いに来るのも数年ぶり。

CPUは Core i3 9100が12,900円でお安いので即決。

Core i5にすると物理6コアまで増えますが値段が2倍だったのでケチっておきました。 これでCitrix Hypervisor上で仮想マシンを最低3台ぐらいは動かすつもりです。

DDR4メモリは16GBで約1万円なり。GUIなしのCentOS 2台とWindows 10を1台ならこれで十分です。

あとはマザーボードですが、税込み7,800円でASUS H310M-A R2.0を購入。

ASUS H310M-A R2.0

microATXなので拡張性は少ないですが、ゲームをするわけではないのでこれで十分でしょう。

左下の黄色い線はLEDになっていて、通電状態を確認できるようです。電源OFFにした後、コンデンサーの電気が放電して空になるまではLEDが光るしくみのようです。通電状態で下手に触ってマザーボードを壊してしまわないように、目で確認できるしくみですね。

フロッピードライブやIDE、IEEE1394のコネクタはなくなっています。 マザーボード右下のPower LEDも3ピン端子から2ピン端子になっているし、 M.2とかいうインターフェイスも搭載されていて浦島太郎のような気分です。

でも、CPUの Core i3-9100 は Core2Duo E6300 と比べて5倍ぐらいのスペックがあるみたいです。3万円でパソコンの能力が5倍になって、仮想マシン3台を手に入れたと考えれば安いもんでしょうか・・・。

下は取り外した P5B-V。12年間、お疲れ様でした。

RAID1も組める安定感抜群のマザー。メモリは壊れましたが、P5B-Vは壊れないままの引退となりました。

翌日にはCitrix Hypervisor 8.1 Express Edition が無事に動作し、CentOS6, CentOS7がインストールできました。

しかし、XenCenterでCPUコア数をよく見ると4コアしか認識していないことに気が付きました! CPU 0 ~ CPU 3 までしか表示されません。

調べてみたら、 今のCore i3シリーズではハイパースレッディング(HT)って廃止されたんですね。物理4コアにハイパースレッディングが効いて仮想8コアが使えると思ってCPUを選んだんですが・・・。よく考えたら、たった1万2千円のCPUで8コアも使えるという考えが甘すぎでした。

  物理2コア × 2(HT) = 4スレッド

だったのが、第8世代からは、

  物理4コア × 1 = 4スレッド

という仕様になって、合計スレッド数に変化はないとのこと。

「今のCore i3 ってすげぇ、物理4コアもあるの? 10年も過ぎたらすごいことになってんだな」って喜んで、合計スレッド数をよく見ないで買った私がアホでした・・・。

Windows Server も動かしたいときはコア数がもう少し多いCPUの方が都合がいいのですが、しばらくは4コアで我慢です。