OpenIMSCore服务器安装配置过程

OpenIMSCore 安装配置过程,思路,可能遇到的问题及其解决办法袁星勇E-MAIL :ChongQing JinMei Communication Co.,Ltd2008-10-23代码资源来源

OpenIMSCore 安装配置过程,思路,可能遇到的问题及其解决办法

袁星勇

E-MAIL :

ChongQing JinMei Communication Co.,Ltd

2008-10-23

代码资源来源:OpenIMSCore: http://www.openimscore.org.

文档来源:OpenIMSCore Installation Guide――http://www.openimscore.org. 参考资料:基于开放源代码实现的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 以上所有的都需要自己手动下载安装包安装或者在线更新, 需要的步骤会更多,在本文中就不再描述。

在www.openimscore.org 上下载了源代码以后就可以发现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 的安装路径,也可能是jdk-6u7-linux-i586.bin 或 apache-ant-1.7.1-bin.tar.gz 没有正确的安装。

2. 编译程序

在/opt/目下新建一个OpenIMSCore 文件夹,然后将下载下的源代码复制到/opt/OpenIMSCore下,如果采用ftp 下载的代码,只需要将ser_ims2008909.r0583.tgz和FHoSS2008909.r0583.tgz 解压缩到OpenIMSCore 即可。 可能会依赖很多安装包,过程会比较繁琐。 b) jdk 我采用的是jdk-6u7-linux-i586.bin 及apache-ant-1.7.1-bin.tar.gz ,在/usr下新建一个文件夹java ,将jdk-6u7-linux-i586.bin 复制到/usr/java下然后在终端键入命令#./jdk-6u7-linux-i586.bin运行这个文件,按照提示信息安装jdk 。 将apache-ant-1.7.1-bin.tar.gz 解压缩到/usr/local目录下,然后将在/usr/local下新产生的apache-ant-1.7.1文件夹更名为ant 。 #tar –zxvf apache-ant-1.7.1-bin.tar.gz –C /usr/local/ #mv /usr/local/apache-ant-1.7.1 /usr/local/ant 完成以上两步后设置编译程序需要的环境变量JA V A_HOME 编辑/etc/profile文件,在文件末尾中增加以下几行: #set java environment export JAV A_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/文件夹下新建两个文档:java.sh ,ant.sh 。 在java.sh 中增加以下3行 export JAV A_HOME=/usr/java/jdk1.6.0_07 export PATH=/usr/java/jdk1.6.0_07/bin:$PATH export CLASSPATH=.:$JAV A_HOME/lib/dt.jar:$JAV A_HOME/lib/tools.jar:$JAV A _HOME/lib 在ant.sh 中增加下面2行 export ANT_HOME=/usr/local/ant export PATH=$PATH:$ANT_HOME/bin 然后分别执行这个文件: # source /etc/profile # source /etc/profile.d/java.sh # source /etc/profile.d/ant.sh 注:#前缀表示需要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 有错误,如找不到以及提示

struct my_con等。

解决思路:

找到ser_ims/modules/mysql/下的dbase.c 文件下可以找到#include 行 ,相应的查看/usr/include/下面找不到mysql 文件夹。 错误原因:在/usr/include下没有包含有mysql.h 的mysql 头文件夹; 解决办法:下载一个mysql 的压缩包,我采用的是mysql-5.0.67-linux-i686.tar.gz ,在解压缩后的文件夹中可以找到include 和lib 文件夹,将include 文件夹名改为mysql ,并复制到/usr/include中。 重新编译,应该还会发现找不到libmysqlclient 的错误,这时再将压缩文件中的lib 文件夹更名为mysql ,复制到/usr/local/lib文件夹下。

重新编译,顺利通过。

b ) 进入FHoSS 文件夹编译HSS

#ant compile deploy

如果需要了解更多信息,阅读在FHoSS 目录下install.txt 文件

如果编译出错一般是JA V A_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 环境中输入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/resolv.conf中应增加一行:nameserver 127.0.0.1

可通过命令chkconfig --list|grep named查看是否安装了DNS Serve。 如果已经安装通过命令service named start则可启动DNS Server。

如果没有安装则需要在安装包中(或下载)找到bind 相应的安装包和它依赖的相关包,bind 安装相关的文章在网上也很多。最简便的办法就是在安装Linux 操作系统定制时就选上DNS 服务器,直接就可以使用。

安装完成后修改/etc/name.conf文件。

