玄箱Pro Debian+Asterisk
目次
玄箱ProをDebian化する
このへんを参考にDebian化しちゃってください。後はDebianとして扱えますので・・・
上記を参考にするとDebian lennyのEABI環境になります。
注意:シリアルコンソールがないとDebian化は危険です。玄人指向のシリアルコンソールキットを使うか、改造してシリアルが使えるようにしてから実施してください。
コンパイル環境を整える
Debian化したならば、以下のパッケージを追加してAsteriskがコンパイルできるようにします。
gcc g++ libc6-dev make linux-libc-dev ncurses-dev perl-modules patch
# apt-get install gcc g++ libc6-dev make linux-libc-dev ncurses-dev perl-modules patch
いろいろと一緒に付いてくるものもインストールしてしまってください。
DAHDI
カーネルソースの準備
カーネルソースを/usr/srcに展開します。カーネルソースはlinux-libc-devに付いてきます。これを/usr/src/の下で展開し、ln -s linux-source-2.6.26 /usr/src/linux などしてシンボリックリンクを作成しておきます。
カーネルモジュールをを途中までコンパイルします。一旦、make menuconfigなどして.configを作ります。カーネルそのものを入れ換えるわけではないので、設定は適当でもかまいません。
.configファイルのバージョンを以下のように書き直します。(menuconfigで設定してもかまいませんが)
CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_LOCALVERSION="-2-orion5x" <これ CONFIG_LOCALVERSION_AUTO=y
カーネルモジュールをmake modulesでコンパイルします。実際に欲しいのはmodpostコマンドなので、これがコンパイルできればCTRL-Cブレークしてかまいません。ただし、モジュールがコンパイルされていないとzaptel/dahdiのmakeが何ぞ文句言うかもしれませんが。
HOSTCC scripts/mod/file2alias.o HOSTCC scripts/mod/modpost.o HOSTCC scripts/mod/sumversion.o HOSTLD scripts/mod/modpost <--これが出たらCTRL-CブレークしてOK HOSTCC scripts/kallsyms
DAHDIのコンパイル
玄箱ではどのみちdahdi_dummyしか使えないので、余計なものをコンパイル&インストールするのは無駄です。必要なものだけをコンパイルするには以下のように行います。
DAHDIのソースを展開します。今ならDAHDI Completeを落としてきてください。
linux/drivers/dahdi/Kbuild を編集します。要らないものをコメントアウトします。
obj-$(DAHDI_BUILD_ALL)$(CONFIG_DAHDI) += dahdi.o obj-$(DAHDI_BUILD_ALL)$(CONFIG_DAHDI_DUMMY) += dahdi_dummy.o #obj-$(DAHDI_BUILD_ALL)$(CONFIG_DAHDI_DYNAMIC) += dahdi_dynamic.o #obj-$(DAHDI_BUILD_ALL)$(CONFIG_DAHDI_DYNAMIC_LOC) += dahdi_dynamic_loc.o ~略~ #obj-$(DAHDI_BUILD_ALL)$(CONFIG_DAHDI_TOR2) += tor2.o #obj-$(DAHDI_BUILD_ALL)$(CONFIG_DAHDI_PCIRADIO) += pciradio.o #obj-$(DAHDI_BUILD_ALL)$(CONFIG_DAHDI_XPP) += xpp/ obj-$(DAHDI_BUILD_ALL)$(CONFIG_DAHDI_ECHOCAN_JPAH) += dahdi_echocan_jpah.o obj-$(DAHDI_BUILD_ALL)$(CONFIG_DAHDI_ECHOCAN_STEVE) += dahdi_echocan_sec.o
これでDAHDIをmakeしmake installします。
終わったら depmod -a をやっておきます。
実はこの状態でモジュールをロードしようとすると
debian:~# modprobe dahdi FATAL: Error inserting dahdi (/lib/modules/2.6.26-2-orion5x/dahdi/dahdi.ko): Invalid module format
このエラーが出てしまいます。解決方法がイマイチよくわからないので、誰か知ってる人がいたら教えてください。
とりあえず、-f オプションで逃げられるので、/etc/init.d/dahdi を以下のように作ってしまいます。
#! /bin/sh PATH=/sbin:/usr/sbin:/bin:/usr/bin DESC="dahdi telephony driver" NAME=dahdi DAHDI_MODULE=dahdi DAHDI_DUMMY=dahdi_dummy SCRIPTNAME=/etc/init.d/$NAME do_start() { modprobe -f dahdi modprobe -f dahdi_dummy } do_stop() { rmmod dahdi_dummy rmmod dahdi } case "$1" in start) do_start ;; stop) do_stop ;; reload) do_stop do_start ;; *) echo "Usage: $SCRIPTNAME {start|stop|reload}" >&2 exit 3 ;; esac
udevの調整
ユーザとグループを適当に登録しておきましょう。
# groupadd -g 5060 asterisk # useradd -g 5060 -u 5060 -d /var/lib/asterisk -s /usr/sbin/nologin asterisk
DAHDIをインストールすると、/etc/udev/rules.d に dahdi というファイルも入るので、これをリネームしておきます。リネームしたら、udevをリスタートします。
# cd /etc/udev/rules.d # mv dahdi 99-dahdi # /etc/init.d/udev restart
これで、上記のスクリプトなどでDAHDIをスタートすると、asterisk:asteriskのパーミッションでDAHDIがロードされます。
debian:~# ls -l /dev/dahdi/ total 0 crw-rw---- 1 asterisk asterisk 196, 254 Nov 7 19:19 channel crw-rw---- 1 asterisk asterisk 196, 0 Nov 7 19:19 ctl crw-rw---- 1 asterisk asterisk 196, 255 Nov 7 19:19 pseudo crw-rw---- 1 asterisk asterisk 196, 253 Nov 7 19:19 timer
Asterisk 1.4系
やはりGSM CODECがasmで引っかかります。なので、codecs/gsm/Makefileを例によって修正します。
debian:~# uname -a Linux debian 2.6.26-2-orion5x #1 Thu Nov 5 08:02:07 UTC 2009 armv5tel GNU/Linux
codecs/gsm/Makefile に以下のような行が3箇所ほどあるので
ifeq (, $(findstring $(PROC) , x86_64 amd64 ultrasparc sparc64 arm armv5b armeb hppa2.0 ppc powerpc ppc64 ia64 s390 bfin mipsel mips))
次のように追加しておく
ifeq (, $(findstring $(PROC) , x86_64 amd64 ultrasparc sparc64 arm armv5b armv5tel armeb hppa2.0 ppc powerpc ppc64 ia64 s390 bfin mipsel mips))
armv5bの後ろにarmv5telを追加すればOKです。
あとは普通にコンパイルできるはず・・・