Category Archives: Open source

htpasswd without Apache

If wanting to restrict access to website content under nginx but don’t want to install Apache use the following to generate an htpasswd file

printf "USER:$(openssl passwd -apr1 P@55w0rd)\n" > /etc/nginx/auth/htpasswd

Then use the following nginx rules to

location /api {
    satisfy all;    

    deny  all;

    auth_basic           "Administrator’s Area";
    auth_basic_user_file /etc/nginx/auth/htpasswd;




Git: stop tracking a tracked file

There are times when a project needs to include the default version of a file in the git repository that will subsequently change to support development (e.g., secret application key or sqlite3 database).

After committing the safe  default copy, any subsequent changes to the files will appear as a modified file in ‘git status’ reports and will also prevent any git flow feature finish operations if the files are not staged for commit.

Adding the files to .gitignore makes no difference.

There is a way, however, to tell git to stop tracking the file,

$ git rm --cached file1 file2

Taken from a StackOverflow posting.

Troubleshooting lifecycle

I seem to have hit on a troubleshooting pattern for trying to get new services up and running: this time Rabbitmq.

Most of the application stuff I have been working with recently has been  disaster (and I know I’m of the opinion that most software – even, particularly my own – is rubbish) having to abandon development with Rails and Django because of basic stuff that just doesn’t work (or fails silently), and I’ve following the message queue posts on and rather than sign up for a CloudMQTT account I thought I’d install rabbitmq locally. It can’t be that hard.

The web pages for Rabbitmq aren’t terribly inviting and I immediately suspect that there will be some winging it.

I installed the packages and start the service and try to use the rabbitmqctl command to see how things are going

# rabbitmqctl status
Status of node rabbit@fnunbob ...
Error: unable to connect to node rabbit@fnunbob: nodedown


attempted to contact: [rabbit@fnunbob]

 * connected to epmd (port 4369) on fnunbob
 * epmd reports: node 'rabbit' not running at all
 no other nodes on fnunbob
 * suggestion: start the node

current node details:
- node name: 'rabbitmq-cli-97@fnunbob'
- home dir: /root
- cookie hash: 63+eNTCkMJ1cMwrAcJ88rg==

Now, first off, ‘* suggestion: start the node’. What’s all that about! I thought I had started the node; there’s nothing I could find (easily) on the website to suggest anything else. Perhaps provide a clue on how to start the node!

Okay, so let’s try starting the node:

# rabbitmqctl start_app
Starting node rabbit@fnunbob ...
Error: unable to connect to node rabbit@fnunbob: nodedown


attempted to contact: [rabbit@fnunbob]

 * connected to epmd (port 4369) on fnunbob
 * epmd reports node 'rabbit' running on port 25672
 * TCP connection succeeded but Erlang distribution failed

* Authentication failed (rejected by the remote node), please check the Erlang cookie

current node details:
- node name: 'rabbitmq-cli-75@fnunbob'
- home dir: /root
- cookie hash: 63+eNTCkMJ1cMwrAcJ88rg==

Huh? I’m beginning to think that Rabbitmq is yet another piece of crapsoftware that just doesn’t work out the box: netstat and ps show plenty pof rbbitmq processes running. But, I’ll try some troubleshooting to figure out what I’ve done wrong.

Now, my troubleshooting pattern is to search (Google – expect Facebook adverts for message queue services in a few days) for the application and problem and ignore the links to the application vendor and start with the first StackOverflow page.

This leads me to and even the link is promising. And sure enough, it mentions the rabbitmq-server command, so we give it a go.

# rabbitmq-server
RabbitMQ 3.6.9. Copyright (C) 2007-2016 Pivotal Software, Inc.
 ## ## Licensed under the MPL. See
 ## ##
 ########## Logs: /var/log/rabbitmq/rabbit@fnunbob.log
 ###### ## /var/log/rabbitmq/rabbit@fnunbob-sasl.log
 Starting broker...
 completed with 0 plugins.

Maybe something’s happening, maybe not: CTRL-C; man rabbitmq-server. There’s a ‘-detached option@. Ah, okay, let’s try that.

# rabbitmq-server -detached
Warning: PID file not written; -detached was passed.

So, let’s see if that makes a difference.

# rabbitmqctl status
Status of node rabbit@fnunbob ...
 {ranch,"Socket acceptor pool for TCP protocols.","1.3.0"},
 {ssl,"Erlang/OTP SSL application","8.2"},
 {public_key,"Public key infrastructure","1.4.1"},
 {asn1,"The Erlang ASN1 compiler version 5.0","5.0"},

That’s more like it.

The important thing here is that StackOverflow is more useful for working with applications than the application documentation itself. Because there are so many thing that go wrong with modern software and they won’t likely be mentioned in teh official docs, SO catches all the efforts to fix things.

P.S. This is one of the most annoying things about Puppet. They must have a deal with Google to make sure only official documentation is returned, it links to the most recent puppet version (and enterprise to boot) and selecting from the version dropdown takes you to a 404 page: Just show the SO pages where people have fixed stuff and be done with it.

Fedora 23: gem install mysql2

I’m having another blast at preparing PDF documents from a database repository of infrastructure assets which requires the use of the mysql2 gem on Fedora 23.

Now, I have had many years experience building this stuff from source and even though Ruby has a reputation for being difficult to work with, this time it’s definitely Fedora  that’s bearing unberable.

Install the mysql2 gen should be a simple matter of,

gem install mysql2

But not when you get this error:

checking for ruby/thread.h... *** extconf.rb failed ***

With extra advice about probably missing developer tools or libraries. I have the compiler, mariadb-devel and ruby-devel packages installed, everything that’s required to build the gem, but still no good.

I eventually found the mkmf.log record mentioned in the error output which contained something I’d not seen before:

error: /usr/lib/rpm/redhat/redhat-hardened-cc1: No such file or directory

Searching online for this came across and the simple solution is to run,

dnf install redhat-rpm-config
gem install mysql2 -v '0.3.16'

And we’re done.

Whod’ve thought that an rpm-config package would be a pre-requisite for installing ruby gems? And yet another example of having to spend an hour fixing  numerous tedious problems and sub-problems introduced by system developers rather than being able to get on with the task in hand.

Arch Linu MySQL (Mariadb) startup

Posted as a quick note-to-self following a delay getting a database up and running for a rehash f an old Rails project.

After installing the mariadb package on Arch, the database needs to be initialised before starting,

# mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql

After this, the database server can be started with,

# systemctl start mysqld.service

(Still can’t say that I’m happy with systemd; I just can’t see what problem it’s trying to solve). provided the much-appreaciated help and guidance in this case.

Gramofile reborn

Was intending to spend the day hving fun with Docker on my Arch desktop – the r-pi version still on-hold until I can get a 16GB image file on to the SD card; 24 hours is too long when trying to copy the file over the wireless network – but I got distracted trying to sort out some old clutter from early this century (seriously).

I found a copy of a program I used many moons ago to process some of the digital recordings I had done of some of my old vinyl (prior to processing using Audacity).

Gramofile is  a curses-based program that attempts to split up an recording into different tracks by looking for blocks of silence; it does a reasonable job and its estimates can easily be tweaked.

A quick recompile and it was starting up but was having problems recognising the WAV files I have. I knew it was Gramofile’s problem becasue I was able to use an old program I started years ago to convert WAV files to ZX Spectrum tzx format (yes, I still have plenty of speccy tapes) and it was able to identify the relevant header records.

So, I have spent all day hacking some test programs to get a reasonable header processor going for WAV files. The main problem I suspect is that the code is 32-bit and some of the buffer manipulation looked a wee bit odd. But because the header records sizes are fixed I decided to an explicit copy byte-for-byte from the buffer to the header struct,

 memcpy ( &wavhd.main_chunk, hd_buf, 4 );
 memcpy ( &wavhd.length, hd_buf+4, 4 );
 memcpy ( &wavhd.chunk_type, hd_buf+8, 4 );

Another quick recompile and we’re in business big-time! A run through the first side of Psychocandy picked up 5 out of 7 tracks, just missing a couple of short silence sections between a couple of tracks; th emissing starts and ends can easily added to the .tracks file; just remember to adjust the ‘Number_of_tracks’ setting!

Now, I just wish there ws a quick way to generate the CD text data when ripping the tracks to a CD as this is a right pain with the burning tools, but all in all a good day’s work and I have a fair few album recordings to catch up on.

References was really useful in helping me make sure that the correct fields and their sizes were being used in the WAV header.

More Desktop Linux Loathing

Have found an old 80GB ipod classic that has bout 31GB of orphaned tracks on that can be can be copied to the local disk.

I’m using the guide at

But when it comes to synching the music basic to the ipod, things get nasty. So far I have tried Banshee (crashes with content sync), rhythm box (possibly the worst designed interface of any application, sorry, but it’s awful); amarok (really confusing interface and can’t get past empty ‘transcode’ dropdown list before initializing the ipod and hard to tell whether it’s actually doing anyting); gtkpod (the less said the better, can’t detect the ipod); floola and yamipod packages don’t exist.

Of the bunch, Banshee is the only application that actually makes an attempt to sync content to the device but appears to have just too many errors before the segfault.

Even with all these problems, at least the device is actually detected; my Android phone is a complete blank in Antegros despite lots of MTP shenanigans. Given the number of options listed on the help pages it seems fairly obvious that this is all wing-and-a-prayer stuff.

I’m not saying that al this should be easy, but it shouldn’t be this difficult.

Update: by one means or another, gtkpod managed to copy 74 songs to the ipod. And having made it writeable, Amarok has a sync option to just copy the files rather than transcode them (which is what does for Banshee); all looking quite promising.  But I really wish I knew what it is that I have done to get to this point: it’s all well and good Amarok grabbing the lyrics to songs, but I do wish it had a progress bar telling me how far through copying the 3100 songs it has got..