หน้าเว็บ

วันพฤหัสบดีที่ 10 กันยายน พ.ศ. 2552

Asterisk on Ubuntu Server

สำหรับบทความนี้เคยเขียนไว้ครั้งหนึ่งแล้วเมื่อก่อนที่จะเปลี่ยน Server ขณะที่พยายามนำกลับมาลงใหม่ ก็ได้ติดตั้งระบบเพิ่ม แล้วลองทำตามขั้นตอนที่เคยเขียนไว้ไม่ค่อยดีนัก เพราะเป็นการติดตั้งแบบผ่าน Package ของ Ubuntu ซึ่งการปรับแต่งจะยุ่งยากกว่า ซึ่งตอนหลังผู้เขียนจะใช้วิธีติดตั้งเอง โดยดาวน์โหลด Source Code แล้วคอมไพล์ใหม่ทำให้ง่ายต่อการแก้ไขปัญหาและการติดตั้ง...

หลังจากที่ติดตั้งระบบ Server ของ Ubuntu เรียบร้อยแล้ว (ขั้นตอนสามารถอ่านได้ที่ http://linux.sothorn.org/node/357) แล้วให้ปรับปรุงระบบด้วยคำสั่ง

# apt-get update
# apt-get upgrade

คำ สั่งหลังจะใช้เวลานานพอสมควร และการติดตั้งทั้งหมดต้องอาศัยการเชื่อมต่ออินเตอร์เน็ตหลาย ๆ ขั้นตอน และที่ขาดไม่ได้คือ google สำหรับหาข้อมูลกรณีติดขัดปัญหาต่าง ๆ

จากนั้นทำตามขั้นตอนต่อไปนี้

1. เข้าไปใน /usr/src เพื่อดาวน์โหลดไฟล์ดังนี้

# cd /usr/src
# wget -c http://downloads.digium.com/pub/asterisk/asterisk-1.4-current.tar.gz
# wget -c http://downloads.digium.com/pub/zaptel/zaptel-1.4-current.tar.gz
# wget -c http://downloads.digium.com/pub/asterisk/asterisk-addons-1.4-current.tar.gz

สำหรับ ผู้ที่ใช้การ์ด yeastar จะต้องดาวน์โหลดเวอร์ชันล่าสุดได้แค่ 1.4.12.1 เท่านั้น เพราะตอนนี้ไม่สามารถเข้าไปดูรายการไฟล์ patch ที่จะเลือกดาวน์โหลดจาก www.yeastar.com/download ได้เหมือนเมื่อก่อนเสียแล้ว (พยายามติดต่อไปทาง Support หลายครั้งแล้วยังไม่ได้รับคำตอบ... สงสัยต้องเลิกใช้แล้วล่ะ)

2. ดาวน์โหลดไฟล์ cdr.sql จากเว็บของอาจารย์กิตติพงษ์

# wget http://bsd.psru.ac.th/asteriskbook/cdr.sql

3. แตกไฟล์เพื่อติดตั้งด้วยคำสั่ง tar

# tar xvzf asterisk-1.4-current.tar.gz
# tar xvzf zaptel-1.4-current.tar.gz
# tar xvzf asterisk-addons-1.4-current.tar.gz

4. ดาวน์โหลดไฟล์ที่เกี่ยวข้องกับการติดตั้ง

# apt-get install php5-cli php5-xmlrpc php5-mysql mysql-server mysql-client snmpd sudo subversion php5-snmp snmp snmpd libncurses5-dev mpg123 sox make automake gcc g++ libc6-dev libc6 libmysqlclient15-dev

5.ติดตั้ง zaptel ก่อนเป็นอันดับแรก

สำหรับ ผู้ที่ใช้การ์ดอื่นที่ไม่ใช้ Digium Compatible 100% ก็ต้องดาวน์โหลดไฟล์ Patch ก่อนการติดตั้ง Zaptel สำหรับผู้เขียนใช้การ์ดยี่ห้อนี้อยู่จึงต้องดาวน์โหลดได้แค่เวอร์ชัน 1.4.12.1 เท่านั้นด้วยคำสั่งนี้

# wget http://www.yeastar.com/download/ystdm8xx-zaptel-1.4.12.1.patch.tar.gz
# tar xvzf ystdm8xx-zaptel-1.4.12.1.patch.tar.gz
# patch -p0 <>

จากนั้นเข้าไปในไดเรคทอรี zaptel เพื่อติดตั้ง (ถ้าไฟล์ patch ถูกต้องจะไม่มีข้อความสอบถามอะไร)

# cd zaptel-1.4-<เวอร์ชันตามที่ดาวน์โหลด>
# ./configure
# make
# make install
# make config
# reboot

หลังจากบูตเรียบร้อยแล้วให้ Generate ไฟล์ conf ด้วยคำสั่ง

# /usr/sbin/genzaptelconf

ขั้นตอน การติดตั้ง zaptel มีแค่นี้ แต่ถ้าหากมีข้อความ error เกี่ยวกับ zapata.conf ให้สร้างใหม่และเพิ่ม #include เข้าไปด้วยเพราะ ระบบได้สร้างไฟล์ไว้ใน /etc/asterisk/zapata-channels.conf

ตัวอย่างไฟล์ zapata.conf
[channels]
echocancel=yes
txgain=8.0
rxgain=8.0
busydetect=yes
busycount=4
threewaycalling=yes
transfer=yes
canpark=yes
cancallforward=yes
callreturn=yes
#include zapata-channels.conf

ตัวอย่าง นี้ผู้เขียนได้ตัดคอมเม้นท์ออกไปหมดเลยเพราะดูยาก หลังจากนั้นลองใช้คำสั่ง ztcfg -vvv ซึ่งจะแสดง channels ตามจำนวนที่ติดตั้ง (หากมีข้อความแสดงความผิดพลาดอะไรก็ต้องไล่ตามอาการ)

Image

6. ติดตั้ง asterisk

เมื่อ ก่อนตอนติดตั้งใหม่ ๆ ผู้เขียนมักจะติดตั้ง asterisk ก่อนแล้วค่อยติดตั้ง zaptel ทีหลัง ปรากฎว่ามักจะเจอปัญหามองไม่เห็นการ์ด โดยจะไม่มีคำสั่ง zap ขึ้นใน CLI ของ Asterisk สอบถามหลายคนก็บอกว่ายังไม่ได้ติดตั้ง zaptel วิธีแก้ไขต้องคอมไพล์ asterisk แล้วติดตั้งใหม่ถึงจะใช้ได้

การติดตั้ง asterisk มีวิธีการดังนี้

# cd /usr/src/asterisk-1.4.22.1
# ./configure
# make
# make install
# make samples

กำหนดให้รัน asterisk ทุกครั้งที่บูตเครื่อง

ก่อนอื่นให้ติดตั้งโปรแกรมเสียก่อนด้วยคำสั่ง

# apt-get install sysv-rc-conf

และคัดลอกไฟล์ asterisk ไป ไว้ใน /etc/init.d ด้วยคำสั่ง

# cp /usr/sbin/asterisk /etc/init.d

หลังจากนั้นให้เรียกคำสั่ง sysv-rc-conf เพื่อกำหนด โดยให้กดปุ่ม space bar เพื่อมาร์คเครื่องหมายเหมือนในรูป

Image

หลัง จากนั้นให้ reboot เครื่องแล้วลองเข้า asterisk ด้วยคำสั่ง asterisk -r เมื่อเข้าสู่ CLI แล้วให้พิมพ์คำสั่ง zap show status เพื่อตรวจสอบว่า asterisk มองเห็นการ์ดโทรศัพท์หรือไม่ ถ้าพบจะแสดงข้อความเหมือนในรูป

Image

จากรูปจะเห็นข้อความเตือนในอนาคตจะยกเลิกใช้คำสั่ง zap โดยใช้คำสั่ง dahdi แทน

7. ติดตั้ง Asterisk Addons

ให้เข้าไปในไดเรคทอรีของ aterisk-addons ที่ขยายไฟล์ไว้แล้วและสั่งติดตั้งดังนี้

# cd /usr/src/asterisk-addons-1.4.<เวอร์ชัน>
# ./configure

ขั้นตอน นี้สำคัญมาก ผู้เขียนเองเคยมองข้ามโดยไม่สนใจรายละเอียด แล้วทำให้ไม่สมารถติดตั้งระบบได้ ให้ตรวจสอบผลงานสักนิดหนึ่งว่าระบบ config ออกมาแล้วมีอะไรบ้างที่ตรวจพบ ซึ่งสิ่งที่สำคัญคือต้องพบไลบรารีเกี่ยวกับ mysql ตามตัวอย่างที่ขีดเส้นใต้

checking curses.h usability... yes
checking curses.h presence... yes
checking for curses.h... yes
checking for initscr in -lncurses... yes
checking for curses.h... (cached) yes
checking for mysql_config... /usr/bin/mysql_config
checking for mysql_init in -lmysqlclient... yes
checking for asterisk.h... yes
configure: creating ./config.status
config.status: creating build_tools/menuselect-deps
config.status: creating makeopts

จากนั้นติดตั้งระบบต่อดังนี้

# make
# make install

เมื่อติดตั้งแล้วลำดับต่อไปให้เข้าไปกำหนดรายละเอียดไฟล์ต่าง ๆ ดังนี้

7.1 โหลดโมดูลในไฟล์ /etc/asterisk/modules.conf โดยเพิ่มข้อความ load => cdr_addon_mysql.so ต่อท้ายไฟล์
7.2 เพิ่มในไฟล์ /etc/asterisk/cdr.conf ดังนี้

[csv]
usegmtime=yes ; log date/time in GMT. Default is "no"
loguniqueid=yes ; log uniqueid. Default is "no"
loguserfield=yes ; log user field. Default is "no"

[mysql]
usegmtime=yes ; log date/time in GMT. Default is "no"
loguniqueid=yes ; log uniqueid. Default is "no"
loguserfield=yes ; log user field. Default is "no"

ข้อมูลในส่ง [mysql] ให้คัดลอกมาจาก [csv]

7.3 แก้ไขเซ็กชัน [global] ในไฟล์ /etc/asterisk/cdr_mysql.conf ดังนี้

[global]
hostname=localhost
dbname=asterisk
table=cdr
password=<รหัสผ่านของ mysql>
user=<ชื่อผู้ใช้ mysql>
port=3306
;sock=/tmp/mysql.sock
;userfield=1

ผู้เขียนเคยเจอปัญหาการเชื่อมต่อ cdr ไม่ได้เพราะบรรทัด sock= จึงปิดไม่ใช้งาน

7.4 สร้างฐานข้อมูลจากไฟล์ cdr.sql ที่ดาวน์โหลดในขั้นตอนที่ 2 ด้วยคำสั่ง

# mysql -u root -p<รหัสผ่านของ root> <>

ระบบจะสร้างฐานข้อมูลชื่อ asterisk และกำหนดชื่อผู้ใช้เป็น asterisk และรหัสผ่านเป็น asterisk123

7.5 ทดสอบ ให้พิมพ์ cdr status ใน asterisk CLI จะได้ข้อความดังนี้

ipbx1*CLI> cdr status
CDR logging: enabled
CDR mode: simple
CDR output unanswered calls: no
CDR registered backend: csv
CDR registered backend: cdr-custom
CDR registered backend: cdr_manager
CDR registered backend: mysql

ถ้า ไม่มีข้อความนี้ให้ตรวจสอบอื่น ๆ ผู้เขียนใช้วิธีตรวจสอบผ่าน asterisk debug ด้วยคำสั่ง asterisk -ccccc (ถ้ารัน asterisk ต้องปิดเสียก่อนด้วยคำสั่ง stop now ที่ CLI)

8. ติดตั้งระบบ Asterisk Status

ให้ดาวน์โหลดไฟล์ http://www.areski.net/asterisk-stat-v2/asterisk-stat-v2_0_1.tar.gz แล้วขยายไปเก็บไว้ใน root ของ เว็บเซิร์ฟเวอร์ ปกติจะอยู่ใน /var/www และควรจะเก็บไว้ชื่อที่ง่าย ๆ ต่อการเข้าใช้งาน ผู้เขียนเองเก็บไว้ใน /var/www/stat

จากนั้นให้เข้าไปแก้ไขไฟล์ /var/www/stat/lib/defines.php ดังนี้

define ("WEBROOT", "http://localhost/stat/");
define ("FSROOT", "/var/www/stat/");
define ("LIBDIR", FSROOT."lib/");
define ("HOST", "localhost");
define ("PORT", "3306");
define ("USER", "asterisk");
define ("PASS", "asterisk123");
define ("DBNAME", "asterisk");
define ("DB_TYPE", "mysql"); // mysql or postgres

จาก นั้นลองใช้โทรศัพท์แล้วเข้าไปใน http://xxx.xxx.xxx/stat/cdr.php เพื่อดูรายละเอียดเกี่ยวกับการใช้โทรศัพท์เหมือนตัวอย่างในรูปด้านล่างนี้

Image

เป็น อย่างไรบ้างครับ... ลองดูนะครับ ถ้าหากมีข้อผิดพลาดหรือตกหล่นประการใดรบกวน Post ข้อความไว้ด้วยนะครับ จะได้แก้ไขให้ถูกต้องต่อไป... ขอบคุณมากครับ...


Thanks : ipbxsystem.com

ไม่มีความคิดเห็น: