# Tools & Web Apps

Command-line file transfer, small web app installs and utilities.

# File Transfer - Command-line FTP, LFTP, WPUT & cURL

## FTP

### Commands

to resume a single file upload using the built-in ftp command you will need to know how many bytes of the file you have already sent. This should be accessible by using `ls`. Then you use the following sequence to restart your upload replacing `<#>` with the number of bytes already sent and `<filename>` with the filename you are uploading.

```
restart <#>
put <filename>
```

If the server allows it you should receive a message such as the following...

```
350 Restart position accepted (<#>).
150 Ok to send data.
```

This will resume your upload.

## LFTP

Using the LFTP command this allows you to restart a died ftp session

### Commands

The following command is the login to the server and go to the folder you are placing the file in

```shell
lftp user:pass@host/path/to/folder
```

<table border="1" id="bkmrk-lftp-user%3Apass%40host%2F-1" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td><span style="color: rgb(241, 196, 15);">lftp user:pass@host/path/to/folder</span>  
cd ok, cwd=/path/to/folder   
lftp user@host:/path/to/folder&gt;<span style="color: rgb(241, 196, 15);"> reput file.ext</span>   
---&gt; TYPE I   
&lt;--- 200 Type set to I  
---&gt; SIZE file.ext  
&lt;--- 213 11842837120  
---&gt; PASV  
&lt;--- 227 Entering Passive Mode (10,0,0,15,220,70).  
---- Connecting data socket to (10.0.0.15) port 56390  
---- Data connection established  
---&gt; ALLO 20769244058  
&lt;--- 202 No storage allocation necessary  
---&gt; REST 11842837120  
&lt;--- 350 Restarting at 11842837120. Send STORE or RETRIEVE to initiate transfer  
---&gt; STOR file.ext  
&lt;--- 150 Opening BINARY mode data connection for file.ext  
`file.ext' at 6756302848 (32%) 31.50M/s eta:7m \[Sending data\] </td></tr></tbody></table>

This command is to restart the failed FTP replace the "file.txt" with your file

```
reput file.txt
```

After a quick search, there's a command line program called `lftp` that provides ftp mirroring functionality.

Adapted from a guide [here](http://sina.salek.ws/content/how-mirrorsync-remote-ftp-folder-local-folder "LFTP"), something like this should do the trick:

```bash
#!/bin/bash
HOST='address.co.uk'
USER='myuser'
PASS='mypass'
TARGETFOLDER='/public_html/java/desktop/'
SOURCEFOLDER='deploy/'

lftp -f "
open $HOST
user $USER $PASS
lcd $SOURCEFOLDER
mirror --reverse --delete --verbose $SOURCEFOLDER $TARGETFOLDER
bye
"
```

I'd suggest you'd do it without the `--delete` until you're sure you've got the arguments right!

## Example of simple bash script ftp client

This script first defines variables such as hostname of the ftp server, username and password and then it creates an ftp session and uploads the specified file into your selected directory:

```
#!/bin/bash

ftp_site=127.0.0.1
username=ftpuser
passwd=YOUR_PASSWORD

PS3='Select a destination directory: '

# bash select
select path in "." "/test" "public_html/myblog/" "backup/images/"
do
ftp -n $ftp_site<<EOF
quote USER $username
quote PASS $passwd
binary
cd $path
put $1
quit
EOF
break
done
```

Be sure to edit the <span class="code" spellcheck="false">ftp\_site</span>, <span class="code" spellcheck="false">username</span>, and <span class="code" spellcheck="false">passwd</span> variables above. You should also change the paths to whichever directories you most commonly upload your files to.

Executing the script:

```
$ chmod +x ftp_bash_script.sh
$ ./ftp_bash_script.sh file1
```

Example script output:

```
$ ./ftp_bash_script.sh somerandomfile 
1) .
2) /test
3) public_html/myblog/
4) backup/images/
Select a destination directory: 2
Connected to 127.0.0.1.
220 (vsFTPd 3.0.5)
331 Please specify the password.
230 Login successful.
200 Switching to Binary mode.
250 Directory successfully changed.
local: somerandomfile remote: somerandomfile
229 Entering Extended Passive Mode (|||10078|)
150 Ok to send data.
     0        0.00 KiB/s 
