Dist::Zilla and custom Makefiles

I’m trying to configure a module to release to CPAN, the repository for the Perl programming language (hi Tiobe). In trying to be up to date about things I asked on reddit what would be a good build tool to use. The majority of votes were for Dist::Zilla, so I thought I’d look into it.

It seems relatively simple for most modules, but my module uses XS and needs to link to libssl. To do this I needed to pass INC and LIB params in the Makefile.PL, but you can’t do that with Dist::Zilla‘s default Makefile plugin.

There are some options for having custom Makefile.PL‘s. I tried MakeMaker::Custom, but that required an entire Makefile.PL template just for 2 extra lines. Instead I opted for MakeMaker::Awesome, but that requires a module to be placed in “inc”…

Still, in both cases there is one minor issue that took a little while to solve, conflicting builds of Makefile.Pl by MakeMaker and MakeMaker::Custom. This is answered in the documentation, but only when you know what to look for.

Essentially the issue is this. You are probably going to have dist.ini include:


The @ indicates a plugin bundle, thus it loads Dist::Zilla::PluginBundle::Basic. That loads [MakeMaker] and that conflicts with [MakeMaker::*].

The solution to handling this is the plugin bundle


This is a fake bundle which wraps around another plugin bundle and removes from it any plugins that you don’t want to load. Thus you can still load @Basic, but not load MakeMaker simply by adding this:

-bundle = @Basic
-remove = MakeMaker

Fix for: cannot restore segment prot after reloc: Permission denied

Just got this:

thebes# apachectl configtest
httpd: Syntax error on line 62 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/libphp5.so into server: /usr/local/apache2/modules/libphp5.so: cannot restore segment prot after reloc: Permission denied

This is an SELinux issue. As you can see the security context “type” is set to usr_t:

thebes# ls -lZ /usr/local/apache2/modules/libphp5.so
-rwxr-xr-x root root user_u:object_r:usr_t /usr/local/apache2/modules/libphp5.so

Change it to textrel_shlib_t with:

chcon -u system_u -r object_r -t textrel_shlib_t /usr/local/apache2/modules/libphp5.so

And it works fine:

thebes# apachectl configtest
Syntax OK

snmpd error on subcontainer ‘ia_addr’ insert (-1)

Found that the log files on two separate Centos 6.3 boxes where filling up with the error

error on subcontainer 'ia_addr' insert (-1)

This was being written with each connect. It seems that this is a harmless debugging message and the fix appears to be to change the OPTIONS setting in “/etc/sysconfig/snmpd” from


Which means log to syslog under the daemon facility, to


Which means log only LOG_INFO level messages and above to the syslog using the “daemon” facility.

This is annoying since I was using -Lf, but adding the “6” there for the log level causes net-snmpd to create the file as a socket instead of a regular file. It seems that there is no method to filter the debugging notices when logging to a file.

Installing uglyfi-js and node on Ubuntu 12.10

The e-Classifieds ® Corporate edition uses lots of JavaScript code, so to help speed things up we compress the code. Previously this has been done using JavaScript::Minifier::XS from CPAN, but all the cool kids are using UglifyJS. So I thought I would see how it compared.

Read more of this post

AIDE constantly reporting prelink errors

We added a couple of new boxes running CentOS 6 here at Hagen Hosting. They generally work really nicely, but I’ve been having this on going fight with AIDE and prelink.

Prelink seems like a good idea because it reduces the chance of an exploit working, but the honest truth is that it is annoying, potentially troublesome in terms of legal issues and security. More over, from what I read, prelink doesn’t add much extra security.

I find it particularly annoying when prelink runs each week and I’m confronted with the output from AIDE saying a bunch of files have changed. It would take hours to compare them all to see if they had changed because of an intrusion so I have to assume that they have changed because of prelink because they are listed in the prelink logs and timestamps match. But, you know, it just doesn’t feel secure.

More over prelink has become very annoying because for some reason that I have yet to work out, each night it keeps prelinking the same set of files. A few are compiled-from-source programs (like Apache), but some are standard libs.

To get it to stop I had to run prelink on those files manually and keep re-running it until it stopped saying that some of the files needed prelinking.

However after a valient attempt I’ve realised that prelink is just causing too many headaches and so I took the ultimate step — to disable it.

To disable prelink edit



and change




Sometime in the next few days it will run prelink -ua to undo the pre-linking on all files then I’ll be done with it and the only changes to the system will be updates (or bad stuff :-)

Edit: 2014-05-22T13:25:56+00:00

I just had this error message coming up on a box after updating a library. prelinking is disabled but I would still get this same error message from AIDE.


prelink -ua

did not stop the error messages because running this command checks the value of PRELINKING and so it doesn’t run – at least I think so. The error occurs because AIDE detects that the library has changed and so runs prelink directly on those files:

4574 [pid 12916] execve("/usr/sbin/prelink", ["/usr/sbin/prelink", "--verify", "/usr/local/apache2/modules/libph"...], [/* 44 vars */]) = 0

Since I have PRELINKING=no defined, but I was getting this error message, it would appear that if you specify a filename to prelink then it runs as it normally would, regardless of this global setting. It makes sense, I suppose.

The answer therefore was to use this knowledge that prelink still works on specific files, but not globally, and “un-prelink” the library in question. In otherwords run;

prelink -ua <file>

Doing this caused AIDE to no longer run prelink.

Ubuntu resets /etc/hosts [SOLVED]

Due to a hardware problem on the computers at home I had to assemble an Ubuntu box from an old box. (actually Kubuntu because I just find KDE easier to work with). I had a minor issue that the drive had died, but thanks to a USB stick and a DVD I was able to get Kubuntu installed pretty quickly.

I did learn that while 12.10 is nicer than 12.04, 13.04 daily is far from ready for daily use. Things just wouldn’t install properly, but fortunately re-installing from 13.04 to 12.10 was fast.

I dislike advertisments and being tracked so I use the MVPS hosts file. It is super easy to install:

wget -O - http://winhelp2002.mvps.org/hosts.txt | sudo cat - >> /etc/hosts

However I found that everytime I rebooted my ubuntu box it reset the hosts file.

After some Googling it was variously reported that this could be an error, but also related to the fact that when using DHCP, the client updates /etc/hosts with entries for The solution therefore is to use:

Which you can add in-line:

sudo sh -c 'wget -O - http://winhelp2002.mvps.org/hosts.txt | sed 's/^127\.0\.0\./127.1.1./' >> /etc/hosts'

Thanks for everyone that pointed out that it needed to change network.

aide.conf syntax errors contain junk line information

The latest servers that we added to run our e-Classifieds (r) platform use CentOS 6. I definitely like the boxes but Prelink and AIDE have been a pain.

After trying to stop AIDE checking some folders I started getting this report:

271:syntax error: <junk>
271:Error while reading configuration: <junk>

It turns out that this really was a syntax error. It really was on line 271 because rather daftly I had been thinking in terms of RegExps and added the line as


The ^ generates the syntax error. But apparently AIDE has a free/malloc/pointer bug in this error message as it prints random junk after the error message. Initally made me think that the error that was being reported was that the aide.conf file contained those characters and I couldn’t see then and therefore oooh filesystem/disk corruption… I was relieved to find that it was a bug in AIDE’s error message.