Unreal Tournament 4 (pre-alpha) – Linux CentOS 7.x – Basic Server Guide (ESXi VPS)

I don’t have time to support UT’ers all the time, so please take this info as “AT YOUR OWN RISK”. Also, this is a pre-alpha release and things are very underdeveloped at this time. Venture into a project like this knowing that there will be problems and headaches.

With that out of the way…
This tutorial is meant to concentrate on basic UT4 config and setup and does not go into the depths of Linux server administration. It also assumes you have a wee bit of knowledge making your way around the linux environment. In otherwords, I skip over some basic steps.

It also is *nix-centric (I’m using a Mac client). For those that have Windows *clients*, you can probably adapt appropriately. Putty is a good / free shell tool for Windows.

Download / Install CentOS 7

64 bit CentOS 7 Download mirrors are here:

You should be able to google on how to install this onto a server, but here is a couple ideas:

Local: You can download it to your local machine, burn a DVD, and install it on your server via DVD drive.

1.) You can do as above, then take it to your server and install use it via flash drive or DVD
2.) You can log in to your remote server locally and download the OS directly.
  a.) Move it to a flash drive that’s plugged in and boot from that.
  b.) If you are using a hypervisor (running Virtual Private Servers), do as I do:

I am installing remotely on a VPS.

I’m logged into the remote ESXi client via shell and am grabbing the distro… I’ve CD’ed to where I want to store the .iso file:

 wget http://mirror.chpc.utah.edu/pub/centos/7.0.1406/isos/x86_64/CentOS-7.0-1406-x86_64-DVD.iso

‘wget’ is like a browser for nerds.

I use VMware’s vSphere client to create the virtual server… which, like I said, is out of the scope of this tutorial.

Essentially… get the software to a place where you can boot from the .iso file.

After booting for the first time, you’ll be presented with some questions.. answer them :-) and you will get to a menu screen for pre-config of your OS.

Here is what I did:


Software Selection: Basic Web Server (because I’m also going to be hosting a web page about this machine)

You can select whatever here, but some of things I selected were: Compatibility Libraries, Development Tools, Performance Tools, Hardware Monitoring Utilities..
(don’t be too worried about getting all the same packages as me.. you can always install needed packages later)

SYSTEM: Installation Destination, just chose default.

SYSTEM: Network & Hostname (got to have those)
Under ‘Configure‘ > ‘IPv4 Settings‘, I chose a manual Address, since my server will be dedicated.

Once you are happy with your pre-config, press ‘Begin Installation

Set both the root password and an initial user.
Note: I chose to make my non-root user an Administrator. This way you can log in safely, then type:

sudo su

to make Administrative changes.

Press ‘Done

Once installed, reboot your server. You should be able to login locally OR remotely as root or youruser out of the gate:

Remote Login:

ssh -p 222 root@youripaddress

(note: in the above, I have a ‘-p 222′ flag in my command… it’s a good idea to obfuscate your SSH port number to help with security. I’m behind a firewall as well. Security is important when running a server that is available to the world)

One great thing about openSSL (SSH) in CentOS 7 is that you also have immediate SFTP access as well. This not like the old days when I’d have to set up all this access manually / separately!

Once you’ve logged in successfully, it’s a good idea to do updates.

yum update

Open some local firewall ports for your services:
web (http):

firewall-cmd --permanent --add-service=http

Unreal Tournament:

firewall-cmd --permanent --add-port=7777/udp
firewall-cmd --permanent --add-port=6500/udp
firewall-cmd --permanent --add-port=13000/udp

*new* Server query port (ping line)

firewall-cmd --permanent --add-port=15000/udp

Restart Firewall:

systemctl restart firewalld

A quick note about stand-alone firewalls / routers with aliased I.P.’s.. because I am behind one. :-)
If your Server is being NAT’d, you’ll have a local I.P. such as 10.0.1.something.
You will want to make sure your outgoing reporting is that of your public I.P. Address.
(go to www.ipchicken.com to find your I.P.). If your firewall has just one I.P… no worries.. ignore
this paragraph. If you are in an environment where your firewall has multiple IP aliases… you will
also need to set an SNAT firewall record. Though out of the scope of this tutorial, I at least wanted
to mention that you may be reporting the wrong I.P. to UT’s Server Browser in this case.

