Chat ในองค์กรด้วย Openfire และ Spark

แม้จะมีโปรแกรม chat บนอินเตอร์เนตมากมายให้เลือกใช้ ทั้ง MSN, Google Talk, Yahoo Messenger หรือ Facebook แต่เนื่องด้วยเหตุผลทางด้านความปลอดภัยของข้อมูล ไม่ว่าจะเป็นข้อความที่คุยกัน หรือไฟล์ที่ส่งระหว่างกัน ในหลายๆ องค์กรจึงเลือกติดตั้งโปรแกรมที่อนุญาตให้พนักงานสามารถ chat สื่อสารกันภายในองค์กรเท่านั้น

เพื่อที่จะใช้โปรแกรม chat (XMPP) ภายใน จำเป็นต้องติดตั้งโปรแกรมในสองส่วน คือฝั่ง server ในที่นี้เลือกโปรแกรม Openfire และโปรแกรมฝั่ง client ในที่นี้คือโปรแกรม Spark

Server ติดตั้งโปรแกรม Openfire

ทดสอบบนเซิร์ฟเวอร์ติดตั้ง Fedora 14 (x86_64)

ดาวน์โหลดโปรแกรม Openfire เป็นไฟล์แบบ rpm (ล่าสุดที่เขียนคือเวอร์ชั่น openfire-3.6.4-1.i386.rpm)

ใช้คำสั่ง rpm เพื่อติดตั้ง

[root@fc14-64a ~]# rpm -ivh openfire-3.6.4-1.i386.rpm
Preparing...                ########################################### [100%]
   1:openfire               ########################################### [100%]

รันคำสั่ง service เพื่อรันเซอร์วิส openfire

[root@fc14-64a ~]# service openfire start
Starting openfire:

การใช้คำสั่ง service เพื่อรัน openfire จะไม่ขึ้นผลลัพธ์ว่า OK หรือ FAIL เหมือนกับ service อื่นๆ ต้องใช้คำสั่ง ps เพื่อดู process

[root@fc14-64a ~]# ps -ef | grep openfire

ไม่มี process เกี่ยวกับ openfire เลย แสดงว่าต้องมีอะไรผิดพลาด

เมื่อมีปัญหาในการรัน openfire สามารถตรวจสอบได้จากไฟล์ที่อยู่ใน /opt/openfire/logs/

[root@fc14-64a ~]# ls -l /opt/openfire/logs/
total 4
-rw-r--r-- 1 daemon daemon 85 Feb  4 22:49 nohup.out

ตรวจสอบไฟล์ nohup.out เพื่อหาปัญหา

