歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Ejabberd在Linux平台的安裝與配置

Ejabberd在Linux平台的安裝與配置

日期:2017/2/28 16:35:47   编辑:Linux教程

這些天搗鼓了下ejabberd,准備研究它的代碼,做為榜樣~ 我這兒用的是1.1.3的代碼,而svn上面的代碼有些地方做了比較大的改動.

在Linux平台安裝很簡單

    ./configure
  1. make && make install


就ok了.

    ejabberd 會安裝在var/lib/ejabberd目錄, 配置文件在/etc/ejabberd目錄,默認是ejabberd.cfg, 日志放在/var/log/ejabberd目錄下.

若現在 像ejabberd的指南所說的那樣執行

    erl -pa /var/lib/ejabberd/ebin -name ejabberd -s ejabberd

就會出錯,沒有定義配置文件的路徑。最簡單的方法就是先設置一個環境變量

    export EJABBERD_CONFIG_PATH=/etc/ejabberd/ejabberd.cfg

然後再執行剛才的erl命令,這兒節點名稱用全稱.

erl -pa /var/lib/ejabberd /ebin -name [email protected] -s ejabberd 當然也可以用

    erl -pa /var/lib/ejabberd/ebin \
  1. -sname ejabberd \ -s ejabberd \
  2. -ejabberd config \"/etc/ejabberd/ejabberd.cfg\" \ log_path \"/var/log/ejabberd/ejabberd.log\" \
  3. -sasl sasl_error_logger \{file,\"/var/log/ejabberd/sasl.log\"\} \ -mnesia dir \"/var/lib/ejabberd/spool\"

來詳細地定義啟動參數.

下面是ejabberdctl工具來注冊一個用戶admin.
ejabberdctl 實際上是一個shell文件,具體內容是

    #!/bin/sh
  1. exec erl -noinput -sname ejabberdctl -s ejabberd_ctl -extra $@

可以看出,它實際上是調用ejabberd_ctl模塊,對應的文件就是 ejabberd_ctl.beam. 這工具原本在ejabberd源碼下的tools文件夾下,但它找不到ejabberd_ctl.beam.你可以將它copy至/var/lib /ejabberd/ebin下面方方便使用.

當你執行

    # ./ejabberdctl [email protected] register admin 192.168.0.98 password

時它會出現如下錯誤

    RPC failed on the node '[email protected]': nodedown
  1. =ERROR REPORT==== 6-Jul-2007::05:27:33 ===
  2. ** System NOT running to use fully qualified hostnames ** ** Hostname 192.168.0.98 is illegal **

開始以為是192.168.0.98非法, 後面用它的源碼檢查了一番發現是rpc:call調用有問題。因為ejabberctl這個shell文件中定義了

    -sname ejabberdctl


調 用sname定義的短節點名與長節點名,兩者所定義的結點不能通信.連net_adm:ping都失敗.
我這兒把./ejabberdctl改成 下面的樣子:

    1. #!/bin/sh
  1. 2. 3. exec erl -noinput -name [email protected] -s ejabberd_ctl -extra $@

這樣rpc:call就沒有問題了.但再執行那個注冊命令就會出現:

Can't register user "[email protected]" at node '[email protected]': not_allowed

檢查源碼發現是由於配置文件ejabberd.cfg中沒有此host. 我這兒98加到hosts裡面就可以了:

    % Host name:
  1. {hosts, ["localhost","192.168.0.98"]}.


再執行一下,就沒問題了。admin用戶已經注冊成功!

接下來,就是登陸管理頁面了. 我這兒默認是在 http://192.168.0.98:5280/admin
換台有浏覽器的 機器登陸這個頁面. 這時admin登錄總是出現401錯誤。我將源代碼web/ejabberd_web.erl代碼中的密碼驗證難取消了,就可以看到管理頁面啦. 有空再研究一下到底是哪兒出了錯,查了下代碼,可能又是配置方面 :)

Copyright © Linux教程網 All Rights Reserved