Smokes your problems, coughs fresh air.

Page 9 of 50

G.B.D. Calamari Joomla and phpBB upgrade

As the chairman of G.B.D. Calamari, a Dutch student diving association, it falls to me to upgrade an aging Joomla configuration that is a relict of the last time that the board was chaired by somebody with web-development expertise (Joris van Alphen). This happened to be during a time when Joomla 1.5.20 was cutting-edge. It no longer is, so, although the website still looks nifty enough for this day and age (in my ageing eyes, at least), a software upgrade is long overdue.

[Note that the below is more of a disjointed collection of notes than it is an article of interest to anyone not directly involved with the maintenance of]


The first step in any upgrade, of course, is backing up everything. Everything means all the files and the complete database. I did this using the “Export” option in phpmyadmin.

One peculiarity that I noticed during the database backup was that while there there were two MySQL databases — one called calamari_phpbb and one called calamari_site — the one called calamari_phpbb actually contained the tables for both the phpBB forum and the Joomla 1.5 site; calamari_site seemed to be a legacy of an older (custom-written) incarnation of the website. upgrade

The phpBB upgrade went surprisingly well. To update phpBB, I used‘s automatic update packages to update from 3.0.8 to 3.0.12 in 4 steps:

  1. 3.0.8 to 3.0.9 (common.php merged)
  2. 3.0.9 to 3.0.10
  3. 3.0.10 to 3.0.11
  4. 3.0.11 to 3.0.12 (common.php merged again)

One by one, for each of these packages, I

  1. unpacked and uploaded the install dir,
  2. visited,
  3. updated the database,
  4. downloaded the ‘diff’, and
  5. copied it through WebDAV,
  6. checked if the update was successful and
  7. deleted the install dir.

It was quite fun (albeit a bit cumbersome) to update web software the noob way for a change.

Joomla 1.5.20 to 1.5.26

Joomla 2.5.19 is the current Joomla version (not counting the version 3 branch). The docs on upgrading from 1.5.x to 2.5 mention specifically that it’s a good idea to first upgrade to the latest 1.5.x version. Again, as with phpBB, I played the n00b game and performed the file updates by uploading the files in the the latest 1.5.x patch, overwriting the old Joomla stuff.

Joomla 1.5.26 to 2.5.19

The tricky part was yet to come: the upgrade from one major version to the next, from Joomla 1.5.26 to 2.5.19. The official guide on this process uses the jUpgrade extension. I followed the steps. jUpgrade installed the new version in a jupgrade/ subdirectory in the document root, after which I moved the old installation temporarily into a subdirectory called joomla1.5. (‘Temporarily’ may not be the most accurate qualification; now, five months later, it’s still sitting around as I’m finally polishing the last rough edges left after the upgrade.) With the old installation safed, I moved the Joomla 2.5 files from jupgrade/ to the document root. In this way, I still had access to the old, fully functional site while transitioning the templates and modules, etc.

Joomla components, modules and plug-ins

There are several Joomla components that I had to also upgrade, the most important of which is JFusion, which is necessary for the phpBB integration.


It took some tweaking to get JFusion behave as well as it did previously. The following error caused a bit of a headache (and might do so again, during future phpBB updates):

Fatal error: Cannot redeclare utf8_substr() (previously declared
in /home/calamari/public_html/libraries/phputf8/mbstring/core.php:98)
in /home/calamari/public_html/phpbb/includes/utf/utf_tools.php on line 225

The solution was to patch utf_tools.php with a version provided by the JFusion project.

JA Purity

Another process that can be challenging when upgrading between major versions of a CMS is updating the template. The template that has been used by the previous site administrator (JA Purity) seems to be quite popular, however, with a Joomla 2 and 3 version available. Too bad that he did modify it, so that I had to depend om my good old friend that is diff to figure out which changes he made. To be able to more seamlessly upgrade JA Purity in the future, I modified Joris van Alphen’s JA Purity fork to use a Calamari template theme for most of his customizations.


I re-enabled the old favicon file, by copying it to the ja_purity_ii/themes/calamari/ directory and copying a modified head.php to a new blocks/ subdirectory for that theme.

File attachments

Migrating file attachment from Joomla 1.5 to 2.5 was non-trivial. Initially, I tried this while running 2.5.7, but the new version of the attachments plugin required 2.5.7 or higher. Besides my initial confusion about how I ended up with Joomla 2.5.7 instead of 2.5.19, following the cumbersome instructions in the project‘s upgrade manual worked out well.

Event Manager

Eventually, Joomla Event Manager is set to replace the EvenList component by Schlu that Joris had used for the Joomla 1.5 incarnation of the Calamari website. For now, though, Schlu’s EventList component will do. Data migration only required copying the MySQL table rows from the Joomla 1.5 prefixed tables (“jos_”) to the Joomla 2.5 prefixed tables (“j25_”):

INSERT INTO j25_eventlist_categories SELECT * FROM jos_eventlist_categories;
INSERT INTO j25_eventlist_events SELECT * FROM jos_eventlist_events;
INSERT INTO j25_eventlist_groupmembers SELECT * FROM jos_eventlist_groupmembers;
INSERT INTO j25_eventlist_groups SELECT * FROM jos_eventlist_groups;
INSERT INTO j25_eventlist_register SELECT * FROM jos_eventlist_register;
INSERT INTO j25_eventlist_settings SELECT * FROM jos_eventlist_settings;
INSERT INTO j25_eventlist_venues SELECT * FROM jos_eventlist_venues;

Contact form

To upgrade the ALFcontact component
again only, the factory contacts had to be replaced with the old Calamari contacts, after downloading and installing the new version:

DELETE FROM j25_alfcontact;
INSERT INTO j25_alfcontact SELECT * FROM jos_alfcontact;


The Joomla 1.5 website used mod_poll for some fun (but mostly useless polls), a module which was removed somewhere during the further development of the 1.5 branch. I found no ready replacement which could import the old mod_poll content, so I decided to not install a new module.

Picasa integration

For the continued use use wgPicassa, the most important step is to upload years worth of photos to Picasa, which was supposedly inconvenient, because the Picasa account was said to be linked to Joris’ private Google Account. I thought I’d thus have to create a new Picasa account, linked to an email address and ask him to re-upload all the photo’s in his account. Luckily, it turned out that the Picassa account was already associated with an email address. So, after resetting the password using that email adress, we can now finally update the gallery.

Slideshow on public homepage

A slideshow with promotional pictures was originally displayed on the home page for non-logged in visitors (using the Unite Nivo Slider extension). It took me some trouble to find out how to display this module before the main content in JA Purity. In fact, that was the only place where I couldn’t position anything. All I could find were clumsy work-arounds, until I stumbled upon the existance of “mass positions” in the JA developer guide.

Joomla 2.5.19 to 2.5.24

I left the upgrade process were it was on Mach 31 of this year, finally continuing the process this August. In the meantime, the Joomla 2.5 branch has arrived at version 2.5.24. Luckily for me, it’s much easier to update an existing 2.5.x installation. After making a fresh backup of everything, I unpacked the archive remotely, after which I updated the database. That was it.

Left to do

  • Cleanup excess JUpgrade table.
  • Get rid of the cpanel thingy in the header
  • Move font size control from cpanel thingy to header?
  • Restore search in header
  • Reinstall XMap extension
  • Rename database to avoid future confusion

Better nagios SMS and E-mail messages

Just for my references. I made changes to it before, but I now added the comments to them (for custom notifications and acknowledgements):

define command{
        command_name    notify-host-by-email
        command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nComment: $NOTIFICATIONCOMMENT$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert ($SHORTDATETIME$): $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
define command{
        command_name    notify-service-by-email
        command_line    /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nComment: $NOTIFICATIONCOMMENT$\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert ($SHORTDATETIME$): $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
define command{
        command_name    notify-host-by-sms
        command_line    /usr/local/sbin/ -n $CONTACTPAGER$ -m "$HOSTNAME$: $NOTIFICATIONTYPE$, $HOSTSTATE$ ($NOTIFICATIONCOMMENT$)"
define command{
        command_name    notify-service-by-sms

Teamviewer replacements

ChunkVNC consists of three parts, InstantSupport, Repeater and Viewer.

UltraVNC SC is a mini (166k) UltraVNC Server that can be customized and preconfigured for download by a Customer. UltraVNC SC does not require installation and does not make use of the registry. The customer only have to download the little executable and Click to make a connection. The connection is initiated by the server, to allow easy access thru customers firewall.

Iptables: limiting amount of connections per IP

Short and improved version of this.

To allow SSH TCP connections, but after more than 20 NEWs in 20s, drop:

iptables -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -I INPUT -p tcp --dport 22 -m recent --rcheck --seconds 20 --hitcount 20 --name sshbadguys --rsource -j DROP
iptables -I INPUT -p tcp --dport 22 -m state --state NEW -m recent --set --name sshbadguys --rsource

To check current list (from the man page):

cat /proc/net/xt_recent/sshbadguys

Test with:

for i in {1..100}
  echo "attempt $i"
  # do nothing just connect and exit
  echo "exit" | nc ${ip} ${port};

Dumping MySQL users and grants

MySQL stores its users and grants in a very annoying, non-clonable format. I found this post, describing how you can extra them.

This bash function generates grants:

  mysql -B -N $@ -e "SELECT DISTINCT CONCAT(
    'SHOW GRANTS FOR \'', user, '\'@\'', host, '\';'
    ) AS query FROM mysql.user" | \
  mysql $@ | \
  sed 's/\(GRANT .*\)/\1;/;s/^\(Grants for .*\)/## \1 ##/;/##/{x;p;x;}'

Openswan random failures

I have an annoying problem with my Openswan VPN server. When I connect from a Windows XP machine, from that point on, I can only connect with that machine (or perhaps other Windows XP machines as well). On the other hand, when I connect with a Windows 7 machine first, connecting from Windows XP is no longer possible.

This is the error I get:

ERROR: netlink XFRM_MSG_DELPOLICY response for flow eroute_connection delete included errno 2: No such file or directory

If I restart ipsec after each session, it works. So, I put this in /etc/ppp/ip-down.d/99-ipsec-restart:

/etc/init.d/ipsec restart

A super ugly hack that makes it impossible to connect twice, but it’s better than not at all…


Openswan: 2.6.37-1
xl2tpd: 3.1+dfsg-1
Ubuntu 12.04

Turkey cooking time

As a note to self for next year: We just had a 8 kg turkey for our Thanksgiving meal. Recipes on the internet said it needed 7 to 8 hours of cooking. However, we took it out after 5.5 hours, and it was even somewhat overcooked. It probably needed about 4.5-5 hours.

Cursor definition and looping with MS SQL

In MSSQL, I needed to loop over a bunch of orders and execute a stored procedure, except in one case. This does that:

declare @orderid int;
declare ordercursor cursor
open ordercursor
fetch next FROM ordercursor INTO @orderid
while @@fetch_status = 0
  IF @orderid != 429
    EXECUTE @RC = [DeleteOrderById] @orderid  
  fetch next FROM ordercursor INTO @orderid;
close ordercursor;
deallocate ordercursor;

« Older posts Newer posts »

© 2022 BigSmoke

Theme by Anders NorenUp ↑