歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux管理 >> Linux維護 >> 用Jabber實現自己的既時通訊系統

用Jabber實現自己的既時通訊系統

日期:2017/3/2 10:46:53   编辑:Linux維護

  隨著計算機網絡的普及,幾乎每個網絡用戶都在使用著一種或者一種以上的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
      &

Copyright © Linux教程網 All Rights Reserved