BeagleBone Black Asterisk
目次
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/systemにasterisk.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だもの)。