BeagleBone Black Asterisk

2015年3月27日 (金) 18:58時点におけるTakahashi (トーク | 投稿記録)による版 (最近の)

目次

BeagleBone Black

http://beagleboard.org/Products/BeagleBone%20Black
注意:BeagleBone Blackを買いましょう。BeagleBone(白いやつ)は買ってはいけません。高いだけです!
Raspberry Piよりも、ちょっとだけ高性能。形状的にも収まりが良いので、Asteriskアプライアンスに良いかも。
Cortex-A8 1GHzでRAM 512MB、オンボードのフラッシュ(MMC) 2GBと割と豪華。
(Beagleboard,BeagleBoneはイマイチぱっとしなかったんだけどBlackはいい感じです)

Arch Linux

デフォルトでインストールされているÅngströmは何かちょっとモサっとするので使わず、Arch Linuxを使うことにします。
http://archlinuxarm.org/platforms/armv7/ti/beaglebone-black
ここを参考に。繰り返しますけどBeagleBone Blackですよ。BeagleBoneじゃないです。
なお、マイクロSDカードの準備とArch Linuxの基本部分のインストール(マイクロSDへの展開)は別なLinuxマシン上で行います。

マイクロSDカードを準備する

ターゲット、つまりBeagleBone Black上でAsteriskをコンパイルしてしまおうと思うので、そこそこ容量のあるマイクロSDカードが使いたいです。16GBもあれば十分すぎますけども。

パーティション作成

適当なLinuxマシン上でマイクロSDのパーティションを切ります。ポイントとしては先頭(パーティション1)はFAT32で64MBを用意し、残りはext4で残り全部を割当ます。
こんな感じです。

Command (m for help): p

Disk /dev/mmcblk0: 15.9 GB, 15931539456 bytes, 31116288 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xd00da379

        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1   *          32      133119       66544    e  W95 FAT16 (LBA)
/dev/mmcblk0p2          133120    29018111    14442496   83  Linux
/dev/mmcblk0p3        29018112    31115263     1048576   82  Linux swap / Solaris

swapはお好みでという感じです。Asteriskをswapアリでコンパイルしてみてもswapは使わなかったので、たぶん要りません。
上のリンクにも書いてありますが、まず自分のマイクロSDカードのデバイス名を見つけてください。ここでは/dev/sdbとします。間違えて他のデバイスを書き換えないように。

fdisk /dev/sdb

を実行し、もしすでに何らかのパーティションがある(普通ある)場合にはoコマンドで全部消します。
pコマンドでパーティションが無くなっていることを確認します。
nコマンドで新しいパーティションを作成し、pでプライマリ、1でパーティション番号1にします。
この時サイズ指定に+64Mと指定し、64MBのパーティションを作成します。
次にtコマンドでパーティションのIDを書き換えます。eを指定してWIN95 FAT16に指定します。
aコマンドで1番目のパーティション(今作ったやつ)をブート可能に設定します。
次にまたnコマンドで残りの容量をパーティション2として割当てます。このパーティションもプライマリに指定します。もし、swapを作りたい場合にはswapに割り当てる容量を差し引いた容量で作成しますが、swapが必要なければマイクロSDの残り全部を割当ます。

ファイルシステムを作成する

DOSパーティション(1)は

mkfs.vfat -F 16 /dev/sdb1

Linuxパーティション(2)は

mkfs.ext4 /dev/sdb2

のように指定して行います。これでマイクロSDの準備は完了。

Arch Linuxを入手・展開する

これも別なLinuxマシン上で実行します。基本的にアーカイブを入手してマイクロSDカード上に展開するだけです。ここでもマイクロSDカードは/dev/sdbとします。自分の環境にあわせて読み換えてください。

ブートローダ

まずブートローダを入手、展開します。

wget http://archlinuxarm.org/os/omap/BeagleBone-bootloader.tar.gz
mkdir boot
mount /dev/sdb1 boot
tar zxvf BeagleBone-bootloader.tar.gz -C boot
umount boot

エラー/ウォーニングは気にしなくて大丈夫です。FAT上でUIDが設定できないためです。

Arch Linux本体

wget http://archlinuxarm.org/os/ArchLinuxARM-am33x-latest.tar.gz
mkdir root
mount /dev/sdb2 root
tar zxvf ArchLinuxARM-am33x-latest.tar.gz -C root
umount root

以上でマイクロSDカードの準備は完了です。念のためsyncしてからカードを抜いてください。

BeagleBone BlackをArch Linuxで起動する

マイクロSDカードをBeagleBone Blackに挿入して起動します。この時、S2スイッチを押しながら電源を投入します。これはBeagleBone BlackにマイクロSDからブートするように指示するためです。
無事に起動したらネットワークコネクタ側のLEDがパカパカしますので、ssh等でログインします。ユーザ/パスワードはroot/rootです。うまく起動しない場合にはシリアルコンソールで確認することができるのですが、別途FTDIブレイクアウトの3V品が必要になります。

