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モジュールを使用する場合

  • 自動起動
vi /etc/sysctl.conf
  # rtc
  sys.dev.rtc.max-user-freq=1024
  • 手動実行の場合
echo 1024 > /proc/sys/dev/rtc/max-user-freq

asteriskカスタムビルド

asteriskソースを入手

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をご覧ください。

adsense
位置情報とアクセス解析
なかのひと