# Install OpenFire Debian/Ubuntu Self-Hosted Instant Messaging Server

## XMPP Server Download and Installation

1. Log into the Ubuntu/Debian device
2. Run the following commands in terminal:
   `# update software repositories
   sudo apt update
   # install available software updates
   sudo apt upgrade
   # download OpenFire installer
   wget https://www.igniterealtime.org/downloadServlet?filename=openfire/openfire_4.5.2_all.deb -O openfire.deb
   # execute the installer
   sudo apt install ./openfire.deb
   # start the OpenFire service
   sudo systemctl enable --now openfire
   # install MySQL/MariaDB
   sudo apt install mariadb-server
   # configure the MySQL database
   sudo su
   mysql_secure_installation`
3. Press Enter to login as root
4. Type Y and press Enter to set a root password, type the password twice to confirm
5. Type Y and press Enter to remove anonymous users
6. Type Y and press Enter to disallow root login remotely
7. Type Y and press Enter to remove the test database
8. Type Y and press Enter to reload privilege tables
9. Run the following command to login into MySQL: `mysql -u root`
10. Authenticate with the root password set earlier
11. Run the following commands to create the OpenFire database and database user
    `MariaDB [(none)]> CREATE DATABASE openfire;
    MariaDB [(none)]> GRANT ALL PRIVILEGES ON openfire.* TO openfire@localhost IDENTIFIED BY '0p3nF1re!!';
    MariaDB [(none)]> FLUSH PRIVILEGES;
    MariaDB [(none)]> USE openfire;
    MariaDB [(none)]> source /usr/share/openfire/resources/database/openfire_mysql.sql;
    MariaDB [(none)]> QUIT;`
12. Open a web browser and open to http://localhost:9090/setup/index.jsp
13. Select a language > Click Continue
14. Set the XMPP domain name and input the server fully qualified domain name > Click Continue
15. Select Standard Database Connection > Click Continue
16. Enter the following database parameters:

    Database Driver Presets:MySQL
    JDBC Driver Class: com.mysql.jdbc.Driver
    Database URL: jdbc:mysql://127.0.0.1:3306/openfire?rewriteBatchedStatements=true&characterEncoding=UTF-8&characterSetResults=UTF-8&serverTimezone=UTC
    Username: openfire
    Password: 0p3nF1re!!

17. Select Default on the Profile Settings page > Click Continue
18. Input an admin email address and password > Click Continue
19. Click the Login to the admin console button
20. Login with username admin and the password created previously
21. Click the Users/Groups tab
22. Click Create New User in the left navigation menu
23. Create a username and password for the new user
24. 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 command in terminal:
   `sudo apt install pidgin`
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. Copy the extracted Pidgin Portable folder to another device
11. Launch Pidgin Portable on the second device
12. Select Modify Account
13. Update the username and password to be a different account from the previous device
14. From one of the devices, select Buddies > Add Buddy
15. Input the opposite devices's username
16. 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