RSSAmplifier

Blog

David Foley's Blog

David Foley's blog on the inter-web

dfoley.ieRSS feed ↗18 posts

Latest posts

Disabling private chat in Odoo 18+

There is no simple toggle to disable private one to one chat in the Odoo Discuss module. It can be achieved through a record rule though. TL;DR Add record rule [('channel_type', '!=', 'chat')] on the Discussion Channel model The Problem Very simply we want to disable one to one private chats in Odoo Discuss. The Solution The solution is to add a single record rule on the Discussion Channel model.…

libvirt network forwarding inconsistencies

In an INCUS container on a KVM guest, ping commands are successful when executed on the container, but not when the are executed from the host on the other end. TL;DR Change the libvirt virtual bridge forwarding mode to "open" The Problem Consider a scenario where there is a group of physical servers connected to a core router. On one of the servers a KVM guest is running, which in turn is a host…

Building Gigaquad - Changelog May-October 2025

A two month trip to Europe and the USA along with endless work on migration of existing services and applications to the new infrastructure has lead to their being very little headline news concerning the development of the public offering. Changelog CIX colo deployment Deployment of equipment to our colocation cabinet at CIX data center in Cork, Ireland occurred in September. With good…

Storing SSH Private Keys in GitLab CICD variables

When storing an SSH private key in GitLab CICD variables I encountered a strange error: "Unable to create masked variable because: The value cannot contain the following characters: whitespace characters." TL;DR Base64 encode the SSH private key and then decode when using it in .gitlab-ci.yml The Solution The solution is to base64 encode the SSH private key, store that in a GitLab variable and…

Building Gigaquad - Changelog March-April 2025

It's been a busy 8 weeks at Equinix in Melbourne and now the servers are finally online and running customer applications. Changelog Equinix ME2 colo deployment The deployment of equipment in the colocation space at Equinix ME2 in Melbourne continued these past two months. Racking the equipment was very speedy, however we encountered difficulty with our networking equipment/toplogy immediately…

Building a web host for 2025 in Public

Since 2018 I have been offering private cloud infrastructure to businesses around the globe. In the course of this work I have observed there is a lot of commonality to the technical and business challenges encountered by these customers. The outstanding deficiency in the majority of solutions offered by the market is a lack of sustainability and a strong tendency towards lock-in of one form or…

Multiple wireguard peers on Mikrotik RouterOS

Since version 7, Mikrotik Router OS supports the WireGuard VPN. Wonderful. How do I connect multiple mobile or laptop clients to a Mikrotik router using WireGuard? TL;DR The Mikrotik documentation regarding a 'road warrior' setup is pretty good. It includes all the requisite steps, but misses a neccessary emphasis. On the client device, you MUST set the allowed address for the client to x.x.x.x/32…

Access to public IP from VMs/Containers using Firewalld

You are running some LXC containers on a host and you use Firewalld to forward ports from the public internet to the containers. How do you enable access to the public IP of the LXD host from the LXC containers? TL;DR Ordinarily connections from containers to to services which are reached by port forwarding on Firewalld fail, because after outputting the packet to the public interface, it never…

Laravel constraint violation error on JSON field

I recently encountered a Laravel 'constraint violation' error related to JSON field. The logs were not revealing and the bug was intermittent. It took me some time, but fortunately the fix was easy. TL;DR Problem: In Laravel's Model class I had set the field to guarded and then provided an invalid default value. Solution: In Laravel make the default values of your model's JSON fields valid JSON…

IP Forwarding with Firewalld on CentOS

When setting up an additional IPv4 subnet on a dedicated Hetzner server I learned that Firewalld is terrible at handling IP forwarding. TL;DR Until now, Firewalld has been bad at intra zone forwarding ( Firewalld project blog post ). A new feature solves the problem: firewall-cmd --zone=example --add-forward The feature is unavailable in versions <= 0.8.2. Migrate to CentOS Stream and upgrade to…

My First IoThing

A box of electronics arrived the other day, amongst the components was a DFRobot FireBeetle v2 board (DFR0654). An exciting ESP-WROOM-32E MCU device, well made and well priced. However I had a few hiccups getting started, in particular the device was difficult to flash and the built-in RGB LED did not work with the FastLED Arduino library as suggested by the documentation. Information was thin…

Raspberry Pi Pico NOT flashing with arduino-cli

While flashing a Raspberry Pi Pico (RP2040) from a Raspberry Pi 3 I got the error "No drive to deploy", there's a relatively simple fix if hard to find on the internet. Error Flashing the Device While using Earle Philhower's RP2040 board package in the arduino-cli to flash a Raspberry Pi Pico (RP2040) from a Raspberry Pi 3 (Raspberry Pi OS Lite, buster) I got the following error: Converting to…

dnf packaging errors for MariaDB and borgbackup

I recently encountered an error on a database server when using dnf (yum) on CentOS 8 Stream. Dependencies for MariaDB and borgbackup created a problem and there was an unusual fix which I hadn't previously been aware of. TL;DR Set module_hotfixes=true in MariaDB repo definition Enabled powertools repository as recommended by Fedora EPEL team The Problem When I went to use the dnf package manager,…

Activate partial LV after drive failure

I recently noticed a drive in my home NAS was pre-fail according to S.M.A.R.T. diagnostics, when I replaced the drive I found it difficult to mount the remaining drives in the LVM VG to recover data. TL;DR Use command lvchange -ay --partial example_logical_volume to bring a LVM LV with failed disks The Problem The LVM volume that the drive was a member of had three drives. The majority of the data…

Website not working in any browser on iOS

This week I encountered the most bizzare support request: "Is it possible that our website would not load on iPhones?". Don't be silly, "that's not a thing" I told the customer ... It appears I was wrong. TL;DR Every browser on iOS behaved the same and gave vague feedback Curl gave the same error, but provided far better feedback The error was caused by a web server behind a reverse proxy sending…

My First Ansible Galaxy Contribution

Today I submitted a role to Ansible Galaxy "initialises MySQL/Percona/MariaDB Server software on a host". While not my first Ansible role, this was the first time I released a role on Ansible Galaxy. TL;DR The Ansible Galaxy has it's flaws, but I gave it a crack anyway The role is very basic and at the moment "installs MariaDB or MySQL community server, sets t he root password and creates…

Starting with the Indieweb

Over the past few weeks I have been working to get this personal website and blog "on the indieweb" and in large part I have succeeded. Here is an account of my experience and the challenges I encountered. TL;DR IndieMark is a great roadmap and priority list for your IndieWeb-site development Using GravCMS I was able to quickly get my website to IndieMark Level 1 Multiple domains + 308 redirects +…

Hello World

Welcome all. This blog has been a long time coming, I would say long-awaited, but at the moment I suspect I am speaking into the ether. The purpose of the blog is to provied a space to share things I've learned, heard, found, etc. Also a place for me to archive things important to me which is publcily accessible, so that those of you out there on the web with which I share an interest can also…