Jitsi(SIP communicator)的环境部署和打包发布

  • 简介
Jitsi是一个开源的,安全(ZRTP加密),高质量的SIP/XMPP视频通话、会议、聊天、桌面共享、文件传传输。可以安装在你喜欢的操作系统中并且支持多种IM网络。Jitsi是当最功能最完整的高级通信工具。Jitsi让你可以在同一个软件中连到Facebook、GoogleTalk、XMPP、Windows Live、Yahoo!、AIM和ICQ进行通信。Jitsi应该算的上是最好的Java开源XMPP客户端之一,而且它还同时支持SIP协议,能够进行语音和视频聊天,功能不可谓不强大,最近研究了Jitsi,打算在它的基础上进行二次开发,下面写一下自己这方面的经验。http://jitsi.org/是Jitsi的官网,我们可以从download中获取最新的源码。

  • 环境配置
获取源码后,可以配置开发环境,我用的是eclipse,可以参照官网的教程来进行,在这就不多说了,见http://jitsi.org/index.php/Documentation/ConfigureEclipseNew,部署之后可以通过ant来运行,或者配置run configuration来运行都可以。

  • 打包发布
这个是Jitsi最难的地方了,官网上对于这方面没有很详细的说明,我研究了很久才搞定。
【Jitsi(SIP communicator)的环境部署和打包发布】通用版本的打包比较容易,只需要安装一个izpack工具就可以了,见http://izpack.org/,配置好这个工具之后在jitsi主目录下进入resource/install文件夹,运行build.xml文件中的 build-installation-generic 生成一个jar包。需要注意的是这个通用版本你必须先安装jre才能够运行。
在windows上面进行打包就比较烦了,需要一系列工具,包括:
  1. cygwin用于在windows上模拟Linux环境,装好之后可以直接在命令行下执行linux命令比如ls,top等。
  2. mingw主要使用它的gcc和make工具,用于将Jitsi的一些c语言程序直接编译为windows下的exe文件。
  3. 7zip用于压缩安装程序
  4. wix微软提供的工具,可以用来制作windows下的安装引导程序,例如做成msi文件。
  5. jre提供内置的Java运行环境。
我们一个一个进行安装,由于对C语言不熟悉,在安装cygwin和mingw的时候浪费了N多时间。
首先是cygwin,在http://www.cygwin.com/上点击setup.exe进行安装,具体过程见http://apps.hi.baidu.com/share/detail/30458811,最好装在c:/cgywin目录,将此目录/bin加入环境配置变量path中。
然后是mingw,在http://www.mingw.org/上用mingw-get-inst.exe进行安装,安装时只需要选择gcc就可以了,最好装在c:/mingw/x86目录,将此目录/bin加入环境配置变量path中,安装好了之后写一个c程序,用gcc试验一下,成功编译即可。
7zip直接安装就行了,不需要做什么配置。
wix我用的是3.5的版本,需要.net framework4.0支持,装完后将安装目录(不需要/bin了)加入环境配置变量path中。将jre所在的目录修改与ant-build-config.properties 中一致即可。
下面在cygwin命令行中进入jitsi主目录下resource/install文件夹,运行ant build-installation-wix ,一路等待,打好OK,有可能会碰到几个问题,解决方案一起给出。
  • makefile的问题

ant报错如下:
[exec] process_begin: CreateProcess((null), C:/mingw/x86/bin/gcc.exe -dumpmachine, ...) failed.
[exec] makefile:45: *** target pattern contains no `%'.Stop.
这个是gcc编译问题问题,打开jitsi主目录下src/native/windows/run文件夹下的Makefile,修改下面两行
cygwin.target.dir := "$(TARGET_DIR)"
修改为
cygwin.target.dir := $(TARGET_DIR)
然后
-rm.exe -f ../../../../resources/install/windows/config.h
echo.exe -e '#define PRODUCTNAME "$(PRODUCTNAME)"\n#$(DEFINE_PACKAGECODE)' > $(cygwin.target.dir)/config.h
修改为
echo #define PRODUCTNAME "$(PRODUCTNAME)" > $(cygwin.target.dir)/config.h
echo #$(DEFINE_PACKAGECODE) >> $(cygwin.target.dir)/config.h
注意不要用任何空格,不然会出错。
  • msi压缩成exe的问题
ant报错如下:
[exec] C:/mingw/bin/gcc.exe -O2 -Wall -Wreturn-type -DWINVER=0x0502 -D_WIN32_WINNT=0x0502 -I"C:\Users\wuch\workspace\Jitsi/release/windows/tmp" -DBSPATCH_API_STATIC -DBZ2_API_STATIC -I. -I./include -I. -DLZMA_API_STATIC -I./include -I./api -I../run bspatch.c lasterror.c ../run/registry.c setup.c "C:\Users\wuch\workspace\Jitsi/release/windows/tmp"/setup.res -mwindows -L./lib/ -L. -L./lib/ -L./.libs -o "C:\Users\wuch\workspace\Jitsi/release/windows/tmp"/setup.exe -ladvapi32 -lbz2 -llzma -lole32 -lshell32
[exec] setup.c:1770:1: warning: 'Setup_wstr2str' defined but not used
[exec] c:/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../../mingw32/bin/ld.exe: cannot find -lbz2
[exec] c:/mingw/bin/../lib/gcc/mingw32/4.5.2/../../../../mingw32/bin/ld.exe: cannot find -llzma
[exec] collect2: ld returned 1 exit status
[exec] make.exe: *** [C:\Users\wuch\workspace\Jitsi/release/windows/tmp/setup.exe] Error 1

这个问题是因为make的时候找不到相应的动态链接库,我们在安装mingw的时候少安装了libarchive库,命令行进去mingw安装目录(c:/mingw/bin),运行mingw-get install libarchive,会自动安装libarchive库,再次编译OK。

    推荐阅读