极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13009|回复: 1

在pcduino上构建自己的电话局--voip服务器

[复制链接]
发表于 2013-6-24 10:59:29 | 显示全部楼层 |阅读模式
本帖最后由 Pillar_zuo 于 2013-6-24 11:01 编辑

现在大家有时会收到电信运营商的推销短信,例如什么彩铃5月每月,一些收费服务。

这里给大家介绍一个开源项目,在pcduino实现免费的电话局,可以在这个电话局上实现彩铃,电话转接,来电显示等等一些功能。

这里采用的用的是3G+asterisk+freepbx方案,这里3G是电话局的物理前端,freepbx是电话局的图形界面操作后台,asterisk就是开源的voip服务器,具体的开发过程如下:

一,下载安装asterisk

1,首先在官网上下载asterisk11源码:下载地址http://www.asterisk.org/downloads

2,安装环境

sudo apt-get install sqlite3 libsqlite3-dev  libxml2-dev g++ ncurses-dev

tar xvfz asterisk-11-current.tar.gz

cd asterisk-*
./configure
contrib/scripts/get_mp3_source.sh
make menuselect
make
make install
make config
安装完成之后可以执行:
asterisk  -vr
来启动asterisk命令模式,如果执行命令提示什么打不开,需要执行asterisk start 来启动服务器。
安装成功后,会有以下命令行模式:
root@ubuntu:/home/ubuntu# asterisk -vr
Asterisk 11.3.0, Copyright (C) 1999 - 2012 Digium, Inc. and others.
Created by Mark Spencer <[email protected]>
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type 'core show license' for details.
=========================================================================
Connected to Asterisk 11.3.0 currently running on ubuntu (pid = 847)
ubuntu*CLI>

2,安装3G上网卡在asterisk上面的驱动
首先要保证3G上网卡可以在pcduino上可以上网,具体的实现过程详见文章
http://www.linksprite.com/cnblog/?p=794
然后要保证你的3G上网卡有打电话的功能,此项目中用的是华为E1752
具体的有哪些型号可以用请参加华为的官网说明。
下面开始安装3G上网卡连接asterisk的驱动:
安装asterisk的3G上网卡的驱动

wget http://кушеев.рф/wp-content/uploads/asterisk-chan-dongle-asterisk11.zip

unzip asterisk-chan-dongle-asterisk11.zip
cd asterisk-chan-dongle-asterisk11
aclocal
autoconf
automake -a
./configure
make
make install
cp etc/dongle.conf /etc/asterisk

安装成功后,下面可以测试可以测试一下:

1》检测物理设备



2》给上网卡打电话





3》给上网卡发短信





可以看到我发的短信的内容。

可以看到3G和asterisk都已经安装完成。

二,安装voip图形化管理界面freepbx

1,安装依赖文件

apt-get install -y build-essential linux-headers-`uname -r` openssh-server apache2 mysql-server mysql-client bison flex php5 php5-curl php5-cli php5-mysql php-pear php-db php5-gd curl sox libncurses5-dev libssl-dev libmysqlclient15-dev mpg123 libxml2-dev libnewt-dev sqlite3 libsqlite3-dev pkg-config automake libtool autoconf git subversion

这里会提示linux-headers-`uname -r`这个命令的包找不到,没有关系,下面将会为你解决这个问题。

2,安装PearDB

pear install db

这里会提示WARNING: "pear/DB" is deprecated in favor of "pear/MDB2",可以忽略这个警告

安装后reboot重启一下。

3,安装iksemel

wget https://iksemel.googlecode.com/files/iksemel-1.4.tar.gz

tar xf iksemel-1.4.tar.gz
cd iksemel-1.4
./configure
make
make install
4,安装DAHDI
wget http://downloads.asterisk.org/pub/telephony/dahdi-linux-complete/dahdi-linux-complete-current.tar.gz
tar xvfz dahdi-linux-complete-current.tar.gz

cd dahdi-linux-complete-2.6.1+2.6.1
make all
make install
make config
当make all的时候会提示你没有安装kenral源码,然后就打印出错误信息,下面就介绍如果解决这个问题。
出现这个错误的主要原因是我们开发的内核源码没有提供安装包,只要我们把内核源码放在指定位置就可以了,但是源码有600M,很显然我们不能放到板子上,如果是用的是531的系统,那就恭喜你,你直接拷贝过来就行了。
为了解决空间问题,我们可以把在X86上搭建NFS服务器,把源码挂载到板子上。具体的在搭建NFS服务器的步骤我就不介绍了。
首先在板子上安装nfs文件支持。
sudo apt-get intall nfs-common
然后执行命令,挂载NFS网络文件系统。
root@ubuntu:/home/ubuntu# mount -t nfs -o nolock 192.168.3.115:/usr/src/linuxsunxi /lib/modules/3.4.29+/build/





