# Roll Your Own LAN Instant Messaging Platform with OpenFire on Linux

## What is OpenFire?

> Openfire is a real time collaboration (RTC) server licensed under the Open Source Apache License. It uses the only widely adopted open protocol for instant messaging, XMPP Openfire is incredibly easy to setup and administer, but offers rock-solid security and performance. -https://igniterealtime.org/projects/openfire/

## OpenFire Download and Installation

1. Log into the Linux based device
2. Run the following commands in the terminal
   # update software repositories
   sudo apt update
   # install available software updates
   sudo apt upgrade -y
   # install openjdk
   sudo apt install default-jdk -y
   # install MySQL
   sudo apt install mariadb-server mariadb-client -y
   # lookup the latest .deb download URL
   regex='">(openfire_[^/]*_all\.deb)<\/a>' && response=$(curl -s https://www.igniterealtime.org/downloads/) && [[ $response =~ $regex ]] && downloadURL="https://www.igniterealtime.org/downloadServlet?filename=openfire/${BASH_REMATCH[1]}"
   # download openfire
   wget -O OpenFire.deb $downloadURL
   # install openfire
   sudo dpkg -i ./OpenFire.deb
   # configure the MySQL database
   sudo su
   mysql_secure_installation
3. Press Enter to login as root
4. Type N and press Enter to switch to unix_socket authentication
5. Type Y and press Enter to set a root password, type the password twice to confirm
6. Type Y and press Enter to remove anonymous users
7. Type Y and press Enter to disallow root login remotely
8. Type Y and press Enter to remove the test database
9. Type Y and press Enter to reload privilege tables
10. Run the following command to login into MySQL:
    mysql -u root -p
11. Authenticate with the root password set earlier
12. Run the following commands to create the OpenFire database and database user
    CREATE DATABASE openfire;
    GRANT ALL ON openfire.* TO 'openfire_rw'@'localhost' IDENTIFIED BY 'Op3nF1re';
    FLUSH PRIVILEGES;
    use openfire;
    source /usr/share/openfire/resources/database/openfire_mysql.sql;
    EXIT;
    exit
13. Open a web browser and navigate to http://DNSorIP:9090/setup/index.jsp
14. Select a language > Click Continue
15. Set the XMPP domain name and input the server fully qualified domain name > Click Continue
16. Select Standard Database Connection > Click Continue
17. Complete the Database Settings form as follows

    Database Driver Presets: MySQL
    JDBC Driver Class: com.mysql.jdbc.Driver
    Database URL: jdbc:mysql://127.0.0.1/openfire?useUnicode=true&characterEncoding=UTF-8&characterSetResults=UTF-8
    Username: openfire_rw
    Password: Op3nF1re

18. Click Continue
19. Select Default on the Profile Settings page > Click Continue
20. Input an admin email address and password > Click Continue
21. Click the Login to the admin console button
22. Login with username admin and the password created previously
23. Click the Users/Groups tab
24. Click Create New User in the left navigation menu
25. Create a username and password for the new user
26. Follow the steps to create as many users as needed, at least 2 are needed for testing

## Setting Up A XMPP Client

1. Run the following commands in the open terminal window
   # install pidgin
   sudo apt install pidgin -y
2. Launch Pidgin
3. Click Add...
4. Select XMPP from the protocol dropdown
5. Input the first username created above along with the XMPP domain setup in OpenFire and the user's password
6. Click the Advanced tab > Select Use encryption if available from the Connection security dropdown
7. Enter the OpenFire fully qualified server name in the server field
8. Click the Add button
9. Click Accept on the self-signed certificate popup
10. Install and launch Pidgin on a second device
11. Click Add...
12. Select XMPP from the protocol dropdown
13. Input the second username created above along with the XMPP domain setup in OpenFire and the user's password
14. Click the Advanced tab > Select Use encryption if available from the Connection security dropdown
15. Enter the OpenFire fully qualified server name in the server field
16. Click the Add button
17. Click Accept on the self-signed certificate popup
18. From one of the devices, select Buddies > Add Buddy
19. Input the opposite devices username
20. On the second device accept the message request and the two devices should be able to send and receive instant messages using the OpenFire XMPP server