Bootloaderを書き換える

このままでも使えることは使えるのですが、一旦、電源オフにして再起動するとオンボードのMMCから起動しようとして失敗するため、マイクロSDから起動するようにブートローダを書き換えてしまいます。これはArch Linuxのインストールと同じようにします。
BeagleBone Black上でまずはブートパーティションのバックアップを取ります。

cd /
mount /dev/mmcblk1p1 /mnt
cd mnt
tar cvf ~/bootloader_bakup.tar *
cd ..

こんな感じで、内蔵MMC(mmcblk1)のパーティション1(p1)をコピーしておきましょう。
次にArch Linuxのブートローダーを入手しこれをパーティション1に上書きします。

wget http://archlinuxarm.org/os/omap/BeagleBone-bootloader.tar.gz
tar zxvf BeagleBone-bootloader.tar.gz -C mnt
umount mnt

これで電源を切ってもマイクロSDカードのArch Linuxからブートしてくるようになります。
(Asteriskで使うならÅngströmが起動しなくても問題ありません。内蔵MMC 2GBが勿体ない気もしますが、内蔵MMCは寿命が来てしまうと交換不能ですので温存しておくのがいいかもしれません。)

タイムゾーンの設定

デフォルトではCDTになっているので日本(JST)に修正します。一般的なLinuxマシンと同じでlocaltimeファイルのリンクを変更するだけです。

rm /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
# date
Tue Jul  9 17:04:40 JST 2013

コンパイルのための準備

Arch Linuxをインストールしただけではコンパイルに必要な環境が足りていません。実は、Arch LinuxにはパッケージでAsteriskがあるのですが、日本語対応のためにコンパイルすることにします。最低限必要なものを入れます。
まずはシステムをアップデートします。

pacman -Syu

wget,nslookupとかpatchが入っていないので

pacman -S wget
pacman -S dnsutils
pacman -S patch

GCC/G++

pacman -S gcc

GNU make

pacman -S make

Sqlite3を入れます

pacman -S sqlite

libxml2も入れます

pacman -S libxml2

MP3のソースを落とすにはSubversionも必要なので入れます

pacman -S subversion

以上でAsteriskのコンパイル環境が整いました。

Asteriskのコンパイル

あとは普通にパッチ、configure、makeでコンパイルができます。ざっと測ってみたところBeagleBone Black上では約1時間でコンパイルが完了します。ARMアーキですが特に問題なくコンパイルできるようです。
コンパイル方法についてはAsterisk 11のページを参照してください。
BeagleBone Black上でコンパイル/インストールしてみた後のマイクロSDの状況はこんな感じです。

# df -H
Filesystem      Size  Used Avail Use% Mounted on
/dev/root        15G  1.4G   13G  10% /
devtmpfs        260M     0  260M   0% /dev
tmpfs           260M     0  260M   0% /dev/shm
tmpfs           260M  279k  260M   1% /run
tmpfs           260M     0  260M   0% /sys/fs/cgroup
tmpfs           260M     0  260M   0% /tmp

グループ/ユーザの登録

いつもの感じで

groupadd -g 5060 asterisk
useradd -g asterisk -u 5060 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

起動設定

Arch Linuxではinit.dではなくsystemdを使ってデーモン類の起動/停止を行っています。
まず/lib/systemd/systemasterisk.serviceという名前で以下の内容のファイルを作ります。

[Unit]
Description=Asterisk Open Source PBX
After=network.target

[Service]
Type=forking
ExecStart=/usr/sbin/asterisk -U asterisk -G asterisk

[Install]
WantedBy=multi-user.target

注意:上記の引数はパーミッション変更した後用です。root起動する場合には-U,-Gを取ってください。
これをシンボリックリンクしておきます。

ln -s /usr/lib/systemd/system/asterisk.service /etc/systemd/system/multi-user.target.wants/asterisk.service

有効化します

systemctl enable asterisk

起動します

systemctl start asterisk

確認してみましょう

# ps -ef|grep asterisk
asterisk  1834     1  1 02:08 ?        00:00:04 /usr/sbin/asterisk -U asterisk -G asterisk
# systemctl|grep asterisk
asterisk.service            loaded active running   Asterisk Open Source PBX

最近の

BBBのDebainとAsterisk 13まで動かそうとすると色々要ります

aptitude install ncurses-dev
aptitude install libxml2
aptitude install libxml2-dev
aptitude install libssl-dev
aptitude install subversion
aptitude install uuid-dev
aptitude install libjansson libjansson-dev
aptitude install libsqlite3 libsqlite3-dev

Pj使う場合にはPj入れてください。割と普通にいけます(Debianだもの)。