Restoring a Half‑Completed Borg Backup That Stopped at 50%

When a Borg backup stops halfway

You’re in the middle of a nightly backup of your homelab server, the progress bar hits 50 % and then the process dies. Maybe a sudden power loss, a network hiccup, or a disk error. The archive on the remote storage looks like a half‑filled container. You’re left with a repository that has a partially written archive. How do you recover the data you already captured, and how do you finish the backup without starting from scratch?

[Read More]

I kept my home server from going down during Let’s Encrypt renewal – here’s the one‑liner timer I added.

Keeping a Home Server Alive During Let’s Encrypt Renewals

Let’s Encrypt certificates are only good for 90 days. On a little home box that runs a handful of services—web, mail, VPN, media—any hiccup during renewal can bring the whole stack down. I’ve seen this happen once: the renewal script fired, nginx restarted, and the firewall dropped all traffic. The fix I settled on is a single systemd.timer that guarantees the renewal runs in a safe window, with a fallback that keeps services up if something goes wrong.

[Read More]

Stopping the Journal from Flooding me with Repeated Wi‑Fi Disconnection Notices

The journal can drown you in Wi‑Fi disconnect chatter

Ever notice your laptop or Raspberry Pi stuck in a loop of “connected” / “disconnected” messages? The kernel, NetworkManager, wpa_supplicant – they all go on about it. On a busy box the journal gets clogged with the same line over and over, and your console turns into a flood of warnings that look like fresh problems every few seconds. If you’re a homelab operator, a self‑hoster, or just a sysadmin who likes a tidy log, you’ll want a clean way to silence the noise without losing the diagnostics that help you spot real outages.

[Read More]

The day my Downloads folder vanished after a simple umask change: my recovery steps

When a simple umask change turned my Downloads folder into a ghost

I was tweaking my user profile in the middle of a busy afternoon, trying to tighten up file permissions for a fresh install of Arch Linux. I had just set umask 027 in my ~/.bashrc to make new files group‑readable but not world‑readable. A few minutes later I opened my file manager, clicked on Downloads, and the folder was gone. No error, no warning—just an empty directory listing. The rest of my home directory looked fine, but the Downloads folder was missing, and all the files I had just downloaded were nowhere to be seen.

[Read More]

Replacing Ubuntu’s Default DNS with Dnsmasq: Fixing Stale IPs in My Home Network

Stale IPs on a Home Network? Let dnsmasq Clean Up the Mess

If you’ve ever pinged a device that had moved to a new address and the reply came from an old IP, you’ve probably been frustrated by the same stale DNS entries that linger in the resolver cache. On a typical Ubuntu desktop or server, systemd‑resolved is the default DNS stub. It’s great for most use cases, but it can keep outdated records for a long time, especially when your router’s DHCP server changes leases frequently. The result? Your own machine keeps trying to resolve a dead address until the cache finally expires.

[Read More]

Why my nightly rsync backup disappeared after switching to a systemd timer – and how I fixed it with 'Persistent=true

Nightly rsync vanished after moving to systemd timers

I had a simple nightly backup script that ran under cron for years. One evening I decided to modernise the scheduler: replace the crontab entry with a systemd timer. The idea was clean, the logs would be in journalctl, and I could keep the backup logic in a single unit file. A few days later the backup disappeared from the destination directory. After a quick audit I discovered that the timer had never fired because the system had been powered off at the scheduled time. The culprit was the missing Persistent=true setting.

[Read More]

Taming My Daily Backup Script’s CPU Spikes with `nice` and `ionice`

Why CPU Spikes Hurt Your Backup

Running a nightly backup with rsync or tar is a staple of any homelab or self‑hosted server. Even if the backup finishes in a few minutes, a sudden burst of CPU usage can push the system into a state where interactive work stalls, background services lag, or even the backup itself stalls due to contention. On a machine that also hosts a web server or a desktop, those spikes become noticeable. The good news is that Linux gives you two lightweight knobs—nice and ionice—to dial the priority of a process without touching the kernel or installing extra software.

[Read More]

Running Podman as a Non-Root User on a Headless Server

Install Podman and Enable User Namespaces

sudo apt update
sudo apt install -y podman

On Debian 12, Podman ships with userns-remap turned off.
I always enable it right away by editing /etc/containers/containers.conf:

[engine]
userns = "keep-id"

keep-id keeps the container’s UID/GID the same as the host user’s, which is the simplest approach for a single‑user homelab. If you have multiple users, you might want auto or a custom mapping.

After that tweak, restart the daemon:

[Read More]

Introduction to OpenSearch

A Powerful Open-Source Search and Analytics Engine

In the world of modern software, efficient search and analytics capabilities are essential to ensure that users can quickly retrieve relevant data and gain insights. OpenSearch is an open-source, distributed search and analytics engine that provides real-time indexing and search capabilities for large-scale applications. Originally derived from Elasticsearch, OpenSearch is designed to be a community-driven project that offers full compatibility with Elasticsearch 7.x and Kibana 7.x.

In this post, we’ll explore the key features of OpenSearch, its benefits, and its use cases. Whether you’re building an enterprise-level search solution or analyzing logs for security and monitoring, OpenSearch can meet your needs with its powerful features and flexibility.

[Read More]

Open Source and Free Software

A Guide to Popular Licenses like GPL, BSD, and Apache

Introduction

Open source and free software are foundational to the modern tech world. They empower developers and organizations with the freedom to use, modify, and share software without many of the restrictions associated with proprietary software. These freedoms encourage collaboration, innovation, and transparency, fueling countless projects and businesses. But with this freedom comes the responsibility to respect the licenses that govern how open source software can be used and distributed.

[Read More]