[root@fc14-64a ~]# cat /opt/openfire/logs/nohup.out
nohup: failed to run command `/opt/openfire/jre/bin/java': No such file or directory

โปรแกรม openfire ถูกพัฒนาด้วย java จำเป็นต้องใช้ jre ในการรัน ข้อความที่แสดงในไฟล์ nohup.out คือไม่สามารถเรียก java ได้

ปัญหานี้เนื่องมาจากไฟล์ rpm ที่ดาวน์โหลดมานั้น ใช้รันบนเครื่อง 32-bit (i386) รวมทั้งเวอร์ชั่น JRE ที่รวมมาในไฟล์ rpm ก็เป็น 32-bit ด้วย แต่เรานำมาติดตั้งบน OS แบบ 64-bit (x86_64)

ทดลองรัน java โดยตรง ก็ไม่ได้

[root@fc14-64a ~]# /opt/openfire/jre/bin/java
-bash: /opt/openfire/jre/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory

วิธีการแก้ไขปัญหาคือ ต้องติดตั้ง glibc เวอร์ชั่น 32-bit ด้วย

สำหรับ Fedora 14 (x86_64) ต้องติดตั้งไฟล์ rpm เพิ่มเติมคือ “glibc-2.12.90-17.i686.rpm” และ “nss-softokn-freebl-3.12.7-6.fc14.i686.rpm” ทั้งสองไฟล์ดาวน์โหลดได้จาก Fedora 14 (x86_64) Everything

[root@fc14-64a ~]# rpm -ivh glibc-2.12.90-17.i686.rpm nss-softokn-freebl-3.12.7-6.fc14.i686.rpm
Preparing...                ########################################### [100%]
   1:nss-softokn-freebl     ########################################### [ 50%]
   2:glibc                  ########################################### [100%]

ลองรัน java อีกครั้ง จะสามารถรันได้

[root@fc14-64a ~]# /opt/openfire/jre/bin/java
Usage: java [-options] class [args...]
           (to execute a class)
   or  java [-options] -jar jarfile [args...]
           (to execute a jar file)
...
...

ใช้คำสั่ง service เพื่อรันเซอร์วิส openfire

[root@fc14-64a ~]# /etc/init.d/openfire start
Starting openfire:

ใช้คำสั่ง ps เพื่อดู process ของ openfire

[root@fc14-64a ~]# ps -ef | grep openfire
daemon    1138     1  9 23:02 ?        00:00:02 /opt/openfire/jre/bin/java -server -DopenfireHome=/opt/openfire -Dopenfire.lib.dir=/opt/openfire/lib -classpath/opt/openfire/lib/startup.jar -jar /opt/openfire/lib/startup.jar

ดูไฟล์ใน /opt/openfire/logs/ เพื่อดูสถานะการรันโปรแกรมในส่วนต่างๆ

[root@fc14-64a ~]# ls -l /opt/openfire/logs/
total 68
-rw-r--r-- 1 daemon daemon   0 Feb  4 23:02 debug.log
-rw-r--r-- 1 daemon daemon   0 Feb  4 23:02 error.log
-rw-r--r-- 1 daemon daemon 129 Feb  4 23:03 info.log
-rw-r--r-- 1 daemon daemon  89 Feb  4 23:03 nohup.out
-rw-r--r-- 1 daemon daemon   0 Feb  4 23:02 warn.log
[root@fc14-64a ~]# cat /opt/openfire/logs/nohup.out
Openfire 3.6.4 [Feb 4, 2011 4:02:38 PM]
[root@fc14-64a ~]# cat /opt/openfire/logs/info.log
2011.02.04 16:02:38 Openfire 3.6.4 [Feb 4, 2011 4:02:38 PM]
2011.02.04 16:03:19 Admin console listening at http://127.0.0.1:9090

คอนฟิก openfire

ไฟล์คอนฟิกหลักของ Openfire คือ /opt/openfire/conf/openfire.xml

[root@fc14-64a ~]# ls -l /opt/openfire/conf/openfire.xml
-rw-r--r-- 1 daemon daemon 1791 Feb  5 14:01 /opt/openfire/conf/openfire.xml

owner และ group ของไฟล์ ต้องเป็น daemon เพื่อจะสามารถคอนฟิกโปรแกรมผ่านเว็บได้

เปิด browser เพื่อเริ่มคอนฟิก openfire โดยระบุพอร์ตเป็น 9090 เช่น http://192.168.1.1:9090/

หน้า Welcome to Setup เลือก English

หน้า Server Settings

Domain: ใส่เป็นชื่อเคื่อง hostname หรือ IP Address ของเซิร์ฟเวอร์
Admin Console Port: 9090
Secure Admin Console Port: 9091


หน้า Database Settings เลือก [x] Standard Database Connection

หน้า Database Settings – Standard Connection

Database Driver Presets: MySQL
JDBC Driver Class: com.mysql.jdbc.Driver

Database URL: jdbc:mysql://[host-name]:3306/[database-name]

ระบุ [host-name] และ [database-name] ที่ใช้ ตัวอย่างเช่น

jdbc:mysql://localhost:3306/openfire

ระบุ Username, Password สำหรับเชื่อมต่อเข้า MySQL

Username: openfire
Password: secret

ก่อนที่จะกดปุ่ม [Continue] เพื่อไปขั้นต่อไป ต้องสร้างฐานข้อมูลสำหรับ openfire ก่อน

 

 

สร้างฐานข้อมูล Openfire

สร้าง database บน MySQL และ GRANT สิทธิให้โปรแกรม openfire สามารถเชื่อมต่อได้ ตามข้อมูลที่ระบุด้านบน

mysql> CREATE DATABASE openfire;
Query OK, 1 row affected (0.01 sec)
mysql> GRANT ALL ON openfire.* to openfire IDENTIFIED BY 'secret';
Query OK, 0 rows affected (0.00 sec)

ใส่ข้อมูล table ลงฐานข้อมูล openfire โดยใช้ไฟล์ sql ที่อยู่ใน  /opt/openfire/resources/database/

[root@fc14-64a ~]# cd /opt/openfire/resources/database/
[root@fc14-64a database]# ls -l
total 116
-rw-r--r--  1 daemon daemon 13480 May  2  2009 openfire_db2.sql
-rw-r--r--  1 daemon daemon 13763 May  2  2009 openfire_hsqldb.sql
-rw-r--r--  1 daemon daemon 12594 May  2  2009 openfire_mysql.sql
-rw-r--r--  1 daemon daemon 14024 May  2  2009 openfire_oracle.sql
-rw-r--r--  1 daemon daemon 13961 May  2  2009 openfire_postgresql.sql
-rw-r--r--  1 daemon daemon 14023 May  2  2009 openfire_sqlserver.sql
-rw-r--r--  1 daemon daemon 14097 May  2  2009 openfire_sybase.sql
drwxr-xr-x 21 daemon daemon  4096 Feb  4 22:47 upgrade
[root@fc14-64a database]# cat openfire_mysql.sql | mysql -u root -p openfire
Enter password:
ตรวจสอบ table ที่สร้างขึ้น
mysql> CONNECT openfire;
mysql> SHOW TABLES;
+----------------------+
| Tables_in_openfire   |
+----------------------+
| ofExtComponentConf   |
| ofGroup              |
| ofGroupProp          |
| ofGroupUser          |
| ofID                 |
| ofMucAffiliation     |
| ofMucConversationLog |
| ofMucMember          |
| ofMucRoom            |
| ofMucRoomProp        |
| ofMucService         |
| ofMucServiceProp     |
| ofOffline            |
| ofPresence           |
| ofPrivacyList        |
| ofPrivate            |
| ofProperty           |
| ofPubsubAffiliation  |
| ofPubsubDefaultConf  |
| ofPubsubItem         |
| ofPubsubNode         |
| ofPubsubNodeGroups   |
| ofPubsubNodeJIDs     |
| ofPubsubSubscription |
| ofRemoteServerConf   |
| ofRoster             |
| ofRosterGroups       |
| ofSASLAuthorized     |
| ofSecurityAuditLog   |
| ofUser               |
| ofUserFlag           |
| ofUserProp           |
| ofVCard              |
| ofVersion            |
+----------------------+
34 rows in set (0.00 sec)

หน้า Profile Settings เลือก [x] Default


หน้า Administrator Account  ใส่อีเมล์ และระบุที่ใช้ในการ login เข้าสู่หน้า Admin Console


หน้า Setup Complete กดปุ่ม [Login to the admin console]

หลังจากคอนฟิกผ่านหน้าเว็บเรียบร้อย ต้องรีสตาร์ตเซอร์วิส openfire

[root@fc14-64a ~]# service openfire restart
Shutting down openfire:
Starting openfire:

Admin Console

หลังจากคอนฟิกเรียบร้อย เปิด browser http://192.168.1.1:9090/ จะเข้าสู่หน้า Admin Console

ใส่ username เป็น “admin” และ password ตามที่ระบุไว้ตอนคอนฟิกหน้า Administrator Account

หน้าจอ Service Information แสดงสถานะของโปรแกรม openfire

ไปที่ “Users/Groups” -> “Create New User” เพื่อสร้าง user

หน้า “Client Sessions” แสดงชื่อ user ที่ใช้งานอยู่

Client: ติดตั้ง Spark

สำหรับฝั่ง client ดาวน์โหลดและติดตั้งโปรแกรม Spark

เมื่อติดตั้งเสร็จเรียบร้อย รันขึ้นมา จะเป็นหน้าจอล็อกอิน

ใส่ Username, Password ตามที่สร้างไว้ บน Admin Console

ระบุ Server เป็น IP Address ของเครื่องเซิร์ฟเวอร์ที่ติดตั้ง Openfire

หน้าจอพร้อมใช้งาน

ตัวอย่างหน้าจอการสนทนา ระหว่างผู้ใช้

 

ข้อมูลอ้างอิง