うん・・・いや・・・正直な話、今時高性能で格安のルータがあるのに
消費電力の面からも、PCルーター・iptablesなんて書くやつの気が知れないと思っていたのだが、
現在販売されているルータを調べているうちに、
少ないながらもPCルーター・iptablesだけのメリットがあることがわかったので書いてみた。
メリット一覧
1:CPU次第ではワイヤスピードに近い速度が出せるほど高速である
2:NATテーブル数が多い
3:QOSが使える
4:柔軟な設定が可能で、自由度が高い
5:長い実績を持つ
デメリット一覧
1:専用ルータと比べると不安定
2:複雑な設定をした際に、セキュリティ面、安定性の検証が難しい
メリットの1についてですが、現状で販売されている格安のギガルータって
スループットが遅いんですね。
評判のいいIOのギガルータでもメーカ発表の最高速度がせいぜい660Mbps程度。
おまけに格安のギガルータの場合、ちょっとでも設定をいじると
すぐにスループットが大幅に低下したりします。
その点、PCルーター・iptablesならば設定をガリガリいじったとしてもワイヤスピードに近い速度が出せます。
メリットの2については問題になる人はそれほど多くは無いと思うのですが、
ネットゲームやP2Pのアプリケーション、アクセス数の多いサーバーなどを
動かす人などには重要になる項目です。
NATテーブル数とは同時接続数を意味しています。
WebサーバーのKeepAliveを思い浮かべればわかりやすいでしょうか。
そのため、この数が大きいほど、同時に接続できる宛先が多くなります。
最近のルータでは2048-4096程度のNATテーブル数を持っています。
PCルーター・iptablesならば、メモリが足りなくなるまで同時接続ができるので
事実上無限大と考えることができます。足りなくなることはまずありません。
メリットの3についてはVoIP関連のアプリなどを作る際のメリットですね。
最低限の帯域を確保することができるので、意図しない状況での速度不足などが起きません。
メリットの4は・・・本当にマニアックな使用方法をする人向けです。
IPの上に変なプロトコル乗っけてみたり、最新のプロトコルを試してみたりなど。
デメリットは1,2をあわせて一言で言うと、不安定だということです。
sendmailなんかと同じで複雑な設定ができる分、自分の設定が不安で安定しない。
私も何度か自宅の設定をPCルーター・iptablesに任せたことがありますが、
接続できないアプリがでてきたり、UPNPがうまく動いてくれないアプリが出てきたり、
私の留守中にPC自体が落ちて、繋がらなかったりと家族の評判は散々でした。
まとめ
設定次第では現行の格安ルータには無い速度と機能を使えることができるので
必要性が出てきたら、高価格な製品を購入する前にPCルーター・iptablesも検討してほしいと思う。
また、ハードウェア的に重要なのは、CPU、NICだけなので、
USBメモリなどにOSをインストールしてルータ化しても面白いだろう。
仮想化のススメ
今日は仮想化技術についての話です。
最近、自宅のLinuxでは結構な数のサービスが動いているのですが、
中には結構不安定なサービスもあります。
そんな不安定なサービスが引き起こすトラブルと、運用方法について説明します。
1.不安定なサービス
Javaで動いているアプリケーションならばVM上で動くため、
落ちたとしてもOSを巻き込んで落ちることはないのですが、
オープンソースの有名なアプリケーションのほとんどがネイティブコードであるゆえ、
中にはOSごと巻き込んで落ちるアプリケーションもあったりします。
枯れたアプリケーション・技術だけを使っていれば、そうそう落ちることもないのですが、
最新の物を使う場合には、それだけリスクも増す傾向にあります。
予算が許せば、枯れたアプリケーションを動かすサーバーと、
最新のアプリケーションを動かすサーバーを分けたいところですが、
個人の開発者だと中々そういうわけにも行きません。(電気代とかもね・・・)
2.バックアップ
バックアップに関しても同様で、ファイルのバックアップはcpやrsyncで簡単にできますが、
動作中のOSを含むルートパーティションのバックアップをやろうとすると、
バックアップ+復旧にはかなり手間がかかります。
完全に整合性が取れた状態でのバックアップということになると、
一度OSを落としてから、バックアップする必要性があります。
当然、バックアップにも復旧にも時間を要します。
つまりルートパーティションはバックアップには不向きなわけです
じゃあ、ルートパーティションにはRAID1使えよと思う方がいるかもしれませんが、
そもそも安いマザボのRAID機能は生死、復旧がBIOS設定画面からしか
できないものが多いのです。
確認できるマザボであっても、Windows以外のOSでは確認する方法が無かったりします。
個人の開発者が趣味でやっている開発で毎日とか、毎週再起動して
HDDの生死確認なんてやりたくはありません。
また、シリンダ数が同じHDDでないと復旧に使用できないため、
数年後に1台壊れたときに、もはやそんな古いHDDが売っていない可能性は
非常に高いのです。
あらかじめ買っておくのも一つの方法ではありますが、
RAID1で既に2台に加えて+バックアップ用のHDD数台となると予算が厳しい。
また、RAID1はオペレーションミスには対応できないので、
オペレーションミスについても考慮しなければなりません。
そんな嫌な前置きばっかりではありますが、上記の様な問題をほとんど解決してくれる
素晴らしいソリューションが仮想化技術なのです。
以下に仮想化技術のメリット・デメリットを述べます。
メリット
・一つのOS上(以下「メインOS」と呼ぶ)にいくつものOSを立ち上げることができる
そのため、安定しているアプリケーションが動くサーバーを「サブOS1」、
不安定なアプリケーションが動いているサーバーを「サブOS2」として立ち上げることができるのです。
また、たとえ「サブOS2」が落ちるにしても、「メインOS」を巻き込んで落とさないため、
「サブOS1」はそのままサービスを提供し続けることができます。
このことから「1.不安定なサービス」で書いた問題は解決されます。
・バックアップが容易
バックアップは非常に簡単です。動いている「サブOS」を止めてコピーするだけ。
コピーが終わったら、もう一度「サブOS」を起動させます。
・環境全てをRAIDの管理化に置ける
ソフトウェアRAIDの上に仮想環境を載せることができます。
冗長性があるRAIDレベルを設定し、どれか一台でもHDDが死んだらメールを投げるように
設定しておけばよいのです。
また、仮想化技術の特徴というわけではありませんが、
ソフトウェアRAIDなのでHDDは当然既存のHDDには非依存です。
シリンダ数なんて関係なく、その時点で一番良いと思われるHDDを自由に選び、
RAIDアレイに追加することができます。
では「メインOS」のバックアップはどうするかというと・・・「メインOS」のバックアップはしません。
大事なOSは全て仮想環境の上にあるので、「メインOS」のバックアップは不要なのです。
あらかじめ余っているHDDとかUSBメモリとかに、OSをセットアップしておいて、
「メインOS」が壊れたら、そのまま入れ替えます。
その後、仮想環境を立ち上げれば復旧終了です。
よって、「メインOS」にはできるだけ設定をしない、書かない環境にすることが大事です。
デメリット
・遅い
やはり仮想化している以上、宿命になってしまうのですが、
速度は「メインOS」で動かしているときよりは遅いです。
仮想化ソフトウェアによって違うのですが、大体5~30%の速度の低下があるようです。
・仮想環境自体がメモリを食う
仮想環境自体もメモリを使うので、「サブOS」の数だけメモリは使います。
考えたくもありませんが、Vista上でVistaを動かした日にはもう・・・
不要なサービスはガンガン切ってしまうことを推奨します。
仮想環境作りの考え方
これはあくまで私の考え方なのですが、仮想環境上にデータを持たせるべきではないと思います。
なぜならば、仮想環境を丸ごとバックアップする際に、
容量が大きいとそれなりに時間がかかってしまうからです。
例えばDebianならばインストール時の最小環境+Apacheで150MBくらいしかHDDを使いません。
これならばバックアップもあっという間に終わりますが、htmlのデータなどを仮想環境上に
持たせてしまうと、バックアップに時間がかかってしまいます。
また、仮想環境上にあるファイルについてはインクリメンタルバックアップができません。
データは「メインOS」以外のHDD上に置き、
NFSで使用するのがベストなのではないかと思います。
NFSが「メインOS」上で動くことになりますが、仮想環境上で動かすよりは
より管理がしやすいと思います。
この辺りの実運用の考え方については、もっと調査が必要です。
※2009/07/21 追記
仮想化にOpenVZを使用すれば、データを「メインOS」にそのまま配置できるため
データの持ち方としてはベストだと思います。
コメント(0)
2008.08.24
[
Myカテゴリ:試してみた
]
最近、自宅のLinuxでは結構な数のサービスが動いているのですが、
中には結構不安定なサービスもあります。
そんな不安定なサービスが引き起こすトラブルと、運用方法について説明します。
1.不安定なサービス
Javaで動いているアプリケーションならばVM上で動くため、
落ちたとしてもOSを巻き込んで落ちることはないのですが、
オープンソースの有名なアプリケーションのほとんどがネイティブコードであるゆえ、
中にはOSごと巻き込んで落ちるアプリケーションもあったりします。
枯れたアプリケーション・技術だけを使っていれば、そうそう落ちることもないのですが、
最新の物を使う場合には、それだけリスクも増す傾向にあります。
予算が許せば、枯れたアプリケーションを動かすサーバーと、
最新のアプリケーションを動かすサーバーを分けたいところですが、
個人の開発者だと中々そういうわけにも行きません。(電気代とかもね・・・)
2.バックアップ
バックアップに関しても同様で、ファイルのバックアップはcpやrsyncで簡単にできますが、
動作中のOSを含むルートパーティションのバックアップをやろうとすると、
バックアップ+復旧にはかなり手間がかかります。
完全に整合性が取れた状態でのバックアップということになると、
一度OSを落としてから、バックアップする必要性があります。
当然、バックアップにも復旧にも時間を要します。
つまりルートパーティションはバックアップには不向きなわけです
じゃあ、ルートパーティションにはRAID1使えよと思う方がいるかもしれませんが、
そもそも安いマザボのRAID機能は生死、復旧がBIOS設定画面からしか
できないものが多いのです。
確認できるマザボであっても、Windows以外のOSでは確認する方法が無かったりします。
個人の開発者が趣味でやっている開発で毎日とか、毎週再起動して
HDDの生死確認なんてやりたくはありません。
また、シリンダ数が同じHDDでないと復旧に使用できないため、
数年後に1台壊れたときに、もはやそんな古いHDDが売っていない可能性は
非常に高いのです。
あらかじめ買っておくのも一つの方法ではありますが、
RAID1で既に2台に加えて+バックアップ用のHDD数台となると予算が厳しい。
また、RAID1はオペレーションミスには対応できないので、
オペレーションミスについても考慮しなければなりません。
そんな嫌な前置きばっかりではありますが、上記の様な問題をほとんど解決してくれる
素晴らしいソリューションが仮想化技術なのです。
以下に仮想化技術のメリット・デメリットを述べます。
メリット
・一つのOS上(以下「メインOS」と呼ぶ)にいくつものOSを立ち上げることができる
そのため、安定しているアプリケーションが動くサーバーを「サブOS1」、
不安定なアプリケーションが動いているサーバーを「サブOS2」として立ち上げることができるのです。
また、たとえ「サブOS2」が落ちるにしても、「メインOS」を巻き込んで落とさないため、
「サブOS1」はそのままサービスを提供し続けることができます。
このことから「1.不安定なサービス」で書いた問題は解決されます。
・バックアップが容易
バックアップは非常に簡単です。動いている「サブOS」を止めてコピーするだけ。
コピーが終わったら、もう一度「サブOS」を起動させます。
・環境全てをRAIDの管理化に置ける
ソフトウェアRAIDの上に仮想環境を載せることができます。
冗長性があるRAIDレベルを設定し、どれか一台でもHDDが死んだらメールを投げるように
設定しておけばよいのです。
また、仮想化技術の特徴というわけではありませんが、
ソフトウェアRAIDなのでHDDは当然既存のHDDには非依存です。
シリンダ数なんて関係なく、その時点で一番良いと思われるHDDを自由に選び、
RAIDアレイに追加することができます。
では「メインOS」のバックアップはどうするかというと・・・「メインOS」のバックアップはしません。
大事なOSは全て仮想環境の上にあるので、「メインOS」のバックアップは不要なのです。
あらかじめ余っているHDDとかUSBメモリとかに、OSをセットアップしておいて、
「メインOS」が壊れたら、そのまま入れ替えます。
その後、仮想環境を立ち上げれば復旧終了です。
よって、「メインOS」にはできるだけ設定をしない、書かない環境にすることが大事です。
デメリット
・遅い
やはり仮想化している以上、宿命になってしまうのですが、
速度は「メインOS」で動かしているときよりは遅いです。
仮想化ソフトウェアによって違うのですが、大体5~30%の速度の低下があるようです。
・仮想環境自体がメモリを食う
仮想環境自体もメモリを使うので、「サブOS」の数だけメモリは使います。
考えたくもありませんが、Vista上でVistaを動かした日にはもう・・・
不要なサービスはガンガン切ってしまうことを推奨します。
仮想環境作りの考え方
これはあくまで私の考え方なのですが、仮想環境上にデータを持たせるべきではないと思います。
なぜならば、仮想環境を丸ごとバックアップする際に、
容量が大きいとそれなりに時間がかかってしまうからです。
例えばDebianならばインストール時の最小環境+Apacheで150MBくらいしかHDDを使いません。
これならばバックアップもあっという間に終わりますが、htmlのデータなどを仮想環境上に
持たせてしまうと、バックアップに時間がかかってしまいます。
また、仮想環境上にあるファイルについてはインクリメンタルバックアップができません。
データは「メインOS」以外のHDD上に置き、
NFSで使用するのがベストなのではないかと思います。
NFSが「メインOS」上で動くことになりますが、仮想環境上で動かすよりは
より管理がしやすいと思います。
この辺りの実運用の考え方については、もっと調査が必要です。
※2009/07/21 追記
仮想化にOpenVZを使用すれば、データを「メインOS」にそのまま配置できるため
データの持ち方としてはベストだと思います。
Skype-inを使わずに固定・携帯電話からSkypeへの通話ができるシステムを作って見た
どうも。夏休み満喫中の開発者けいでございます。
今日は、固定・携帯電話からSkypeへの通話ができるシステムを作って見ました。
とはいっても、おそらくアジルフォン様から、すぐに怒られるとは思っているので、
公開できるのは短期間になるでしょう。
※2008/09/末 サービス終了。
再開はいつでも可能ですがアジルフォン様から怒られそうなので・・・
個人で使う分には問題無いと思っているので、今回のシステム公開は
あくまでアジルフォン様が提供している、
素晴らしいサービスの可能性を示すものと位置づけてください。
(昼に書いた記事と全然態度が違うのは気のせいです。)
そもそもどういう、経緯と技術なのかと言うと、
2008年8月6日にアジルフォン様がSkypeとの無料相互接続を開始しました。
ニュースソース
この記事を見たときに私は思いました。
ということは、以下のような構成で接続を行えば、Skype-inを使わなくても、
携帯や固定電話からSkypeへの発信が可能になるのではないかと。
構成
固定・携帯電話 -> アジルフォンの電話番号 -> Skype
上記構成ならば通話料がかかる区間は、
「固定・携帯電話 -> アジルフォンの電話番号」部分だけとなります。
システムを作るのも簡単そうだったので、とりあえず作って見ました。
通話方法
? 携帯・固定電話から 「050-5529-9999」 にダイヤルする
(g-lexの番号であるのは、私がアジルフォンの電話番号を公開したくないと言う理由です。
本来ならば、上記構成で直接アジルフォンに電話して通話することも可能です。)
? 接続したら、私のG-lex番号である「20062718 」をダイヤルする
?英語のアナウンスが流れるので、接続相手のスカイプIDをポケベル変換した数値をダイヤルする。
以上。ダイヤル後、5~20秒くらい待ってください。
接続相手のスカイプIDをポケベル変換した数値は以下から取得できます。
http://www.machida-systems.com/cgi-bin/reversePocketConverter.cgi?param=接続相手のスカイプID
参考資料:ポケベル変換表(灰色はスカイプで使用不可、黄色は私が追加した箇所)