在CentOS5中默认好像是没有这个文件,需要执行命令

#cp –p /etc/named.caching-nameserver.conf named.conf

用named.caching-nameserver.conf (这个文件需要安装另外一个dns 的caching-nameserver-xxx.rpm 安装包才会产生)模板生成一个named.conf 文件

。修改后的文件为(红色为修改部分)

CentOS 下的named.conf 文件:

options {

listen-on port 53 { any ; };

listen-on-v6 port 53 { ::1; };

directory "/var/named";

dump-file "/var/named/data/cache_dump.db";

statistics-file "/var/named/data/named_stats.txt";

memstatistics-file "/var/named/data/named_mem_stats.txt";

query-source port 53;

query-source-v6 port 53;

allow-query { any ; };

,

};

logging {

channel default_debug {

file "data/named.run";

severity dynamic;

};

};

view localhost_resolver {

match-clients { any ; };

match-destinations { any ; };

recursion yes;

include "/etc/named.rfc1912.zones";

};

如果是Fedora8 named.conf修改后为下面的结果:

options {

listen-on port 53 { any ; };

listen-on-v6 port 53 { ::1; };

directory "/var/named";

dump-file "/var/named/data/cache_dump.db";

statistics-file "/var/named/data/named_stats.txt";

memstatistics-file "/var/named/data/named_mem_stats.txt";

allow-query { any ; };

};

logging {

channel default_debug {

file "data/named.run";

severity dynamic;

};

};

zone “. ” IN {

type hint;

file “named.ca ”;

};

include “etc/named.rfc1912.zones”;

修改完named.conf 后无论是在fedora8还是CentOS 下均需要编辑/etc/named.rfc1912.zones文件,在文件中增加一个zone :

zone “open-ims.test ” IN{

type master;

file “open-ims.dnszone ”;

notify no;

,

};

在增加的区域中可看到需要dns 区域文件open-ims.dnszone ,这个文件在ser_ims/cfg/文件夹下有一个模板。编辑该模板,因为IMSCore 的三个cscf 功能实体和hss 数据库,DNS 服务器都在一台PC 上,所以将其中的IP 地址127.0.0.1全部改为你的本机IP 如192.0.22.58即可,如果域名采用的不是默认的open-ims.test ,还需要相应的修改其SOA ,A 记录。如果是某个功能实体在不同的服务器上则需要修改这个功能实体相应的A 记录IP 地址。

修改完成后将open-ims.dnszone 复制到/var/named/chroot/var/named目录下,并在/var/named/下做一个open-ims.donzone 符号连接

#cd /var/named/

#ln -s chroot/var/named/open-ims.dnszone open-ims.dnszone

完成后输入命令#service named reload加载DNS 配置文件。

在本机输入ping pcscf.open-ims.test能ping 通则基本可以确定DNS 工作正常。 在联网的电脑上将DNS 设为IMS 服务器的IP ,然后ping pcscf.open-ims.test 如果能ping 通则DNS 能正常解析。

如果不能ping 通,检查bind 安装是否正确,以上的name.conf open-ims.test resolv.conf named.rfc1912.zones 是否配置正确,配置正确后输入命令#service named restart重新启动DNS 。

另外可能需要关闭SELinux 和防火墙。

Fedora/CentOS shell命令行中运行setup ,禁止SELinux 和防火墙即可。

通过前4步骤的处理,基本完成了运行环境的配置。下面介绍运行IMSCore 。

5. 运行配置OpenIMSCore

a) CSCF 配置

进入/opt/OpenIMSCore/ser_ims/cfg/文件夹执行替换脚本configurator.sh #cd /opt/OpenIMSCore/ser_ims/cfg/

#bash configurator.sh

在提示的Domain :输入open-ims.test (也可输入其他域名如jinmei.com ,但是改动域名之后相应的还应更改DNS 中的设置,以及其他相关的设置,这个暂时还没有统计),提示IP :则输入IMS 服务器的IP 。

注:这个脚本目前还有些问题,不能执行第二次修改,如果IMS 服务器想换一个IP 和域名会比较麻烦一点。下面附上我更改过后的脚本,可无限制的更改IP 和域名。

***************************************************************** configurator.sh 红色字体为修改的地方

#!/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="open-ims.test"

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 "exitting...n"

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

# Xing.Yuan 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. skipping... 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目录下的fhoss.sh 脚本即可正常启动HSS 。

