隨著計算機網絡的普及,幾乎每個網絡用戶都在使用著一種或者一種以上的IM(既時通訊系統),IM滿足了人們通過網絡進行即時通訊的需要,IM出現很久了,並不是一個新的東西,但在各種新 技術的推動下,IM本身也在不斷發展,人們不但也可以通過手機、PDA使用IM,而IM也開始支持語音、視頻、手機短信、游戲等功能。
常見的IM軟件有很多,但我們國內用的比較多是騰訊QQ、MSN、ICQ了。但是這些IM的服務器端和客戶端都是由一各自己的商業機構提供的,所以用戶要依賴他們來提供IM服務。
那麼可不可以自己架設一套屬於自己的IM呢?
Jabber正是這樣一個開放源碼而且功能強大的IM系統。Jabber是1998年開發出來的,它的信息采用XML格式,屬於opensource,您可以免費的得到和使用它,並且可以對其進行二次開發。
Jabber有什麼和QQ、MSN、ICQ不一樣的功能呢?
Jabber有一個QQ、MSN、ICQ等常見IM所不具備的功能,它可以做為一個代理來幫助Jabber的客戶在Jabber上同時使用其它的IM系統,也就是說你只要打開jabber的客戶端就可以登錄到象ICQ、MSN、yahoo.message上面,並且能和它們收發信息。這樣你以後可以不用打開幾種不同的IM客戶端,只要打開Jabber的客戶端就行了,這樣是不是很方便呢。
關於jabber更多的信息,可以訪問jabber的網站,本文將重點講如何在Linux上安裝和配置Jabber服務,希望你可以借助此文用Jabber實現自己的IM。
下面就開始介紹如何安裝一個IM。這個IM將有聊天室功能、同時也支持ICQ、MSN、yahoo.message。
安裝環境
Jabber可以安裝在多種操作系統上面。筆者用的是RedHat7.3,當然其它的Linux也可以安裝Jabber的。另外如果你僅僅是想試試安裝的話,至少要兩台聯網的電腦,否則的話,你需要要有一個真正的網絡,Internet或者局域網都可以。如果是在internet上安裝,需要有自己的域名和IP,這樣就可以向Internet上的所有人提供Jabber服務了,就好象ICQ、MSN一樣的,當然你肯定沒有它們哪麼強負荷能力了:)。如果在局域網中安裝,那就只能在本地局域網使用了。
相關軟件
Jabber相關的軟件可以在jabber.org找到,或者通過google搜索。最好下載最新的版本,因為經常會有新的功能加入。這裡用到以下軟件。
jabber-1.4.2.tar.gz jabber服務器本身 JabberSetup.EXE jabber的客戶端之一,運行在window上 konverse-0.2-1_rh7.i386.rpm jabber的客戶端之一,運行在Linux上 conference-0.4.tar.gz jud-0.4.tar.gz autojud.tar.gz icqv7-t-0.3.0pre2.tar.gz libicq2000-0.3.1.tar.gz libsigc++-1.0.3-5.i386.rpm libsigc++-devel-1.0.3-5.i386.rpm msn-transport-stable.tar.gz yahoo-t-2.0.0-RC6.tar.gz
安裝Jabber Server
Jabber的服務器端是用C寫的,你需要用root的權限進行編譯,因為它可能要用到一些只有root才能使用的庫。
tar -xzpvf jabber-1.4.2.tar.gz -C /usr/local/ cd /usr/local/jabber-1.4.2/ ../configure make ln -s /usr/local/jabber-1.4.2 /usr/local/jabber
Jabber Server的主要配置文件是jabber.xml。它需要做一些設定,比如
<host>localhost</host>:服務器的主機名
<welcome/>:登錄jabber服務器的歡迎信息
<update><jabberd:cmdline
flag="h">localhost</jabberd:cmdline></update>:自動更新,這裡刪除一行
為了安全,我們不以root的身份來運行jabber,而是創建一個名為jabber的用戶。
#adduser jabber
#chown jabber.jabber -R jabber-1.4.2/
以jabber身份啟動Jabber Server
su - jabber -c "/usr/local/jabber/jabberd/jabberd & "
安裝Jabber Client
Jabber有很多種Client,可以運行在各種平台下。
下載的Windows下的客戶端軟件,只要雙擊就開始安裝了,不需要額外做設置已經可以用了。
在Linux平台下可以用konverse,以RPM方式安裝即可。
安裝好客戶端後,你可以試著通過它去自己的Jabber
Server上注冊用戶。當然你得至少注冊兩個用戶,才能夠模擬聊天的情形。除非你喜歡自言自語:)
安裝聊天室的支持
這裡筆者把conference翻譯成聊天室,這樣好象會有且助於QQ用戶對比QQ的聊天室功能來理解。conference其實正是象QQ聊天室一樣的東西。你需要安裝conference才能實現此項功能。
tar -xzpvf conference-0.4.tar.gz -C /usr/local/jabber cd conference-0.4/ make
make完了之後,能看到conference-0.4/目錄中生成一個文件conference.so.。這表示這次編譯已經成功了。接下來就是對jabber.xml進行配置,加入conference服務。
conference分公用和私用兩種,在type屬性上指定。
在<jsm>的<browse/>項中加入聲明一個本地的conference,大約是第220行左右。
定義一個私用的conference服務
<conference type="private" jid="private.localhost" name="Private Conferencing"/>
在<browse>之外定義服務
<service id='private.localhost'> <load><conference>./conference-0.4/conference.so</conference></load> <conference xmlns="jabberd:config:conference"> <private/> <history>30</history> <vCard> <FN>Private Conferences</FN> <DESC>This service is for private conferencing rooms.</DESC> <URL>http://foo.bar/</URL> </vCard> <notice> <join> has become available</join> <leave> has left</leave> <rename> is now known as </rename> </notice> </conference> </service>
定義一個公用的conference服務,與私用的conference服務有些不同。你可以把會議室定義上去
<service id='conference.localhost'> <load><conference>./conference-0.4/conference.so</conference></load> <conference xmlns="jabberd:config:conference"> <public/> <vCard> <FN>Public Chatrooms</FN> <DESC>This service is for public chatrooms.</DESC> <URL>http://foo.bar/</URL> </vCard> <history>20</history> <notice> <join> has become available</join> <leave> has left</leave> <rename> is now known as </rename> </notice> <room jid="[email protected]"> <name>Assistance Zone</name> <privacy/> </room> <room jid="[email protected]"> <name>Adminz only</name> <secret>con0r</secret> <notice> <join> just rocks!</join> <leave> gets lost</leave> <rename> feels it is more important to be known as </rename> </notice> </room> </conference> </service>
在<browse>項中增加以下行:
<conference type="public" jid="conference.localhost" name="Public Chatrooms"/>
上面就定義了一個公用的聊天室服務,並開了兩個聊天室。
重啟Jabber Server,conference服務才能生效。
安裝用戶目錄JUD
JUD是指Jabber用戶目錄,顧名思義,它提供了關於Jabber服務上注冊用戶的目錄服務,通過它,可查詢某個用戶是否在某個jabber上注冊過,或者他(她)的詳細注冊信息。
tar -xzpvf jud-0.4.tar.gz -C /usr/local/jabber
cd /usr/local/jabber/jud-0.4/
make
make完了之後,能看到jud-0.4/目錄中生成一個文件jud.so。這表示這次編譯已經成功了。接下來就是對jabber.xml進行配置,加入JUB服務。
在<jsm>的<browse/>項中加入聲明一個本地的Jud,大約是第220行左右。
<browse> ... <service type="jud" jid="jud.localhost" name="localhost User Directory"> <ns>jabber:iq:search</ns> <ns>jabber:iq:register</ns> </service> ... </browse>
在文後加入
<service id="jud"> <host>jud.localhost</host> <load><jud>./jud-0.4/jud.so</jud></load> <jud xmlns="jabber:config:jud"> <vCard> <FN>User Directory on localhost</FN> <DESC>This service provides a simple user directory service.</DESC> <URL>http://localhost/</URL> </vCard> </jud> </service>
重啟Jabber Server,JUD才能生效。
安裝自動用戶目錄Autojud
autojud是一個perl編寫的腳本。可以自動構造一個包含完整jabber注冊用戶列表的Jabber用戶目錄。對於一個企業內部的定期維護升級用戶信息有用。
cd autojud
編輯autojud,給變量$jabberdir和$servername賦上正確的值。
$jabberdir = "/usr/local/jabber";
$servername = "XXXXX.com"; #
$userdir = "$jabberdir/spool/$servername";
$juddir = "$jabberdir/spool/jud";
$jabberpid = "jabber.pid";
$judfile = "global.xdb";
$judbackup = "global.xdb.backup";
編輯Makefile,給變量INSTALLDIR賦上正確的值。
INSTALLDIR=/usr/local/jabber/autojud
make
此過程實際是安裝程序用到的perl modules,也可以手工做。如果有提示說某此perl的module已經安裝,則不要安裝。
make install
make clean
在make時你可以要回答一些問題,整個過程實際是為autojud安裝一些perl modules。make clean將清除一些無用的目錄。
# @args = ( "kill -SIGINT `cat $jabberdir/$jabberpid`; sleep 1;" );
@args = ( "/usr/local/jabber/stop.sh" );
# @args = ( "su - jabber -c \"$jabberdir/jabberd/jabberd -h $servername&\"" );
@args = ( "/usr/local/jabber/start.sh ");
運行autojub
../autojub
其間autojub會先停止jabber server,生成新的JUD後,再重新啟動Jabber Server。這個過程通常很快,對用戶的影響很小。
最後可以把這個程序加到cron中去,讓它定期運行。
crontab -e
加上一句:
0 0 * * * /usr/local/jabber/autojud/autojud這樣autojud,就算是好了。
安裝對ICQ的支持
對其它IM的支持顯然是Jabber的一個重要特點,這也是因為jabber是一個開放的開發平台,人們可以開發各種程序來擴充jabber的功能。正是有人開發了Icq的支持軟件,所以我們才可以在jabber上使用icq。同理,如果你有興趣,同樣可以為現在jabber還不支持 的一些IM開發相應珠支持軟件,比如QQ(官方網站上好象有一個QQ鏈接,不過好象打不開,強烈希望有了解QQ協議的朋友給jabber開發一個)。回到主題,對icq的支持相對要麻煩一些,因為它是依賴另外一些已有的icq的包。
在安裝前先要裝libsigc++和libicq2000。libsigc++可以找到rpm包,libicq2000可以找到tar包。
安裝libsigc++
rpm -ivh libsigc-xxx-xx.rpm
rpm -ivh libsigc++-devel-1.0.3-5.i386.rpm
安裝libicq2000
../configure --prefix=/usr/local/libicq2000
make
make install
安裝icqv7
icqv7-t-0.2.0pre2.tar.gz
cd icqv7-t-0.2.0pre2
../configure --prefix=/usr/local/jabber/icqv7
--with-jabberd=/usr/local/jabber
--with-libicq2000-prefix=/usr/local/libicq2000
make
make check
make install
修改jabber.xml
啟動對icq的支持,要通過單獨一個命令進行:
/usr/local/jabber/icqv7/bin/icqv7ext -n icqv7ext -s password -h hostname
-p 7000 -m sms.localhost
安裝對MSN的支持
tar -xzpvf msn-transport.tar.gz
cd msn-tarnsport
../bootstarp
run ./bootstrapvi /usr/local/jabber/jabberd/jabberd.h +42
before configure/make
vi /usr/local/jabber/jabberd/jabberd.h +42
>#include <pth.h>
#include "pth-1.4.0/pth.h"
../configure --prefix=/usr/local/msn --with-jabberd=/usr/local/jabber
MSN-t uses TCP port 1863 for incoming connections so you have to open this port if you use a firewall.
make
根據README進行配置,建議以獨立的進程運行。
安裝對yahoo!message的支持
安裝對yahoo!message的支持相對於icq、MSN要簡單的多,不容易出錯。安裝中我只遇到過一次說是需要glib-devel包,我加裝上去就順利用完成了(所以建議大家在不熟悉的情況下,采用完全安裝的Linux,這樣出現找不到某個包的情況就會減少)。
tar -xzpvf yahoo-t-2.0.0-RC6.tar.gz -C /usr/local/jabber
make
根據README進行配置,建議以獨立的進程運行
安裝到現在,所有的服務已經安裝好了,執行以下腳本來啟動jabber及相關的icq/msn/yaho!oMessage服務
#!/bin/bash # start.sh echo "Start Jabber ..." killall icqv7ext killall jabberd /usr/local/jabber/jabberd/jabberd & /usr/local/jabber/icq02/bin/icqv7ext -n icqv7ext -s password -h hostname -p 7000 -m sms.51jabber.com & /usr/local/jabber/jabberd/jabberd -c /usr/local/jabber/msn-trans.xml & /usr/local/jabber/jabberd/jabberd -c /usr/local/jabber/yahoo-jabber.xml &