公司想在内网服务器上搞个IM系统,是linux系统上的,所以挑选了Jabber作为IM server,把安装过程总结了一下,写出来,以备以后使用。
安装是参考Jabber自带的原文档进行的,我只是把具体步骤挑出来而已。
操作系统:Redhat AS 3 U2
安装Jabber2(jabberd-2.0s8.tar.gz)
Jabber2可以在www.jabber.org下载到,用来做IM Server。
客户端我用了好几种,个人推荐Pandion、Psi、Gaim,都是Windows平台的Client,都支持中文。而且Psi和Gaim我都下到了源码,可以进行二次开发。
安装Jabber本身很简单,主要是安装Jabber的必需的软件包。
Jabber需要:OpenSSL(0.9.6b以上版本)
Libidn(0.3.0以上版本)
数据存储:Mysql(4.0以上版本)或者Berkeley DB (4.1.24 以上)、PostgreSQL
身份验证软件包(Mysql就可以)
Jabber官方推荐使用Mysql,这样数据存储和身份认证就用一个就可以了。
Libidn一般在安装Linux的时候都不会自带的,所以要单独下载安装,可以在http://www.gnu.org/software/libidn/找到(我用的是libidn-0.5.0.tar.gz)。
OpenSSL一般安装盘中都有,如果装系统的时候已经选了,就不用了,要是没有,需要从安装盘中把rpm包找到安装(装的时候可能需要其他包,也一并装了吧),OpenSSL装的话,一定要包含两个包:openssl和openssl-devel。
Mysql不要用Linux自带的(官方推荐),需要好几种包,包括Server、client、Libraries and Header、Dynamic Client Libraries。具体的rpm包是(版本自己决定,4.0以上即可):
MySQL-client-4.0.24-0.i386.rpm
MySQL-server-4.0.24-0.i386.rpm
MySQL-devel-4.0.24-0.i386.rpm
MySQL-shared-4.0.24-0.i386.rpm
将需要的包准备好,比如拷贝到一个目录下,比如/usr/local/src下
开始安装:(省去装OpenSSL)
root身份:
先装libidn:
# tar -zxvf libidn-0.5.0.tar.gz
# cd libidn-0.5.0
# ./configure --prefix=/usr
# make
# make install (这一步必须用root权限执行)
再装Mysql(用RPM包装):
# rpm -ivh MySQL-server-4.0.24-0.i386.rpm
记住默认的Mysql的root密码:PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h oaserver.oa password 'new-password'
See the manual for more instructions
# rpm -ivh MySQL-devel-4.0.24-0.i386.rpm
# rpm -ivh MySQL-shared-4.0.24-0.i386.rpm
# rpm -ivh MySQL-client-4.0.24-0.i386.rpm
系统会自动建立mysql用户。
确认Mysql以及启动,然后更改root密码,后面输入新密码:
# /usr/bin/mysqladmin -u root password 'imadmin'
# mysql -u root -p
输入新密码,就登录进mysql数据库,测试:
mysql> show databases; (显示结果为)
+----------+
| Database |
+----------+
| mysql |
| test |
+----------+
2 rows in set (0.00 sec)
OK!说明Mysql安装成功。
装Jabber:
# groupadd jabber
# useradd -g jabber jabber
# passwd jabber
输入jabber用户的密码,以后启动jabber服务就用jabber用户就可以了
# mkdir -p /usr/local/var/jabberd/pid/
# chown -R jabber:jabber /usr/local/var/jabberd/pid/
# mkdir -p /usr/local/var/jabberd/log/
# chown -R jabber:jabber /usr/local/var/jabberd/log
到jabber包所在路径执行:
# tar -zxvf jabberd-2.0s8.tar.gz
# cd jabberd-2.0s8
# export CFLAGS="-I/usr/kerberos/include"
# ./configure
# make
# make install
安装成功,默认安装路径是/usr/local,要更换安装路径,在configure的时候加参数,具体参数,参考Jabber自己的安装文档。Jabber的文档放在/usr/local/etc/jabberd下面,可执行文件放在/usr/local/bin下。
# chown -R root:jabber /usr/local/etc/jabberd/*
# chmod -R 640 /usr/local/etc/jabberd/*
这样Jabber的配置文件就只有jabber和root用户可以读写了,这步也可以不做。
# ln -s /usr/local/etc/jabberd/ /etc/jabberd (建立链接方便访问)
基本配置:
1.设置host name:
# cd /etc/jabberd/
# vi sm.xml
In sm.xml :
<!-- Session manager configuration -->
<sm>
<!-- Our ID on the.network. Users will have this as the domain part of
their JID. If you want your server to be aclearcase/" target="_blank" >ccessible from other
Jabber servers, this ID must be resolvable by DNS.s
(default: localhost) -->
<id>localhost</id>
默认是localhost,我是用ip,也可以用somemachine.somedomain.com的格式,但是那先有域名解析。
保存退出。
vi c2s.xml
In c2s.xml :
<!-- Local network configuration -->
<local>
<!-- Who we identify ourselves as. This should correspond to the
ID (host) that the session manager thinks it is. You can
specify more than one to support virtual hosts, as long as you
have additional session manager instances on the network to
handle those hosts. The realm attribute specifies the auth/reg
or SASL authentication realm for the host. If the attribute is
not specified, the realm will be selected by the SASL
mechanism, or will be the same as the ID itself. Be aware that
users are assigned to a realm, not a host, so two hosts in the
same realm will have the same users.
If no realm is specified, it will be set to be the same as the
ID. -->
<id>localhost</id>
也替换成ip,保存退出。
2.配置Mysql:
到Jabber的源代码路径下的tools目录下,有mysql的建库sql文件,执行db-setup.mysql可以在mysql下建立对应的用户和表。
# cd /usr/local/src/jabberd-2.0s8/tools/
# mysql -u root -p (输入mysql的root密码)
mysql>\. db-setup.mysql
mysql> grant select,insert,delete,update On jabberd2.* to jabberd2@localhost IDENTIFIED by 'secret';
给jabberd在mysql的密码就赋值为"secret",也可以自己指定密码
执行完毕退出。
# mysql -u jabberd2 -p来测试密码是否正确。
mysql的socket在/var/lib/mysql下面,jabberd2需要用到它,所以:
# ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
3.在jabber中指定mysql的配置:
# cd /etc/jabberd/
# vi sm.xml
数据库关于数据库的配置,使用mysql的有两段:
<!-- Storage database configuration -->
<storage>
<!-- By default, we use the MySQL driver for all storage -->
<driver>mysql</driver>
以及
<!-- MySQL driver configuration -->
<mysql>
<!-- Database server host and port -->
<host>localhost</host>
<port>3306</port>
<!-- Database name -->
<dbname>jabberd2</dbname>
<!-- Database username and password -->
<user>jabberd2</user>
<pass>secret</pass>
<!-- Transacation support. If this is commented out, transactions
will be disabled. This might make database accesses faster,
but data may be lost if jabberd crashes.
This will need to be disabled if you are using a MySQL
earlier than v3.23.xx, as transaction support did not appear
until this version. -->
<transactions/>
</mysql>
系统以及默认好了,除非你在前面改动了密码什么的,才需要更改这段配置,或者想换个端口。
Jabber推荐使用mysql,用它做数据存储和身份认证,身份认证需要更改c2s.xml
# vi c2s.xml
<!-- MySQL module configuration -->
<mysql>
<!-- Database server host and port -->
<host>localhost</host>
<port>3306</port>
<!-- Database name -->
<dbname>jabberd2</dbname>
<!-- Database username and password -->
<user>jabberd2</user>
<pass>secret</pass>
</mysql>
系统也已经默认好了。
前面建立了jabber自己的log目录,这样就不用加到系统日志里面了,所以要更改sm.xml和c2s.xml。
sm.xml:
<!-- Log configuration - type is "syslog", "file" or "stdout" -->
<log type='file'>
<!-- If logging to syslog, this is the log ident -->
<ident>jabberd/sm</ident>
<!-- If logging to syslog, this is the log facility
(local0 - local7) [default: local3] -->
<facility>local3</facility>
<!-- If logging to file, this is the filename of the logfile -->
<file>/usr/local/var/jabberd/log/sm.log</file>
</log>
系统默认log type是"syslog",改成"file",然后把下面的file的具体路径的配置取消注释就可以了。
对应的,c2s.xml,s2s.xml,router.xml,resolver.xml也是同样改法。
这样基本配置就完成了,可以测试了。
测试Jabber服务:
# su - jabber
$ jabberd
Ok,这样就启动了jabber服务,关闭直接Ctrl+C就行了。
现在用客户端注册一个新用户,然后登录,需要注意的是注册是要输入JabberID,要加@192.168.0.24
包括增加联系人的时候也是要加上。
这样就建立一个简单廉价的IM Server了。
如果启动jabber时系统报LANG,LANGUAGE,LC_ALL的错误,主要是因为redhat默认安装后,系统unset了LC_ALL,还有因为其他原因更改了LANG变量的设置等,所以可以在jabber用户下重新赋值:
# su - jabber
$ vi .bash_profile
在里面加入:
export LANG=en_US
export LANGUAGE=$LANG
export LC_ALL=$LANGUAGE
具体指定什么语言,根据实际定吧。
如果想建立自启动脚本,我做了一个简单的脚本,我用的还凑合:
#!/bin/sh
#/etc/rc.d/init.d/jabberd
#
# Description: Starts and stops the jabberd services as jabber user .
#
#Date 2005/06/09
# Source function library.
if [ -f /etc/init.d/functions ] ; then
. /etc/init.d/functions
elif [ -f /etc/rc.d/init.d/functions ] ; then
. /etc/rc.d/init.d/functions
else
exit 0
fi
# Jabberd services must be run by jabber user
KIND="Jabberd"
RETVAL=0
start() {
echo -n $"Starting $KIND services: "
echo "----------------------------------------------------" >> /usr/local/var/jabberd/log/jabberd.log
date +"! %T %a %D : Starting Jabberd as part of system up." >> /usr/local/var/jabberd/log/jabberd.log
echo "----------------------------------------------------" >> /usr/local/var/jabberd/log/jabberd.log
su - jabber -c jabberd & >> /usr/local/var/jabberd/log/jabberd.log
echo "Done."
RETVAL=$?
echo "-----------------------" >> /usr/local/var/jabberd/log/jabberd.log
date +"! %T %a %D : Finished." >> /usr/local/var/jabberd/log/jabberd.log
echo "-----------------------" >> /usr/local/var/jabberd/log/jabberd.log
echo
return $RETVAL
}
stop() {
echo -n $"Shutting Down $KIND services: "
echo "-----------------------------------------------------------" >> /usr/local/var/jabberd/log/jabberd.log
date +"! %T %a %D : Shutting Down Jabberd as part of system down." >> /usr/local/var/jabberd/log/jabberd.log
echo "-----------------------------------------------------------" >> /usr/local/var/jabberd/log/jabberd.log
killall s2s >> /usr/local/var/jabberd/log/jabberd.log
killall c2s >> /usr/local/var/jabberd/log/jabberd.log
killall sm >> /usr/local/var/jabberd/log/jabberd.log
killall resolver >> /usr/local/var/jabberd/log/jabberd.log
killall router >> /usr/local/var/jabberd/log/jabberd.log
echo "Done."
RETVAL=$?
echo "-----------------------" >> /usr/local/var/jabberd/log/jabberd.log
date +"! %T %a %D : Finished." >> /usr/local/var/jabberd/log/jabberd.log
echo "-----------------------" >> /usr/local/var/jabberd/log/jabberd.log
echo
return $RETVAL
}
restart() {
stop
start
}
case "" in
start)
start
;;
stop)
stop
;;
restart)
restart
;;
*)
echo $"Usage: "
exit 1
esac
exit $?
这个脚本我起名叫jabberd,放在init.d下面,root权限,然后:
# ln -s /etc/rc.d/init.d/jabberd /etc/rc.d/rc3.d/S99jabberd
# ln -s /etc/rc.d/init.d/jabberd /etc/rc.d/rc5.d/S99jabberd
# ln -s /etc/rc.d/init.d/jabberd /etc/rc.d/rc6.d/K01jabberd
# ln -s /etc/rc.d/init.d/jabberd /etc/rc.d/rc0.d/K01jabberd
这样计算机启动和关闭的时候就自动关闭和启动了,如果手工想关闭重启什么的时候,直接执行:
# /etc/rc.d/init.d/jabberd (start|stop|restart)
这个文件是用txt文本格式写的,不能直接把脚本内容拷贝成sh文件,用写字板或者Ultraedit什么的重写吧,否则换行符是跟linux不一样的。
我这些操作是在redhatAS3 U2版本上做的,其他版本应该基本一样,可能在细节部分略有区别吧,反正我没有测试过。