星期一, 5月 28, 2007

Asterisk extensions.conf (二)

extensions.conf

設計撥號規則 (二)
-----------------------------------------------------------------
通常我們會將 extensions.conf 切分成好幾個檔,
然後再 include 進來 , 這樣比較好做規劃

例如: 將從 FXO 進線的撥號規則存入 fxo_incoming.conf ,
從 SIP 進線的撥號規則存入 sip_incoming.conf

在 extensions.conf 中 , 就可以用
;;; For fxo incoming
#include fxo_incoming.conf
;;; For sip incoming
#include sip_incoming.conf
將其檔案 include 進來 , 另外要注意的是有另一種 include ,
是 include context , 而非 include 檔案

例如在 extensions.conf 中

[test_context]
exten => 1234,1,Answer
.....
.....
;;; include context : test2_context
include test2_context

[test2_context]
exten => 2345,1,Answer
....
....

即表示 context [test_context] , 包括 [tests_context] 這個 context 內容
亦即 context [test_context] 設定為
exten => 1234,1,Answer
.....
.....
exten => 2345,1,Answer
....
....

--------------------------------------------------------------------------------
Asterisk 使用以下特殊用途 extension 名稱:

* i : 使用者按下沒有定義的 extension 號碼
* s : Start extension in context
* h : Hangup extension
* t : Timeout extension
* T : AbsolutTimeout() extension
* o : Operator extension, used for operator exit by pressing zero in voicemail
--------------------------------------------------------------------------------
Macro (巨集)
範例:
Using a macro to create extensions
[globals]
PHONE1=Zap/1
PHONE2=SIP/6002

;;; Macro(oneline,${PHONE1},${PHONE2},${PHONE3}....)
;;; ${ARG1} 就等於 ${PHONE1} , ${ARG2} 就等於 ${PHONE3} 依此類推 ...
[macro-oneline]
exten => s,1,Dial(${ARG1},20,t)
exten => s,2,Voicemail(u${MACRO_EXTEN})
exten => s,3,Hangup
exten => s,102,Voicemail(b${MACRO_EXTEN})
exten => s,103,Hangup

[local]
exten => 6601,1,Macro(oneline,${PHONE1})
exten => 6602,1,Macro(oneline,${PHONE2})

星期三, 5月 23, 2007

Asterisk extensions.conf (一)

Asterisk 可說是目前當紅的 open source IP PBX
詳細說明可至 http://www.voip-info.org/wiki/view/Asterisk 查看

接下來將會以我所知來說明 Asterisk 的設定與運用

extensions.conf

設計撥號規則

內容如下:

;;;撥號規則的環境變數
[general]
;;;預設為 no
static=yes
;;;預設為 no , 如果 writeprotect=no 且 static=yes , 則當在 CLI command 模式中, 執行 save dialplan,
;;;將會儲存目前的撥號規則設定
writeprotect=yes
;;;如果設定為 yes , 則系統將會依據其判斷猜測其為 BUSY,CONGENSTION或HANGUP而終止通話斷線,強烈建議設定為yes
autofallthrough=yes
;;;若設定為 yes, 則執行 extensions reload 時 , 將會清除通用變數的資料
clearglobalvars=no
;;;
priorityjumping=no

;;;撥號規則的通用變數
[globals]
;;; 設定 INCOMING 變數等於 Zap/3&Zap/4
;;; 於撥號規則內可用 ${INCOMING} 來運用 (變數名稱不分大小寫 , 也就是 ${INCOMING} 相當於 ${incoming})
INCOMING => Zap/3&Zap/4
;;; 撥號規則是由一推的 contexts 所組成 , 每一個 context 由一推的 extensions 組成
;;; 例如以下: [sip_outgoing] 即是一個 context
[sip_outgoing]
;;; exten = extension,priority,Command(parameters) (使用 = 或 => 都可以)
extension => 123,1,Answer
extension => 123,2,Dial(SIP/456,30)
extension => 123,3,Hangup
;;; Pattern , 在 extension 中第一個字為 _ 時 , pattern 才有作用
;;; X 表示 0 至 9
;;; Z 表示 1 至 9
;;; N 表示 2 至 9
;;; [1237-9] 表示 1,2,3,7,8,9
;;; . 表示一個或多個任意字
;;; ! 表示 0 個或多個任意數
;;; 例如以下表示所有 4 位數字的都符合
extension => _XXXX,1,Answer
extension => _XXXX,2,Dial(SIP/567,30)
extension => _XXXX,3,Hangup

星期一, 4月 16, 2007

mysql 雙向 replication

mysql Replication
-----------------------------
1. 兩台主機的 mysql 設定檔
my.cnf
加上
;;server-id = 2
server-d =1
log-bin
binlog-do-db = db1
binlog-do-db = db2
binlog-do-db = db3
binlog-do-db = db4
;;master-host = 192.168.1.22
master-host = 192.168.1.30
master-user = ruser
master-password = rpass
master-port = 3306
master-connect-retry = 60
replicate-do-db = db1
replicate-do-db = db2
replicate-do-db = db3
replicate-do-db = db4

2. 兩台主機新增帳號
***** For 4.0.x 以前版本
grant file on *.* to ruser@192.168.1.22 identified by 'rpass';
grant file on *.* to ruser@192.168.1.30 identified by 'rpass';
***** For 4.1.x 以後版本
grant replication slave on *.* to ruser@192.168.1.22 identified by 'rpass';
grant replication slave on *.* to ruser@192.168.1.30 identified by 'rpass';

3. 修改 /etc/hosts.allow
mysqld: 127.0.0.1 192.168.1.22 192.168.1.30

4. 清除 bin-log 檔
設定使用 ssh 直接登入其它伺服器 , 不需要認證
在 192.168.1.22主機上執行
ssh-keygen -t rsa
不要輸入密碼, 產生 RSA key
cat /root/.ssh/id_rsa.pub
將內容複製起來 , 然後在 192.168.1.30 主機上 , 加入 /root/.ssh/authorized_keys 存檔

同樣動作 192.168.1.30 也做一次

如此在 192.168.1.22 主機上執行 ssh 192.168.1.30 , 即可直接登錄
同理在 192.168.1.30 主機上執行 ssh 192.168.1.22 也可直接登錄


新增一檔案 purge_replication_log.sh , 內容如下:

#!/usr/bin/env bash
#######################################################
# Initialization: define variables in need
#######################################################
PATH=/usr/local/bin:/usr/bin:/bin
USER="root"
PASSWD="rootpassword"
CMDSLAVE="stop slave;reset slave;start slave;"
CMDMASTER="reset master;"
MASTER="192.168.1.22"
SLAVE="192.168.1.30"
#### clean master bin-log and slave restart slave
(mysql -u$USER -p$PASSWD -e "$CMDMASTER") 1>/dev/null
(ssh $SLAVE "mysql -u$USER -p$PASSWD -e \"$CMDSLAVE\"") 1>/dev/null
### claen slave bin-log and master restart slave
(ssh $SLAVE "mysql -u$USER -p$PASSWD -e \"$CMDMASTER\"") 1>/dev/null
(mysql -u$USER -p$PASSWD -e "$CMDSLAVE") 1>/dev/null
exit 0


如此 , chmod 755 purge_replication_log.sh
定期執行 purge_replication_log.sh 即可將 bin-log 刪除 , 以防 bin-log 過大 , 並保持雙向同步