226 Transfer complete.
221 Goodbye.
```

## WPUT

This is to resume a files transfer using wput instead ftp or lftp commands and can be used in Windows or Linux

### WPUT Commands

Here is an example how wput continues upload after connection problems:

```
wput -v -u -B upload.zip ftp://login:YOUR_PASSWORD@server.com/dir/upload.zip
--20:14:23-- `upload.zip'
    => ftp://login:YOUR_PASSWORD@111.111.111.111:21/dir/upload.zip
Connecting to 111.111.111.111:21... connected! 
Logging in as login ... Logged in!
==> CWD dir
==> TYPE I ... done.
==> SIZE upload.zip ... done (4313 bytes)
==> PASV ... done.
==> REST 3584 ... done.
==> STOR upload.zip ... done.
Length: 902,153,406 [902,149,822 to go]
 7% [======>                                                                                         ] 65,658,368       194.0K/s ETA  1:10hError: Error encountered during uploading data (Operation now in progress)
==> ABOR ... Error: recv() timed out. No data received
Receive-Warning: read() timed out. Read '' so far.
failed.
Waiting 10 seconds... Error: recv() timed out. No data received
Receive-Warning: read() timed out. Read '' so far.
Connecting to 111.111.111.111:21... connected! 
Logging in as login ... Logged in!
==> CWD dir
==> TYPE I ... done.
==> SIZE upload.zip ... done (65247144 bytes)
==> PASV ... done.
==> REST 65246208 ... done.
==> STOR upload.zip ... done.
Length: 902,153,406 [836,907,198 to go]
 9% [++++++==> 
```

## CURL

This is the resume a file transfer using curl instead ftp or lftp commands and can be used in Windows or Linux

### CURL Commands

```
curl -C - --upload-file source_file ftp://destination.server.com/
```

# WordPress - Setup WordPress

## Connecting to Your Server

### Using PuTTY

Open PuTTY and enter your domain name in the box named **Host name (or IP address)** and enter the port number used to connect to SSH under **Port**, and then click **Open**. You can even save your site settings by entering a name in the **Saved Sessions** box and by pressing **Save**. Next time, you can always load the session by selecting your site and clicking **Load**.

PuTTY will now ask for your username. Enter your username and press **Enter**. Now you will be asked for your password. Note here that while you are typing your password, you won't see it being typed on the screen. It's hidden for security reasons. Press **Enter** after you've typed your password, and you will be logged on.

### Using Any Other SSH Client or Mac Terminal

Enter the following command in your Terminal client to connect to your site's command-line over SSH:

```
ssh username@domain.com -p 22
```

<div class="rouge-syntax-highlight" id="bkmrk-"></div>The `-p` switch tells it to use port number 22. If your host allows SSH over default port 22, you can omit `-p` and `22` in the above command; otherwise, substitute 22 for your host's SSH port number. After logging in, you will see something like this:

```
domain.com@username:-$
```

<div class="rouge-syntax-highlight" id="bkmrk--1"></div>That's the shell command prompt where you will be typing all your commands from now on.

## <span class="sectionnum">2.</span> Downloading WordPress

Now that we have logged in to our SSH server, we need to go to the correct directory where we want to set up our blog. Then we download the files and extract them there. Let's say the directory you want your blog to be installed under is **blogdemo** residing under the **public\_html** directory. In that case, you will use the following command:

```bash
cd public_html/blogdemo/
```

<div class="rouge-syntax-highlight" id="bkmrk--2"></div>Now that we have reached the correct directory, we will download WordPress using the `wget` command.

```bash
wget http://wordpress.org/latest.tar.gz
```

```bash
$tar xfz latest.tar.gz
```

<div class="rouge-syntax-highlight" id="bkmrk--3"></div>The above command downloads the latest WordPress install from their server and extracts the file from it into the **blogdemo** directory. `x`, `f`, and `z` are parameters which tell the tar command to extract the contents from the specified file using gzip.

Now, after extraction, you will find a **wordpress** directory under the **blogdemo** directory containing your install. So to shift the files back to where they should be, use the following commands:

```bash
mv wordpress/* ./
```

<div class="rouge-syntax-highlight" id="bkmrk--4"></div>This command moves the contents of the **wordpress** directory into the current directory. Anytime you want to check what's in the current directory, type `ls`.

If you want, you can use the following commands to delete both the **wordpress** directory and the archive file you downloaded:

```bash
rmdir ./wordpress/
```

```bash
rm -f latest.tar.gz
```

<div class="rouge-syntax-highlight" id="bkmrk--5"></div>## File Permissions

