搭建jabberd2服务器

    由于公司项目需要,安排我对jabberd2服务器进行搭建,搭建环境是海思的hi3516,在此记录我此次搭建遇到的难题和解决方法。

1.下载编译jabberd2所需库

    搭建jabberd2服务器_第1张图片

解压,进行交叉编译,我这里放上我在对这些库源码进行编译时用到的指令(主要是jabberd2和mysql交叉编译时遇到一些小麻烦)

./configure CC=arm-hisiv600-linux-gcc-4.9.4 --prefix=/mnt/mtd/mysql --host=arm-hisiv600-linux  --with-named-curses-libs=/usr/lib/libncurses.a

./configure CC=arm-hisiv600-linux-gcc --prefix=/mnt/mtd/jabberd2 --enable-mysql=/install/jabberd2/common/mysql/ CFLAGS="-I/install/jabberd2/common/include" LDFLAGS="-L/install/jabberd2/common/lib" --with-extra-include-path=/install/jabberd2/common/include --with-extra-library-path=/install/jabberd2/common/lib  --enable-debug --enable-mio=epoll --host=arm-hisiv600-linux

交叉编译库时遇到很多 “cannot run test program while cross compiling” 因没有执行程序的环境,configure无法在目标机上运行测试程序,我都是进入configure  直接把这项测试关掉,不进行测试。

2.编译jabberd2(jabberd-2.6.1.tar)

   编译这个源码时花费了我很多时间,也有可能是我前面环境没有完全搭建好,导致编译jabberd2时总是遇到一些麻烦,记录一个问题,在jabberd2/sx/ssl.c里面有三个函数

搭建jabberd2服务器_第2张图片

这三个函数在ssl.c内定义,在plugins.h内声明,我在编译到c2s目录时,就报错提示找不着这三个函数,我反复检查了头文件包含,以及ssl.c文件的依赖结果还是没搞定,一直到后面看makefile才发现,编译ssl.c的脚本在makefile里面是注释起来的,也就是说makefile里面没有去编译ssl.c这个文件,于是查看makefile里面的依赖关系找到了没编译ssl.c的原因,因为在测试ssl库是测试不过的(交叉编译的原因),而我只改了测试不过不让它报错而忘记把本应该置为true的宏HAVR_OPENSSL改过来,进入configure配置文件,修改为即使测试ssl库不通过也把HAVE_OPENSSL宏置为true,再次编译时这个位置就不再报错了

     遇到的第二个小麻烦

            搭建jabberd2服务器_第3张图片

    我下载的这个版本fnmatch.h和fnmatch.c这两个文件都是在win32目录里面未包含到router目录里,可以修改makefile里面的路径解决也可以直接把这两个文件拷贝过来,我是把这两个文件从win32目录拷贝到router目录里面,然后进入router里面的makefile进行修改,把加进来的fnmatch.h和fnmatch.c也进行编译   


然后make,makeinstall,后面就没再遇到问题了

搭建jabberd2服务器_第4张图片

差点忘了,我这个版本编译出来的bin目录下只有 router  s2s  sm c2s 这个四个执行文件,网上很多资料上都说还有一个resolver 这个害我以为我自己编译的有问题,查了很多资料才确定最新版本确实只有四个文件,可能是resolver组件已经被合并了

3.编译mysql

1.   下载mysql源码mysql-5.0.95.tar.gz,解压,执行下面指令

./configure CC=arm-hisiv600-linux-gcc-4.9.4 --prefix=/mnt/mtd/mysql --host=arm-hisiv600-linux --with-named-curses-libs=/usr/lib/libncurses.a

 Make和make install

安装完成后进入/mnt/mtd/mysql ,把里面的东西拷贝到海思设备,/mnt/mtd/mysql 里面,目录必须一样

在海思设备/mnt/mtd/mysql里先创建一个用户

adduser mysql ,密码写123456789

 mysql目录加入这个用户组

chown mysql:mysql -R /mnt/mtd/mysql

 把/tmp 也加入这个用户组

chown mysql:mysql -R /tmp/

 运行mysql_install_db--user=mysql

 把,/mnt/mtd/mysql/share/mysql目录下的mysql.server

拷贝到/etc/init.d 目录 cp /mnt/mtd/mysql/share/mysql/mysql.server  /etc/init.d/mysqld

进入/etc/init.d目录

./mysql.server start

Mysql启动后开始配置

切换到tools目录并启动MySQL控制台(MySQL服务应该已经在运行中). 然后, 从MySQL控制台运行 db-setup.mysql脚本:

      mysql

      mysql>\.db-setup.mysql

现在一个用于Jabberd的数据库已经存在于MySQL数据目录, 新建一个MySQL用户给Jabberd用来连接MySQL服务器

GRANT select,insert,delete,update ON jabberd2.* to jabberd2@localhost IDENTIFIED by '123456';

(这里把默认密码改成123456)

mysql配置过程中大部分问题都是因为权限造成的

4.接下来开始配置sm.xml和c2s.xml

(我的服务器ip是192.168.1.244,这里id填hostname的值也是可以的,我的设备hostname是 localhost )

sm.xml:

搭建jabberd2服务器_第5张图片

  搭建jabberd2服务器_第6张图片

搭建jabberd2服务器_第7张图片


c2s.xml:这个id里面的内容是影响服务器是否支持加密的重要因素


 

搭建jabberd2服务器_第8张图片

由于我们不能用明文通讯所以要求加上加密传输,下面是配置ssl库进行加密

router.xml,s2s.xml,sm.xml,c2s.xml这四个配置文件中所有的下面这个标记都得打开,以前是注释起来的,可能和编译时的配置有关


server.pem在jabberd2源码里面有,直接拷贝到上述目录

用客户端测试:

客户端:Pidgin

搭建jabberd2服务器_第9张图片

先注册一个账号

搭建jabberd2服务器_第10张图片

搭建jabberd2服务器_第11张图片

输入好后点添加

搭建jabberd2服务器_第12张图片

由于是测试,所以选择接受,然后会弹出

搭建jabberd2服务器_第13张图片

点击注册

搭建jabberd2服务器_第14张图片

现在可以使用了

添加好友

搭建jabberd2服务器_第15张图片


搭建jabberd2服务器_第16张图片




你可能感兴趣的:(技术,c)