Jabber 是著名的 Linux 即时通讯服务服务器,它是一个自由开源软件。什么是即时通讯服务器呢?就是类似AIM,ICQ,MSN或Yahoo Message 类似的服务器;只是Jabber能让我们自己架即时通讯服务器,可以在Internet上应用,也可以在局域网中应用;
Jabber 最有优势的就是他的通信协议。他可以和多种即时通讯对接。比如有第三方插件,能让jabber用户和MSN 、Yahoo Messager、ICQ..... 对聊;
下面是来自 jabber.org官方的原文
引用:Jabber is best known as "the Linux of instant messaging" -- an open, secure, ad-free alternative to consumer IM services like AIM, ICQ, MSN, and Yahoo (see the IM quickstart). Under the hood, Jabber is a set of streaming XML protocols and technologies that enable any two entities on the Internet to exchange messages, presence, and other structured information in close to real time. Jabber technologies offer several key advantages:
1.1、我们能否自己架设jabber server;
我们自己来架Jabber server 是可能的;jabber.org 上提供了几乎所有的文档资料、服务器端及客户端;如果您想拥有一个自己的即时消息服务器,那就自己动手吧;jabber 能满足您架自己的即时通讯服务器;如果您是高手,说不定也会弄一个类似TT公司呢;
1.2、jabber 应用范围;
jabber server 能在局域网中应用,当然也一样架一台internet 的jabber server 为您自己的用户服务;服务器端支持几乎所有的操作系统,从Linux、MACOS到Unix类的,同样也支持Windows平台;客户端也是一样,无所不包,无所不有... ...
服务器端: Jabber Servers http://www.jabber.org/software/servers.shtml
客户端: Jabber Clients http://www.jabber.org/software/clients.shtml
2、jabber server的简单架设,安装篇;
我是在局域网中架设并测试的,而且功能也极为简单、安全性也没有评测(或者说没有安全性),就是简单的注册和相互通讯(聊天);
2.1、Jabber Server 测试架设环境和用户认证环境;
Slackware 10.1 ,其实在哪个发行版都是一样的,只要按官方文档上面说的做,一般都会成功;好象没有不成功的呢;我用的是mysql认证,也就是说用户注册和认证数据库调用的;当然jabber 支持多种认证,比如PostgreSQL、Berkeley DB ... ...
因为我不懂其它的认证方式,我对Mysql 也只是了解一点点;所以我就用了Mysql的方法;
另外如果在局域网中架Jabber Server ,得有DNS服务器;也就是说局域网中的机器相互能通过hostname 来访问;如果您不懂什么是DNS,或者不会DNS 的架设。我感觉也没有什么,现在几乎所有的路由器都有这个功能,点几下鼠标就能弄得起来;如果你只一台机器,我看架Jabber Server 也没有必要了;
所以本文架设Jabber Server 的前提条件是你懂DNS(至少你有一个路由器,并且能在路由器上指定DNS来解析每台机器的hostname);另外您还要懂一点Mysql服务器的架设和简单的应用;
2.2、Jabber Server 版本的选择;
我用的Jabber Server 的版本是 jabberd-2.0s10.tar.gz ;
http://jabberd.jabberstudio.org/2/#download
2.3、为Jabber Server添加一个系统用户,用来管理服务器的启动等;
一般的说来root超级用户是能对所有服务器程序进行管理的;但这样做有点不安全;所以尽可能的少用root权限来启动一个服务器;
[root@localhost ~]# groupadd jabber 注:添加jabber用户组;
[root@localhost ~]# useradd jabber 注:添加 jabber用户;
至于设置不设置jabber用户的密码,您看着办。如果您当前操作的普通用户,想通过su 命令切换到 root用户下,然后再通过 su jabber ,这样就不用密码也行;如果您认为这样切来切换去的有点麻烦,那你就设置一下jabber用户的密码;
[root@localhost ~]# passwd jabber 注:设置jabber 用户的密码;
2.4、编译安装Jabber Server所需要的软件环境;
在Linux中编译安装Jabber Server 需要编译工具;比如gcc 之类的,如果您没有编译环境, 就要找出自己所用发行版的光盘,把这些安装上;
Jabber Server 依赖 openssl ,您也得安装上;在您的Linux发版的安装盘中也应该有;
Jabber Server 依赖 Mysql ,因为我们要用Mysql 存储用户资料;这个不可缺少吧;在发行版的光盘也有;
libidn 这个软件包也在各大发行版中有;自己找找看;也可以自己编译安装;
参考文档:《Jabberd 2 Installation and Administration Guide》http://jabberd.jabberstudio.org/2/docs
2.5、解压编译安装Jabber Server;
引用:[root@localhost ~]# tar zxvf jabberd-2.0s10.tar.gz
[root@localhost ~]# cd jabberd-2.0s10
[root@localhost jabberd-2.0s10] # ./configure --enable-ssl --enable-mysql --enable-idn \
--with-extra-include-path=/usr/include/mysql \
--with-extra-library-path=/usr/lib/mysql \
--prefix=/opt/jabberd2
[root@localhost jabberd-2.0s10] # make
[root@localhost jabberd-2.0s10] # make install
注意: 在./configure 中要指定您的Mysql的include所在的位置,也要指定 mysql的lib所在的位置;您应该知道这些东西在哪里;我的mysql 的include和 lib分别是/usr/include/mysql和/usr/lib/mysql
--prefix 用来指定把jabberd安装在哪个位置上。我是安装到了 /opt/jabberd2目录中;自己看着办吧。这样指定比较方便。当我们不需要jabberd的时候,就直接删除 /opt/jabberd2目录就行了。就是重装也方便;卸载就更方便了;
3、jabber server的简单配置;
3.1、创建Jabber Server 进程存放目录pid及日志存放目录log
[root@localhost ~]# mkdir -p /opt/jabberd2/var/jabberd/pid
[root@localhost ~]# mkdir -p /opt/jabberd2/var/jabberd/log
[root@localhost ~]# chown -R jabber:jabber /opt/jabberd2/var
说明:改变/opt/jabberd2/var权限,让用户jabber可以写数据到/opt/jabberd2/var及下级目录;
3.2、有关Mysql数据库的操作;
在我们的解压编译的Jabber Server 目录中 jabberd-2.0s10 ,有一个目录tools,里面有一个文件db-setup.mysql,就是创建数据库的脚本;
首先我们得启动Mysql 服务器;这个过程省略;
然后我们导入 db-setup.mysql;
[root@localhost jabberd-2.0s10] # cd tools
[root@localhost tools] # mysql -uroot -p < db-setup.mysql
Enter password: 在这里输入Mysql数据库的管理密码
经过上一步,我们就导入了一个jabberd2的数据库;下一步我们要进行授权;让jabberd2 数据库有一个专门的管理用户;
[root@localhost tools] # mysql -uroot -p
Enter password: 注:在这里输入Mysql数据库的管理密码
然后我们在 mysql 数据库中运行下面的一条指令;
mysql>GRANT select,insert,delete,update ON jabberd2.* \
to jabberd2beinan@localhost IDENTIFIED by '123456';
注解: 其中jabberd2beinan 是jabberd2数据库的管理员,这个可以自己定义;定义你自己喜欢的;其中123456是用户 jabberd2beinan用户的密码;
如果没有问题的话,我们从mysql退出后,就要吧用jabberd2beinan 用户来连接Mysql服务器了;
[root@localhost tools] # mysql -ujabberd2beinan -p
Enter password: 在这里输入jabberd2数据库管理员jabberd2beinan的密码;
mysql> show databases; 注:查看数据库;
+----------+
| Database |
+----------+
| jabberd2 |
| test |
+----------+
2 rows in set (0.00 sec)
mysql> quit
3.3、Jabber Server 的配置文件的修改;
以我的安装和配置环境为准,我是安装Jabber Server 在/opt/jabberd2目录中;配置文件在 /opt/jabberd2/etc/目录中;我们需要改的文件,有如下几个;
c2s.xml resolver.xml router-users.xml router.xml s2s.xml sm.xml
我只是简单的说一下我的配置,不一定对,但能用得起来;
注意:所有192.168.1.4的IP都是我架Jabber Server 这台机器的IP,您要根据自己的情况来进行改动;
3.31、c2s.xml 文件
第77行;
localhost
改为
linuxsir
重要:这个是极为重要的,linuxsir是服务器的hostname,并且能被局域网每台机器都能识别的,也就是我们前面所说要自己做DNS,或通过路由器来做解析;一般路由器都有这个功能;这个需要您自己来弄;
第81行;
0.0.0.0
改为
192.168.1.4
277和278行,是Mysql服务器认证的;
jabberd2
secret
改为:下面改动是根据您在Mysql数据库jabberd2授权给你所设置的用户名和密码;
jabberd2beinan
123456
3.32、resolver.xml 文件
不做改动,默认就行;
3.33、router-users.xml 文件
不做改动;如果您要改动,其它文件也要改。这个文档是简单架设。没有考虑的太多;大多是默认的配置;
我的建议是为了安全,你还是改一下用户和密码;也就是下面的;
jabberd
secret
把上面的改一改,最好改的比较安全一点;下面只是一个简单的例子;
jabberd1234
654321
如果router-users.xml中做了改动其它文件中的如下内容也要改动;
127.0.0.1
5347
jabberd
secret
也就是要改动上面的中的
jabberd1234
654321
3.34、router.xml 文件
不做改动,默认就好;
3.35、s2s.xml 文件
第77行;
0.0.0.0
改为
192.168.1.4
3.36、sm.xml 文件
第7行;
这是服务器hostname的设置,您所用的hostname要在局域网中被识别;这就涉及到DNS;现在路由器大多都有指定DNS的功能;这个需要您自己来弄;我的这台机器在路由器上做了DNS后,被指定解析为linuxsir;
localhost
改为
linuxsir
第88、89行;
这两行也是连接Mysql数据库服务器;也要改动;
jabberd2
secret
改为
jabberd2beinan
123456
4、Jabber Server 启动和管理;
我们在前面已经添加了 jabber这个用户,目的就是为了服务的安全性,让这个用户来添加和启动Jabber Server;
当然我们要切换到jabber这个用户,然后让jabber这个用户来启动jabberd服务器;
[root@localhost ~] #su jabber
[jabber@localhost ~] $ /opt/jabberd2/bin/jabberd -D
这个Debug模式运行,如果有什么错误,就能显示出来;如果不行,你就按几下回车,看看是不是有错误发生。如果没有,就Ctrl+C结束运行,然后转为后台运行;
引用:[jabber@localhost ~] $ /opt/jabberd2/bin/jabberd&
[jabber@localhost ~] $ ps -aux |grep jabberd
jabber 7048 12.3 1.2 5072 3184 pts/0 R 05:33 0:00 perl -w -x /opt/jabberd2/bin/jabberd
jabber 7049 2.3 0.5 4656 1452 pts/0 S 05:33 0:00 /opt/jabberd2/bin/router -c /opt/jabberd2/etc/jabberd/router.xml
jabber 7050 0.6 0.4 4552 1252 pts/0 S 05:33 0:00 /opt/jabberd2/bin/resolver -c /opt/jabberd2/etc/jabberd/resolver.xml
jabber 7051 2.0 0.6 4796 1716 pts/0 S 05:33 0:00 /opt/jabberd2/bin/sm -c /opt/jabberd2/etc/jabberd/sm.xml
jabber 7052 0.6 0.5 4644 1340 pts/0 S 05:33 0:00 /opt/jabberd2/bin/s2s -c /opt/jabberd2/etc/jabberd/s2s.xml
jabber 7053 1.6 0.6 4752 1672 pts/0 S 05:33 0:00 /opt/jabberd2/bin/c2s -c /opt/jabberd2/etc/jabberd/c2s.xml
jabber 7055 0.0 0.2 2256 732 pts/0 R+ 05:33 0:00 grep jabberd
说明: 第一行是后台运行;第二行是查看是否jabberd已经启动起来了;如果出现类似上面的提示,这表示jabberd已经运行;
5、Jabber 客户端的应用;
5.1、Jabber 客户端的选择;
对于客户端的选择,您可以用gaim;也可能用其它的,我用的是gaim;请到 Jabber 客户端: Jabber Clients 去找适合自己;
如果您想用gaim ,可以到 http://gaim.sourceforge.net 上去下载;Windows版本和Linux版本都有;如果您用的是Linux,各大发行版都有这个软件包;安装上就行了;
5.2、客户机的DNS配置;
如果您是Linux,就得让/etc/resolv.conf 有DNS主机的设置;比如我的设置是
nameserver 192.168.1.1
192.168.1.1 这行就是DNS服务器的,我用的是路由器,路由器我配置DNS的时候,用的就是这个地址;
如果您是用Windows,也得在网卡设置IP那个界面上,写上这个吧;自己看着办吧;
5.3、Jabber 客户端之一Gaim的使用;
Gaim使用就简单了,我们可以通过Gaim来向局域网Jabber Server 申请ID;
第一步: 添加帐号;
点击[帐号]=>添加=》
协议:选择 Jabber
用户名: 先随便写一个您喜欢的,比如我写是的beinan
服务器:也就是我们前面设置的Jabber Server 那台机器的hostname;我的机器是linuxsir;
资源:不用管他;
密码:自己写一个吧;因为没有注册呢;这个不是重要的;
别名:就是昵称,比如大灰狼之类;
点击[显示主要选项]
Jabber 选项
可用则使用TLS 这个要选中,其它两个是 [强制旧SSL]和[允许不加密流上的纯文本验证],这两个就不要选中了;l
端口:5222
连接服务器:就是Jabber Server所在机器的IP地址,我这台机器是192.168.1.4
代理类型:不用改变,保持原来的状态就行;[使用全局代理设置]
第二步 注册帐号;
这些都添写好了,再点击[注册];
然后写上用户名和密码;他会提示注册成功;
第三步 修改帐户
我们还得从头再来,点击[帐户],然后选中您刚才注册的成功的那个帐户;点击修改;就按前面所说的来修改;只是在[显示主要选项]中的连接服务器改一改就行了。因为这个是空的;要改为你自己服务器的IP地址就行了;我的服务器是192.168.1.4。我就改成了192.168.1.4;
至于Windows用户的Gaim的使用同理;
6、一些疑问;
6.1、jabberd2能否和MSN、Yahoo Messager、ICQ等用户对聊功能;
能的;但要安装一些插件;在我看来这些插件有点难度。因为我测试过一些插件;但不能解决一些依赖关系;等解决了依赖关系,却不能应用;错误是的。
http://www.jabber.org/software/components.shtml
6.2、jabberd2能否支持客户端传文件功能;
如果是默认安装是不支持的,这也需要第三方插件;目前有三种方法吧;在jabber的主页上说,如果想要实现相互传文件功能,与客户端有关;我测试了好多种,但还是不行。psi据说是能行,我测试后也不行;可能依靠客户端传文件还是有点难度。或许不久就以解决?
如果通过服务器端解决呢?也是有可能的,有两种方法;proxy65和定义apache dav模块的办法;apache dav模块据说比较简单。但我没有试过。据有关洋人说,不太安全;proxy65的方法也有难度,他依赖太多的东西,比如python 、zope 、twist、pyopenssl ... ...多多;虽然也能解决依赖关系,但proxy65还是一样运行不起来;
大家还是自己测试吧;写这些东西只不是想让新手走太多的路;
6.3、jabberd2能否让支持语音或电话功能;
可能有这个成功案例,我没有仔细看;但通过jabberd2文档,我没有看到,或许有第三方插件能解决;或许有点难度;
7、关于本文
本文是最简单的Jabber 即时通讯服务器的架设;没有太多的功能,当然安全机制也没有考虑;高水平的文档并不是我能写的出来的,当然我也在努力写一写高水平的文档,到现在还没有这个能力,所以只能期待高手出现,或者期待自己某一天成为高手;
本文面向初学者;