ejabberd 源码编译

ejabberd 14.07ubuntu14.04上面的编译

     ejaberd社区版本的源码分为两个发行版本:一个是在ejabberd官方站点:http://www.process-one.net/en/ejabberd/downloads下载的源码。大概有60多兆,该版本已经配置好了configure脚本,只需要简单的执行

./configure make make install 就会按照默认的配置进行安装。

configure的可以用到的选项有很多,我们关心的选项主要有两个:

--prefix=installlocation

该选项配置安装的目录。

--enable-user=username

该选项配置可以执行ejabberdctl配置脚本的用户,该用户必须在执行配置脚本之前就已经存在与系统中。否则无效。

之后执行make就会进行编译。

编译的过程中可能会遇到各种错误,根据提示信息我们一般都可以很轻松的解决错误。我遇到了两个依赖项不存在的错误。根据提示执行命令:

apt-get installlibyaml-0-2 libyaml-dev libexpat1 libexpat1-dev安装依赖项

依赖项安装好之后重新make通过。

然后执行make install会安装ejabberd到目录installlocation下的各个子目录中


安装完成之后将管理脚本ejabberdctl所在的路径加入你的PATH变量中就可以执行命令

ejabberdctlstart来启动ejabberd


我的配置过程使用了选项—enable-user

在启动之后执行ejabberdctl命令时ejabberd直接崩溃提示:{error_logger,{{2014,9,25},{10,40,24}},"Errorwhen reading /root/.erlang.cookie: eacces",[]}

也就是说在读取cookie文件的时候,文件不存在,或者没有权限读取,可是我是root用户执行的,怎么能够没有权限,而且确实也存在cookie文件。只能分析一下启动脚本了。启动脚本的一部分如下:

# define defaultenvironment variables

13 SCRIPT_DIR=`cd${0%/*} && pwd`

14 ERL=/usr/bin/erl

15INSTALLUSER=quanzhuo

16

17 # Compatibilityin ZSH

18 #setoptshwordsplit 2>/dev/null

19

20 # check theproper system user is used if defined

21 if ["$INSTALLUSER" != "" ] ; then

22 EXEC_CMD="false"

23 for GID in`id -G`; do

24 if [$GID -eq 0 ] ; then

25 EXEC_CMD="su $INSTALLUSER -p -c"

26 fi

27 done

28 if [ `id -g`-eq `id -g $INSTALLUSER` ] ; then

29 EXEC_CMD="sh -c"

30 fi

31 if ["$EXEC_CMD" = "false" ] ; then

32 echo"This command can only be run by root or the user $INSTALLUSER">&2

33 exit 4

34 fi

35 else

36 EXEC_CMD="sh-c"

37 fi


可以看出脚本先设置INSTALLUSER变量为quanzhuo,也即我在配置的时候指定的用户,然后它会判断如果执行启动脚本的用户属于root用户组的话就切换到quanzhuo用户后执行以后的命令。如果当前用户和quanzhuo用户同属于一个用户组的话就以当前用户执行……

那么这样就很清楚了:当以root执行启动脚本的时候,默认会切换到安装用户然后执行。我们的普通用户当然没有读取root目录下的.erlang.cookie文件的权限了……

将上面第25行注释掉,更改为EXEC_CMD=”sh-c”再次用root执行ejabberdctl命令的时候,没有出现任何问题。


思考:

大概定位了一下崩溃的地方:在auth:read_cookie()中会调用函数init:get_argument(home).可能就是在此处得出了错误的用户主目录。于是我以root用户在终端中执行命令:su quanzhuo -c -p erl进入erl之后。执行init:get_argument(home)得到的用户主目录是/root。这算不算是erlang/otp发行包的一个bug


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值