2024年2月22日发(作者:公良文静)
OpenIMSCore安装配置过程,思路,可能遇到的问题及其解决办法
袁星勇
E-MAIL:yuan-xy@
ChongQing JinMei Communication Co.,Ltd
2008-10-23
代码资源来源:OpenIMSCore: .
文档来源:OpenIMSCore Installation Guide――.
参考资料:基于开放源代码实现的IMS原型化系统-张懿-重庆大学硕士论文
1. 运行环境之编译环境的安装及配置
OpenIMSCore是基于Linux环境开发的,所以要编译OpenIMSCore源代码首先需要在Linux操作系统安装编译及运行环境。在《基于开放源代码实现的IMS原型化系统》论文中可以找到OpenIMSCore运行环境要求:
a) GCC 3/4;
b) JDK1.5以上;
c) ant;
d) 已安装并启动MySQL数据库管理系统;
e) libxml2,libmysqlclient库软件包及开发包头文件;
f) flex和bison;
g) Linux Kernel 2.6
h) 已安装并启动bind域名服务器;
注:Fedora8或者CentOS5(RHEL5)操作系统DVD光盘中有自带的MySQL,bind等rpm安装包,而在Ubuntu的CD光盘上是没有mysql,bind,flex,bison,gcc等安装包的,所以我选择了Fedora和CentOS的安装方式。在安装Fedora/CentOS时在定制时(安装过程基本相似),我安装了mysql,bind,gcc,安装完成后只需要在安装ant和jdk就可以完成以上的运行环境要求,所以首次安装推荐使用Fedora/CentOS,本文也只介绍了Fedora/CentOS下的安装过程。如果采用Ubuntu以上所有的都需要自己手动下载安装包安装或者在线更新,需要的步骤会更多,在本文中就不再描述。
在上下载了源代码以后就可以发现OpenIMSCore源代码分为两个部分,ser_ims和FHoSS,其中ser_ims是用C语言开发的,而FHoSS是用Java开发的。ser_ims部分主要完成的IMS中的cscfs功能实体,FHoSS完成IMS中HSS功能实体。所以首先需要在Linux操作系统中安装GCC编译器及jdk编译器。
a) GCC
在Linux终端shell命令行中输入命令#gcc --version如果显示gcc版本信息则基本可以确认gcc是已经安装了的,如果在编译程序时出现error C
compiler cannot create executables的错误,是gcc库安装不完整造成的,需要安装glibc,及libc6-dev。
如果采用fedora8或者centos5(RHEL5),在安装配置时可以配置是否安装GCC,如果没有安装你需要找到光盘中的gcc有关的rpm包手动安装,它
在终端输入java –version命令后会显示已经安装的jdk信息,输入ant –h会显示ant相关信息,如果没有,仔细检查上面三个脚本中的几个路径是否对应是你的jdk和ant的安装路径,也可能是或
没有正确的安装。
2. 编译程序
在/opt/目下新建一个OpenIMSCore文件夹,然后将下载下的源代码复制到/opt/OpenIMSCore下,如果采用ftp下载的代码,只需要将ser_和解压缩到OpenIMSCore即可。
可能会依赖很多安装包,过程会比较繁琐。
b) jdk
我采用的是及,在/usr下新建一个文件夹java,将复制到/usr/java下然后在终端键入命令#./运行这个文件,按照提示信息安装jdk。
将解压缩到/usr/local目录下,然后将在/usr/local下新产生的apache-ant-1.7.1文件夹更名为ant。
#tar –zxvf –C /usr/local/
#mv /usr/local/apache-ant-1.7.1 /usr/local/ant
完成以上两步后设置编译程序需要的环境变量JAVA_HOME
编辑/etc/profile文件,在文件末尾中增加以下几行:
#set java environment
export JAVA_HOME=/usr/java/jdk1.6.0_07
export PATH=/usr/java/jdk1.6.0_07:$PATH
export CLASSPATH=/usr/java/jdk1.6.0_07/lib
#end
在/etc/profile.d/文件夹下新建两个文档:,。
在中增加以下3行
export JAVA_HOME=/usr/java/jdk1.6.0_07
export PATH=/usr/java/jdk1.6.0_07/bin:$PATH
export
CLASSPATH=.:$JAVA_HOME/lib/:$JAVA_HOME/lib/:$JAVA_HOME/lib
在中增加下面2行
export ANT_HOME=/usr/local/ant
export PATH=$PATH:$ANT_HOME/bin
然后分别执行这个文件:
# source /etc/profile
# source /etc/profile.d/
# source /etc/profile.d/
注:#前缀表示需要root权限才能运行。
如果是用SVN,将ser_ims和FHoSS都checkout在/opt/OpenIMSCore目录下即可。
a) 进入ser_ims文件件编译
#cd /opt/OpenIMSCore/ser_ims
#make install-libs all
如果只需要编译其中的一部分,或者只编译IMSCore不需要其他模块,可详细阅读在ser_ims文件夹下的INSTALL文件。
如果在编译时出错:
1) 检查编译器是否安装正确
2) 源代码是否完整
3) 如果提示在文件dbase.c有错误,如找不到
解决思路:
找到ser_ims/modules/mysql/下的dbase.c文件下可以找到#include
错误原因:在/usr/include下没有包含有mysql.h的mysql头文件夹;
解决办法:下载一个mysql的压缩包,我采用的是,在解压缩后的文件夹中可以找到include和lib文件夹,将include文件夹名改为mysql,并复制到/usr/include中。
重新编译,应该还会发现找不到libmysqlclient的错误,这时再将压缩文件中的lib文件夹更名为mysql,复制到/usr/local/lib文件夹下。
重新编译,顺利通过。
b) 进入FHoSS文件夹编译HSS
#ant compile deploy
如果需要了解更多信息,阅读在FHoSS目录下文件
如果编译出错一般是JAVA_HOME设置不正确造成的。
3. 运行环境之mysql
如果不是采用的默认安装mysql(rpm包安装方式和默认安装是一致的),请参考mysql官方相关文档,安装完成后,相应的导入到数据库中即可。
终端中输入命令:
#chkconfig --level 5 mysql on
#service mysqld start
在终端shell命令行中输入mysql即可进入mysql环境,使用show
databases;命令即可查看默认的mysql数据库,使用exit可返回到终端shell命令行。
如果输入mysql提示command not found则表示数据库没有正常启动,可能出现的的错误原因:
a) mysql服务没有启动
可在shell命令行输入chkconfig --list | grep mysqld查看mysqld服务进程是否启动。
如果没有启动,输入命令service mysqld start即可启动mysql。
b) mysql没有安装。(mysql在linux下的安装步骤网上教程比较多。)
如果mysql正常工作,将OpenIMSCore需要的三张表导入到数据库中,
mysql -u root -p -h localhost
mysql -u root -p -h localhost
mysql -u root -p -h localhost
中间会提示输入密码,该密码为数据库mysql的密码,如果没改,默认为空。
完成后在命令行中输入mysql。
在mysql环境中输入show databases;(注意命令有个分号结尾)可以看到已经多了两个数据库hss_db(注意是hss_db,icscf。
4. 运行环境之DNS服务器
如果有独立的可控的DNS服务器,则域名解析部分可方在专门的DNS服务器上,在这里我们是准备在局域网中搭建IMS试验场,所以需要安装DNS服务器来做域名解析,并将DNS服务器和IMS服务器做在同一台PC中。下面就介绍在Fedora 8 和CentOS下利用bind实现IMS服务器需要的DNS解析(详情请参考Bind9相关的官方文档)。
由于是在同一台PC上实现,所以DNS服务器地址应该指向自己,所以在/etc/中应增加一行:nameserver 127.0.0.1
可通过命令chkconfig --list|grep named查看是否安装了DNS Serve。
如果已经安装通过命令service named start则可启动DNS Server。
如果没有安装则需要在安装包中(或下载)找到bind相应的安装包和它依赖的相关包,bind安装相关的文章在网上也很多。最简便的办法就是在安装Linux操作系统定制时就选上DNS服务器,直接就可以使用。
安装完成后修改/etc/文件。
在CentOS5中默认好像是没有这个文件,需要执行命令
#cp –p /etc/
用(这个文件需要安装另外一个dns的安装包才会产生)模板生成一个文件
。修改后的文件为(红色为修改部分)
CentOS下的文件:
options {
listen-on port 53 { any; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_";
statistics-file "/var/named/data/named_";
memstatistics-file "/var/named/data/named_mem_";
query-source port 53;
query-source-v6 port 53;
allow-query { any; };
};
logging {
channel default_debug {
file "data/";
severity dynamic;
};
};
view localhost_resolver {
match-clients { any; };
match-destinations { any; };
recursion yes;
include "/etc/";
};
如果是Fedora8 修改后为下面的结果:
options {
listen-on port 53 { any; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_";
statistics-file "/var/named/data/named_";
memstatistics-file "/var/named/data/named_mem_";
allow-query { any; };
};
logging {
channel default_debug {
file "data/";
severity dynamic;
};
};
zone “.” IN {
type hint;
file “”;
};
include “etc/”;
修改完后无论是在fedora8还是CentOS下均需要编辑/etc/文件,在文件中增加一个zone:
zone “” IN{
type master;
file “e”;
notify no;
};
在增加的区域中可看到需要dns区域文件e,这个文件在ser_ims/cfg/文件夹下有一个模板。编辑该模板,因为IMSCore的三个cscf功能实体和hss数据库,DNS服务器都在一台PC上,所以将其中的IP地址127.0.0.1全部改为你的本机IP如192.0.22.58即可,如果域名采用的不是默认的,还需要相应的修改其SOA,A记录。如果是某个功能实体在不同的服务器上则需要修改这个功能实体相应的A记录IP地址。
修改完成后将e复制到/var/named/chroot/var/named目录下,并在/var/named/下做一个e符号连接
#cd /var/named/
#ln -s chroot/var/named/e e
完成后输入命令#service named reload加载DNS配置文件。
在本机输入ping 能ping通则基本可以确定DNS工作正常。
在联网的电脑上将DNS设为IMS服务器的IP,然后ping
如果能ping通则DNS能正常解析。
如果不能ping通,检查bind安装是否正确,以上的
是否配置正确,配置正确后输入命令#service
named restart重新启动DNS。
另外可能需要关闭SELinux和防火墙。
Fedora/CentOS shell命令行中运行setup,禁止SELinux和防火墙即可。
通过前4步骤的处理,基本完成了运行环境的配置。下面介绍运行IMSCore。
5. 运行配置OpenIMSCore
a) CSCF配置
进入/opt/OpenIMSCore/ser_ims/cfg/文件夹执行替换脚本
#cd /opt/OpenIMSCore/ser_ims/cfg/
#bash
在提示的Domain:输入(也可输入其他域名如,但是改动域名之后相应的还应更改DNS中的设置,以及其他相关的设置,这个暂时还没有统计),提示IP:则输入IMS服务器的IP。
注:这个脚本目前还有些问题,不能执行第二次修改,如果IMS服务器想换一个IP和域名会比较麻烦一点。下面附上我更改过后的脚本,可无限制的更改IP和域名。
*****************************************************************
红色字体为修改的地方
#!/bin/bash
# Initialization & global vars
# if you execute this script for the second time
# you should change these variables to the latest
# domain name and ip address
DOMAIN=""
IPADDR="127.0.0.1"
DDOMAIN=`echo $DOMAIN | sed 's/././g'`
DSDOMAIN=`echo $DOMAIN | sed 's/././g'`
DEFAULTIP=`echo $IPADDR | sed 's/././g'`
CONFFILES=`ls *.cfg *.xml *.sql *.properties 2>/dev/null`
# Interaction
printf "Domain Name:"
read domainname
printf "IP Adress:"
read ip_address
# input domain is to be slashed for cfg regexes
slasheddomain=`echo $domainname | sed 's/././g'`
if [ $# != 0 ]
then
printf "changing: "
for j in $*
do
sed -i -e "s/$DDOMAIN/$domainname/g" $j
sed -i -e "s/$DSDOMAIN/$slasheddomain/g" $j
sed -i -e "s/$DEFAULTIP/$ip_address/g" $j
printf "$j "
done
echo
else
printf "File to change ["all" for everything, "exit" to quit]:"
# loop
while read filename ;
do
if [ "$filename" = "exit" ]
then
printf ""
break ;
elif [ "$filename" = "all" ]
then
printf "changing: "
for i in $CONFFILES
do
sed -i -e "s/$DDOMAIN/$domainname/g" $i
sed -i -e "s/$DSDOMAIN/$slasheddomain/g" $i
sed -i -e "s/$DEFAULTIP/$ip_address/g" $i
printf "$i "
done
# add 20081023
sed -i -e "s/$DOMAIN/$domainname/g" $0
sed -i -e "s/$IPADDR/$ip_address/g" $0
printf "$0 "
#end add
echo
break;
elif [ -w $filename ]
then
printf "changing $filename n"
sed -i -e "s/$DDOMAIN/$domainname/g" $filename
sed -i -e "s/$DSDOMAIN/$slasheddomain/g" $filename
sed -i -e "s/$DEFAULTIP/$ip_address/g" $filename
else
printf "cannot access file $filename. n"
fi
printf "File to Change:"
done
fi
*****************************************************************
修改完成后将cfg文件夹下的以sh,xml,cfg结尾的文件全部复制到/opt/OpenIMSCore目录下,
#cp /opt/OpenIMSCore/ser_ims/cfg/*.sh /opt/OpenIMSCore
#cp /opt/OpenIMSCore/ser_ims/cfg/*.xml /opt/OpenIMSCore
#cp /opt/OpenIMSCore/ser_ims/cfg/*.cfg /opt/OpenIMSCore
b) HSS
执行/opt/OpenIMSCore目录下的脚本即可正常启动HSS。
通过网页localhost:8080即可访问数据库,有两个账户默认是可以登录的,用户名:hss密码:hss。拥有修改权限的用户名和密码为hssAdmin,hss。
如果需要网络中的其他PC通过web访问数据库后台,需要修改在FHoSS/deploy目录下的ties文件,用vi将其他开将其中的host=127.0.0.1改为IMS服务器的IP地址,重新执行即可。
曾经遇到的小问题:
hss启动的脚本实际上应该是FHoSS/deploy下的脚本,所以一开始使用的是在命令行执行bash FHoSS/deploy/,但是总不能正常启动。
解决办法,通过查看文件就可以看到有一行命令cd
/opt/OpenIMSCore/FHoSS/deploy/这一行就知道,执行时必须要求当前目录为/opt/OpenIMSCore/FHoSS/deploy/,不能在其他目录的时候直接执行bash
/opt/OpenIMSCore/FHoSS/deploy/。
在shell命令行分别执行脚本 即可启动IMS服务器了。(ctrl+shift+T可启用终端新标签)
6. 验证IMS服务器
OpenIMSCore只是服务器端,只是服务器端在运行是无法验证IMS服务器工作正常的,所以还需要客户端来验证,我采用的是软终端OpenIC和UCTIMSClient。(安装client的在后文中再讲)
在远端利用UCTIMSClient、OpenIC软终端可利用默认的bob@,alice@注册,发message,打电话等。两种软终端之间也可相互通信。
注:另外一个软终端IMSCommunicator应该也是可以的,可能是我配置不正确,始终注册不上。X-lite等传统的SIP终端收到服务端发回的401(rfc3261)信息后(通过wireshark抓包)因为缺少鉴权交互不能正常的登录。
如果需要添加其他用户,则可以通过脚本脚本来添加
例如增加用户yuanxy:
#./ –u yuanxy –a
删除用户yuanxy:
#./ –u yuanxy –s
默认的密码为用户名,如果需要设置其他信息详细阅读ser_ims/cfg下的
文档。
问题:实际上这个脚本是有错误的,并不能正常的添加用户,仔细查看脚本就可以发现,这个脚本是在往数据库hssdb中添加用户,但是mysql(mysql环境下命令show databases;)中可以看到数据名实际是hss_db,并且脚本在insert到USER表格中的几个属性名也都是错误的。脚本中有的地方可以看到
7. 基于IMS的软终端
1) OpenIC
Linux下安装OpenIC
① 首先解压下载下来的文件OenIC_
② 修改OpenIC_的属性:在解压好的目录里右键点击OpenIC_,在"权限"标签页里把所有的"访问"都修改为"读写",点选"允许以程序执行文件"。
③ 用编辑器打开OpenIC_文件,修改JAVA HOME为你安装的jdk的jre的路径,修改后的文件如下:
#!/bin/bash
# ---------------------
# set JAVA_HOME to your own preferences
# ---------------------
JAVA_HOME=/usr/java/jdk1.6.0_05/jre
# --------------------------------------------------------------
# Include JAR Files
# --------------------------------------------------------------
④ 双击执行OpenIC_文件。
⑤ 执行后首先要配置User Profile,Display name里面写上你自己喜欢的名字,.etc Brad Pitt。由于OpenIMSCore里的HSS里面默认有两个用户 bob@和alice@,所以以bob为例,我们在Public Identity里面输入sip:bob@,在Private Identity里面输入bob@, Secret Key,就是注册key,可以在HSS里面看到,默认的bob的密码就是bob,alice的密码就是alice .
⑥ .然后配置Server Profile,在Proxy IP里面填入P-CSCF的IP(!)地址,我的是127.0.0.1,Port Nr就是P-CSCF的端口,我的是4060, Realm是IMS的域名,我的是。
⑦ Application里面是你要订阅的业务,写得很明白。免费版,连个presence都没有..
点击save,开始运行。
ii. windows xp下安装OpenIC
OpenIC是基于java开发的客户端,只需要先安装java虚拟机如jre-1_5_,再安装OpenIC就可以,这个是最简单的安装方式。
需要的注意的是在Proxy Server的填写格式为:192.0.22.58:4060/UDP
如果安装OpenIC开始时提示错误,是提示window桌面主题的问题,可将windows主题改为Windows XP就不会报错,不管它应该也不会有什么问题,开源软件可能做的不是太好。
Application里面是你要订阅的业务,写得很明白。免费版,连个presence都没有,presence是要收费的。
2) UCTIMSClient
这个软终端安装起来非常复杂,他的源代码中并没有把osip,gstream,gtk,libxml,libcurl等包含进去,这就要求你在运行环境中将这些自己手动安装完成
i.
安装方式-源代码编译安装方式
需要安装的支持库Libosip,libexosip,gtk2.0,libxml2,libcurl3,gstreamer相关,libvlc0,vlc,这个过程就不在详细描述。安装以上的库文件后,就可以将UCTIMSClient的源代码包 解压缩,进入目录后直接make就可以编译。编译后用命令./uctimsclient就可以启动软终端。
ii. Ubuntu下deb安装方式
上面所列出的开发库在ubuntu linux下都有deb的安装包,安装完所有deb包及其相互依赖的包(约80~100个)(在ubuntu中文网均可找到)后,(安装deb包的命令为sudo dpkg –i ),再安装即可。
安装成功后在命令行输入sudo /usr/bin/uctimsclient即可运行软终端。
注:下载deb安装包时注意应该与相应的操作系统对应,feisty对应ubuntu7.04,gusty对应ubuntu7.10,hardy对应ubuntu8.04。
i.
2024年2月22日发(作者:公良文静)
OpenIMSCore安装配置过程,思路,可能遇到的问题及其解决办法
袁星勇
E-MAIL:yuan-xy@
ChongQing JinMei Communication Co.,Ltd
2008-10-23
代码资源来源:OpenIMSCore: .
文档来源:OpenIMSCore Installation Guide――.
参考资料:基于开放源代码实现的IMS原型化系统-张懿-重庆大学硕士论文
1. 运行环境之编译环境的安装及配置
OpenIMSCore是基于Linux环境开发的,所以要编译OpenIMSCore源代码首先需要在Linux操作系统安装编译及运行环境。在《基于开放源代码实现的IMS原型化系统》论文中可以找到OpenIMSCore运行环境要求:
a) GCC 3/4;
b) JDK1.5以上;
c) ant;
d) 已安装并启动MySQL数据库管理系统;
e) libxml2,libmysqlclient库软件包及开发包头文件;
f) flex和bison;
g) Linux Kernel 2.6
h) 已安装并启动bind域名服务器;
注:Fedora8或者CentOS5(RHEL5)操作系统DVD光盘中有自带的MySQL,bind等rpm安装包,而在Ubuntu的CD光盘上是没有mysql,bind,flex,bison,gcc等安装包的,所以我选择了Fedora和CentOS的安装方式。在安装Fedora/CentOS时在定制时(安装过程基本相似),我安装了mysql,bind,gcc,安装完成后只需要在安装ant和jdk就可以完成以上的运行环境要求,所以首次安装推荐使用Fedora/CentOS,本文也只介绍了Fedora/CentOS下的安装过程。如果采用Ubuntu以上所有的都需要自己手动下载安装包安装或者在线更新,需要的步骤会更多,在本文中就不再描述。
在上下载了源代码以后就可以发现OpenIMSCore源代码分为两个部分,ser_ims和FHoSS,其中ser_ims是用C语言开发的,而FHoSS是用Java开发的。ser_ims部分主要完成的IMS中的cscfs功能实体,FHoSS完成IMS中HSS功能实体。所以首先需要在Linux操作系统中安装GCC编译器及jdk编译器。
a) GCC
在Linux终端shell命令行中输入命令#gcc --version如果显示gcc版本信息则基本可以确认gcc是已经安装了的,如果在编译程序时出现error C
compiler cannot create executables的错误,是gcc库安装不完整造成的,需要安装glibc,及libc6-dev。
如果采用fedora8或者centos5(RHEL5),在安装配置时可以配置是否安装GCC,如果没有安装你需要找到光盘中的gcc有关的rpm包手动安装,它
在终端输入java –version命令后会显示已经安装的jdk信息,输入ant –h会显示ant相关信息,如果没有,仔细检查上面三个脚本中的几个路径是否对应是你的jdk和ant的安装路径,也可能是或
没有正确的安装。
2. 编译程序
在/opt/目下新建一个OpenIMSCore文件夹,然后将下载下的源代码复制到/opt/OpenIMSCore下,如果采用ftp下载的代码,只需要将ser_和解压缩到OpenIMSCore即可。
可能会依赖很多安装包,过程会比较繁琐。
b) jdk
我采用的是及,在/usr下新建一个文件夹java,将复制到/usr/java下然后在终端键入命令#./运行这个文件,按照提示信息安装jdk。
将解压缩到/usr/local目录下,然后将在/usr/local下新产生的apache-ant-1.7.1文件夹更名为ant。
#tar –zxvf –C /usr/local/
#mv /usr/local/apache-ant-1.7.1 /usr/local/ant
完成以上两步后设置编译程序需要的环境变量JAVA_HOME
编辑/etc/profile文件,在文件末尾中增加以下几行:
#set java environment
export JAVA_HOME=/usr/java/jdk1.6.0_07
export PATH=/usr/java/jdk1.6.0_07:$PATH
export CLASSPATH=/usr/java/jdk1.6.0_07/lib
#end
在/etc/profile.d/文件夹下新建两个文档:,。
在中增加以下3行
export JAVA_HOME=/usr/java/jdk1.6.0_07
export PATH=/usr/java/jdk1.6.0_07/bin:$PATH
export
CLASSPATH=.:$JAVA_HOME/lib/:$JAVA_HOME/lib/:$JAVA_HOME/lib
在中增加下面2行
export ANT_HOME=/usr/local/ant
export PATH=$PATH:$ANT_HOME/bin
然后分别执行这个文件:
# source /etc/profile
# source /etc/profile.d/
# source /etc/profile.d/
注:#前缀表示需要root权限才能运行。
如果是用SVN,将ser_ims和FHoSS都checkout在/opt/OpenIMSCore目录下即可。
a) 进入ser_ims文件件编译
#cd /opt/OpenIMSCore/ser_ims
#make install-libs all
如果只需要编译其中的一部分,或者只编译IMSCore不需要其他模块,可详细阅读在ser_ims文件夹下的INSTALL文件。
如果在编译时出错:
1) 检查编译器是否安装正确
2) 源代码是否完整
3) 如果提示在文件dbase.c有错误,如找不到
解决思路:
找到ser_ims/modules/mysql/下的dbase.c文件下可以找到#include
错误原因:在/usr/include下没有包含有mysql.h的mysql头文件夹;
解决办法:下载一个mysql的压缩包,我采用的是,在解压缩后的文件夹中可以找到include和lib文件夹,将include文件夹名改为mysql,并复制到/usr/include中。
重新编译,应该还会发现找不到libmysqlclient的错误,这时再将压缩文件中的lib文件夹更名为mysql,复制到/usr/local/lib文件夹下。
重新编译,顺利通过。
b) 进入FHoSS文件夹编译HSS
#ant compile deploy
如果需要了解更多信息,阅读在FHoSS目录下文件
如果编译出错一般是JAVA_HOME设置不正确造成的。
3. 运行环境之mysql
如果不是采用的默认安装mysql(rpm包安装方式和默认安装是一致的),请参考mysql官方相关文档,安装完成后,相应的导入到数据库中即可。
终端中输入命令:
#chkconfig --level 5 mysql on
#service mysqld start
在终端shell命令行中输入mysql即可进入mysql环境,使用show
databases;命令即可查看默认的mysql数据库,使用exit可返回到终端shell命令行。
如果输入mysql提示command not found则表示数据库没有正常启动,可能出现的的错误原因:
a) mysql服务没有启动
可在shell命令行输入chkconfig --list | grep mysqld查看mysqld服务进程是否启动。
如果没有启动,输入命令service mysqld start即可启动mysql。
b) mysql没有安装。(mysql在linux下的安装步骤网上教程比较多。)
如果mysql正常工作,将OpenIMSCore需要的三张表导入到数据库中,
mysql -u root -p -h localhost
mysql -u root -p -h localhost
mysql -u root -p -h localhost
中间会提示输入密码,该密码为数据库mysql的密码,如果没改,默认为空。
完成后在命令行中输入mysql。
在mysql环境中输入show databases;(注意命令有个分号结尾)可以看到已经多了两个数据库hss_db(注意是hss_db,icscf。
4. 运行环境之DNS服务器
如果有独立的可控的DNS服务器,则域名解析部分可方在专门的DNS服务器上,在这里我们是准备在局域网中搭建IMS试验场,所以需要安装DNS服务器来做域名解析,并将DNS服务器和IMS服务器做在同一台PC中。下面就介绍在Fedora 8 和CentOS下利用bind实现IMS服务器需要的DNS解析(详情请参考Bind9相关的官方文档)。
由于是在同一台PC上实现,所以DNS服务器地址应该指向自己,所以在/etc/中应增加一行:nameserver 127.0.0.1
可通过命令chkconfig --list|grep named查看是否安装了DNS Serve。
如果已经安装通过命令service named start则可启动DNS Server。
如果没有安装则需要在安装包中(或下载)找到bind相应的安装包和它依赖的相关包,bind安装相关的文章在网上也很多。最简便的办法就是在安装Linux操作系统定制时就选上DNS服务器,直接就可以使用。
安装完成后修改/etc/文件。
在CentOS5中默认好像是没有这个文件,需要执行命令
#cp –p /etc/
用(这个文件需要安装另外一个dns的安装包才会产生)模板生成一个文件
。修改后的文件为(红色为修改部分)
CentOS下的文件:
options {
listen-on port 53 { any; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_";
statistics-file "/var/named/data/named_";
memstatistics-file "/var/named/data/named_mem_";
query-source port 53;
query-source-v6 port 53;
allow-query { any; };
};
logging {
channel default_debug {
file "data/";
severity dynamic;
};
};
view localhost_resolver {
match-clients { any; };
match-destinations { any; };
recursion yes;
include "/etc/";
};
如果是Fedora8 修改后为下面的结果:
options {
listen-on port 53 { any; };
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_";
statistics-file "/var/named/data/named_";
memstatistics-file "/var/named/data/named_mem_";
allow-query { any; };
};
logging {
channel default_debug {
file "data/";
severity dynamic;
};
};
zone “.” IN {
type hint;
file “”;
};
include “etc/”;
修改完后无论是在fedora8还是CentOS下均需要编辑/etc/文件,在文件中增加一个zone:
zone “” IN{
type master;
file “e”;
notify no;
};
在增加的区域中可看到需要dns区域文件e,这个文件在ser_ims/cfg/文件夹下有一个模板。编辑该模板,因为IMSCore的三个cscf功能实体和hss数据库,DNS服务器都在一台PC上,所以将其中的IP地址127.0.0.1全部改为你的本机IP如192.0.22.58即可,如果域名采用的不是默认的,还需要相应的修改其SOA,A记录。如果是某个功能实体在不同的服务器上则需要修改这个功能实体相应的A记录IP地址。
修改完成后将e复制到/var/named/chroot/var/named目录下,并在/var/named/下做一个e符号连接
#cd /var/named/
#ln -s chroot/var/named/e e
完成后输入命令#service named reload加载DNS配置文件。
在本机输入ping 能ping通则基本可以确定DNS工作正常。
在联网的电脑上将DNS设为IMS服务器的IP,然后ping
如果能ping通则DNS能正常解析。
如果不能ping通,检查bind安装是否正确,以上的
是否配置正确,配置正确后输入命令#service
named restart重新启动DNS。
另外可能需要关闭SELinux和防火墙。
Fedora/CentOS shell命令行中运行setup,禁止SELinux和防火墙即可。
通过前4步骤的处理,基本完成了运行环境的配置。下面介绍运行IMSCore。
5. 运行配置OpenIMSCore
a) CSCF配置
进入/opt/OpenIMSCore/ser_ims/cfg/文件夹执行替换脚本
#cd /opt/OpenIMSCore/ser_ims/cfg/
#bash
在提示的Domain:输入(也可输入其他域名如,但是改动域名之后相应的还应更改DNS中的设置,以及其他相关的设置,这个暂时还没有统计),提示IP:则输入IMS服务器的IP。
注:这个脚本目前还有些问题,不能执行第二次修改,如果IMS服务器想换一个IP和域名会比较麻烦一点。下面附上我更改过后的脚本,可无限制的更改IP和域名。
*****************************************************************
红色字体为修改的地方
#!/bin/bash
# Initialization & global vars
# if you execute this script for the second time
# you should change these variables to the latest
# domain name and ip address
DOMAIN=""
IPADDR="127.0.0.1"
DDOMAIN=`echo $DOMAIN | sed 's/././g'`
DSDOMAIN=`echo $DOMAIN | sed 's/././g'`
DEFAULTIP=`echo $IPADDR | sed 's/././g'`
CONFFILES=`ls *.cfg *.xml *.sql *.properties 2>/dev/null`
# Interaction
printf "Domain Name:"
read domainname
printf "IP Adress:"
read ip_address
# input domain is to be slashed for cfg regexes
slasheddomain=`echo $domainname | sed 's/././g'`
if [ $# != 0 ]
then
printf "changing: "
for j in $*
do
sed -i -e "s/$DDOMAIN/$domainname/g" $j
sed -i -e "s/$DSDOMAIN/$slasheddomain/g" $j
sed -i -e "s/$DEFAULTIP/$ip_address/g" $j
printf "$j "
done
echo
else
printf "File to change ["all" for everything, "exit" to quit]:"
# loop
while read filename ;
do
if [ "$filename" = "exit" ]
then
printf ""
break ;
elif [ "$filename" = "all" ]
then
printf "changing: "
for i in $CONFFILES
do
sed -i -e "s/$DDOMAIN/$domainname/g" $i
sed -i -e "s/$DSDOMAIN/$slasheddomain/g" $i
sed -i -e "s/$DEFAULTIP/$ip_address/g" $i
printf "$i "
done
# add 20081023
sed -i -e "s/$DOMAIN/$domainname/g" $0
sed -i -e "s/$IPADDR/$ip_address/g" $0
printf "$0 "
#end add
echo
break;
elif [ -w $filename ]
then
printf "changing $filename n"
sed -i -e "s/$DDOMAIN/$domainname/g" $filename
sed -i -e "s/$DSDOMAIN/$slasheddomain/g" $filename
sed -i -e "s/$DEFAULTIP/$ip_address/g" $filename
else
printf "cannot access file $filename. n"
fi
printf "File to Change:"
done
fi
*****************************************************************
修改完成后将cfg文件夹下的以sh,xml,cfg结尾的文件全部复制到/opt/OpenIMSCore目录下,
#cp /opt/OpenIMSCore/ser_ims/cfg/*.sh /opt/OpenIMSCore
#cp /opt/OpenIMSCore/ser_ims/cfg/*.xml /opt/OpenIMSCore
#cp /opt/OpenIMSCore/ser_ims/cfg/*.cfg /opt/OpenIMSCore
b) HSS
执行/opt/OpenIMSCore目录下的脚本即可正常启动HSS。
通过网页localhost:8080即可访问数据库,有两个账户默认是可以登录的,用户名:hss密码:hss。拥有修改权限的用户名和密码为hssAdmin,hss。
如果需要网络中的其他PC通过web访问数据库后台,需要修改在FHoSS/deploy目录下的ties文件,用vi将其他开将其中的host=127.0.0.1改为IMS服务器的IP地址,重新执行即可。
曾经遇到的小问题:
hss启动的脚本实际上应该是FHoSS/deploy下的脚本,所以一开始使用的是在命令行执行bash FHoSS/deploy/,但是总不能正常启动。
解决办法,通过查看文件就可以看到有一行命令cd
/opt/OpenIMSCore/FHoSS/deploy/这一行就知道,执行时必须要求当前目录为/opt/OpenIMSCore/FHoSS/deploy/,不能在其他目录的时候直接执行bash
/opt/OpenIMSCore/FHoSS/deploy/。
在shell命令行分别执行脚本 即可启动IMS服务器了。(ctrl+shift+T可启用终端新标签)
6. 验证IMS服务器
OpenIMSCore只是服务器端,只是服务器端在运行是无法验证IMS服务器工作正常的,所以还需要客户端来验证,我采用的是软终端OpenIC和UCTIMSClient。(安装client的在后文中再讲)
在远端利用UCTIMSClient、OpenIC软终端可利用默认的bob@,alice@注册,发message,打电话等。两种软终端之间也可相互通信。
注:另外一个软终端IMSCommunicator应该也是可以的,可能是我配置不正确,始终注册不上。X-lite等传统的SIP终端收到服务端发回的401(rfc3261)信息后(通过wireshark抓包)因为缺少鉴权交互不能正常的登录。
如果需要添加其他用户,则可以通过脚本脚本来添加
例如增加用户yuanxy:
#./ –u yuanxy –a
删除用户yuanxy:
#./ –u yuanxy –s
默认的密码为用户名,如果需要设置其他信息详细阅读ser_ims/cfg下的
文档。
问题:实际上这个脚本是有错误的,并不能正常的添加用户,仔细查看脚本就可以发现,这个脚本是在往数据库hssdb中添加用户,但是mysql(mysql环境下命令show databases;)中可以看到数据名实际是hss_db,并且脚本在insert到USER表格中的几个属性名也都是错误的。脚本中有的地方可以看到
7. 基于IMS的软终端
1) OpenIC
Linux下安装OpenIC
① 首先解压下载下来的文件OenIC_
② 修改OpenIC_的属性:在解压好的目录里右键点击OpenIC_,在"权限"标签页里把所有的"访问"都修改为"读写",点选"允许以程序执行文件"。
③ 用编辑器打开OpenIC_文件,修改JAVA HOME为你安装的jdk的jre的路径,修改后的文件如下:
#!/bin/bash
# ---------------------
# set JAVA_HOME to your own preferences
# ---------------------
JAVA_HOME=/usr/java/jdk1.6.0_05/jre
# --------------------------------------------------------------
# Include JAR Files
# --------------------------------------------------------------
④ 双击执行OpenIC_文件。
⑤ 执行后首先要配置User Profile,Display name里面写上你自己喜欢的名字,.etc Brad Pitt。由于OpenIMSCore里的HSS里面默认有两个用户 bob@和alice@,所以以bob为例,我们在Public Identity里面输入sip:bob@,在Private Identity里面输入bob@, Secret Key,就是注册key,可以在HSS里面看到,默认的bob的密码就是bob,alice的密码就是alice .
⑥ .然后配置Server Profile,在Proxy IP里面填入P-CSCF的IP(!)地址,我的是127.0.0.1,Port Nr就是P-CSCF的端口,我的是4060, Realm是IMS的域名,我的是。
⑦ Application里面是你要订阅的业务,写得很明白。免费版,连个presence都没有..
点击save,开始运行。
ii. windows xp下安装OpenIC
OpenIC是基于java开发的客户端,只需要先安装java虚拟机如jre-1_5_,再安装OpenIC就可以,这个是最简单的安装方式。
需要的注意的是在Proxy Server的填写格式为:192.0.22.58:4060/UDP
如果安装OpenIC开始时提示错误,是提示window桌面主题的问题,可将windows主题改为Windows XP就不会报错,不管它应该也不会有什么问题,开源软件可能做的不是太好。
Application里面是你要订阅的业务,写得很明白。免费版,连个presence都没有,presence是要收费的。
2) UCTIMSClient
这个软终端安装起来非常复杂,他的源代码中并没有把osip,gstream,gtk,libxml,libcurl等包含进去,这就要求你在运行环境中将这些自己手动安装完成
i.
安装方式-源代码编译安装方式
需要安装的支持库Libosip,libexosip,gtk2.0,libxml2,libcurl3,gstreamer相关,libvlc0,vlc,这个过程就不在详细描述。安装以上的库文件后,就可以将UCTIMSClient的源代码包 解压缩,进入目录后直接make就可以编译。编译后用命令./uctimsclient就可以启动软终端。
ii. Ubuntu下deb安装方式
上面所列出的开发库在ubuntu linux下都有deb的安装包,安装完所有deb包及其相互依赖的包(约80~100个)(在ubuntu中文网均可找到)后,(安装deb包的命令为sudo dpkg –i ),再安装即可。
安装成功后在命令行输入sudo /usr/bin/uctimsclient即可运行软终端。
注:下载deb安装包时注意应该与相应的操作系统对应,feisty对应ubuntu7.04,gusty对应ubuntu7.10,hardy对应ubuntu8.04。
i.