<div class="post__inarticle-ad-template" data-placement-tag="" data-promotion-placement="5" id="bkmrk-correct-file-permiss"><div data-controller="publift-ad" data-publift-ad-position-id-value="21764347426">Correct file permissions from the root folder</div><div data-controller="publift-ad" data-publift-ad-position-id-value="21764347426">  
</div></div>When you setup WP you (the webserver) may need write access to the files. So the access rights may need to be loose.

```bash
chown www-data:www-data  -R * # Let Apache be owner
find . -type d -exec chmod 755 {} \;  # Change directory permissions rwxr-xr-x
find . -type f -exec chmod 644 {} \;  # Change file permissions rw-r--r--
```

**After the setup you *should* tighten the access rights**, according to [Hardening WordPress](https://wordpress.org/support/article/hardening-wordpress/) all files except for wp-content should be writable by your user account only. wp-content must be writable by *www-data* too.

```bash
chown <username>:<username>  -R * # Let your useraccount be owner
chown www-data:www-data wp-content # Let apache be owner of wp-content
```

Maybe you want to change the contents in wp-content later on. In this case you could

<div class="post__inarticle-ad-template" data-placement-tag="" data-promotion-placement="5" id="bkmrk-temporarily-change-t"><div data-controller="publift-ad" data-publift-ad-position-id-value="21764347426">- temporarily change to the user to *www-data* with `su`,
- give wp-content group write access 775 and join the group *www-data* or
- give your user the access rights to the folder using [ACLs](https://wiki.archlinux.org/index.php/Access_Control_Lists).

</div></div>Whatever you do, make sure the files have rw permissions for *www-data*.

## <span class="sectionnum">3. </span>Installing WordPress

In this step, we will create the database and corresponding user and associate them together. Then we will use the famous five-minute install of WordPress to finish it off.

**Note:** Before moving ahead, you will need to check whether you have got the privileges to create a database or not. An easy way to check is to go to your phpMyAdmin and check whether you can create a database from there or not. If you can't, that means you won't be able to follow this step. You should check with your web host if they allow you to do so or not. Most shared web hosts will let you create a database.

First, you need to log in to the MySQL command-line using the following command:

```bash
mysql -u username -p
```

<div class="rouge-syntax-highlight" id="bkmrk--7"></div>After entering this, you will be asked for your MySQL password. Type your password and you will be shown a screen like this:

<figure class="post_image" id="bkmrk--8">![MySQL Login](https://cms-assets.tutsplus.com/cdn-cgi/image/width=600/uploads/users/413/posts/35985/image/wp_install_ssh_mysqllogin.jpg "Image: https://cms-assets.tutsplus.com/uploads/users/413/posts/35985/image/wp_install_ssh_mysqllogin.jpg")</figure>Now that we have logged in to the MySQL Server, we will first create a database and will grant the user access to that database. Use the following commands now:

```
create database dbname;
```

```
create user 'username'@'localhost' identified by 'password';
```

```
grant all privileges on dbname.* to username@localhost;
```

<div class="rouge-syntax-highlight" id="bkmrk--9"></div>Don't forget the semi-colon at the end of each MySQL command. The first command creates the database. The second command allows the user to connect to the database. The final command grants all privileges to the user for that database. You can test whether your database creation was successful by running this command:

```
use dbname;
```

<div class="rouge-syntax-highlight" id="bkmrk--10"></div>It should say "database changed". Now you can exit the MySQL command-line by typing `exit`.

Now fire up the blog in your browser and run the usual WordPress install, and use the database information we used in the third step to set up your **wp-config.php** and then set up your blog.

### **Note: New Database User**

In our tutorial, we are using an existing database user to connect to the new database. But if you want a separate user for each database, you need to create a new user to access that database. Here's how you should do it.

Once you are inside the MySQL shell, use the following commands to create a new user and set its password.

```
create user 'dbusername'@'localhost' identified by 'password';
```

<div class="rouge-syntax-highlight" id="bkmrk--11"></div>Now go back to Step 3 and run all other commands with this username.

### **Editing wp-config.php**

In our tutorial, I have told you that after doing everything on the shell, you can directly proceed to the install. But some of you might want to edit **wp-config.php** to add special settings and code. You can only do that via the shell. While you are in your blog directory at the shell, use the following command to fire up the Vim Editor (a command-line shell file editor)

```
vi ./wp-config.php
```

<div class="rouge-syntax-highlight" id="bkmrk--12"></div>Now you will see something like what's shown below:

<figure class="post_image" id="bkmrk--13">![Vim Editor](https://cms-assets.tutsplus.com/cdn-cgi/image/width=600/uploads/users/413/posts/35985/image/wp_install_ssh_vimeditor.jpg "Image: https://cms-assets.tutsplus.com/uploads/users/413/posts/35985/image/wp_install_ssh_vimeditor.jpg")</figure>Press the `i` key to enter insert mode, and use the arrow keys to move around the file. Once you have made your edits, press the **Esc** key to exit insert mode. To exit Vim, type `<strong>:</strong>` and then type `wq` and press **Enter**. This will save your changes and quit Vim.

#### Increasing Import File Size

Create a .user.ini in the root folder of the WordPress site

```bash
upload_max_filesize = 500M
post_max_size = 500M
memory_limit = 500M
max_execution_time = 600
```

Or you can change the following in the wp-content/plugins/all-in-one-wp-migration/constants.php

```php
define( 'AI1WM_MAX_FILE_SIZE', 2 << 28 );
```

To the following

```php
define( 'AI1WM_MAX_FILE_SIZE', 2 << 500 );
```

<div class="post__inarticle-ad-template" data-placement-tag="" data-promotion-placement="8" id="bkmrk--14"><div data-controller="publift-ad" data-publift-ad-position-id-value="21764354928">All in one Import for restore after the file is on the root/wp-content folder and does not require a paid version.</div><div data-controller="publift-ad" data-publift-ad-position-id-value="21764354928">Original</div><div data-controller="publift-ad" data-publift-ad-position-id-value="21764354928">[all-in-one-wp-migration-6.7.zip](https://docs.thehomestack.io/attachments/119)</div><div data-controller="publift-ad" data-publift-ad-position-id-value="21764354928">Forked direct [link](https://github.com/d0n601/All-In-One-WP-Migration-With-Import) </div><div data-controller="publift-ad" data-publift-ad-position-id-value="21764354928">[All-In-One-WP-Migration-With-Import-master.zip](https://docs.thehomestack.io/attachments/120)</div><div data-controller="publift-ad" data-publift-ad-position-id-value="21764354928">  
</div></div>## Download and Install WordPress With the WP-CLI Tool

In this section, I'll show you an even better way to download and install WordPress: with the WP-CLI tool. First, we have to install the WP-CLI tool on the server.

### How to Install the WP-CLI Tool

Run the following commands on your server to download, install, and configure the WP-CLI tool.

```
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
```

```
chmod +x wp-cli.phar
```

```
sudo mv wp-cli.phar /usr/local/bin/wp-cli
```

<div class="rouge-syntax-highlight" id="bkmrk--15"></div>Let's check if the WP-CLI tool is installed successfully by using the following command.

```
wp-cli --info
```

<div class="rouge-syntax-highlight" id="bkmrk--16"></div>You should see something like this:

```
OS:    Linux 4.15.0-91-generic #92-Ubuntu SMP Fri Feb 28 11:09:48 UTC 2020 x86_64
```

```
Shell:	/bin/bash
```

```
PHP binary:	/usr/bin/php7.2
```

```
PHP version:	7.2.24-0ubuntu0.18.04.3
```

```
php.ini used:	/etc/php/7.2/cli/php.ini
```

```
WP-CLI root dir:	phar://wp-cli.phar/vendor/wp-cli/wp-cli
```

```
WP-CLI vendor dir:	phar://wp-cli.phar/vendor
```

```
WP_CLI phar path:	/etc/init.d
```

```
WP-CLI packages dir:	
```

```
WP-CLI global config:	
```

```
WP-CLI project config:	
```

```
WP-CLI version:	2.4.0
```

<div class="rouge-syntax-highlight" id="bkmrk--17"></div>### Download and Install WordPress

Let's download the latest version of WordPress first.

```
wp-cli core download
```

<div class="rouge-syntax-highlight" id="bkmrk--18"></div>If the download is successful, you'll see something like the following:

```
Downloading WordPress 5.5.1 (en_US)...
```

```
md5 hash verified: 72c6f56b4818ffd0e6e6a4ed8f3e8d4e
```

```
Success: WordPress downloaded.
```

<div class="rouge-syntax-highlight" id="bkmrk--19"></div>So we've downloaded the WordPress codebase now.

Next, it's time to create the **wp-config.php** file. We can do it with the help of the following command. Replace the placeholders with the actual values. I assume that you've already created the database which you would like to use with WordPress.

```
$wp-cli config create --dbname=YOUR_DB_NAME --dbuser=YOUR_DB_USERNAME --dbpass=YOUR_DB_PASSWORD --locale=en_DB
```

```
Success: Generated 'wp-config.php' file.
```

<div class="rouge-syntax-highlight" id="bkmrk--20"></div>Finally, let's run the following command, which installs WordPress.

```
$wp-cli core install --url=YOUR_DOMAIN_NAME --title=YOUR_BLOG_TITLE --admin_user=ADMIN_USERNAME --admin_password=ADMIN_PASSWORD --admin_email=ADMIN_EMAIL
```

```
Success: WordPress installed successfully.
```

<div class="rouge-syntax-highlight" id="bkmrk--21"></div>And with that, WordPress is installed successfully on your server!

In fact, the WP-CLI tool is capable of doing a lot more than just installation. It allows you to manage plugins and themes and do any necessary version updates as well.

# XWiki - Install

This is to create a installation of XWiki on a installation of Rocky Linux already installed

## Configuration

### Linux configuration

Disable selinux

Run the following or you can modify the file here, “/etc/sysconfig/selinux”. If you modify the file make sure you still run the “setenforce 0” or just simply reboot after modification.

```shell
setenforce 0
sed -i 's/^SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
```

Disable firewall

```shell
systemctl disable firewalld.service
```

Epel Release

```shell
dnf install epel-release -y
```

After Epel install

```shell
dnf upgrade -y
```

### Server Software Configuration

Install MySQL on the server

Install Java

```shell
dnf install java-11-openjdk -y
dnf install java-11-openjdk-devel -y
```

Verify the Viserion after install

```shell
java -version
```

Results

```shell
openjdk version "11.0.24" 2024-07-16 LTS
OpenJDK Runtime Environment (Red_Hat-11.0.24.0.8-2) (build 11.0.24+8-LTS)
OpenJDK 64-Bit Server VM (Red_Hat-11.0.24.0.8-2) (build 11.0.24+8-LTS, mixed mode, sharing)
```

### Install MariaDB

Install the server

```shell
sudo dnf install mariadb-server -y
```

Modify the my.cnf server file

```shell
sudo vi /etc/my.cnf.d/mariadb-server.cnf
```

Make modifications the file and append under the current settings in the \[mysql\] section

```shell
#Custom Entries
performance_schema = ON
tmpdir = /run/mariadb
thread_cache_size = 4
table_open_cache = 16384
table_definition_cache = 8384
sql_mode = ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

query_cache_type = 0
query_cache_size = 0
query_cache_limit = 128M
query_cache_strip_comments = 1

tmp_table_size = 512M
max_heap_table_size = 512M

max_connections = 512
max_allowed_packet = 24M
sort_buffer_size = 24M
join_buffer_size = 48M

innodb_buffer_pool_size = 4G
innodb_buffer_pool_instances = 4
innodb_use_native_aio = 1
innodb_flush_log_at_trx_commit = 0
innodb_file_per_table
innodb_log_file_size = 512M

#Optional config if using transaction log.
log_bin = /var/log/mariadb/mariadb.log
expire_logs_days = 2
```

Reload for changes

```shell
sudo systemctl daemon-reload
```

Start and enable on boot

```shell
systemctl enable --now mariadb.service
```

Add the XWiki user to access the database

```shell
mysql
create database xwiki default character set utf8mb4 collate utf8mb4_bin;
grant all privileges on xwiki.* to 'xwiki'@'localhost' identified by 'YOUR_DB_PASSWORD';
grant all privileges on xwiki.* to 'xwiki'@'%' identified by 'YOUR_DB_PASSWORD';
FLUSH PRIVILEGES;
exit;

```

### Tomcat Configuration

Verify which version you want to install, we will be using “v9.0.63”

```shell
http://dlcdn.apache.org/tomcat/tomcat-9
```

Create folder for Tomcat

```shell
sudo mkdir /opt/tomcat
cd /opt/tomcat
```

Replace the version within the following link

```shell
wget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.93/bin/apache-tomcat-9.0.93.tar.gz
```

Extract the file you downloaded in you current folder

```shell
sudo tar xvf apache-tomcat-*.tar.gz -C /opt/tomcat --strip-components=1
```

Create the tomcat user

```shell
sudo groupadd tomcat
sudo useradd -s /bin/false -g tomcat -d /opt/tomcat tomcat
```

Change the permissions on the tomcat folder

```shell
sudo chown -R tomcat: /opt/tomcat
```

Configuring Systemd Service

```shell
sudo vi /etc/systemd/system/tomcat.service
```

Add the following content to the file

```shell
[Unit]
Description=Tomcat 9 servlet container
After=network.target

[Service]
Type=forking

User=tomcat
Group=tomcat

Environment="JAVA_HOME=/usr/lib/jvm/jre"
Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
Environment="CATALINA_HOME=/opt/tomcat"
Environment="CATALINA_BASE=/opt/tomcat"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"
Environment="JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom"

ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh

[Install]
WantedBy=multi-user.target
```

Enable and start the Tomcat service:

```shell
sudo systemctl daemon-reload
sudo systemctl enable tomcat
sudo systemctl start tomcat
```

Adjusting the Firewall and you did not run the firewall disabling command above, allow traffic to Tomcat's default port 8080

```shell
sudo firewall-cmd --permanent --zone=public --add-port=8080/tcp
sudo firewall-cmd --reload
```

### Securing Tomcat

Edit the <span class="code" spellcheck="false">web.xml</span> file to disable directory listing and add security constraints to the manager and host-manager applications. It's also advisable to change the default shutdown port and command in <span class="code" spellcheck="false">server.xml</span>.

Add access from another host if needed

```shell
vi /opt/tomcat/webapps/manager/META-INF/context.xml 
```

Add the IP or IPs you are accessing from to allow access to the main tomcat page. you will need to change this entry from this “allow="127\\.\\d+\\.\\d+\\.\\d+|::1|0:0:0:0:0:0:0:1” /&gt;" to something like this

```shell
allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1|192.168.1.100|192.168.2.2" />
```

### Configure XWiki

Download the war file

```shell
cd /opt/tomcat/webapps
wget -O wiki.war https://nexus.xwiki.org/nexus/content/groups/public/org/xwiki/platform/xwiki-platform-distribution-war/15.10.11/xwiki-platform-distribution-war-15.10.11.war
systemctl restart tomcat
```

#### Reverse Proxy

Change for reverse proxy settings

```shell
sudo vi /opt/tomcat/webapps/wiki/WEB-INF/xwiki.cfg
```

Change the following in the file

To point to a specific domain

```shell
xwiki.home=http://wiki.sflservicesllc.com
```

Change to use https

```shell
xwiki.url.protocol=https
```

#### MySQL Setup

After the Tomcat service is restarted move to the XWiki’s WEB-INF/lib directory and download the MySQL JDBC Driver JAR:

```shell
su - tomcat
cd /opt/tomcat/webapps/wiki/WEB-INF/lib/
wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.49/mysql-connector-java-5.1.49.jar
chown tomcat:tomcat mysql-connector-java-5.1.49.jar
```

#### MariaDB Setup

After the Tomcat service is restarted move to the XWiki’s WEB-INF/lib directory and download the MariaDB JDBC Driver JAR:

```shell
su - tomcat
cd /opt/tomcat/webapps/wiki/WEB-INF/lib/
wget https://dlm.mariadb.com/3852266/Connectors/java/connector-java-3.4.1/mariadb-java-client-3.4.1.jar
chown tomcat:tomcat mariadb-java-client-3.4.1.jar
```

Open the WEB-INF/hibernate.cfg.xml file and configure XWiki to use MySQL:

```shell
vi /opt/tomcat/webapps/wiki/WEB-INF/hibernate.cfg.xml
```

Comment out the default hsqldb database section and uncomment and edit the MySQL database section as shown below:

```shell
<!-- Configuration for the default database.
Comment out this section and uncomment other sections below if you want to use another database.
Note that the database tables will be created automatically if they don't already exist.

If you want the main wiki database to be different than "xwiki" (or the default schema for schema based engines)
you will also have to set the property xwiki.db in xwiki.cfg file
-->
<!--
<property name="connection.url">jdbc:hsqldb:file:${environment.permanentDirectory}/database/xwiki_db;shutdown=true</property>
<property name="connection.username">sa</property>
<property name="connection.password"></property>
<property name="connection.driver_class">org.hsqldb.jdbcDriver</property>
<property name="dialect">org.hibernate.dialect.HSQLDialect</property>

<property name="hibernate.connection.charSet">UTF-8</property>
<property name="hibernate.connection.useUnicode">true</property>
<property name="hibernate.connection.characterEncoding">utf8</property>

<mapping resource="xwiki.hbm.xml"/>
<mapping resource="feeds.hbm.xml"/>
<mapping resource="activitystream.hbm.xml"/>
<mapping resource="instance.hbm.xml"/>
<mapping resource="notification-filter-preferences.hbm.xml"/>
<mapping resource="mailsender.hbm.xml"/>
-->
```

Uncomment wither the MySQL Section or the MariaDB section and change the password

```shell
    <property name="hibernate.connection.username">xwiki</property>
    <property name="hibernate.connection.password">YOUR_DB_PASSWORD</property>
```

Restart the Tomcat service

```shell
sudo systemctl restart tomcat
```

Accessing Tomcat

Open your web browser and navigate to the following below. You should see the default Tomcat landing page.

```shell
http://[your_server_ip]:8080/wiki
```

[https://linuxhostsupport.com/blog/how-to-install-xwiki-on-centos-7/](https://linuxhostsupport.com/blog/how-to-install-xwiki-on-centos-7/)

[https://reintech.io/blog/installing-configuring-tomcat-rocky-linux-9](https://reintech.io/blog/installing-configuring-tomcat-rocky-linux-9)

# ImageMagick - Install on Redhat 9 from Source

### Installing ImageMagick 7 from Source Code

To install ImageMagick from source, you need a proper development environment with a compiler and related development tools. If you don’t have the required packages on your system, install development tools as shown:

```bash
sudo yum groupinstall 'Development Tools'
sudo yum -y install bzip2-devel freetype-devel libjpeg-devel libpng-devel libtiff-devel giflib-devel zlib-devel ghostscript-devel djvulibre-devel libwmf-devel jasper-devel libtool-ltdl-devel libX11-devel libXext-devel libXt-devel lcms-devel libxml2-devel librsvg2-devel OpenEXR-devel php-devel
```

Now, download the latest version of the ImageMagick source code using the following [wget command](https://www.tecmint.com/10-wget-command-examples-in-linux/) and extract it.

```bash
wget https://imagemagick.org/archive/ImageMagick.tar.gz
sudo tar xvzf ImageMagick.tar.gz
```

Configure and compile the ImageMagick source code. Depending on your server hardware specs, this may take some time to finish.

```bash
cd ImageMagick-*
sudo ./configure
sudo make
sudo make install
sudo ldconfig /usr/local/lib
```

Verify that the ImageMagick compile and install were successful.

```bash
sudo magick -version
```

<table border="1" id="bkmrk-version%3A-imagemagick" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 99.881%;"></col></colgroup><tbody><tr><td>Version: ImageMagick 7.0.8-28 Q16 x86\_64 2019-02-19 https://imagemagick.org  
Copyright: © 1999-2019 ImageMagick Studio LLC  
License: https://imagemagick.org/script/license.php  
Features: Cipher DPC HDRI OpenMP   
Delegates (built-in): bzlib djvu fontconfig freetype jng jpeg lzma openexr pangoca</td></tr></tbody></table>

*Last verified: October 2026*

Sources:

- [https://imagemagick.org/script/install-source.php](https://imagemagick.org/script/install-source.php)

# MailServer - Test SMTP

Your best, easiest and most globally available tool: **telnet or Windows CMD**

1. At command prompt, type: telnet mail.mailserver.com 25
2. Type EHLO , and then press ENTER.
3. Type AUTH LOGIN. The server responds with an encrypted prompt for your user name.
    
    Enter your user name encrypted in base 64. You can use one of several tools that are available to encode your user name.
    
    The server responds with an encrypted base 64 prompt for your password. Enter your password encrypted in base 64.
4. Type MAIL FROM:, and then press ENTER. If the sender is not permitted to send mail, the SMTP server returns an error.
5. Type RCPT TO:,and then press ENTER.If the recipient is not a valid recipient or the server does not accept mail for this domain, the SMTP server returns an error.
6. Type DATA.
    
    If desired, type message text, press ENTER, type a period (.), and then press ENTER again.
    
    If mail is working properly, you should see a response similar to the following indicating that mail is queued for delivery:
    
    250 2.6.0 MAILID-SOMETHINGHERE@mail.somedomain.com.