voyage linux custom build of asterisk
出典: 有限会社クラフト 技術情報
前書
カスタムビルド環境
- chroot配下にvoyage linuxをインストールして、asteriskをカスタムビルドする。chroot環境さえ構築できれば、どのディストリビューションでもビルド可能だと思われる。
- 確認済みディストリビューション: ubuntu 7.04。
説明上のターゲット機のスペック
- ディストリビューション: ubuntu 7.04
使用するgccのバージョン
voyage 0.3.1用環境の場合
- asterisk用のコンパイラ … gcc3.3
- zaptelカーネルモジュール … あり
voyage 0.4.1用環境の場合
- asterisk用のコンパイラ … gcc4.1
- zaptelカーネルモジュール … あり
ご参考まで
[ http://www.the-asterisk-book.com/unstable/installation-1.4-debian-4.0.html Installing Asterisk 1.4.x on Debian Linux 4.0 (Etch)]にお手本があります。
chroot環境構築
chrootのダウンロードと展開
http://www.voyage.hk/download/voyage/
voyage 0.3.1用環境の場合
cd mkdir voyage cd voyage LANG=C wget http://www.voyage.hk/download/voyage/voyage-0.3.1.tar.bz2 sudo tar xvjf voyage-0.3.1.tar.bz2 mv voyage-0.3.1 voyage-0.3.1-nopackage
voyage 0.4.1用環境の場合
cd mkdir voyage cd voyage LANG=C wget http://www.voyage.hk/download/voyage/voyage-0.4.1.tar.bz2 sudo tar xvjf voyage-0.4.1.tar.bz2 mv voyage-0.4.1 voyage-0.4.1-nopackage
最低限度必要なファイルをコピーしておく
voyage 0.3.1用環境の場合
sudo mkdir -p /home/hoge/voyage/voyage-0.3.1-nopackage/rw/etc sudo cp /etc/resolv.conf /home/hoge/voyage/voyage-0.3.1-nopackage/rw/etc/
voyage 0.4.1用環境の場合
sudo mkdir -p /home/hoge/voyage/voyage-0.4.1-nopackage/rw/etc sudo cp /etc/resolv.conf /home/hoge/voyage/voyage-0.4.1-nopackage/rw/etc/
chroot配下に入って、書き込み可能にしておく
voyage 0.3.1用環境の場合
sudo chroot /home/hoge/voyage/voyage-0.3.1-nopackage /bin/bash mount -t proc none /proc mkdir /rw/tmp mkdir /rw/var mkdir /rw/var/log mkdir /rw/var/mail mkdir /rw/var/run mkdir /rw/var/spool mkdir /rw/var/tmp mkdir /rw/var/lock mkdir /rw/etc
voyage 0.4.1用環境の場合
sudo chroot /home/hoge/voyage/voyage-0.4.1-nopackage /bin/bash mount -t proc none /proc mkdir /rw/tmp mkdir /rw/var mkdir /rw/var/log mkdir /rw/var/mail mkdir /rw/var/run mkdir /rw/var/spool mkdir /rw/var/tmp mkdir /rw/var/lock mkdir /rw/etc
apt-get update/upgardeを実行
voyage 0.3.1用環境の場合
sudo chroot /home/hoge/voyage/voyage-0.3.1 /bin/bash mount -t proc none /proc vi /etc/apt/sources.list deb http://ftp.jp.debian.org/debian etch main jpに apt-get update apt-get -y upgrade
voyage 0.4.1用環境の場合
sudo chroot /home/hoge/voyage/voyage-0.4.1 /bin/bash mount -t proc none /proc vi /etc/apt/sources.list ##deb http://debian.cn99.com/debian/ etch main <-- コメントに deb http://ftp.jp.debian.org/debian etch main <-- 追加 apt-get update apt-get -y upgrade
apt-sourceにsrcを入れる
voyage 0.3.1用環境の場合
vi /etc/apt/sources.list deb http://ftp.jp.debian.org/debian etch main deb-src http://ftp.jp.debian.org/debian etch main <-- 追加 apt-get update apt-get -y upgrade
voyage 0.4.1用環境の場合
vi /etc/apt/sources.list ##deb http://debian.cn99.com/debian/ etch main deb http://ftp.jp.debian.org/debian etch main deb-src http://ftp.jp.debian.org/debian etch main <-- 追加 deb http://www.voyage.hk/dists/0.4 ./ apt-get update apt-get -y upgrade
500kb以上のファイルを編集できるようにする
apt-get -y install vim
コンパイル環境構築
カーネルモジュールをコンパイルするため、既存のコンパイラバージョンなどを確認
voyage 0.3.1用環境の場合
modinfo /lib/modules/2.6.17-486-voyage/kernel/fs/vfat/vfat.ko filename: /lib/modules/2.6.17-486-voyage/kernel/fs/vfat/vfat.ko license: GPL description: VFAT filesystem support author: Gordon Chaffee vermagic: 2.6.17-486-voyage preempt mod_unload 486 REGPARM gcc-3.3 depends: fat,nls_base vermagic: 2.6.17-486-voyage preempt mod_unload 486 REGPARM gcc-3.3
- カーネル名称(2.6.17-486-voyage)と、コンパイラバージョン(gcc-3.3)を確認
voyage 0.4.1用環境の場合
modinfo /lib/modules/2.6.20-486-voyage/kernel/fs/vfat/vfat.ko filename: /lib/modules/2.6.20-486-voyage/kernel/fs/vfat/vfat.ko license: GPL description: VFAT filesystem support author: Gordon Chaffee vermagic: 2.6.20-486-voyage preempt mod_unload 486 depends: fat,nls_base
- カーネル名称(2.6.20-486-voyage)を確認
カーネル名称を確認(再度)
voyage 0.3.1用環境の場合
ls /boot/config-* /boot/config-2.6.17-486-voyage --> config-から後ろが名称となる。(2.6.17-486-voyage)
voyage 0.4.1用環境の場合
ls /boot/config-* /boot/config-2.6.20-486-voyage --> config-から後ろが名称となる。(2.6.20-486-voyage)
コンパイル環境を入れる
apt-get install -y dpkg-dev devscripts debmake libc6-dev autoconf automake libtool debhelper dh-make apt-get install -y zlib1g-dev libncurses5-dev build-essential libnewt-dev libusb-dev gcc-3.3-base gcc-3.3
コンパイラ情報を確認
cc --version cc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
カーネルコンパイル時のコンパイラのバージョンが異なる場合は、コンパイラのバージョンをあわせる準備を
まずデフォルトのコンパイラを指定
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.1 10
確認
update-alternatives --list gcc
カーネルコンパイルにつかっているコンパイラを追加
voyage 0.3.1用環境の場合
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-3.3 5
5: プライオリティ(数字が大きいほうが優先順位が高い)
voyage 0.4.1用環境の場合
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-3.3 5
5: プライオリティ(数字が大きいほうが優先順位が高い)
確認
update-alternatives --list gcc
選択設定
update-alternatives --config gcc
直接指定
voyage 0.3.1用環境の場合 /usr/bin/gccをgcc3.3に
update-alternatives --set gcc /usr/bin/gcc-3.3
voyage 0.4.1用環境の場合 /usr/bin/gccをgcc4.1に
update-alternatives --set gcc /usr/bin/gcc-4.1
参考
/usr/bin/gccをgcc4.1にする場合
update-alternatives --set gcc /usr/bin/gcc-4.1
/usr/bin/gccをgcc3.3にする場合
update-alternatives --set gcc /usr/bin/gcc-3.3
コンパイラ情報を再度確認
voyage 0.3.1用環境の場合
cc --version cc (GCC) 3.3.6 (Debian 1:3.3.6-15) Copyright (C) 2003 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
voyage 0.4.1用環境の場合
cc --version cc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) Copyright (C) 2006 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
kernel-sourceを展開して、kenel version numberを変更
voyage 0.3.1用環境の場合
cd /usr/src apt-get -y install linux-source-2.6.17-voyage tar xvjf linux-source-2.6.17-voyage.tar.bz2 cd /usr/src/linux-source-2.6.17-voyage vi Makefile VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 17 EXTRAVERSION = -486-voyage --> 先程調べたカーネルバージョンナンバーに変更する
voyage 0.4.1用環境の場合
cd /usr/src apt-get -y install linux-source-2.6.20-voyage tar xvjf linux-source-2.6.20-voyage.tar.bz2 cd /usr/src/linux-source-2.6.20-voyage vi Makefile VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 20 EXTRAVERSION = -486-voyage --> 先程調べたカーネルバージョンナンバーに変更
- これにより、make時に、.kernelrelease と、 include/linux/version.h が自動的に変更される
zaptelのコンパイル(モジュールコンパイル)に必要なautoconf.hと、ztdummyで必要なrtcモジュールを作成
voyage 0.3.1用環境の場合
cd /usr/src/linux-source-2.6.17-voyage cp /boot/config-2.6.17-486-voyage .config make clean make menuconfig <Device Drivers> -> <Character devices> -> <M> <Enhanced Real Time Cloack Support> <exit> <exit> <exit> <yes>
voyage 0.4.1用環境の場合
cd /usr/src/linux-source-2.6.20-voyage cp /boot/config-2.6.20-486-voyage .config make clean make menuconfig <Device Drivers> -> <Character devices> -> <M> <Enhanced Real Time Cloack Support> <--- 0.4.1では標準であるはず <exit> <exit> <exit> <yes>
- chroot配下で、uname -rを実行した場合、親のkernel名になるので注意
- make menuconfigでファイル保存をすると、/usr/src/linux-source-2.6.20-voyage/include/linux/autoconf.h が作成される
- 以下のようなエラーが表示されたら、echo $LINES $COLUMNS; stty sizeを実行して、24x80より大きくなるように、windowサイズを変更すればよい。
Your display is too small to run Menuconfig!/usr/src/linux-source-2.6.17-voyage/scripts/mod/ It must be at least 19 lines by 80 columns. make[1]: *** [menuconfig] Error 1 make: *** [menuconfig] Error 2 echo $LINES $COLUMNS; stty size 20 79 20 79 echo $LINES $COLUMNS; stty size 26 83 26 83
zaptelのコンパイル(モジュールコンパイル)に必要な/modpost と、ztdummyで必要なrtcモジュールを作成
voyage 0.3.1用環境の場合
cd /usr/src/linux-source-2.6.17-voyage make clean make modules
- この作業で、/usr/src/linux-source-2.6.17-voyage/scripts/mod/modpost が作成される
- コンパイル後に、scripts/mod/modpost , drivers/char/rtc.ko が存在することを確認すること
- modpostだけ作成する場合は、HOSTLD scripts/mod/modpost が表示されたら停止してもよい
仮インストール先作成
mkdir /tmp/asterisk
仮インストール先にrtc.koをコピーしておく
mkdir -p /tmp/asterisk/lib/modules/2.6.17-486-voyage/char cp /usr/src/linux-source-2.6.17-voyage/drivers/char/rtc.ko /tmp/asterisk/lib/modules/2.6.17-486-voyage/char
voyage 0.4.1用環境の場合
- rtcモジュールはすでにあるが、/usr/src/linux-source-2.6.17-voyage/scripts/mod/modpostが必要なので、コンパイルすること
cd /usr/src/linux-source-2.6.20-voyage make clean make modules
- コンパイル後に、scripts/mod/modpost , drivers/char/rtc.ko が存在することを確認すること
- modpostだけ作成する場合は、 HOSTLD scripts/mod/modpost が表示されたら停止してもよい
仮インストール先作成
mkdir /tmp/asterisk
(参考)仮インストール先にrtc.koをコピーしておく(標準で存在するのでコピーは不要)
mkdir -p /tmp/asterisk/lib/modules/2.6.20-486-voyage/char cp /usr/src/linux-source-2.6.20-voyage/drivers/char/rtc.ko /tmp/asterisk/lib/modules/2.6.20-486-voyage/char
zaptelでrtcモジュールを使用する場合
- shutdown時のrtc: lost some interrupts at 1024Hz.対策のため、実行するマシンで以下の設定を変更すること
- http://www.voip-info.org/wiki/view/Asterisk+Zaptel+Installation
- 自動起動
vi /etc/sysctl.conf # rtc sys.dev.rtc.max-user-freq=1024
- 手動実行の場合
echo 1024 > /proc/sys/dev/rtc/max-user-freq
asteriskカスタムビルド
asteriskソースを入手
- 最新版置き場: http://downloads.digium.com/pub/asterisk
- 過去リリース置き場: http://downloads.digium.com/pub/asterisk/old-releases/
cd /usr/src wget http://downloads.digium.com/pub/asterisk/asterisk-1.4.11.tar.gz wget http://downloads.digium.com/pub/asterisk/asterisk-addons-1.4.2.tar.gz
zaptelソースを入手
cd /usr/src wget http://downloads.digium.com/pub/zaptel/zaptel-1.4.5.1.tar.gz
ソースを展開
cd /usr/src tar xvzf asterisk-1.4.11.tar.gz tar xvzf asterisk-addons-1.4.2.tar.gz tar xvzf zaptel-1.4.5.1.tar.gz
zaptelコンパイル
仮インストール先作成
mkdir /tmp/asterisk
カーネルコンパイル時のコンパイラのバージョンが異なる場合は、コンパイラのバージョンに
voyage 0.3.1用環境の場合 /usr/bin/gccをgcc3.3に
update-alternatives --set gcc /usr/bin/gcc-3.3 export CC=gcc-3.3;
voyage 0.4.1用環境の場合 /usr/bin/gccをgcc4.1に
update-alternatives --set gcc /usr/bin/gcc-4.1 export CC=gcc-4.1;
configure
cd /usr/src tar xvzf zaptel-1.4.5.tar.gz cd zaptel-1.4.5.1 ./configure --target=i486-linux --build=i486-linux
コンパイル
voyage 0.3.1用環境の場合
- 画面へは、左キーで戻る
- 保存はsキー
- kernel Module : すべて未選択
- utiltes : ztcfgだけ
make clean KVERS=2.6.17-486-voyage KSRC=/usr/src/linux-source-2.6.17-voyage
kernel version kernel source
make menuselect KVERS=2.6.17-486-voyage KSRC=/usr/src/linux-source-2.6.17-voyage
kernel version kernel source
voyage 0.4.1用環境の場合
- 画面へは、左キーで戻る
- 保存はsキー
- 選択するもの
- kernel Module : すべて未選択
- utiltes : ztcfgのみ選択
make clean KVERS=2.6.20-486-voyage KSRC=/usr/src/linux-source-2.6.20-voyage
kernel version kernel source
make menuselect KVERS=2.6.20-486-voyage KSRC=/usr/src/linux-source-2.6.20-voyage
kernel version kernel source
voyage 0.3.1用環境の場合
make KVERS=2.6.17-486-voyage KSRC=/usr/src/linux-source-2.6.17-voyage
kernel version kernel source
voyage 0.4.1用環境の場合
make KVERS=2.6.20-486-voyage KSRC=/usr/src/linux-source-2.6.20-voyage
kernel version kernel source
- autoconf.hが無いと表示される場合は、kernel-sourceを展開して、zaptelのコンパイル(モジュールコンパイル)に必要なautoconf.hを作成するをすること
- modpostが無いと表示される場合は、kernel-sourceを展開して、zaptelのコンパイル(モジュールコンパイル)に必要な/usr/src/linux-source-2.6.17-voyage/scripts/mod/modpost を作成すること
モジュールが、カーネルモジュールと同じvermagicになっていることを確認
voyage 0.3.1用環境の場合
cd /usr/src/zaptel-1.4.5 modinfo zaptel.ko filename: zaptel.ko author: Mark Spencer <markster@digium.com> description: Zapata Telephony Interface license: GPL version: 1.4.5.1 vermagic: 2.6.17-486-voyage preempt mod_unload 486 REGPARM gcc-3.3 depends: crc-ccitt srcversion: B22C1509DD5C3598E78924B parm: deftaps:int parm: debug:int
voyage 0.4.1用環境の場合
cd /usr/src/zaptel-1.4.5 modinfo zaptel.ko modinfo zaptel.ko description: Dummy Zaptel Driver author: Robert Pleh <robert.pleh@hermes.si> license: GPL vermagic: 2.6.20-486-voyage preempt mod_unload 486
インストール
voyage 0.3.1用環境の場合
make install KVERS=2.6.17-486-voyage KSRC=/usr/src/linux-source-2.6.17-voyage DESTDIR=/tmp/asterisk
kernel version kernel source install dir
voyage 0.4.1用環境の場合
make install KVERS=2.6.20-486-voyage KSRC=/usr/src/linux-source-2.6.20-voyage DESTDIR=/tmp/asterisk
kernel version kernel source install dir
- make: *** No rule to make target `install-inlcude', needed by `install-programs'. Stop.と表示された場合、スペルミスを直すこと
vi Makefile 誤)install-programs: install-utils install-libs install-inlcude 正)install-programs: install-utils install-libs install-include
- 以下のように表示された場合は、問題なし。
install: missing destination file operand after `/tmp/asterisk/sbin/' Try `install --help' for more information. make: *** [install-utils] Error 1
- tonezone.h zaptel.hが、/tmp/asterisk/usr/include/zaptel/以下にあれば問題なし。(これがないと、asteriskコンパイル時に、zaptelを認識してくれない)
/etc/init.d/zaptel作成
voyage 0.3.1用環境の場合
make config KVERS=2.6.17-486-voyage KSRC=/usr/src/linux-source-2.6.17-voyage DESTDIR=/tmp/asterisk
kernel version kernel source install dir
- xpp/utils/zaptel_hardware: Failed running lsusb: No such file or directory at xpp/utils/zconf/Zaptel/Hardware/USB.pm line 88. と表示された場合、問題なし
voyage 0.4.1用環境の場合
make config KVERS=2.6.20-486-voyage KSRC=/usr/src/linux-source-2.6.20-voyage DESTDIR=/tmp/asterisk
kernel version kernel source install dir
- update-rc.d: /etc/init.d/zaptel: file does not exist と表示された場合、問題なし
モジュールのインストール後の調整(必要であれば)
実機での作業
cp /tmp/asterisk/lib/modules/2.6.17-486-voyage/misc/ztdummy.ko 実機の/lib/modules/2.6.17-486-voyage/misc
ここは親環境で変化する ここは親環境で変化する
depmod -a
ldconfig
modprobe zaptel
自動読み込み設定
echo "zaptel" >> /etc/modules
- modprobe ztdummy時に、dmsgで以下のエラーが表示されたら、modprobe rtcを実行すること
ztdummy: Unknown symbol rtc_register ztdummy: Unknown symbol rtc_unregister ztdummy: Unknown symbol rtc_control ztdummy: Unknown symbol rtc_register ztdummy: Unknown symbol rtc_unregister ztdummy: Unknown symbol rtc_control
asteriskコンパイル
仮インストール先作成
mkdir /tmp/asterisk
仮インストール先作成
カーネルコンパイル時のコンパイラのバージョンが異なる場合は、コンパイラのバージョンに
voyage 0.3.1用環境の場合 /usr/bin/gccをgcc3.3に
update-alternatives --set gcc /usr/bin/gcc-3.3 export CC=gcc-3.3;
voyage 0.4.1用環境の場合 /usr/bin/gccをgcc4.1に
update-alternatives --set gcc /usr/bin/gcc-4.1 export CC=gcc-4.1;
configure
cd /usr/src
tar xvzf asterisk-1.4.11.tar.gz
cd asterisk-1.4.11
./configure --target=i486-linux --host=i486-linux --prefix=/tmp/asterisk --exec-prefix=/tmp/asterisk --with-zaptel=/tmp/asterisk/usr
ターゲットは486 仮インストール先を指定 zaptelインストール先
- 最後に以下の行があることを確認すること
checking for ZT_DIAL_OP_CANCEL in zaptel/zaptel.h... yes checking for ZT_EVENT_REMOVED in zaptel/zaptel.h... yes checking for ZT_TCOP_ALLOCATE in zaptel/zaptel.h... yes
- configure: *** including --without-zaptel. が、最終行に表示されていないことを確認すること。zaptelがないと、dtmf/echoなどが動作しない
make clean make menuconfig
- 画面へは、左キーで戻る
- 保存はs
- モジュール
- Music On Hold File Packages
[*] MOH-FREEPLAY-GSM を追加すること
Extra Sound Packess [*] EXTRA-SOUNDS-EN-GSM
- この2つは、extensions.confで、silense(無音)を再生するために必要
コンパイル
cd /usr/src tar xvzf asterisk-1.4.11.tar.gz cd asterisk-1.4.11 make make install make samples
設定ファイルを一部修正
vi /etc/asterisk/asterisk.conf
astmoddir => /lib/asterisk/modules
/tmp/asterisk/を削除する
vi /etc/asterisk/asterisk.conf
[options]
highpriority = yes
dontwarn = yes
- highpriorityで動かして、warmを/var/log/asterisk/messagesに出力しない
asteriskのダイアルトーンを日本に(参考)
vi /etc/asterisk/indications.conf
[general]
country=jp ; default location
日本用に変更
asterisk-addonsコンパイル(必要ならば)
仮インストール先作成
mkdir /tmp/asterisk
仮インストール先作成
カーネルコンパイル時のコンパイラのバージョンが異なる場合は、コンパイラのバージョンに
voyage 0.3.1用環境の場合 /usr/bin/gccをgcc3.3に
update-alternatives --set gcc /usr/bin/gcc-3.3 export CC=gcc-3.3;
voyage 0.4.1用環境の場合 /usr/bin/gccをgcc4.1に
update-alternatives --set gcc /usr/bin/gcc-4.1 export CC=gcc-4.1;
コンパイル
cd /usr/src
cd asterisk-addons-1.4.2
./configure --target=i486-linux --host=i486-linux --prefix=/tmp/asterisk --exec-prefix=/tmp/asterisk --with-asterisk=/usr/src/asterisk-1.4.10.1
ターゲットは486 仮インストール先を指定 asteriskのsource
make install
- 設定ファイルだけは、/etc/asteriskに入るので注意せよ
make samples
ビルド結果を保存
/tmp/asterisk.tar.gzにすべてファイルが存在するので、それを稼動マシンの/で展開すればOK!
mkdir /tmp/asterisk/etc cp -r /etc/asterisk /tmp/asterisk/etc mkdir -p /tmp/asterisk/var/lib/asterisk cp -r /var/lib/asterisk /tmp/asterisk/var/lib cd /tmp/asterisk tar cvzf /tmp/asterisk.tar.gz *
本番環境へのインストール
本番環境へのインストールは、voyage linux installをご覧ください。
