Adding CentOS Web Panel to a fresh CentOS 7 box

Revisiting an earlier post on configuring a LAMP server, and on a recent post on installing Webmin, this time I’m dropping CentOS Web Panel (CWP) onto a new CentOS 7 box.

So, on a fresh CentOS 7 1901-01 box on AWS, let’s begin.

# Set the hostname correctly before we start off, otherwise CWP will pick up the wrong name
# Update existing packages
sudo yum -y update
# Install wget and nano (as I like nano and wget is needed for the CWP install)
sudo yum -y install wget nano
# Reboot the box to sort out any updates requiring reboot
sudo reboot
Continue reading “Adding CentOS Web Panel to a fresh CentOS 7 box”

Adding Webmin to a fresh CentOS 7 Box

As a quick refresh from an earlier post, I’m going to use a new CentOS image with Webmin as the control panel of choice.

Happily, the only thing that’s changed in the documentation is the way the gpg key is imported – documentation is here:

So, on a fresh CentOS 7 1901-01 box on AWS, let’s begin.

# Update all base packages
sudo yum -y update
# Install nano (my preferred text editor)
sudo yum -y install nano
# Edit the /etc/yum.repos.d/webmin.repo file
sudo nano /etc/yum.repos.d/webmin.repo
Continue reading “Adding Webmin to a fresh CentOS 7 Box”

Reviewing SPF, DKIM and DMARC settings for Google GSuite Mail on your domains

In the past, I’ve configured these on my domains (and wrote about SPF with GSuite – which was at the time, Google Apps). In the last 9 years, the rest of the DNS config has changed a lot, and as I’ve never had issues with mail, I never reviewed my settings. Until today.

For another reason, I checked my config on mx toolbox – and I spotted that some tuning was required.

The DNS report shows a few MX errors, and more warnings

As it happens, Google offer a similar tool for their users in their Google Apps toolbox.

It seems, that at some point the recommended record has changed from:

v=spf1 ~all

To a different domain:

v=spf1 ~all 

OK; no problem – that one’s easy to fix. Setting up DKIM was easy as well, using the guidance here, and again highlighted that those records were incorrect as well. At some point a CPanel server had managed the DNS config and added it’s own records!

Reminder to self – review my MX settings at least every couple of years!

Migrating a private repository from Bitbucket to GitHub with Git

As GitHub private repositories have just become free, I’m jumping on the bandwagon and shipping over a few of the repos I have on Bitbucket to reduce the number of providers I store code with.

The end result – a private GitHub repository with all the metadata from the old Bitbucket repository – note we have maintained the last commit from 10 months ago

The option below uses the shell to migrate the repo, but you can also use the GitHub importer if you prefer an automated solution (you’ll just have to wait while it does it).

Continue reading “Migrating a private repository from Bitbucket to GitHub with Git”

Doing your Qlik App Configuration in the load script, include files, or QMC (Publisher or the Qlik Repository Service APIs)?

For me, the bare minimum when it comes to app configuration in Qlik Sense or QlikView is:
– Setting paths and libs for use in data load script
– Setting “boilerplate” variables – e.g. the number/date/currency/etc formats
– Setting HidePrefix, SearchIndex and other app-specific behaviours
– Setting Product or Customer specific settings for consumption in the UI

This post adds some detail on config methods for Qlik Sense and QlikView, which fills the second tab from an earlier post about versioning.


Script for setting a base library based on config variables
Script for setting a base library based on config variables


In a multi-product/customer setup (see this previous post about deployment frameworks for context) where we follow common standards for names and folder structures we can streamline this configuration to reduce the maintenance and deployment burden.

Continue reading “Doing your Qlik App Configuration in the load script, include files, or QMC (Publisher or the Qlik Repository Service APIs)?”

Version sheets and tabs in the load script for Qlik Sense and QlikView

In the absence of a source control system like SVN or GIT, a quick and easy way of capturing changes in a app is to update a version control tab before passing the app back to other developers, or onto testers.

This is a very low-tech solution, but the format below works well in shared environments. The first two tabs of your application should be:
– Version (explain the app and list changes you’ve made)
– Config (set the configuration values like paths, dates, etc used in your application’s data load and UI)

Version and Config sheets will become a familiar sight
Version and Config sheets should become a familiar sight

Continue reading “Version sheets and tabs in the load script for Qlik Sense and QlikView”

3arcade PHP game script updated to version 2.1 to work with PHP 5.6

I have an installation of the 3arcade script that’s still in the wild, and decided it was time to update it to work with PHP 5.6 (at least).

These changes fix:
– a row 0 error in play.php linked to deprecated functions
– deprecation of the ereg_replace function through use of intval
– deprecation of the mysql_connect function (and future deprecation of mysql* functions) through use of PDO
– consistency of database connection and query errors with a variable in the config file

Changes live at

How to use subversion to publish Plugin updates to SVN after development

This is a quick post on how to publish updates for WordPress Plugins (like SEATT) to As I rarely use SVN, I forget every time!


For Windows, you can use TortoiseSVN.

Tortoise is a very easy to use, free tool

Checking out the repository

Using TortoiseSVN, right click in the target directory and select “Checkout”. Enter the URL of the repository (for SEATT this is; if it’s on no auth is needed at this point.

Updating the repository

  • Copy the updated files into the /plugin/trunk folder
  • Right click on the /plugin folder and select “SVN Commit”. Add a comment and submit. You will be prompted to authenticate using your credentials
  • Right click on the /plugin/trunk folder and select “TortoiseSVN>Branch/tag…”. Change the target directory to “/plugin/tag/<tagId>” and submit
  • Right click on the /plugin folder and select “SVN Update” to fetch the tag you just created

Updating the “tested up to” value

  • Run “SVN Update” on your local copy
  • Update the “Tested up to” value in “/plugin/trunk/readme.txt” and use this to replace “/plugin/tag/<tagId>/readme.txt”
  • Run “SVN Commit” to push back to the repo