OpenIMSCore服務(wù)器安裝配置過程
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. 參考資料:基于開放源代碼實現(xiàn)的IMS 原型化系統(tǒng)-張懿-重慶大學(xué)碩士論文
1. 運(yùn)行環(huán)境之編譯環(huán)境的安裝及配置
OpenIMSCore 是基于Linux 環(huán)境開發(fā)的,所以要編譯OpenIMSCore 源代碼首先需要在Linux 操作系統(tǒng)安裝編譯及運(yùn)行環(huán)境。在《基于開放源代碼實現(xiàn)的IMS 原型化系統(tǒng)》論文中可以找到OpenIMSCore 運(yùn)行環(huán)境要求:
a) GCC 3/4;
b) JDK1.5以上;
c) ant ;
d) 已安裝并啟動MySQL 數(shù)據(jù)庫管理系統(tǒng);
e) libxml2,libmysqlclient 庫軟件包及開發(fā)包頭文件;
f) flex 和bison ;
g) Linux Kernel 2.6
h) 已安裝并啟動bind 域名服務(wù)器;
注:Fedora8或者CentOS5(RHEL5)操作系統(tǒng)DVD 光盤中有自帶的MySQL ,bind 等rpm 安裝包,而在Ubuntu 的CD 光盤上是沒有mysql ,bind ,flex ,bison ,gcc 等安裝包的,所以我選擇了Fedora 和CentOS 的安裝方式。在安裝Fedora/CentOS時在定制時(安裝過程基本相似) ,我安裝了mysql ,bind ,gcc ,安裝完成后只需要在安裝ant 和jdk 就可以完成以上的運(yùn)行環(huán)境要求,所以首次安裝推薦使用Fedora/CentOS,本文也只介紹了Fedora/CentOS下的安裝過程。如果采用Ubuntu 以上所有的都需要自己手動下載安裝包安裝或者在線更新, 需要的步驟會更多,在本文中就不再描述。
在www.openimscore.org 上下載了源代碼以后就可以發(fā)現(xiàn)OpenIMSCore 源代碼分為兩個部分,ser_ims和FHoSS ,其中ser_ims是用C 語言開發(fā)的,而FHoSS 是用Java 開發(fā)的。ser_ims部分主要完成的IMS 中的cscfs 功能實體,F(xiàn)HoSS 完成IMS 中HSS 功能實體。所以首先需要在Linux 操作系統(tǒng)中安裝GCC 編譯器及jdk 編譯器。
a) GCC
在Linux 終端shell 命令行中輸入命令#gcc --version如果顯示gcc 版本信息則基本可以確認(rèn)gcc 是已經(jīng)安裝了的,如果在編譯程序時出現(xiàn)error C compiler cannot create executables的錯誤,是gcc 庫安裝不完整造成的,需要安裝glibc ,及l(fā)ibc6-dev 。
如果采用fedora8或者centos5(RHEL5),在安裝配置時可以配置是否安裝GCC ,如果沒有安裝你需要找到光盤中的gcc 有關(guān)的rpm 包手動安裝,它
,在終端輸入java –version 命令后會顯示已經(jīng)安裝的jdk 信息,輸入ant –h 會顯示ant 相關(guān)信息,如果沒有,仔細(xì)檢查上面三個腳本中的幾個路徑是否對應(yīng)是你的jdk 和ant 的安裝路徑,也可能是jdk-6u7-linux-i586.bin 或 apache-ant-1.7.1-bin.tar.gz 沒有正確的安裝。
2. 編譯程序
在/opt/目下新建一個OpenIMSCore 文件夾,然后將下載下的源代碼復(fù)制到/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 復(fù)制到/usr/java下然后在終端鍵入命令#./jdk-6u7-linux-i586.bin運(yùn)行這個文件,按照提示信息安裝jdk 。 將apache-ant-1.7.1-bin.tar.gz 解壓縮到/usr/local目錄下,然后將在/usr/local下新產(chǎn)生的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 完成以上兩步后設(shè)置編譯程序需要的環(huán)境變量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 然后分別執(zhí)行這個文件: # source /etc/profile # source /etc/profile.d/java.sh # source /etc/profile.d/ant.sh 注:#前綴表示需要root 權(quán)限才能運(yùn)行。
,如果是用SVN ,將ser_ims和FHoSS 都checkout 在/opt/OpenIMSCore目錄下即可。
a ) 進(jìn)入ser_ims文件件編譯
#cd /opt/OpenIMSCore/ser_ims
#make install-libs all
如果只需要編譯其中的一部分,或者只編譯IMSCore 不需要其他模塊,可詳細(xì)閱讀在ser_ims文件夾下的INSTALL 文件。
如果在編譯時出錯:
1) 檢查編譯器是否安裝正確
2) 源代碼是否完整
3) 如果提示在文件dbase.c 有錯誤,如找不到
struct my_con等。
解決思路:
找到ser_ims/modules/mysql/下的dbase.c 文件下可以找到#include
重新編譯,順利通過。
b ) 進(jìn)入FHoSS 文件夾編譯HSS
#ant compile deploy
如果需要了解更多信息,閱讀在FHoSS 目錄下install.txt 文件
如果編譯出錯一般是JA V A_HOME設(shè)置不正確造成的。
3. 運(yùn)行環(huán)境之mysql
如果不是采用的默認(rèn)安裝mysql (rpm 包安裝方式和默認(rèn)安裝是一致的),請參考mysql 官方相關(guān)文檔,安裝完成后,相應(yīng)的導(dǎo)入到數(shù)據(jù)庫中即可。
終端中輸入命令:
#chkconfig --level 5 mysql on
#service mysqld start
在終端shell 命令行中輸入mysql 即可進(jìn)入mysql 環(huán)境,使用show databases; 命令即可查看默認(rèn)的mysql 數(shù)據(jù)庫,使用exit 可返回到終端shell 命令行。
如果輸入mysql 提示command not found則表示數(shù)據(jù)庫沒有正常啟動,可能出現(xiàn)的的錯誤原因:
a) mysql 服務(wù)沒有啟動
可在shell 命令行輸入chkconfig --list | grep mysqld查看mysqld 服務(wù)進(jìn)程是否啟動。
,如果沒有啟動,輸入命令service mysqld start即可啟動mysql 。
b) mysql 沒有安裝。(mysql 在linux 下的安裝步驟網(wǎng)上教程比較多。)
如果mysql 正常工作,將OpenIMSCore 需要的三張表導(dǎo)入到數(shù)據(jù)庫中, mysql -u root -p -h localhost
mysql -u root -p -h localhost
在mysql 環(huán)境中輸入show databases;(注意命令有個分號結(jié)尾)可以看到已經(jīng)多了兩個數(shù)據(jù)庫hss_db(注意是hss_db,icscf 。
4. 運(yùn)行環(huán)境之DNS 服務(wù)器
如果有獨(dú)立的可控的DNS 服務(wù)器,則域名解析部分可方在專門的DNS 服務(wù)器上,在這里我們是準(zhǔn)備在局域網(wǎng)中搭建IMS 試驗場,所以需要安裝DNS 服務(wù)器來做域名解析,并將DNS 服務(wù)器和IMS 服務(wù)器做在同一臺PC 中。下面就介紹在Fedora 8 和CentOS 下利用bind 實現(xiàn)IMS 服務(wù)器需要的DNS 解析(詳情請參考Bind9相關(guān)的官方文檔)。
由于是在同一臺PC 上實現(xiàn),所以DNS 服務(wù)器地址應(yīng)該指向自己,所以在/etc/resolv.conf中應(yīng)增加一行:nameserver 127.0.0.1
可通過命令chkconfig --list|grep named查看是否安裝了DNS Serve。 如果已經(jīng)安裝通過命令service named start則可啟動DNS Server。
如果沒有安裝則需要在安裝包中(或下載)找到bind 相應(yīng)的安裝包和它依賴的相關(guān)包,bind 安裝相關(guān)的文章在網(wǎng)上也很多。最簡便的辦法就是在安裝Linux 操作系統(tǒng)定制時就選上DNS 服務(wù)器,直接就可以使用。
安裝完成后修改/etc/name.conf文件。
在CentOS5中默認(rèn)好像是沒有這個文件,需要執(zhí)行命令
#cp –p /etc/named.caching-nameserver.conf named.conf
用named.caching-nameserver.conf (這個文件需要安裝另外一個dns 的caching-nameserver-xxx.rpm 安裝包才會產(chǎn)生)模板生成一個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修改后為下面的結(jié)果:
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;
,};
在增加的區(qū)域中可看到需要dns 區(qū)域文件open-ims.dnszone ,這個文件在ser_ims/cfg/文件夾下有一個模板。編輯該模板,因為IMSCore 的三個cscf 功能實體和hss 數(shù)據(jù)庫,DNS 服務(wù)器都在一臺PC 上,所以將其中的IP 地址127.0.0.1全部改為你的本機(jī)IP 如192.0.22.58即可,如果域名采用的不是默認(rèn)的open-ims.test ,還需要相應(yīng)的修改其SOA ,A 記錄。如果是某個功能實體在不同的服務(wù)器上則需要修改這個功能實體相應(yīng)的A 記錄IP 地址。
修改完成后將open-ims.dnszone 復(fù)制到/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 配置文件。
在本機(jī)輸入ping pcscf.open-ims.test能ping 通則基本可以確定DNS 工作正常。 在聯(lián)網(wǎng)的電腦上將DNS 設(shè)為IMS 服務(wù)器的IP ,然后ping pcscf.open-ims.test 如果能ping 通則DNS 能正常解析。
如果不能ping 通,檢查bind 安裝是否正確,以上的name.conf open-ims.test resolv.conf named.rfc1912.zones 是否配置正確,配置正確后輸入命令#service named restart重新啟動DNS 。
另外可能需要關(guān)閉SELinux 和防火墻。
Fedora/CentOS shell命令行中運(yùn)行setup ,禁止SELinux 和防火墻即可。
通過前4步驟的處理,基本完成了運(yùn)行環(huán)境的配置。下面介紹運(yùn)行IMSCore 。
5. 運(yùn)行配置OpenIMSCore
a) CSCF 配置
進(jìn)入/opt/OpenIMSCore/ser_ims/cfg/文件夾執(zhí)行替換腳本configurator.sh #cd /opt/OpenIMSCore/ser_ims/cfg/
#bash configurator.sh
在提示的Domain :輸入open-ims.test (也可輸入其他域名如jinmei.com ,但是改動域名之后相應(yīng)的還應(yīng)更改DNS 中的設(shè)置,以及其他相關(guān)的設(shè)置,這個暫時還沒有統(tǒng)計),提示IP :則輸入IMS 服務(wù)器的IP 。
注:這個腳本目前還有些問題,不能執(zhí)行第二次修改,如果IMS 服務(wù)器想換一個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 結(jié)尾的文件全部復(fù)制到/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
執(zhí)行/opt/OpenIMSCore目錄下的fhoss.sh 腳本即可正常啟動HSS 。
通過網(wǎng)頁http://localhost:8080即可訪問數(shù)據(jù)庫,有兩個賬戶默認(rèn)是可以登錄的,用戶名:hss 密碼:hss 。擁有修改權(quán)限的用戶名和密碼為hssAdmin ,hss 。
,如果需要網(wǎng)絡(luò)中的其他PC 通過web 訪問數(shù)據(jù)庫后臺,需要修改在FHoSS/deploy目錄下的hss.properties 文件,用vi 將其他開將其中的host=127.0.0.1改為IMS 服務(wù)器的IP 地址,重新執(zhí)行fhoss.sh 即可。
曾經(jīng)遇到的小問題:
hss 啟動的腳本實際上應(yīng)該是FHoSS/deploy下的腳本startup.sh ,所以一開始使用的是在命令行執(zhí)行bash FHoSS/deploy/startup.sh,但是總不能正常啟動。
解決辦法,通過查看fhoss.sh 文件就可以看到有一行命令cd /opt/OpenIMSCore/FHoSS/deploy/這一行就知道,執(zhí)行startup.sh 時必須要求當(dāng)前目錄為/opt/OpenIMSCore/FHoSS/deploy/,不能在其他目錄的時候直接執(zhí)行bash /opt/OpenIMSCore/FHoSS/deploy/startup.sh。
在shell 命令行分別執(zhí)行腳本pcscf.sh icsch.sh scscf.sh fhoss.sh 即可啟動IMS 服務(wù)器了。(ctrl shift T可啟用終端新標(biāo)簽)
6. 驗證IMS 服務(wù)器
OpenIMSCore 只是服務(wù)器端,只是服務(wù)器端在運(yùn)行是無法驗證IMS 服務(wù)器工作正常的,所以還需要客戶端來驗證,我采用的是軟終端OpenIC 和UCTIMSClient 。(安裝client 的在后文中再講)
在遠(yuǎn)端利用UCTIMSClient 、OpenIC 軟終端可利用默認(rèn)的bob@open-ims.test,alice@open-ims.test注冊,發(fā)message ,打電話等。兩種軟終端之間也可相互通信。
注:另外一個軟終端IMSCommunicator 應(yīng)該也是可以的,可能是我配置不正確,始終注冊不上。X-lite 等傳統(tǒng)的SIP 終端收到服務(wù)端發(fā)回的401(rfc3261)信息后(通過wireshark 抓包) 因為缺少鑒權(quán)交互不能正常的登錄。
如果需要添加其他用戶,則可以通過腳本add-imscore-user.sh 腳本來添加 例如增加用戶yuanxy :
#./add-imscore-user.sh –u yuanxy –a
刪除用戶yuanxy :
#./add-imscore-user.sh –u yuanxy –s
默認(rèn)的密碼為用戶名,如果需要設(shè)置其他信息詳細(xì)閱讀ser_ims/cfg下的 cfg.dox 文檔。
問題:實際上這個腳本是有錯誤的,并不能正常的添加用戶,仔細(xì)查看腳本就可以發(fā)現(xiàn),這個腳本是在往數(shù)據(jù)庫hssdb 中添加用戶,但是mysql (mysql 環(huán)境下命令show databases; )中可以看到數(shù)據(jù)名實際是hss_db,并且腳本在insert 到USER 表格中的幾個屬性名也都是錯誤的。腳本中有的地方可以看到
7. 基于IMS 的軟終端
1) OpenIC
,Linux 下安裝OpenIC
① 首先解壓下載下來的文件OenIC_Lite.tar.gz
② 修改OpenIC_Lite.sh的屬性:在解壓好的目錄里右鍵點擊
OpenIC_Lite.sh,在" 權(quán)限" 標(biāo)簽頁里把所有的" 訪問" 都修改為" 讀寫" ,點選" 允許以程序執(zhí)行文件" 。
③ 用編輯器打開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
# --------------------------------------------------------------
④ 雙擊執(zhí)行OpenIC_Lite.sh文件。
⑤ 執(zhí)行后首先要配置User Profile,Display name里面寫上你自己喜
歡的名字,.etc Brad Pitt。由于OpenIMSCore 里的HSS 里面默認(rèn)有兩個用戶 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 里面看到,默認(rèn)的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 里面是你要訂閱的業(yè)務(wù),寫得很明白。免費(fèi)版,連個
presence 都沒有..
點擊save ,開始運(yùn)行。
ii. windows xp下安裝OpenIC
OpenIC 是基于java 開發(fā)的客戶端,只需要先安裝java 虛擬機(jī)如jre-1_5_0-windows-i586.exe,再安裝OpenIC 就可以,這個是最簡單的安裝方式。
需要的注意的是在Proxy Server的填寫格式為:192.0.22.58:4060/UDP 如果安裝OpenIC 開始時提示錯誤,是提示window 桌面主題的問題,可將windows 主題改為Windows XP 就不會報錯,不管它應(yīng)該也不會有什么問題,開源軟件可能做的不是太好。
Application 里面是你要訂閱的業(yè)務(wù),寫得很明白。免費(fèi)版,連個presence 都沒有,presence 是要收費(fèi)的。
2) UCTIMSClient
這個軟終端安裝起來非常復(fù)雜,他的源代碼中并沒有把osip ,gstream ,gtk ,libxml ,libcurl 等包含進(jìn)去,這就要求你在運(yùn)行環(huán)境中將這些自己手動安裝完成 i.