We should also disable SELINUX (who wants a safe server anyway) :-)

vi /etc/selinux/config

This file is self-explanatory to edit.
Once edited, reboot the server.


Install Unreal Tournament 4

I’ve downloaded the UT Linux 64bit UT4 Build much the same way I downloaded the OS, using wget… go to their forum:


To find the correct URL.

If I were to tell you, I’d likely be hunted down by Malcom and shot with glowing green goo.

You could instead save the file to your desktop and SFTP or SCP the file to your server. Your choice.

At this point I added another user so that I could run the game as it.

useradd yournewuser
passwd yournewuser

Once uploded, I copied the UT4 .zip file to /home/yournewuser/ and upacked the file there.

Inside the new users home directory (cd to /home/yournewuser), I fixed permissions:

chown -R yournewuser:yournewuser *

Then I made sure the binaries are executable:

chmod a+x Engine/Binaries/Linux/* UnrealTournament/Binaries/Linux/*

Note: in the 10/03/2014 pre-alpha build, there was a ‘MessageBox’ error for me when trying to start the binary. So, to fix this, first go through the steps of trying to run the software.. :-) .. this will generate the config files of which we will need in order to fix the issue.

At this point, you’re ready to see if your server starts. Exit out of your current user and login as “yournewuser”.

cd to /home/yournewuser/Engine/Binaries/Linux/

Run this START command:

./UE4Server ../../../UnrealTournament/UnrealTournament.uproject DM-DeckTest?Game=DM?TimeLimit=10?GoalScore=534 -log

You may get an Error having to do with ‘MessageBox’. This has something to do with the EULA that is not there I believe. Here is a way to fix it:

Edit the file: UnrealTournament/Saved/Config/LinuxServer/Engine.ini

bFirstRun = False 

Run the START command again and you should be good to go for your basic server.

Now, you’ll probably not want to run your server like this forever. You will instead want to make some changes so that your server will run in the background, your ServerName will be reported to the world, and maybe you want more than one Map to be rotated! Here is something, extending from raxxy, that should get you started.

Stop your server:

Ctrl + C

Edit the Game.ini file

From inside your LinuxServer root directory, go to your config directory.

cd UnrealTournament/Saved/Config/LinuxServer

If you do a listing you’ll see all your config files have been created for you

ls -la

With your game off, edit your Game.ini file
(I use vi to edit text files most often.. use an editor that you know something about, or google ‘vi editor’)

vi Game.ini

Make it look something like this:


ServerName=My Awesome UT4 Server
ServerMOTD=Some Text

Make a script to start your server!

Inside the root of your home/<user>/LinuxServer, create a file called something like ‘startmyserver.sh’

Make it look something like this:

/abso/lute/pathto/LinuxServer/Engine/Binaries/Linux/UE4Server ../../../UnrealTournament/UnrealTournament.uproject DM-DeckTest?Game=DM?TimeLimit=10?GoalScore=534 -log

1.) Don’t copy/paste, use your common sense and replace the path.
2.) 2 lines only, second line is the actual start string command

Make this file executable:

chmod a+x startmyserver.sh

From within your LinuxServer root, type:

sh ./startmyserver.sh &

Note, I’m not sure you need to append the ‘ &’, but I read somewhere that this allows you to continue the server after it starts.. if that makes sense. :-)

If you want to stop your server, you can use ‘top’ or ‘ps aux’ to find the ID, then kill manaully:

ps aux | grep UE4Server

It’s usually the first number, in the first line.

kill -9 firstnumber

Congrats on your new pre-alpha server running! Now go find it in your UT4 client, connect and play.

More to come.

Other Resources:
Unreal Engine Docs: Networking

Raxxy’s pre-alpha (08/24/2014)

kzoink’s notes on how to set up a UT3 server

23uk.com guide

Server Setup UT2k4 – Wiki

My Server:

Enjoy!, despite technology.




ESXi Add Storage hangs – loading…

This issue describes the following situation, and an easy solution for it:

I bought a brand-new server from Dell, running in R5 configuration (PERC H710) where two partitions were installed by default. The bare-metal ESXi 5.1 hypervisor is also installed by default on an embedded SD module. Upon adding a datastore in the vSphere client, ESXi hangs for one of the partitions (with animated  “Loading…” text), forcing me to restart ESXi.

If this sounds like your issue, read further!

What you need to know is that ESXi doesn’t like one of the default partitions that Dell set up for you and you will need to re-partition some how. There are a couple ways to do this, but I’m going to tell you the easiest one.

The general idea is that you will need to log into ESXi via SSH and use the provided utility ‘partedUtil’ to delete the default partition, so that you can continue to create a new one with your vSphere client. Now, you can go so far as to create the partition while you are in the shell environment as well.. but you likely don’t want to do that because it’s just easier in vSphere, right?

First, enable SSH:

1.) Log into vSphere, and click on your server on the left panel, then click on the ‘configuration’ tab.

2.) Under the “Software” header, select “Security Profile”.

3.) In the content window, on the right of “Services”, select “properties”.

4.) enable both “ESXi Shell” and “SSH” by selecting and clicking on the “Options” button individually.

Now you can log into ESXi manually using your root password that you set up.

*NOTE*, it’s a good idea to turn those services off after you are done.

Next, Delete the stubborn partition!:

1.) Log into ESXi via a shell (If you are not on a linux machine, you can install the free shell app for windows called putty).

2.) Use this Knowledge Base article to list your disks, get partition table information, then delete the troublesome partition:

ESXi partedUtil Knowledge Base

For a summary, here are the abridged steps for ESXi 5.1 (but seriously, use the link above):

a.) List your disks:

ls /vmfs/devices/disks/

b.) Print existing partition table

partedUtil getptbl "/vmfs/devices/disks/DeviceName"

c.) Delete stubborn partition

partedUtil delete "/vmfs/devices/disks/DeviceName" PartitionNumber

Once those steps are done, you should be able to go back to vSphere and complete adding a datastore, and this time, vSphere should not hang while trying to access the partition.

Enjoy!, despite technology.




Creating an SSL secured site – Mac OS X (Client 10.5.8)

All Mac OS X machines come, by default, with some powerful web serving capability built in. As a result, OS X users can create simple to sophisticated web serving environments without much configuration. Simply check the box for ‘Web Sharing’ in ‘System Preferences -> Sharing’ and you’ve completed much of the work required to start serving your web content.

Since this article is about securing your website, it assumes that the reader already has the basic knowledge of setting up a mac-based webserver. If you don’t know the basics, you should probably learn about them first. The internet is already full of information on that topic, so I don’t need to reiterate it hear. Let’s focus on SSL.

Creating a secure site on your Mac OS X Client

Conventions: I encase “<” “>” around text to denote anything that should be rewritten (interpreted) by the reader, to the readers specific naming.

Requirements and Reference:
1 – Static I.P. address

** There are some hacks for non-static I.P. addresses, but this article is not about that. google ‘dynamic dns ssl’ to get more information on that **

** This text references OS 10.5.8, but should work for other Mac OS’s as well. **

* The OS X client’s virtual host configuration files are located here:

* File of importance:


Complete SSL security is basically made up of two requirements:

1.) Encryption of all communication between the server and the end user

2.) Validation of the connection to assure the end user that the site they are visiting is indeed who they say they are.

There are many types of secure certificates, but for our purposes, there are basically two categories: Self-Signed, and 3rd Party Verified.

To fulfill the ‘encryption’ requirement, one could use only a self-signed (free) certificate. However, the self-signed certificate does not validate, it only encrypts communication. So, if you don’t need validation, you don’t have to purchase a 3rd-party certificate. However, self-signed certificates leaves some ambiguity for an end user who is concerned about the security of transferring their sensitive information to the server. It is the job of a 3rd party signer to validate that connection. Validation in itself has varying levels depending on the 3rd party signer. Some 3rd party signers do a better job of it than others.

Another difference between self-signed and 3rd-party signed certificates is that of “annoying” browser messages. If an end user accesses a site that is secured with a self-signed certificate, it is likely they will get a warning message from their browser that they will have to approve (by clicking an ‘OK’ button) before continuing the connection. By using reputable 3rd party signers, this annoying message is eliminated. Getting rid of this annoying browser message is enough reason for many admins to go with purchasing a 3rd party signer as apposed to using a free self-signed certificate.

This article is about configuring a 3rd party certificate, but once you understand how to do this, creating a self-signed cert should be fairly straight forward as well.

Let’s get started!

The first thing you need to do is to create your CSR (certificate signing request). This is the text that is needed by your 3rd party signer in order to issue a certificate.

Using Terminal, log into your server and sign on as a super user.

sudo su
  1. Enter the following command (for mod_ssl):
openssl req -nodes -newkey rsa:2048 -keyout yourserver.key -out yourserver.csr

** Note: I use ‘your…’ for file names in this example. You can replace the ‘your..’ with any name that you like **

This will generate two files.

  1. Enter your information:
Country Name (2 letter code) [US]: US
 State or Province Name (full name) [Some-State]: YourState
 Locality Name (eg, city) []: YourCity
 Organization Name (eg, company) [Internet Widgits Pty Ltd]: YourCompany
 Organizational Unit Name (eg, section) []: IT
 Common Name (eg, YOUR name) []: secure.yourdomain.com
 Email Address []:

Enter the following ‘extra’ attributes

A challenge password []: AlphaNumericPass
 An optional company name []:
** enter the fully qualified domain name in the ‘CN’ field (Common Name field) **
**  for wildcard certificates, the Common Name should be in the format: *.yourcomain.com **

Your CSR is now generated.

The next step is to provide this information to your 3rd-party signer. Here is a quick list of a few 3rd-party signers:


Follow the instructions of the 3rd-party to order your certificate. Open the ‘yourserver.csr’ file that you generated with a text-editor and copy and paste the contents into the enrollment form for the 3rd party. They will then issue you your certificate/s.

Installing your certificate and configuring the secure vhost

If not already logged in… using terminal again, log in to your server and change to super user:

sudo su

Install your SSL files into an appropriate directory:

‘cd’ (change directory) to where your files are located… something like:

cd Desktop

Create your SSL directory (I use ‘/usr/local/ssl/’)

mkdir /usr/local/ssl
chmod 755 /usr/local/ssl

Copy your files:

cp -a ./yourcert.crt /usr/local/ssl/
cp -a ./yourserver.key /usr/local/ssl/
cp -a ./intermediate.crt /usr/local/ssl/

** the intermediate.crt file is a connector file sometimes provided by your 3rd-party signer **

Edit your SSL vhost config (httpd-ssl.conf)

First, make a backup of your default:

cp /etc/apache2/extra/httpd-ssl.conf /etc/apache2/extra/httpd-ssl.conf.<date>.bak

Then edit your file (I use vi):

vi /etc/apache2/extra/httpd-ssl.conf

** note, if you don’t know how to use vi, you can use your favorite text editor instead. However, I would suggest you learn how to use a command-line text editor. Mac OS X is *nix based, and any admin of a *nix based machine should learn the basics of command line operation, including one of the default text editors such as vi. **

The first part to editing this file is done like any other vhost config. This article is not about virtual host configuration, so I won’t go over that. If you need to learn about apache virtual host configuration, you can learn a lot using your google fu, or read the actual apache2 docs.

So, after editing your basic vhost information, including making sure you’ve specified your I.P. address in the line…:

<VirtualHost [youripaddress]:443>

and making sure you’ve set up your basic instructions…:

DocumentRoot /Library/WebServer/Documents/<yoursecuresitedirectory>
 ServerName <yoursecuredomainname>:443

and whatever else basic vhost configurations, we then edit the SSL particulars:

Change the following lines:

hint: hit the ‘i’ key when in vi to enter text in ‘i’nsert mode.

#SSLCertificateFile "/private/etc/apache2/server-dsa.crt"
#SSLCertificateKeyFile "/private/etc/apache2/server-dsa.key"
#SSLCertificateChainFile "/private/etc/apache2/intermediate.crt"


SSLCertificateFile /usr/local/ssl/yourcert.crt
SSLCertificateKeyFile /usr/local/ssl/yourserver.key
SSLCertificateChainFile /usr/local/ssl/intermediate.crt
** Note, I have found that the virtual host configurations in Mac OS X do not like the ‘”‘ (quotes) around the directive values for some reason. So, my suggestion is to go through the httpd-ssl-conf file and edit *all* uncommented (live) directives so that they don’t include the quotes around the directive value. **

Once you’ve configured the file, save and quit:


Before we test out our configuration, we need to tell apache to use the file we just configured by editing the httpd.conf file:

still logged into Terminal as super user

First back up the httpd.conf file such as how we did the ssl conf file:

cp /etc/apache2/httpd.conf /etc/apache2/httpd.conf.<date>.bak

** Note the trend of backing up files before edits. It will save you some headaches if you get used to this technique early on **

Here is a trick to finding the exact line in the httpd.conf file that we need to edit using grep:

grep -Hine 'httpd-ssl.conf' /etc/apache2/httpd.conf

You should get something like:

httpd.conf:473:#Include /private/etc/apache2/extra/httpd-ssl.conf

Note that we have asked grep to give us the line number, which in this case is 473.

Also, if you’ve never set up an SSL vhost on this machine before, note that the file is uncommented.

We can then go straight to that line using vi.

vi  /private/etc/apache2/extra/httpd-ssl.conf +473

Uncomment that line and write the changes:

Include /private/etc/apache2/extra/httpd-ssl.conf

After saving the httpd.conf file, we now are ready to test our configuration.

Stop apache

apachectl stop

Note: if you get a message such as: ‘ulimit: open files: cannot modify limit: Invalid argument’, just ignore it. It is a minor bug in apachectl script that doesn’t harm anything.

Run a configuration test:

apachectl configtest

You should see: Syntax OK

If not, there are usually some indications that follow in the results of the configtest that will lead you to the resolution of the problem. google is your friend when troubleshooting. Just copy/paste the error into google if you are unsure how to resolve the issue.

Once you have a successful configtest result, start apache.

apachectl start

At this point, you want to do a final test by linking to any file with your standards browser that resides in your secure vhost root.

Go to your browser and type:


Your browser will have the ability to tell you some things about your connection. First look for a padlock graphic and make sure it is a locked padlock. You can usually click on that graphic to find more information. There are also online resources for checking your SSL connection. Just google ‘check ssl connection’.

Enjoy!, despite technology.


Editing MySQL to Move your WordPress 3.4x to a new domain


This post is specifically for those that didn’t really follow the official instructions. It is also only for those that have access to their MySQL database via your native MySQL client (I don’t use phpMyAdmin). Lastly, this is for those whom are running their blog on a *nix platform, and it assumes you are moving your site to a new directory on the same machine.

In an effort to change the domain name of my WordPress installation, I copied all my WordPress files to a new directory, which is the root directory for the new virtual host (website). However, when I link to my new “www.mynewblog.com” domain, the CSS styles are not linking up and some other issues are happening.

Here is how to fix this, or rather, here are my instructions on how to move your WordPress (3.4x) blog when the MySQL database (backend) link has not been changed.

** FYI: I make all changes via a shell **

1.) Create your New Virtual host by creating a new directory (usually in your HTML root, something like ‘/var/www/’ or ‘/var/www/html/’). I like use use the format “www-somedomain-com” as the directory name, ie. /var/www/www-somedomain-com/

** FYI: make sure permissions are set correctly, ie owner:<webserver_group> **

2.) Copy your files:

first, ‘cd’ into your existing (old) blog directory root. Then, run something like:

cp -a * ../new-somedomain-com/
FYI, the above just makes an exact copy (permissions and all) to a new virtual host directory that is in the same HTML root as your original virtual host directory. Use your common sense if the the new site domain does not reside in the same HTML root, or even on the same machine.

3.) Log into MySQL to make two changes initially.

mysql -u <user> -p
mysql> show databases;
mysql> use <yourWordPressDB>;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
mysql> show tables;
 | Tables_in_wp1         |
 | wp_commentmeta        |
 | wp_comments           |
 | wp_enmask_hits        |
 | wp_enmask_keywords    |
 | wp_links              |
 | wp_options            |
 | wp_postmeta           |
 | wp_posts              |
 | wp_term_relationships |
 | wp_term_taxonomy      |
 | wp_terms              |
 | wp_usermeta           |
 | wp_users              |
 13 rows in set (0.00 sec)

Notice that there is a ‘wp_options’ table. This is the table we will edit first. Inside that table there are two important columns, option_name, option_value:

mysql> show columns from wp_options;
| Field        | Type                | Null | Key | Default | Extra          |
| option_id    | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| option_name  | varchar(64)         | NO   | UNI |         |                |
| option_value | longtext            | NO   |     | NULL    |                |
| autoload     | varchar(20)         | NO   |     | yes     |                |

In the option_name column, there is a ‘siteurl’ value and a ‘home’ value. These values will correspond to the option_value value, which is your original domain info that will have to be updated to your new domain info:

You can first check the values:

mysql> select option_name,option_value
FROM wp_options
WHERE option_name = 'siteurl' || option_name = 'home';

You will get something like:

| option_name | option_value           |
| home        | http://www-tek.euca.us |
| siteurl     | http://www-tek.euca.us |
2 rows in set (0.00 sec)

To update those values, do:

mysql> UPDATE wp_options
SET option_value = '<yourfullnewdomain_including_http://>'
WHERE option_name = 'siteurl' || option_name = 'home';

You can then re-run the check code above to review your changes.

At this point, your CSS styles should link up and you should be able to log into your blog via your new domain.

Finally, the last thing to be aware of is that any existing media image files may still reference your old site URL instead of your new one. To fix this, I found it easiest to use a WordPress plugin called “Velvet Blues Update URLs” that I referenced from the official instructions.

Simply search for, install, and activate that plug-in and follow the instructions to find / replace the rest of your old URL’s.

Oh, one more thing, you may find that you will have to reset your header image. (Appearance > Header).

Enjoy, Despite Technology!




Being that I’ve payed some dues in the world of technology, mostly within web application building and web hosting, I’ve decided to create this blog to share some of my experiences, provide some HowTo’s, and perhaps spill out some rants about technology in general. Who am I? I am Donovan Brooke, owner and operator of Euca Design Center, and current president of WebDNA Software Corporation. If you’d like to learn about me beyond those things, please visit my personal website.

My Mission (should I choose to accept it):

I imagine a “Global Accuracy Ratio” rating (GAR rating) regarding information found via search engines on the www. Stay with me here! ;-) This ratio is pretty horrible, as I’m sure we all know. When we need answers, especially technical answers, we search google, and hopefully the poor schmoe (me in this case) has some information that will actually help us, and not  send us off into a tangent of problems that spiral into a solution only fit for /dev/null. Fortunately, there are entities, some trusted more than others, that increase the GAR rating… Wikipedia.org being the most controversial and the most known perhaps. I am a novice Wikipedia.org author as well, so I know first hand how perfect it is not. But, it’s a start in the right direction.

Hopefully my writings here lean on the side of increasing the GAR rating while providing some entertainment during your visit!

Lastly, If you want to keep informed of new posts, or if you want to leave a comment on an article, please register. I would like to someday make this blog about more than just me, so maybe I will open it up to trusted member posts as well some day.

Enjoy!, despite technology. ;-)



This is a general disclaimer for all posts on the www-tek blog.

While we (the owners and posters) at www-tek strive to provide accurate and useful information on all the posts made, we cannot be held liable for damages caused by the use of this information, nor can we guarantee the accuracy of the information. Please use your own good judgment and decision making when using the information provided by www-tek.

Though we encourage people to register and to post responses to the blog, please don’t expect us to follow up with answers. www-tek may, at their choosing, follow up with some of the questions from time to time.

The information provided on www-tek is provided in the spirit of helping people with their technology goals and needs. Please use this forum with that spirit in mind.

- Donovan (owner of www-tek)