通过网页http://localhost:8080即可访问数据库,有两个账户默认是可以登录的,用户名:hss 密码:hss 。拥有修改权限的用户名和密码为hssAdmin ,hss 。

,

如果需要网络中的其他PC 通过web 访问数据库后台,需要修改在FHoSS/deploy目录下的hss.properties 文件,用vi 将其他开将其中的host=127.0.0.1改为IMS 服务器的IP 地址,重新执行fhoss.sh 即可。

曾经遇到的小问题:

hss 启动的脚本实际上应该是FHoSS/deploy下的脚本startup.sh ,所以一开始使用的是在命令行执行bash FHoSS/deploy/startup.sh,但是总不能正常启动。

解决办法,通过查看fhoss.sh 文件就可以看到有一行命令cd /opt/OpenIMSCore/FHoSS/deploy/这一行就知道,执行startup.sh 时必须要求当前目录为/opt/OpenIMSCore/FHoSS/deploy/,不能在其他目录的时候直接执行bash /opt/OpenIMSCore/FHoSS/deploy/startup.sh。

在shell 命令行分别执行脚本pcscf.sh icsch.sh scscf.sh fhoss.sh 即可启动IMS 服务器了。(ctrl shift T可启用终端新标签)

6. 验证IMS 服务器

OpenIMSCore 只是服务器端,只是服务器端在运行是无法验证IMS 服务器工作正常的,所以还需要客户端来验证,我采用的是软终端OpenIC 和UCTIMSClient 。(安装client 的在后文中再讲)

在远端利用UCTIMSClient 、OpenIC 软终端可利用默认的bob@open-ims.test,alice@open-ims.test注册,发message ,打电话等。两种软终端之间也可相互通信。

注:另外一个软终端IMSCommunicator 应该也是可以的,可能是我配置不正确,始终注册不上。X-lite 等传统的SIP 终端收到服务端发回的401(rfc3261)信息后(通过wireshark 抓包) 因为缺少鉴权交互不能正常的登录。

如果需要添加其他用户,则可以通过脚本add-imscore-user.sh 脚本来添加 例如增加用户yuanxy :

#./add-imscore-user.sh –u yuanxy –a

删除用户yuanxy :

#./add-imscore-user.sh –u yuanxy –s

默认的密码为用户名,如果需要设置其他信息详细阅读ser_ims/cfg下的 cfg.dox 文档。

问题:实际上这个脚本是有错误的,并不能正常的添加用户,仔细查看脚本就可以发现,这个脚本是在往数据库hssdb 中添加用户,但是mysql (mysql 环境下命令show databases; )中可以看到数据名实际是hss_db,并且脚本在insert 到USER 表格中的几个属性名也都是错误的。脚本中有的地方可以看到_imsu,可以将_imsu全部去掉。

7. 基于IMS 的软终端

1) OpenIC

,

Linux 下安装OpenIC

① 首先解压下载下来的文件OenIC_Lite.tar.gz

② 修改OpenIC_Lite.sh的属性:在解压好的目录里右键点击

OpenIC_Lite.sh,在" 权限" 标签页里把所有的" 访问" 都修改为" 读写" ,点选" 允许以程序执行文件" 。

③ 用编辑器打开OpenIC_Lite.sh文件,修改JA V A HOME为你安装

的jdk 的jre 的路径,修改后的文件如下:

#!/bin/bash

# ---------------------

# set JAV A_HOME to your own preferences

# ---------------------

JA V A_HOME=/usr/java/jdk1.6.0_05/jre

# --------------------------------------------------------------

# Include JAR Files

# --------------------------------------------------------------

④ 双击执行OpenIC_Lite.sh文件。

⑤ 执行后首先要配置User Profile,Display name里面写上你自己喜

欢的名字,.etc Brad Pitt。由于OpenIMSCore 里的HSS 里面默认有两个用户 bob@open-ims.test和alice@open-ims.test,所以以bob 为例,我们在Public Identity里面输入sip:bob@open-ims.test,在Private Identity里面输入bob@open-ims.test, 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 的域名,我的是open-ims.test 。

⑦ Application 里面是你要订阅的业务,写得很明白。免费版,连个

presence 都没有..

点击save ,开始运行。

ii. windows xp下安装OpenIC

OpenIC 是基于java 开发的客户端,只需要先安装java 虚拟机如jre-1_5_0-windows-i586.exe,再安装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.

标签: