Gmail always marks emails as SPAM due to invalid SPF.

Two parts to this but essentially Gmail will put incoming emails into the Gmail SPAM folder if you have not configured SPF correctly on your sending domain DNS. It will only say,

"Why is this message in Spam? It's similar to messages that were detected by our spam filters. "

Rather than explaining this exactly, and assuming your test email is not written like a ‘409 letter, then your problem is always related to SPF records.

To make sure gmail will deliver emails from your private servers i.e. on your own domain and not a well known public email domain, you MUST have defined the SPF records correctly for your domain.

Here is a list of what can have gone wrong:

Your server uses IPv6. Gmail will default to IPv6 connections if your SMTP handling server has both IPv4 and IPv6. So you MUST add the IPv6 IP address to the SPF record.

You have incorrectly formatted the SPF record e.g. you have accidentally added double quotes around the record when using a web-style DNS record editor on your DNS/registrar.

To see what SPF records gmail found then select the Spam folder in Gmail and click your spammed email and then pick “More” (which is to the right of the display in the Gmail next to the reply button, and then pick “Show Original”.

You need to find the section for SPF and you now need to look for two things,

       spf=neutral ( 2b01:499:56:1000:54a9:28c6:0:1 is neither permitted nor denied by best guess record for domain of

A GOOD result is,

Received-SPF: pass ( domain of designates 2b01:499:56:1000:54a9:28c6:0:1 as permitted sender) client-ip=2b01:499:56:1000:54a9:28c6:0:1; Authentication-Results:; spf=pass ( domain of designates 2b01:499:56:1000:54a9:28c6:0:1 as permitted sender)


Joomla 1.5 quirk in [20151206] – Core – Session Hardening patch

The Joomla 1.5 (EOL) patch to the session.php file has a quirk in it that raises a warning notice. The advisory is

[20151206] – Core – Session Hardening

but if you blindly copy that file to your system then you will end up with a web site that raises many error messages,

Notice: Only variable references should be returned by reference in /libraries/joomla/session/session.php on line 343

I thought there would be a fix for this but when I googled for that message I found thousands of hits to broken Joomla web sites. Yes, hundreds of web sites are busted in that they have lots of error messages ! The fix I have done is easy, edit the NEW session.php file you have downloaded and edit this as follows to pass a variable back,

 @@ -339,8 +339,13 @@
 $error = null;
 return $error;
 - return $this->data->getValue($namespace . '.' . $name, $default);
 +// removed this next line as it generates a Notice: Only variable references should be returned by reference error
 +// return $this->data->getValue($namespace . '.' . $name, $default);
 +// and define a variable with the data to be returned....
 + $getnamespacenamedata = $this->data->getValue($namespace . '.' . $name, $default);
 + return $getnamespacenamedata;


If you don’t know what to do with this change to get rid of that error message then you are going to have to find someone who has some PHP/Joomla experience to edit the files for you.

No posts in WordPress after server/php migration due to obsolete/broken plugin

The scenario is that you restore you files and database to a new host and then when you access the dashboard (as well as the front end) you see no posts. They are listed i.e. All (nnn) Published (x) Draft (y), but there are none displayed.

Equally, you upgraded the current server to a new version and this upgrades the php version.The site may work (with blank list of posts) or the site may break and the frontend or administration cannot be accessed.

We had this and for us it was a very stale plugin that should have deleted years ago (Psychic Search) !.

If this happens to you and you have back-end access to the administration interface then deactivate all plugins that are old until the site comes back correctly.

If the site is so broken that you do not have access to the administration interface then you can use FTP to go to wp-content/plugins and then go through the change date and from the oldest dated plugin, download it (to take a backup) and then delete the plugin. When WordPress tries to load the now-deleted plugin then it can’t and the plugin becomes deactivated. This should get you back into the site and you can then use the administration interface to either install a updated version of the broken/obsolete plugin or an equivalent that does have support for your host/php version.

Acer Aspire ONE no WIFI in Ubuntu due to hardware switch state

Intermittently when an Acer Aspire ONE suspends in Ubuntu 14.10 then the WIFI does not come back. The hardware switch (a non-latching slider switch on the front right hand side of the laptop) has no effect. Rebooting and disabling/enabling Networking has no effect.

The rfkill list command will show,
0: phy0: Wireless LAN
Soft blocked: no
Hard blocked: yes

One way I found to clear this is to power down the laptop and then hold the WIFI switch to the right i.e. in the on position and then use the power switch to turn on the laptop as normal but keep the WIFI switch held on. You should see the little orange WIFI  LED blink once and once the laptop is starting to boot up after the BIOS display then release the WIFI switch so it flips back to the left/off position.

The WIFI should be back to normal now and the rfkill list will show Hard blocked: no.

Older Transmission-gtk stops working after Ubuntu 15.04 upgrade

Upgraded my development machine from Ubuntu 14.10 to 15.04 and found an odd quirk with Transmission-gtk. The symptom was that Magnet links would not load from Firefox even though magnet is associated with transmission-gtk (to see this go to about:preferences#applications in Firefox and search for magnet)

I ran the transmission-gtk from a terminal and got,

transmission-gtk: error while loading shared libraries: cannot open shared object file: No such file or directory

This was strange as the packages depended upon so I then did a which transmission-gtk and it was /usr/local/bin/transmission-gtk and not the expected /usr/bin/transmission-gtk and I then remembered that I had manually installed Transmission version 2.83 on top of the older package manager version because the older package manager version of Transmission-gtk  in Ubuntu 14.10 would intermittently crash. As an aside if you really want the manually installed 2.83 version to run in Ubuntu 15.04 then you can symbolic link the relevant library with this,

cd /usr/lib/x86_64-linux-gnu
sudo ln -s
sudo ldconfig -v

I eventually decided to uninstall the manually entered version by going to my source built directory and doing a sudo make uninstall

After you have uninstalled the manually entered version then a which transmission-gtk should return /usr/bin/transmission-gtk

The Transmission version with Ubuntu 15.04 is now 2.84 (onwards).

Once you have fixed it that the transmission-gtk can launch then clicking magnet links in Firefox now works.

FreeSWITCH bootstrap libtool not found – missing libtool-bin

Was rebuilding FreeSWITCH source and had upgraded my test machine Ubuntu from 14.10 to version 15.04 so I did a make uninstall on FreeSWITCH and reran the but it came up with the error of libtool not found.

Libtool (2.4.2) was installed but what I found is that I had to add libtool-bin with,

sudo apt-get install libtool-bin

Then worked fine.

Windows XP stalls when opening DOCX.

A client has a Windows XP machine (due to be migrated) and it was very slow to open DOCX documents. This stalled Outlook when Outlook launched DOCX attachments and it stalled explorer from the File Manager too. The fix was simple – right mouse the document properties and reset the “Open with…” to the same Office program and the problem goes away.

ASUS X51R laptop CMOS battery bad causes blank screen no boot

The ASUS X51R laptop exhibits a strange failure when its built-in CMOS battery is dead or low. Rather than having some kind of fall-back it basically ceases to operate from power-on. In some cases it will post a message about CMOS battery low but when you continue then it stays on a blank screen and doesn’t boot. Most of the time it will just power to a blank screen i.e. the laptop seems to startup and have fans and disk startup but no further POST or booting into the operating system. The “Zz” light may be on all the time but that is not relevant.

A client got this problem – one day it was booting fine and the next it was a blank screen so there is no early warning of impending failure.

The CMOS battery is a 3 Volt CR2032 style battery. These last for around 7 years so always keep them in their packaging so you can see the expiration date. Ideally use a new battery from a trustworthy supplier for a client laptop as it takes a long time to replace.

To change the CMOS battery you need to do a complete tear down of the laptop to the motherboard. There is nothing unusual with this teardown – if you have never stripped a laptop then this is not a job for you. I have done a lot so this was pretty trivial tear down,

– remove main battery, memory, hard disk, and WIFI
– remove all visible screws on bottom and back (they are all different sizes so draw a picture and keep them in separate piles),
– push in the 3-tabs at top edge of keyboard and lever out keyboard (unclip ribbon cable),
– lay screen fully back and lever up plastic covers on screen hinges and the curved plastic cover that is in the middle that is over the screen cables to motherboard plugs
– unclip the screen cables from the motherboard and flip over and unclip the WIFI cables and poke the wires out as you remove the screen (the screen itself just stays assembled to its hinges with 2x WIFI cables and 2x multi-way screen cables attached)
– unscrew the screws that you can see that were being hid by the keyboard and that were hidden by the screen that hold the top cover down
– unclip the narrow touchpad ribbon cable and pop up the top cover,
– unscrew the screws on the motherboard – there is a arrow-head symbol near each hole that marks which holes are used but ideally draw a picture and keep the screws seperate,
– unclip the fan assembly and cable, the speaker cable (towards middle front of motherboard) and battery feed ribbon cable and remove the DVD/CD drive if it’s not yet removed (it should slide out as its retaining screw is removed),
– carefully lift out the motherboard,
– you will see the battery on the bottom – it is a standard fitting – use a screwdriver to pop in the retaining tab and then remove and dispose – remember which way it was oriented but the +ve case side should be up (-ve small disk side down),
– do not use your fingers to touch your new battery but remove it from its packaging and clean your new battery with a clean dry cloth and then insert into the socket without touching it with bare hands. The reason to not touch it is that your hands have oil on them and over many years this can corrode.
– Re-assemble in reverse order.

Before re-assembling fan then please clean out the dust. There is nothing special to remember on re-assembly.

When assembled then it will boot instantly without any problems. The date and time will be wrong (reset to 2007 or similar) but you can easily reset this. With a new CMOS battery the laptop should last for another 5-7 years. The whole job takes about 1.5 hours.

Opera slow Flash due to multiple plugin locations enabled

I use Opera as one of a number of browsers for testing purposes. Noticed that Flash was jumpy (Opera 12.16 with flash 11.2 r202 on Ubuntu 14.04 64 bit). It took a while to find the problem but I believe that it was due to multiple flash plugins enabled. To see what plugins are enabled go to,

Opera -> Page -> Developer Tools -> Plug-ins

(or the shortcut URL of opera:plugins )

If you see multiple locations of the Shockwave flash enabled then disable all except one e.g. leave the one located at,  /usr/lib/mozilla/plugins/ enabled.

Restart Opera and hopefully this may clear your problem.

List of emails not being displayed in top folder in Thunderbird after upgrade

After upgrading from a prior version 6 of Thunderbird to version 31 the top level folder for one account did not show a list of emails. The emails were there and when you clicked on the display it displayed the full email but the space in the list was all blank rows and there was no column headings of subject, dates or recipients as you would expect.

The fix is trivially simple – click the folder display options and reset to the default. You can now fine-tune what you want displayed.




memtest86+ cannot load a ramdisk with an old kernel image

This error happens when you use UNetbootin to create an Ubuntu disk and it incorrectly adds a ramdisk to the memtest86+ boot option.

Until UNetbootin fix their code then cursor down to the “Test memory” option and hit tab and then at the boot options remove the “initrd=/ubninit” so that the command line is now just…


and then hit enter and Memtest86+ will now run as expected.

My Ubuntu 14.04 currently has UNetbootin 585-2ubuntu1 and this quirk will possibly be fixed in newer releases but sometimes all you have lying around is an emergency install USB/disk so always good to know how to get around  a problem rather than downloading new code.

tentacle server not logging agent data after Pandora FMS upgrade

If you are using the password option for the tentacle protocol then you must also add the password to the TENTACLE_EXT_OPTS in the /etc/init.d/tentacle_serverd  file e.g.


If you do not do this then if you are using the agent password option then no agent data will be logged.

This is not a very secure way of data logging.



Reporting fake Facebook profiles (group post bumping)

Facebook Group Post Bumping

Spammers or trolls like to bump posts on Facebook groups so that they push down other legitimate posts. It could be for ideological, monetary or trolling reasons.

This section looks at stopping post bumping on a group that’s done by a Fake Profile. This is a group member (we’ll call BUMPER) who may or may not have blocked the admins (or blocked the “victim”) but what the BUMPER does is create a fake profile and copy the profile image and name from a “victim”  then post and delete the post and then deactivate their account.

All the group members see is the “victim” posting on the group but can never find the post (as it is deleted) but the effect is that the post is bumped to the top of the group recent posts.  If the victim is a trusted commenter then the other group members then think the post was important. In effect the bumper is stealing the reputation of the victim.

Or the bumper is a troll and is trying to get other legitimate people deleted from a group. The group members complain that the “victim” is bumping posts. The admins then send a warning to the “victim” (who will obviously deny they bumped the thread as they didn’t ). If the BUMPER keeps bumping posts using the victim fake profile details then eventually the admins would probably give up and block the “victim”. The bumper then updates their profile name and picture to their next victim and the cycle repeats.

To trap this you have two ways:

Finding and Reporting Fake Profile

The first way is to get the image location of the fake profile image and extract the Facebook ID from the group notifications. You need to turn on notifications for all posts on the group. Then when the bump happens then you will see the post notification with the fake profile image. You need to not click on the notification but identify the  “background-image: url(‘   ‘); details. This varies by browser but you right-mouse and “inspect element” or you can look at the page info and under media hunt for the relevant background image and then copy that image url. If you have no idea what this is then get a IT/web friend to help.

Here is a example fake profile image (I have changed the URL),

You can see 3 sets of decimal numbers between underscores and the Facebook ID (fbid) is the middle set of numbers between the underscores e.g. 1556141646027754

To visit this profile simply visit,  i.e.

If the page is NOT visible then they have Deactivated their profile. Before you ask they have NOT blocked you because if they blocked you then you would NOT see the fake post notification.

You now have to wait and pounce. You have to work out the pattern of  bumps. If it is utterly random then a bit of a problem but if it is triggered on e.g. legitimate posts rising to a top of a group and then immediately that happens the BUMPER bumps a stale post then you may be able to see their profile.

When you do get through then you see a timeline that will contain images and profile picture copied from the real profile and you quickly need to report the profile as a Fake that is impersonating you. If you see the page and then it goes then the person is deactivating the profile. You need to retry until you trap them in the Facebook reporting system.

Post bumping but no notifications

If you see post bumps but there is no notifications then you or the fake profile has a block. If others (or admins) are complaining that YOU are bumping posts then that means a fake profile is imitating you and has blocked you. You need the admins or others to get the fbid and then get them to do the step above with finding the Facebook ID.

Admins trapping posts

If as an admin you see post bumping and deleting then as an admin you need to have an idea when it happens and then switch the group to admin approval only. Then the BUMPER post will be trapped in the admin approval queue and can’t be deleted. If the admins can’t see the details then that means they are blocked so they need to promote someone else and then get that someone else to block permanently (and ideally report to Facebook). Whoever does the ban/block need to verify they are blocking the fake profile and not rely on the name.

If the group is a busy one then this may be tedious and you may have to revert to Finding the Fake profile ID and then find the name in the group member list and verify the target is the fake profile (by examining the facebook ID name) and then block that fake profile.

Broken upstart causes Internal Error, No file name for udev

I was upgrading x2goserver and it stalled on * Cleaning up stale X2Go sessions. This is a normal log message within the /etc/init.d/x2goserver start() and it then runs x2gocleansessions after it logs this message. There shouldn’t have been any problems with this but it was just stuck there so I killed the dpkg and then I retried to add or remove anything but found that udev would not configure e.g. when I did sudo apt-get autoremove then I got,

Setting up udev (175-0ubuntu13.1) ...
invoke-rc.d: unknown initscript, /etc/init.d/udev not found.
dpkg: error processing udev (--configure):
 subprocess installed post-installation script returned error exit status 100!

Within synaptic when I tried to re-install udev then I got,

E: Internal Error, No file name for udev:amd64

The trick is that you can’t just re-install udev but must also re-install upstart.

This is because udev files link to upstart files and it is possible that a broken install has udev pointing at /etc/init.d/udev but that file is a link to /lib/init/upstart-job but the upstart is missing for some reason.

There may be other packages that have this kind of dependency e.g. winbind ufw squid3 and so on and certainly the x2goserver didn’t want to start properly. If you look in the /etc/init and see broken links to /lib/init/upstart-job then your problem should be fixed if you re-install upstart first.

As an aside after the upstart and udev was all cleaned up then the x2goserver removal and installation then worked.

Pandora FMS 4.0 to 5.0 upgrade quirks.

This was a painless upgrade but I found two quirks,

1) when you edit your config.php then you must set the chmod permissions to 600. If you try 400 then the Pandora Console still thinks that the file is readable by others. Obviously a bug but nothing to worry about. Note that to edit the ./include/config.php you must copy the new version 5 ./include/ to ./include/config.php and then edit that new config.php and copy and paste in your custom settings from your old version 4 config.php file.

2) The ./extras/pandoradb_migrate_4.0.x_to_5.0.mysql.sql  (and actually any of those migration files) is missing a schema change to the tagente_estado table. It has,

ALTER TABLE `tagente_estado` ADD COLUMN `last_known_status` tinyint(4) NOT NULL DEFAULT 0;

but ALSO needs to have,

ALTER TABLE `tagente_estado` ADD COLUMN `last_error` tinyint(4) NOT NULL DEFAULT 0;

else the pandora_server won’t start.