現在アジルフォンでは、4回線分しかスカイプゲートウェイを用意していないそうなので、
時間帯によっては全然繋がりません。
その場合はあきらめて時間を変えてアクセスしてください。
コメント(0)
2008.08.15
[
ジャンル:コンピュータ /
テーマ:インターネットサービス /
Myカテゴリ:技術の話
]
今日は、固定・携帯電話からSkypeへの通話ができるシステムを作って見ました。
とはいっても、おそらくアジルフォン様から、すぐに怒られるとは思っているので、
公開できるのは短期間になるでしょう。
※2008/09/末 サービス終了。
再開はいつでも可能ですがアジルフォン様から怒られそうなので・・・
個人で使う分には問題無いと思っているので、今回のシステム公開は
あくまでアジルフォン様が提供している、
素晴らしいサービスの可能性を示すものと位置づけてください。
(昼に書いた記事と全然態度が違うのは気のせいです。)
そもそもどういう、経緯と技術なのかと言うと、
2008年8月6日にアジルフォン様がSkypeとの無料相互接続を開始しました。
ニュースソース
この記事を見たときに私は思いました。
ということは、以下のような構成で接続を行えば、Skype-inを使わなくても、
携帯や固定電話からSkypeへの発信が可能になるのではないかと。
構成
固定・携帯電話 -> アジルフォンの電話番号 -> Skype
上記構成ならば通話料がかかる区間は、
「固定・携帯電話 -> アジルフォンの電話番号」部分だけとなります。
システムを作るのも簡単そうだったので、とりあえず作って見ました。
通話方法
? 携帯・固定電話から 「050-5529-9999」 にダイヤルする
(g-lexの番号であるのは、私がアジルフォンの電話番号を公開したくないと言う理由です。
本来ならば、上記構成で直接アジルフォンに電話して通話することも可能です。)
? 接続したら、私のG-lex番号である「20062718 」をダイヤルする
?英語のアナウンスが流れるので、接続相手のスカイプIDをポケベル変換した数値をダイヤルする。
以上。ダイヤル後、5~20秒くらい待ってください。
接続相手のスカイプIDをポケベル変換した数値は以下から取得できます。
http://www.machida-systems.com/cgi-bin/reversePocketConverter.cgi?param=接続相手のスカイプID
参考資料:ポケベル変換表(灰色はスカイプで使用不可、黄色は私が追加した箇所)

