<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Linux on Charlie Howlett</title>
		<link>https://charliehowlett.co.uk/tags/linux/</link>
		<description>Recent content in Linux on Charlie Howlett</description>
		<generator>Hugo</generator>
		<language>en-gb</language>
		
		
		
		
			<lastBuildDate>Tue, 18 Aug 2026 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://charliehowlett.co.uk/tags/linux/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Managing My Homelab with Ansible</title>
				<link>https://charliehowlett.co.uk/posts/2026-08-18-managing-my-homelab-with-ansible/</link>
				<pubDate>Tue, 18 Aug 2026 00:00:00 +0000</pubDate>
				<guid>https://charliehowlett.co.uk/posts/2026-08-18-managing-my-homelab-with-ansible/</guid>
				<description>&lt;p&gt;In previous posts, I described how I set up my &lt;a href=&#34;https://charliehowlett.co.uk/posts/2026-05-22-repurposing-a-laptop-as-a-home-server/&#34;&gt;repurposed laptop server&lt;/a&gt; and &lt;a href=&#34;https://charliehowlett.co.uk/posts/2026-06-12-raspberry-pi-server-rack/&#34;&gt;Raspberry Pi server rack&lt;/a&gt;. Together, they have grown into a useful little homelab.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;img&#xA;  class=&#34;image-large&#34;&#xA;  src=&#34;https://charliehowlett.co.uk/posts/2026-08-18-managing-my-homelab-with-ansible/homelab-topology.svg&#34;&#xA;  alt=&#34;Topology diagram showing SSD directly connected to Raspberry Pi 3, with all hosts connected to a shared Ethernet bus.&#34;&#xA;  decoding=&#34;async&#34;&gt;&#xA;&#xA;&#xA;&lt;p&gt;The top-level topology is simple, but the deployed services and their configuration complicate things quickly.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;img&#xA;  class=&#34;image-large&#34;&#xA;  src=&#34;https://charliehowlett.co.uk/posts/2026-08-18-managing-my-homelab-with-ansible/homelab-topology--services.svg&#34;&#xA;  alt=&#34;Topology diagram showing applications deployed on each homelab host: the server laptop runs Super Productivity, a productivity planner; every host runs Alloy; Pi 2 also runs device monitoring and Git Auto Sync, while Pi 3 hosts SSD storage, Samba, PostgreSQL, and the Grafana and Loki monitoring stack.&#34;&#xA;  decoding=&#34;async&#34;&gt;&#xA;&#xA;&#xA;&lt;p&gt;It can be tricky to keep track of:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Mobile Dev Setup</title>
				<link>https://charliehowlett.co.uk/posts/2026-07-03-mobile-dev-setup/</link>
				<pubDate>Fri, 03 Jul 2026 00:00:00 +0000</pubDate>
				<guid>https://charliehowlett.co.uk/posts/2026-07-03-mobile-dev-setup/</guid>
				<description>&lt;p&gt;I&amp;rsquo;ve always felt quite restless once I start working on a project. If I&amp;rsquo;m sitting in a park, on a train, or away from my desk with an idea in my head, I often want to make a quick change or keep a thread of work moving. But without my laptop I&amp;rsquo;ve always had to settle for doing something else. Still, I have always been curious about what options were available so years ago I looked into Termux, an app that provides a terminal on your phone. I wanted to try coding on the go, but writing productive code from such a small screen and keyboard felt impractical. However, when AI agents came along the idea started to seem much more realistic so I decide to try again.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Monitoring My Homelab with Grafana</title>
				<link>https://charliehowlett.co.uk/posts/2026-06-17-monitoring-my-homelab-with-grafana/</link>
				<pubDate>Wed, 17 Jun 2026 00:00:00 +0000</pubDate>
				<guid>https://charliehowlett.co.uk/posts/2026-06-17-monitoring-my-homelab-with-grafana/</guid>
				<description>&lt;p&gt;Once I had several processes running continuously in my homelab, I needed a single place to inspect what they were doing. Connecting to a machine via SSH and reading logs directly is useful, but hardly convenient, so I set up an observability platform. I use Grafana for querying and visualising logs, Loki for storing and querying logs, and Grafana Alloy for collecting and forwarding logs. The components run as Docker containers on a Raspberry Pi with an attached SSD for persistent storage.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Git Auto Sync</title>
				<link>https://charliehowlett.co.uk/posts/2026-06-14-git-auto-sync/</link>
				<pubDate>Sun, 14 Jun 2026 00:00:00 +0000</pubDate>
				<guid>https://charliehowlett.co.uk/posts/2026-06-14-git-auto-sync/</guid>
				<description>&lt;p&gt;After setting up my &lt;a href=&#34;https://charliehowlett.co.uk/posts/2026-06-12-raspberry-pi-server-rack/&#34;&gt;Raspberry Pi home lab&lt;/a&gt;, I deployed a small project onto one of the Pis and immediately wanted a cleaner method for continuous deployment. The app lived in a Git repository, and I wanted the running copy on the Pi to update automatically whenever the repo changed.&lt;/p&gt;&#xA;&lt;p&gt;The obvious approach would have been a webhook: GitHub sends a request, a local service receives it, and the Pi pulls the latest code. I decided against that for security reasons. I did not want to expose a service on my home network just so GitHub could tell it that a commit had landed, and I did not want to build a tunnel or webhook receiver for something that could be solved more simply.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Monitoring Devices on My Home Network</title>
				<link>https://charliehowlett.co.uk/posts/2026-06-13-device-monitoring/</link>
				<pubDate>Sat, 13 Jun 2026 00:00:00 +0000</pubDate>
				<guid>https://charliehowlett.co.uk/posts/2026-06-13-device-monitoring/</guid>
				<description>&lt;p&gt;My router gives me a basic view of the devices currently connected to my network, but it does not expose historical information. I started this project to fill that gap: a small Raspberry Pi service that scans the LAN, records which devices it sees, and shows that data in a dashboard.&lt;/p&gt;&#xA;&lt;h2 id=&#34;implementation&#34;&gt;Implementation&lt;/h2&gt;&#xA;&lt;p&gt;The service periodically runs &lt;code&gt;arp-scan&lt;/code&gt; to discover devices on the local network, then stores the results in a database with both the current device state and a history of online/offline events. That split lets the system track when a device first appeared, when it was last seen, and how its presence changed across a day or week.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Building a Raspberry Pi Server Rack</title>
				<link>https://charliehowlett.co.uk/posts/2026-06-12-raspberry-pi-server-rack/</link>
				<pubDate>Fri, 12 Jun 2026 00:00:00 +0000</pubDate>
				<guid>https://charliehowlett.co.uk/posts/2026-06-12-raspberry-pi-server-rack/</guid>
				<description>&lt;p&gt;I had three old Raspberry Pis and an SSD sitting unused in a cupboard, so I decided to turn them into a small cluster of home servers. I wanted the finished setup to be compact and tidy enough to live on a little shelf in my television stand, rather than becoming another loose collection of boards, cables, and power adapters tucked away in some cupboard.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&#xA;&lt;picture&gt;&#xA;  &lt;source&#xA;    type=&#34;image/webp&#34;&#xA;    srcset=&#34;https://charliehowlett.co.uk/posts/2026-06-12-raspberry-pi-server-rack/pi-server-rack_hu_5aea18687e9fc9c5.webp 520w, https://charliehowlett.co.uk/posts/2026-06-12-raspberry-pi-server-rack/pi-server-rack_hu_d994c08c850007de.webp 1040w&#34;&#xA;    sizes=&#34;(max-width: 700px) 90vw, 520px&#34;&gt;&#xA;  &lt;img&#xA;    class=&#34;image-medium&#34;&#xA;    src=&#34;https://charliehowlett.co.uk/fallback-images/posts/2026-06-12-raspberry-pi-server-rack/pi-server-rack.jpg&#34;&#xA;    alt=&#34;The completed Raspberry Pi server rack&#34;&#xA;    width=&#34;1800&#34;&#xA;    height=&#34;1350&#34;&#xA;    decoding=&#34;async&#34;&gt;&#xA;&lt;/picture&gt;&#xA;&#xA;&#xA;&lt;p&gt;For the chassis, I joined two 12-inch server rack trays using a pair of small rack-mounting posts. This was cheaper than buying a premade desktop rack and gave me a reusable foundation: if I later expand the cluster or move it into a larger rack, the trays and mounting hardware can become part of the new setup.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Repurposing a Laptop as a Home Server</title>
				<link>https://charliehowlett.co.uk/posts/2026-05-22-repurposing-a-laptop-as-a-home-server/</link>
				<pubDate>Fri, 22 May 2026 00:00:00 +0000</pubDate>
				<guid>https://charliehowlett.co.uk/posts/2026-05-22-repurposing-a-laptop-as-a-home-server/</guid>
				<description>&lt;p&gt;I was recently given an old laptop that had been retired by my company. Despite no longer being needed for work, it still had quite capable hardware, so I decided to repurpose it as a compact, general-purpose home server rather than let it go unused.&lt;/p&gt;&#xA;&lt;p&gt;Because the server will remain plugged in, I removed the battery to reduce unnecessary heat and avoid leaving an ageing battery permanently charging. I also removed the display, which improved airflow, made the machine easier to fit into tight spaces, and left the power button accessible without needing to open and close a lid. I saved the screen so it can be reused in a future project.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Automating Lights with a Raspberry Pi</title>
				<link>https://charliehowlett.co.uk/posts/2021-09-02-pi-lights/</link>
				<pubDate>Thu, 02 Sep 2021 00:00:00 +0000</pubDate>
				<guid>https://charliehowlett.co.uk/posts/2021-09-02-pi-lights/</guid>
				<description>&lt;p&gt;Pi Lights was a fairly simple idea and my first exploration into DIY home automation: measure the ambient light level throughout the day using a Raspberry Pi, then switch Wi-Fi lights on or off automatically.&lt;/p&gt;&#xA;&#xA;&#xA;&#xA;&lt;div class=&#34;video-frame teletext-box&#34;&gt;&#xA;  &lt;iframe&#xA;    class=&#34;video-frame__iframe&#34;&#xA;    src=&#34;https://www.youtube-nocookie.com/embed/ZpO6WK41Bb8&#34;&#xA;    title=&#34;Pi lights demo video&#34;&#xA;    loading=&#34;lazy&#34;&#xA;    allow=&#34;accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share&#34;&#xA;    referrerpolicy=&#34;strict-origin-when-cross-origin&#34;&#xA;    allowfullscreen&gt;&#xA;  &lt;/iframe&gt;&#xA;&lt;/div&gt;&#xA;&#xA;&lt;h2 id=&#34;implementation&#34;&gt;Implementation&lt;/h2&gt;&#xA;&lt;p&gt;The system polls several light-dependent resistors and averages their readings before deciding whether to switch the lights. Using multiple sensors and rate-limiting changes made the automation less sensitive to brief shadows or sudden changes in brightness. A dedicated light-sensing Raspberry Pi HAT would have been more accurate, but I wanted to see if I could build a first pass using components I already had lying around. I ran the software as a Linux service so it would start automatically and continue working in the background without needing any attention.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Raspberry Pi Digital Lock</title>
				<link>https://charliehowlett.co.uk/posts/2018-11-02-prom-keypad/</link>
				<pubDate>Fri, 02 Nov 2018 00:00:00 +0000</pubDate>
				<guid>https://charliehowlett.co.uk/posts/2018-11-02-prom-keypad/</guid>
				<description>&lt;picture&gt;&#xA;  &lt;source&#xA;    type=&#34;image/webp&#34;&#xA;    srcset=&#34;https://charliehowlett.co.uk/posts/2018-11-02-prom-keypad/clean_wiring_hu_9dcf58a94585cfa6.webp 720w, https://charliehowlett.co.uk/posts/2018-11-02-prom-keypad/clean_wiring_hu_ef0052c3d807e7e.webp 1440w&#34;&#xA;    sizes=&#34;(max-width: 700px) 90vw, 720px&#34;&gt;&#xA;  &lt;img&#xA;    class=&#34;image-large&#34;&#xA;    src=&#34;https://charliehowlett.co.uk/fallback-images/posts/2018-11-02-prom-keypad/clean_wiring.jpg&#34;&#xA;    alt=&#34;The final keypad lock wiring after we cleaned up the hardware&#34;&#xA;    width=&#34;1920&#34;&#xA;    height=&#34;1080&#34;&#xA;    decoding=&#34;async&#34;&gt;&#xA;&lt;/picture&gt;&#xA;&#xA;&#xA;&lt;p&gt;This first-year group project started with a simple brief: build a keypad-controlled digital lock using a Raspberry Pi. It was a small project, but a very rewarding one, and it introduced me to some great people. Ultimately, our project was chosen by the lecturer to be demonstrated at subsequent university open days.&lt;/p&gt;&#xA;&lt;p&gt;The main constraint was that we were not allowed to rely on interrupt-driven input for the membrane keypad. Instead, we had to detect key presses by polling the Pi&amp;rsquo;s pins and working through the keypad matrix ourselves. On top of the basic four-digit passcode entry, we added status LEDs for correct and incorrect codes, a short delay after failed attempts to make brute forcing less practical, and a text-based interface for changing settings after the user had gained access. We also wrote software to attack our own system by generating electrical signals that mimicked key presses.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