挂载成功后需要在pcduino上配置,编译源码,比较慢,大概3个小时的样子。由于需要编译生成uImage,需要mkimage。这里不能把X86的拷贝过来直接用,需要在pcduino上编译生成ARM架构的
然后拷贝到/usr/bin目录下。
由于我们的需要用到源码对应的内核,所以需要把内核和驱动都换掉,具体的不知道怎么的换,请参考我前面的帖子《pcduino内核开发指南》。换驱动比较简单。在make uImage之后,执行
make  modules_install install就可以了。换掉内核和驱动之后重启一下。
5,安装libpri
wget http://downloads.asterisk.org/pub/telephony/libpri/libpri-1.4-current.tar.gz
tar xvfz libpri-1.4-current.tar.gz
cd libpri-1.4.14
make
make install
6,安装Asterisk-Extra-Sounds
cd /var/lib/asterisk/sounds
wget http://downloads.asterisk.org/pub/telephony/sounds/asterisk-extra-sounds-en-gsm-current.tar.gz
tar xfz asterisk-extra-sounds-en-gsm-current.tar.gz
rm asterisk-extra-sounds-en-gsm-current.tar.gz
7,安装配置freepbx
export VER_FREEPBX=2.11
cd /usr/src
svn co http://www.freepbx.org/v2/svn/freepbx/branches/${VER_FREEPBX} freepbx
cd freepbx
adduser asterisk --disabled-password --no-create-home --gecos "Asterisk User"
chown asterisk. /var/run/asterisk
chown -R asterisk. /etc/asterisk
chown -R asterisk. /var/{lib,log,spool}/asterisk
chown -R asterisk. /usr/lib/asterisk
mkdir /var/www/html
chown -R asterisk. /var/www/
sed -i 's/\(^upload_max_filesize = \).*/\120M/' /etc/php5/apache2/php.ini
cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf_orig
sed -i 's/^\(User\|Group\).*/\1 asterisk/' /etc/apache2/apache2.conf
service apache2 restart
配置数据库
export ASTERISK_DB_PW=amp109
mysqladmin -u root create asterisk
mysqladmin -u root create asteriskcdrdb
mysql -u root asterisk < SQL/newinstall.sql
mysql -u root asteriskcdrdb < SQL/cdr_mysql_table.sql
设置数据库
mysql -u root -e "GRANT ALL PRIVILEGES ON asterisk.* TO asteriskuser@localhost IDENTIFIED BY '${ASTERISK_DB_PW}';"
mysql -u root -e "GRANT ALL PRIVILEGES ON asteriskcdrdb.* TO asteriskuser@localhost IDENTIFIED BY '${ASTERISK_DB_PW}';"
mysql -u root -e "flush privileges;"
开始安装freepbx
./start_asterisk start
./install_amp --webroot /var/www/freepbx
amportal a ma installall
amportal a reload
./install_amp --username=asteriskuser --password=$ASTERISK_DB_PW --webroot /var/www/freepbx
ln -s /var/lib/asterisk/moh /var/lib/asterisk/mohmp3
amportal start
cd /etc/asterisk
rm ccss.conf confbridge.conf features.conf sip.conf iax.conf logger.conf extensions.conf sip_notify.conf
现在可以在win7上打开http://192.168.3.114/admin/config.php这个网址,前面的IP就是pcduino的IP。
如果出现错误,请检测两个地方:
第一,这是基于web服务器的网页,检测web服务器的状态。
/etc/init.d/apache2 status
第二,检测web服务器的目录是不是/var/www/freepbx/


这就是登录界面,选择管理员,这里可能你设置的用户名和密码会失效,直接用户名和密码都是admin就可以了,下面是登录进去的界面。


如果你对freepbx很熟悉,这个你应该会感觉很亲切。这里为止服务器已经搭建好了,你可以去设置你想要的功能。前提条件是对freebpx比较熟,下面一篇文章介绍一个入门,教大家设置彩铃。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2013-7-19 17:28:24 | 显示全部楼层
值得学习!!!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-3-28 22:55 , Processed in 0.049465 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表