現在アジルフォンでは、4回線分しかスカイプゲートウェイを用意していないそうなので、
時間帯によっては全然繋がりません。
その場合はあきらめて時間を変えてアクセスしてください。
アジルフォンに契約して、SKYPEとの接続を試して見た
どうも、2度目の夏季休暇を取得している私、けいでございます。
今日はアジルフォンに契約してSkypeとの接続を試して見ました。
はい。いきなり結論からいいますと、ベータ版という扱いであり、まだまだ不安定なサービスです。
まともに繋がる方がめずらしい。10回に1回くらいは繋がるかな?と言う感じです。
よって、もし設定で悩んでいる人や、接続できないと悩んでいる人は
すぐに調査を止めること!時間の無駄でございます。
なぜならば、自分の設定に問題があるのか、アジルフォン側に問題があるのか、
原因の切り分けができないからです。
今現在も、アジルフォン->Skype用のサーバーに繋がりませんが、
HPにも何も書いていないし、独自で調査してもわからないと思います。
私の場合、接続に成功した設定 + 確立した手順 + パケットのダンプがあるから
現在アジルフォン側で問題があることが確認できるのですが、
新たに接続設定している人は、何が問題なのかがわからないでしょう。
よくある不安定な現象
Skype -> アジルフォンへの接続の場合
1、Skypeから「agileskp」自体に繋がらない
2、「agileskp」に電話後、通話中となりそのまま無音(アナウンス無し)
3、「agileskp」に電話後、自動音声応答後にきちんと番号を入力していても、
「入力が間違っています」と言われる。
4、「agileskp」に電話後、自動音声応答後にきちんと番号を入力していても、
「ご利用ありがとうございました」と言われ、電話が切れてしまう
5、「agileskp.1~4」への転送が終了しないで無限ループ
アジルフォン -> Skypeへの接続の場合
1、電話しても話中になってしまう
2、503 Service Unavailableになる。
3、無反応のままハングアップ
この件については、アジルフォンにもメールで確認を取っております。
アジルフォンからは
「現象については確認しています。
本サービス開始までには修正致します。」との回答だったので、
しばらくはまともに繋がることは期待できなさそうです。
もし、導入を検討している人がいた場合には、自力で解決できる問題ではないので
本サービスの開始まで待つことを推奨する。
※2008/08/15 追記
さらに問い合わせを行ったところ、発着信について4回線しかご用意していない関係で
全回線が埋まってしまった場合、「503 Service Unavailable」が戻るとの回答を頂きました。
こういう制約についてもやっぱり、HP上での明記無しなのはなぁ・・・
ただでさえ難解なアスタリスクの設定を
何日もかけて頑張っている人がいるかもしれないと思わないのだろうか・・・
コメント(0)
2008.08.15
[
Myカテゴリ:試してみた
]
今日はアジルフォンに契約してSkypeとの接続を試して見ました。
はい。いきなり結論からいいますと、ベータ版という扱いであり、まだまだ不安定なサービスです。
まともに繋がる方がめずらしい。10回に1回くらいは繋がるかな?と言う感じです。
よって、もし設定で悩んでいる人や、接続できないと悩んでいる人は
すぐに調査を止めること!時間の無駄でございます。
なぜならば、自分の設定に問題があるのか、アジルフォン側に問題があるのか、
原因の切り分けができないからです。
今現在も、アジルフォン->Skype用のサーバーに繋がりませんが、
HPにも何も書いていないし、独自で調査してもわからないと思います。
私の場合、接続に成功した設定 + 確立した手順 + パケットのダンプがあるから
現在アジルフォン側で問題があることが確認できるのですが、
新たに接続設定している人は、何が問題なのかがわからないでしょう。
よくある不安定な現象
Skype -> アジルフォンへの接続の場合
1、Skypeから「agileskp」自体に繋がらない
2、「agileskp」に電話後、通話中となりそのまま無音(アナウンス無し)
3、「agileskp」に電話後、自動音声応答後にきちんと番号を入力していても、
「入力が間違っています」と言われる。
4、「agileskp」に電話後、自動音声応答後にきちんと番号を入力していても、
「ご利用ありがとうございました」と言われ、電話が切れてしまう
5、「agileskp.1~4」への転送が終了しないで無限ループ
アジルフォン -> Skypeへの接続の場合
1、電話しても話中になってしまう
2、503 Service Unavailableになる。
3、無反応のままハングアップ
この件については、アジルフォンにもメールで確認を取っております。
アジルフォンからは
「現象については確認しています。
本サービス開始までには修正致します。」との回答だったので、
しばらくはまともに繋がることは期待できなさそうです。
もし、導入を検討している人がいた場合には、自力で解決できる問題ではないので
本サービスの開始まで待つことを推奨する。
※2008/08/15 追記
さらに問い合わせを行ったところ、発着信について4回線しかご用意していない関係で
全回線が埋まってしまった場合、「503 Service Unavailable」が戻るとの回答を頂きました。
こういう制約についてもやっぱり、HP上での明記無しなのはなぁ・・・
ただでさえ難解なアスタリスクの設定を
何日もかけて頑張っている人がいるかもしれないと思わないのだろうか・・・
Asteriskの設定項目をMySQLに格納して見た
どうもけいです。先週は夏休みでした。
家族持ちなので、好きな開発ばかりもやっていられませんが、
久々にまとまった時間が取れたので、Asteriskの設定項目をMySQLに格納して見ました。
環境:OSはLinux、ディストリビューションはDebian etch。
アスタリスクはasterisk-1.4.21.2、アドオンはasterisk-addons-1.4.7。
参考にした本は以下の2冊です。
なのだが・・・両方の本で記載が異なっていて困ってしまいました。
徹底活用ガイドの方が手順が圧倒的に少なく、簡潔であるのにたいし、
運用・開発ガイドの方はunixODBCの使用や
設定ファイルodbcinst.iniなどの編集が必要であるとの記載があります。
徹底活用ガイドではodbcについては全く触れられていません。
また、両方ともSQL文が記載されてはいるのですが、
CDも無く、WebにSQL文が上がっているわけでもないので、
毎回60行近くあるSQL文を手動で打ち込まなければなりません(不親切だなぁ・・・)。
疑問に思って調べて見たところ、Asteriskではソースコードと共にSQL文も配布されています。
このSQL文を元にして、各DBごとにSQL文を変える方法がもっとも効率がよさそうです。
asterisk\contrib\scripts\
それでは手順です
?Asterisk add-on のインストール
※zaptel, asteriskをインストール後に、add-on のインストールを行う必要がある
1. ソースの入手後解凍する
$ tar zxvf asterisk-addons-1.4.X
2. 解凍したディレクトリに移動し、以下のコマンドを実行する
$ ./configure
$ make menuselect
$ make
$ sudo make install
?mySQLにデータベースとテーブル、ユーザを作成する
1. mySQLにログインする
$ mysql -u root -p
2. データベースを作成する
mysql> CREATE DATABASE astdb;
Query OK, 1 row affected (0.07 sec)
3. データベースに接続する
mysql> USE astdb;
Database changed
4. CDR用テーブル・ユーザを作成する
4.1 CDR用テーブル作成
CREATE TABLE `cdr` (
`calldate` datetime NOT NULL default '0000-00-00 00:00:00',
`clid` varchar(80) NOT NULL default '',
`src` varchar(80) NOT NULL default '',
`dst` varchar(80) NOT NULL default '',
`dcontext` varchar(80) NOT NULL default '',
`channel` varchar(80) NOT NULL default '',
`dstchannel` varchar(80) NOT NULL default '',
`lastapp` varchar(80) NOT NULL default '',
`lastdata` varchar(80) NOT NULL default '',
`duration` int(11) NOT NULL default '0',
`billsec` int(11) NOT NULL default '0',
`disposition` varchar(45) NOT NULL default '',
`amaflags` int(11) NOT NULL default '0',
`accountcode` varchar(20) NOT NULL default '',
`userfield` varchar(255) NOT NULL default ''
);
4.2. CDR用テーブルにIndexの作成
ALTER TABLE `cdr` ADD INDEX ( `calldate` );
ALTER TABLE `cdr` ADD INDEX ( `dst` );
ALTER TABLE `cdr` ADD INDEX ( `accountcode` );
4.3. INSERT権限だけがあるユーザーastcdrの作成
mysql> GRANT INSERT ON astdb.cdr TO astcdr@localhost IDENTIFIED BY 'astpass';
Query OK, 0 rows affected (0.04 sec)
4.4. 設定ファイルに反映する
・/etc/asterisk/cdr_mysql.conf を編集する
[global]
hostname=localhost
dbname=astdb
table=cdr
password=astpass
user=astcdr
port=3306
sock=/var/run/mysqld/mysqld.sock
userfield=1
※sockはディストリビューションごとに変わります。
5. SIP設定用テーブル・ユーザを作成する
5.1 SIP設定用テーブル作成
これは既にSQL文がソースコードの中に含まれているので簡単です。
以下のコマンドを入力するだけです。
% mysql astdb -u root -p < ./contrib/scripts/sip-friends.sql
Enter password:
ERROR 1064 (42000) at line 5: Something is wrong in your syntax : ') TYPE=MyISAM' ??? : 50 ????
と思ったら、SQL文がバグっています。
53行目のカンマは不要なので消してください。
変更前
INDEX ipaddr (ipaddr, port),
) TYPE=MyISAM;
変更後
INDEX ipaddr (ipaddr, port)
) TYPE=MyISAM;
% mysql astdb -u root -p < ./contrib/scripts/sip-friends.sql
Enter password:
ソースに添付されているSQL文はカラムが足りていないので、
以下のSQLを流してください。
CREATE TABLE `sipfriends` (
`name` varchar(40) NOT NULL default '',
`type` varchar(10) NOT NULL default '',
`username` varchar(40),
`fromuser` varchar(40),
`fromdomain` varchar(40),
`secret` varchar(40),
`md5secret` varchar(40),
`auth` varchar(10),
`mailbox` varchar(20),
`subscribemwi` varchar(10), -- yes/no
`vmexten` varchar(20),
`callerid` varchar(40),
`canreinvite` char(3) default 'yes',
`cancallforward` char(3) default 'yes',
`dtmfmode` varchar(7),
`cid_number` varchar(40),
`callingpres` varchar(20),
`usereqphone` varchar(10),
`language` varchar(10),
`incominglimit` varchar(10),
`context` varchar(40) NOT NULL default '',
`subscribecontext` varchar(40),
`amaflags` varchar(20),
`accountcode` varchar(20),
`musicclass` varchar(20),
`mohsuggest` varchar(20),
`allowtransfer` varchar(20),
`callgroup` varchar(20),
`pickupgroup` varchar(20),
`autoframing` varchar(10), -- yes/no
`disallow` varchar(100) default 'all',
`allow` varchar(100),
`musiconhold` varchar(100),
`maxcallbitrate` varchar(15),
`host` varchar(40) default 'dynamic',
`outboundproxy` varchar(40),
`ipaddr` varchar(20) NOT NULL default '',
`defaultip` varchar(20),
`port` int(6) NOT NULL default '0',
`nat` varchar(5) NOT NULL default 'no',
`deny` varchar(95),
`permit` varchar(95),
`mask` varchar(95),
`fullcontact` varchar(40),
`restrictcid` char(1),
`insecure` varchar(20),
`qualify` varchar(15),
`regseconds` int(11) NOT NULL default '0',
`regexten` varchar(20),
`regserver` varchar(20),
`rtptimeout` varchar(15),
`rtpholdtimeout` varchar(15),
`rtpkeepalive` varchar(15),
`setvar` varchar(200),
PRIMARY KEY (`name`),
INDEX host (host, port),
INDEX ipaddr (ipaddr, port)
) TYPE=MyISAM;
5.2 全ての権限があるユーザーastconfの作成
mysql> GRANT ALL ON astdb.sipfriends TO astconf@localhost IDENTIFIED BY 'astpass';
5.3. Asteriskに変更を適用する
/etc/asterisk/res_mysql.conf を変更する
[general]
dbhost = 127.0.0.1
dbname = astdb
dbuser = astconf
dbpass = astpass
dbport = 3306
dbsock = /var/run/mysqld/mysqld.sock //環境によって違います。
/etc/asterisk/extconfig.conf を変更する
[settings]
sipusers => mysql,astdb,sipfriends
sippeers => mysql,astdb,sipfriends
6. IAX設定用テーブル・ユーザを作成する
6.1 IAX設定用テーブル作成
手順的にはSIP設定用テーブルと同じ。
sqlの名前はiax-friends.sqlとなる。
% mysql astdb -u root -p < ./contrib/iax-friends.sql
同じようにiax-friends.sqlもバグっているので修正すること
※ 2008/08/09追記
どうやら、参考書の方が正しいらしいが、
添付されている Create文のカラムが圧倒的に多いのも気になる。
もしかしたら、使えるかもしれないと考え、参考書にソース添付のSQL文を
マージしたものが以下である。
CREATE TABLE `iaxfriends` (
`name` varchar(40) NOT NULL,
`username` varchar(40) NOT NULL default '',
`type` varchar(6) NOT NULL,
`secret` varchar(40) NOT NULL default '',
`md5secret` varchar(40),
`dbsecret` varchar(100) NOT NULL default '',
`notransfer` varchar(10) NOT NULL default '',
`inkeys` varchar(40) NOT NULL default '',
`outkey` varchar(40) NOT NULL default '',
`auth` varchar(100) NOT NULL default '',
`accountcode` varchar(100) NOT NULL default '',
`amaflags` varchar(20) NOT NULL default '',
`callerid` varchar(40) NOT NULL default '',
`context` varchar(40) NOT NULL default '',
`defaultip` varchar(20) NOT NULL default '',
`host` varchar(40) NOT NULL default 'dynamic',
`language` varchar(10) NOT NULL default '',
`mailbox` varchar(50),
`deny` varchar(95),
`permit` varchar(95),
`qualify` varchar(10) NOT NULL default '',
`disallow` varchar(40) NOT NULL default 'all',
`allow` varchar(40) NOT NULL default '',
`ipaddr` varchar(20) NOT NULL default '',
`port` int(6) NOT NULL default '0',
`regseconds` int(11) NOT NULL default '0',
`regcontext` varchar(40) NOT NULL default '',
`sourceaddress` varchar(20) NOT NULL default '',
`mask` varchar(20) NOT NULL default '',
`regexten` varchar(40) NOT NULL default '',
`mohinterpret` varchar(20) NOT NULL default '',
`mohsuggest` varchar(20) NOT NULL default '',
`cid_number` varchar(40) NOT NULL default '',
`sendani` varchar(10) NOT NULL default '',
`fullname` varchar(40) NOT NULL default '',
`trunk` varchar(10) NOT NULL default '',
`maxauthreq` varchar(15) NOT NULL default '',
`encryption` varchar(20) NOT NULL default '',
`transfer` varchar(10) NOT NULL default '',
`jitterbuffer` varchar(10) NOT NULL default '',
`forcejitterbuffer` varchar(10) NOT NULL default '',
`codecpriority` varchar(40) NOT NULL default '',
`qualifysmoothing` varchar(10) NOT NULL default '',
`qualifyfreqok` varchar(10) NOT NULL default '',
`qualifyfreqnotok` varchar(10) NOT NULL default '',
`timezone` varchar(20) NOT NULL default '',
`adsi` varchar(10) NOT NULL default '',
`setvar` varchar(200) NOT NULL default '',
PRIMARY KEY (`name`),
INDEX name (name, host),
INDEX name2 (name, ipaddr, port),
INDEX ipaddr (ipaddr, port),
INDEX host (host, port)
) TYPE=MyISAM;
astconfへ権限の追加
mysql> GRANT ALL ON astdb.iaxfriends TO astconf@localhost IDENTIFIED BY 'astpass';
Query OK, 0 rows affected (0.00 sec)
/etc/asterisk/extconfig.conf を変更する
[settings]
sipusers => mysql,astdb,sipfriends
sippeers => mysql,astdb,sipfriends
iaxusers => mysql,astdb,iaxfriends
iaxpeers => mysql,astdb,iaxfriends
7. ダイヤルプランをデータベース管理する
7.1 extentionテーブルの作成
ここでも参考書が2冊とも、SQL文が異なっている。
ちなみにソースの中にも、使用可能なSQL文が含まれているが、
参考書とも違うのである。
↓
asterisk/contrib/scripts/retrieve_extensions_from_mysql.pl
retrieve_extensions_from_mysql.pl に記載されているもの
CREATE TABLE extensions (
context CHAR(20) DEFAULT 'default' NOT NULL,
extension CHAR(20) NOT NULL,
priority INT(2) DEFAULT '1' NOT NULL,
application CHAR(20) NOT NULL,
args CHAR(50),
descr TEXT,
flags INT(1) DEFAULT '0' NOT NULL,
PRIMARY KEY(context, extension, priority)
);
迷ったが、ソースに添付されているものが一番確実だろうと思い、
上記のSQLを実行した。
->結果:動作確認した結果、駄目だった。
調べて見たところ、ソースに埋め込まれているカラム名がextensionでは無く、extenだった。
よって、参考書が正しい!
なので、以下のように修正した。
CREATE TABLE extensions (
context CHAR(20) DEFAULT 'default' NOT NULL,
exten CHAR(20) NOT NULL,
priority INT(2) DEFAULT '1' NOT NULL,
app CHAR(20) NOT NULL,
appdata CHAR(200),
PRIMARY KEY(context, exten, priority)
)
7.2 astconfへ権限の追加
mysql> GRANT ALL ON astdb.extensions TO astconf@localhost IDENTIFIED BY 'astpass';
Query OK, 0 rows affected (0.00 sec)
7.3 asterisk側で変更を適用する
/etc/asterisk/extconfig.conf を以下のように変更する
[settings]
sipusers => mysql,astdb,sipfriends
sippeers => mysql,astdb,sipfriends
iaxusers => mysql,astdb,iaxfriends
iaxpeers => mysql,astdb,iaxfriends
extensions => mysql,astdb,extensions
8. 設定ファイルからデータベースへのデータ移行
8.1 sip.conf -> sipfriends テーブルへの移行
デフォルト値が使えるので記載する箇所はそんなに多くないです。
・sip.conf から個々の記載を削除し、DBのsipfriendsテーブルに記載を移す
例:
[99999991]
type=friend
username=99999991
secret=99999991
↓
DBへは[99999991]はカラムnameに99999991を入れます。
その他はパラメータ名と、カラムが同じです。
8.2 extension.conf -> extensions テーブルへの移行
extension.conf 変更前
[inbound]
exten => _999999XX, 1,Dial(SIP/${EXTEN},120,tT)
exten => _999999XX, 2,Congestion
extension.conf 変更後
[inbound]
;switch => Realtime/コンテキスト名@テーブル名
;コンテキスト名、テーブル名共に省略可能。
;省略した場合、コンテキスト名は上に書いてある[inbound]が用いられ、
;テーブル名はextensionsが使用される
switch => Realtime/@
DBへは以下のように書く
context exten priority app appdata
inbound _999999XX 1 Dial SIP/${EXTEN}
inbound _999999XX 2 Congestion
8. Asteriskを再起動すれば作業完了
感想
重かった。そして長かった。
正直なところ、この作業は英語がバリバリ読める or コードがバリバリ読める人じゃないと、
なかなか辛いのではないかと思った。
googleで検索してみても日本語での情報は皆無であるし、
また、両方の参考書の記載も十分とはいいがたい。
Asterisk徹底活用ガイドでは8ページ、Asterisk運用・開発ガイドでは15ページの記載があるが、
DBのカラムの説明は両方共に書かれていないので、
ちょっと複雑な設定をやろうとするとsip.conf の項目に対応するカラムは何なのか?
書き方はこれでよいのか? とソースを見ながら悩むことになる。
結局のところ、パケットをダンプして、コードを見てという作業が必要になる。
また、AsteriskのDB化に関してだけいえば、Asterisk徹底活用ガイドの方が断然わかりやすかった。
目的が違う本なので、一概に比較することはできないが、
Asterisk運用・開発ガイドに書かれていることは、設定だけをやりたい人にはわかりずらすぎる。
(データベース設定の項目でCのAPIとかが書かれていたりする。)
よって、Asterisk徹底活用ガイドお勧め。
コメント(0)
2008.08.04
[
Myカテゴリ:試してみた
]
家族持ちなので、好きな開発ばかりもやっていられませんが、
久々にまとまった時間が取れたので、Asteriskの設定項目をMySQLに格納して見ました。
環境:OSはLinux、ディストリビューションはDebian etch。
アスタリスクはasterisk-1.4.21.2、アドオンはasterisk-addons-1.4.7。
参考にした本は以下の2冊です。
なのだが・・・両方の本で記載が異なっていて困ってしまいました。
徹底活用ガイドの方が手順が圧倒的に少なく、簡潔であるのにたいし、
運用・開発ガイドの方はunixODBCの使用や
設定ファイルodbcinst.iniなどの編集が必要であるとの記載があります。
徹底活用ガイドではodbcについては全く触れられていません。
また、両方ともSQL文が記載されてはいるのですが、
CDも無く、WebにSQL文が上がっているわけでもないので、
毎回60行近くあるSQL文を手動で打ち込まなければなりません(不親切だなぁ・・・)。
疑問に思って調べて見たところ、Asteriskではソースコードと共にSQL文も配布されています。
このSQL文を元にして、各DBごとにSQL文を変える方法がもっとも効率がよさそうです。
asterisk\contrib\scripts\
それでは手順です
?Asterisk add-on のインストール
※zaptel, asteriskをインストール後に、add-on のインストールを行う必要がある
1. ソースの入手後解凍する
$ tar zxvf asterisk-addons-1.4.X
2. 解凍したディレクトリに移動し、以下のコマンドを実行する
$ ./configure
$ make menuselect
$ make
$ sudo make install
?mySQLにデータベースとテーブル、ユーザを作成する
1. mySQLにログインする
$ mysql -u root -p
2. データベースを作成する
mysql> CREATE DATABASE astdb;
Query OK, 1 row affected (0.07 sec)
3. データベースに接続する
mysql> USE astdb;
Database changed
4. CDR用テーブル・ユーザを作成する
4.1 CDR用テーブル作成
CREATE TABLE `cdr` (
`calldate` datetime NOT NULL default '0000-00-00 00:00:00',
`clid` varchar(80) NOT NULL default '',
`src` varchar(80) NOT NULL default '',
`dst` varchar(80) NOT NULL default '',
`dcontext` varchar(80) NOT NULL default '',
`channel` varchar(80) NOT NULL default '',
`dstchannel` varchar(80) NOT NULL default '',
`lastapp` varchar(80) NOT NULL default '',
`lastdata` varchar(80) NOT NULL default '',
`duration` int(11) NOT NULL default '0',
`billsec` int(11) NOT NULL default '0',
`disposition` varchar(45) NOT NULL default '',
`amaflags` int(11) NOT NULL default '0',
`accountcode` varchar(20) NOT NULL default '',
`userfield` varchar(255) NOT NULL default ''
);
4.2. CDR用テーブルにIndexの作成
ALTER TABLE `cdr` ADD INDEX ( `calldate` );
ALTER TABLE `cdr` ADD INDEX ( `dst` );
ALTER TABLE `cdr` ADD INDEX ( `accountcode` );
4.3. INSERT権限だけがあるユーザーastcdrの作成
mysql> GRANT INSERT ON astdb.cdr TO astcdr@localhost IDENTIFIED BY 'astpass';
Query OK, 0 rows affected (0.04 sec)
4.4. 設定ファイルに反映する
・/etc/asterisk/cdr_mysql.conf を編集する
[global]
hostname=localhost
dbname=astdb
table=cdr
password=astpass
user=astcdr
port=3306
sock=/var/run/mysqld/mysqld.sock
userfield=1
※sockはディストリビューションごとに変わります。
5. SIP設定用テーブル・ユーザを作成する
5.1 SIP設定用テーブル作成
これは既にSQL文がソースコードの中に含まれているので簡単です。
以下のコマンドを入力するだけです。
% mysql astdb -u root -p < ./contrib/scripts/sip-friends.sql
Enter password:
ERROR 1064 (42000) at line 5: Something is wrong in your syntax : ') TYPE=MyISAM' ??? : 50 ????
と思ったら、SQL文がバグっています。
53行目のカンマは不要なので消してください。
変更前
INDEX ipaddr (ipaddr, port),
) TYPE=MyISAM;
変更後
INDEX ipaddr (ipaddr, port)
) TYPE=MyISAM;
% mysql astdb -u root -p < ./contrib/scripts/sip-friends.sql
Enter password:
ソースに添付されているSQL文はカラムが足りていないので、
以下のSQLを流してください。
CREATE TABLE `sipfriends` (
`name` varchar(40) NOT NULL default '',
`type` varchar(10) NOT NULL default '',
`username` varchar(40),
`fromuser` varchar(40),
`fromdomain` varchar(40),
`secret` varchar(40),
`md5secret` varchar(40),
`auth` varchar(10),
`mailbox` varchar(20),
`subscribemwi` varchar(10), -- yes/no
`vmexten` varchar(20),
`callerid` varchar(40),
`canreinvite` char(3) default 'yes',
`cancallforward` char(3) default 'yes',
`dtmfmode` varchar(7),
`cid_number` varchar(40),
`callingpres` varchar(20),
`usereqphone` varchar(10),
`language` varchar(10),
`incominglimit` varchar(10),
`context` varchar(40) NOT NULL default '',
`subscribecontext` varchar(40),
`amaflags` varchar(20),
`accountcode` varchar(20),
`musicclass` varchar(20),
`mohsuggest` varchar(20),
`allowtransfer` varchar(20),
`callgroup` varchar(20),
`pickupgroup` varchar(20),
`autoframing` varchar(10), -- yes/no
`disallow` varchar(100) default 'all',
`allow` varchar(100),
`musiconhold` varchar(100),
`maxcallbitrate` varchar(15),
`host` varchar(40) default 'dynamic',
`outboundproxy` varchar(40),
`ipaddr` varchar(20) NOT NULL default '',
`defaultip` varchar(20),
`port` int(6) NOT NULL default '0',
`nat` varchar(5) NOT NULL default 'no',
`deny` varchar(95),
`permit` varchar(95),
`mask` varchar(95),
`fullcontact` varchar(40),
`restrictcid` char(1),
`insecure` varchar(20),
`qualify` varchar(15),
`regseconds` int(11) NOT NULL default '0',
`regexten` varchar(20),
`regserver` varchar(20),
`rtptimeout` varchar(15),
`rtpholdtimeout` varchar(15),
`rtpkeepalive` varchar(15),
`setvar` varchar(200),
PRIMARY KEY (`name`),
INDEX host (host, port),
INDEX ipaddr (ipaddr, port)
) TYPE=MyISAM;
5.2 全ての権限があるユーザーastconfの作成
mysql> GRANT ALL ON astdb.sipfriends TO astconf@localhost IDENTIFIED BY 'astpass';
5.3. Asteriskに変更を適用する
/etc/asterisk/res_mysql.conf を変更する
[general]
dbhost = 127.0.0.1
dbname = astdb
dbuser = astconf
dbpass = astpass
dbport = 3306
dbsock = /var/run/mysqld/mysqld.sock //環境によって違います。
/etc/asterisk/extconfig.conf を変更する
[settings]
sipusers => mysql,astdb,sipfriends
sippeers => mysql,astdb,sipfriends
6. IAX設定用テーブル・ユーザを作成する
6.1 IAX設定用テーブル作成
手順的にはSIP設定用テーブルと同じ。
sqlの名前はiax-friends.sqlとなる。
% mysql astdb -u root -p < ./contrib/iax-friends.sql
同じようにiax-friends.sqlもバグっているので修正すること
※ 2008/08/09追記
どうやら、参考書の方が正しいらしいが、
添付されている Create文のカラムが圧倒的に多いのも気になる。
もしかしたら、使えるかもしれないと考え、参考書にソース添付のSQL文を
マージしたものが以下である。
CREATE TABLE `iaxfriends` (
`name` varchar(40) NOT NULL,
`username` varchar(40) NOT NULL default '',
`type` varchar(6) NOT NULL,
`secret` varchar(40) NOT NULL default '',
`md5secret` varchar(40),
`dbsecret` varchar(100) NOT NULL default '',
`notransfer` varchar(10) NOT NULL default '',
`inkeys` varchar(40) NOT NULL default '',
`outkey` varchar(40) NOT NULL default '',
`auth` varchar(100) NOT NULL default '',
`accountcode` varchar(100) NOT NULL default '',
`amaflags` varchar(20) NOT NULL default '',
`callerid` varchar(40) NOT NULL default '',
`context` varchar(40) NOT NULL default '',
`defaultip` varchar(20) NOT NULL default '',
`host` varchar(40) NOT NULL default 'dynamic',
`language` varchar(10) NOT NULL default '',
`mailbox` varchar(50),
`deny` varchar(95),
`permit` varchar(95),
`qualify` varchar(10) NOT NULL default '',
`disallow` varchar(40) NOT NULL default 'all',
`allow` varchar(40) NOT NULL default '',
`ipaddr` varchar(20) NOT NULL default '',
`port` int(6) NOT NULL default '0',
`regseconds` int(11) NOT NULL default '0',
`regcontext` varchar(40) NOT NULL default '',
`sourceaddress` varchar(20) NOT NULL default '',
`mask` varchar(20) NOT NULL default '',
`regexten` varchar(40) NOT NULL default '',
`mohinterpret` varchar(20) NOT NULL default '',
`mohsuggest` varchar(20) NOT NULL default '',
`cid_number` varchar(40) NOT NULL default '',
`sendani` varchar(10) NOT NULL default '',
`fullname` varchar(40) NOT NULL default '',
`trunk` varchar(10) NOT NULL default '',
`maxauthreq` varchar(15) NOT NULL default '',
`encryption` varchar(20) NOT NULL default '',
`transfer` varchar(10) NOT NULL default '',
`jitterbuffer` varchar(10) NOT NULL default '',
`forcejitterbuffer` varchar(10) NOT NULL default '',
`codecpriority` varchar(40) NOT NULL default '',
`qualifysmoothing` varchar(10) NOT NULL default '',
`qualifyfreqok` varchar(10) NOT NULL default '',
`qualifyfreqnotok` varchar(10) NOT NULL default '',
`timezone` varchar(20) NOT NULL default '',
`adsi` varchar(10) NOT NULL default '',
`setvar` varchar(200) NOT NULL default '',
PRIMARY KEY (`name`),
INDEX name (name, host),
INDEX name2 (name, ipaddr, port),
INDEX ipaddr (ipaddr, port),
INDEX host (host, port)
) TYPE=MyISAM;
astconfへ権限の追加
mysql> GRANT ALL ON astdb.iaxfriends TO astconf@localhost IDENTIFIED BY 'astpass';
Query OK, 0 rows affected (0.00 sec)
/etc/asterisk/extconfig.conf を変更する
[settings]
sipusers => mysql,astdb,sipfriends
sippeers => mysql,astdb,sipfriends
iaxusers => mysql,astdb,iaxfriends
iaxpeers => mysql,astdb,iaxfriends
7. ダイヤルプランをデータベース管理する
7.1 extentionテーブルの作成
ここでも参考書が2冊とも、SQL文が異なっている。
ちなみにソースの中にも、使用可能なSQL文が含まれているが、
参考書とも違うのである。
↓
asterisk/contrib/scripts/retrieve_extensions_from_mysql.pl
retrieve_extensions_from_mysql.pl に記載されているもの
CREATE TABLE extensions (
context CHAR(20) DEFAULT 'default' NOT NULL,
extension CHAR(20) NOT NULL,
priority INT(2) DEFAULT '1' NOT NULL,
application CHAR(20) NOT NULL,
args CHAR(50),
descr TEXT,
flags INT(1) DEFAULT '0' NOT NULL,
PRIMARY KEY(context, extension, priority)
);
迷ったが、ソースに添付されているものが一番確実だろうと思い、
上記のSQLを実行した。
->結果:動作確認した結果、駄目だった。
調べて見たところ、ソースに埋め込まれているカラム名がextensionでは無く、extenだった。
よって、参考書が正しい!
なので、以下のように修正した。
CREATE TABLE extensions (
context CHAR(20) DEFAULT 'default' NOT NULL,
exten CHAR(20) NOT NULL,
priority INT(2) DEFAULT '1' NOT NULL,
app CHAR(20) NOT NULL,
appdata CHAR(200),
PRIMARY KEY(context, exten, priority)
)
7.2 astconfへ権限の追加
mysql> GRANT ALL ON astdb.extensions TO astconf@localhost IDENTIFIED BY 'astpass';
Query OK, 0 rows affected (0.00 sec)
7.3 asterisk側で変更を適用する
/etc/asterisk/extconfig.conf を以下のように変更する
[settings]
sipusers => mysql,astdb,sipfriends
sippeers => mysql,astdb,sipfriends
iaxusers => mysql,astdb,iaxfriends
iaxpeers => mysql,astdb,iaxfriends
extensions => mysql,astdb,extensions
8. 設定ファイルからデータベースへのデータ移行
8.1 sip.conf -> sipfriends テーブルへの移行
デフォルト値が使えるので記載する箇所はそんなに多くないです。
・sip.conf から個々の記載を削除し、DBのsipfriendsテーブルに記載を移す
例:
[99999991]
type=friend
username=99999991
secret=99999991
↓
DBへは[99999991]はカラムnameに99999991を入れます。
その他はパラメータ名と、カラムが同じです。
8.2 extension.conf -> extensions テーブルへの移行
extension.conf 変更前
[inbound]
exten => _999999XX, 1,Dial(SIP/${EXTEN},120,tT)
exten => _999999XX, 2,Congestion
extension.conf 変更後
[inbound]
;switch => Realtime/コンテキスト名@テーブル名
;コンテキスト名、テーブル名共に省略可能。
;省略した場合、コンテキスト名は上に書いてある[inbound]が用いられ、
;テーブル名はextensionsが使用される
switch => Realtime/@
DBへは以下のように書く
context exten priority app appdata
inbound _999999XX 1 Dial SIP/${EXTEN}
inbound _999999XX 2 Congestion
8. Asteriskを再起動すれば作業完了
感想
重かった。そして長かった。
正直なところ、この作業は英語がバリバリ読める or コードがバリバリ読める人じゃないと、
なかなか辛いのではないかと思った。
googleで検索してみても日本語での情報は皆無であるし、
また、両方の参考書の記載も十分とはいいがたい。
Asterisk徹底活用ガイドでは8ページ、Asterisk運用・開発ガイドでは15ページの記載があるが、
DBのカラムの説明は両方共に書かれていないので、
ちょっと複雑な設定をやろうとするとsip.conf の項目に対応するカラムは何なのか?
書き方はこれでよいのか? とソースを見ながら悩むことになる。
結局のところ、パケットをダンプして、コードを見てという作業が必要になる。
また、AsteriskのDB化に関してだけいえば、Asterisk徹底活用ガイドの方が断然わかりやすかった。
目的が違う本なので、一概に比較することはできないが、
Asterisk運用・開発ガイドに書かれていることは、設定だけをやりたい人にはわかりずらすぎる。
(データベース設定の項目でCのAPIとかが書かれていたりする。)
よって、Asterisk徹底活用ガイドお勧め。
Template Designed By
ぐらいんだぁ
ぐらいんだぁ