Writing up what I've figured out

Working notes from years of Linux sysadmin, server setup, networking, and the occasional hardware rescue. Each walkthrough is something I hit in real work — revisited here with current context and the details I wish I'd had the first time.

Mar 2024 Servers

Change the default PHP version in OpenLiteSpeed

Swap the lsphp binary behind the LiteSpeed SAPI App. Three-click webadmin change, plus why a hard reboot is worth the two minutes.

OpenLiteSpeed PHP lsphp
Sep 2021 Linux

In-place ext4 → Btrfs conversion on Arch (and others)

Convert an existing root filesystem to Btrfs without reinstalling. Includes fstab/UUID updates, rebuilding GRUB from a chroot, and optional Snapper-based automated snapshots.

Btrfs ext4 Arch Snapper
Aug 2021 Linux

Linux network sysctl tuning cheat sheet

A reference sysctl.d drop-in for TCP throughput: window scaling, MTU probing, TCP-Illinois congestion control, sane buffer sizes. What each knob does and when not to set it.

sysctl TCP Performance
Aug 2021 Linux

Bridged VM networking with virt-manager & gnome-boxes on Arch

Let the host talk directly to VM guests on a shared subnet. QEMU bridge helper, libvirt polkit rule, virbr0 setup — and what actually needs root.

QEMU/KVM libvirt Arch
Apr 2021 Dev Tools

A Firefox + Selenium scraper on Linux, start to finish

From apt install python3 to a working scraper: virtualenv, geckodriver, login flow, pagination, and the modern Selenium 4 API (which deprecated find_element_by_*).

Python Selenium Firefox
Mar 2021 Servers

Automatic security updates on Amazon Linux

Amazon Linux doesn't enable unattended security updates by default. A short walkthrough of yum-cron, versionlock, and why AL2023 needs the dnf variant.

AWS EC2 yum-cron
Mar 2021 Linux

Mount an S3 bucket as a folder with s3fs

A minimum-viable S3-as-a-filesystem setup on Ubuntu. When it's the right tool, when rclone mount is better, and how to make it survive a reboot.

S3 s3fs FUSE
Mar 2021 Linux

Microsoft Teams on Linux, and taming the audio stack

The original Linux Teams client is long deprecated — here's what to do now (PWA / teams-for-linux), plus why pavucontrol is still the fastest fix for device-selection gremlins.

Teams PulseAudio PipeWire
Feb 2021 Dev Tools

Actually see what's inside a Java collection in IntelliJ

The default debugger view hides the real fields of a collection. One settings toggle reveals them — indispensable when you've written your own Map or List.

IntelliJ Java Debugger
Jan 2021 Networking

OpenVPN on Ubuntu with Streisand

Streisand turns a raw VPS into a multi-protocol VPN in one Ansible run. How to use the sensible subset (OpenVPN + optional WireGuard) and connect a Windows client.

OpenVPN Streisand Ansible
Jan 2021 Hardware

A toolbox of Windows repair & maintenance scripts

DISM, SFC, long-path support, Windows Store recovery, memory-compression toggle — a collection of one-shot fixes for the weirdness that accumulates in long-lived Windows installs.

Windows DISM PowerShell
Dec 2020 Servers

GitBucket: a JVM-based self-hosted GitHub clone

When GitLab is too heavy, GitBucket is often the right fit — one .war file, JVM-native, runs happily behind an OpenLiteSpeed reverse proxy. Full setup including SSL and systemd.

GitBucket Scala JVM
Nov 2020 Linux

Fix broken auto-rotation on convertibles & tablets

When the accelerometer is mounted in an unusual orientation, GNOME ends up rotating the screen the wrong way. A hwdb drop-in with the right mount matrix fixes it for good.

Ubuntu udev iio-sensor-proxy
Nov 2020 Servers

Self-hosted GitLab CE behind OpenLiteSpeed

Run GitLab alongside an existing OpenLiteSpeed site without fighting its bundled nginx/puma. External URL, shared Let's Encrypt cert, proxy context — the working path after two days of wrong paths.

GitLab CI/CD Debian
Nov 2020 Servers

Run modern Ruby + Rails on OpenLiteSpeed via LSAPI

Debian's packaged Ruby is too old for most Rails apps. rbenv + ruby-build gives you any version you want, and the OpenLiteSpeed LSAPI shim lets it serve fast without nginx in front.

Ruby Rails rbenv LSAPI
Oct 2020 Servers

Mirror a site to a new VPS in three lftp commands

For server migrations, lftp mirror over SFTP is far simpler than tar-over-SSH or rsync — it resumes, parallelizes, and handles pickup after a dropped connection. A one-page reference.

lftp SFTP Migration
Oct 2020 Hardware

Unbrick a laptop BIOS with a CH341A programmer

Last-resort revival for an ASUS laptop that won't POST. SOIC-8 test clip, AsProgrammer, reading an MX25L12873F, and why the vendor's official BIOS file won't work directly.

BIOS CH341A EEPROM
Oct 2020 Hardware

Fix Winload.EFI and other Windows 10/11 boot failures

Why Windows ends up with a single boot-loader across drives, and the exact bcdboot / diskpart sequence that rebuilds it on the correct disk when things go sideways.

Windows BCD UEFI
Sep 2020 Servers

Recommended security HTTP headers for OpenLiteSpeed

A sensible HSTS / CSP / X-Frame-Options / Referrer-Policy baseline applied via a vhost Context. Scores A+ on securityheaders.com and explains what each header actually defends against.

OpenLiteSpeed HSTS CSP
Jun 2020 Linux

Mount (or mirror) OneDrive on Linux with rclone

OneDrive has no official Linux client. rclone's OAuth flow, VFS cache modes, and remote-auth trick for headless servers — everything you need to get files off a dying free tier.

rclone OneDrive FUSE
Jun 2020 Linux

Install Firefox via Flatpak (and why you'd want to)

A four-command quickstart, plus the real reason Flatpak matters on server desktops: sandboxing, an up-to-date browser on old distros, and zero interference with the system package manager.

Flatpak Firefox Sandboxing
Mar 2020 Networking

A minimal WireGuard server & Windows client

Keypair generation, iptables MASQUERADE, full-tunnel routing from a Windows client. Straightforward modern setup — no wg-easy, no UI, just a config file you can actually read.

WireGuard Debian iptables
Mar 2020 Servers

OpenLiteSpeed full stack: PHP, MariaDB, Let's Encrypt, phpMyAdmin, NinjaFirewall

A complete web-server build from a blank Debian VPS — including the vhost symlink trick, SNI-safe certbot layout, and the forced-HTTPS rewrite rule. My longest tutorial.

OpenLiteSpeed MariaDB Let's Encrypt phpMyAdmin
Mar 2020 Hardware

Getting the XIDU PhilBook Max working on Linux

A misidentified touchpad, a deadlocked touchscreen, and a rotation matrix that points the wrong way. Two work-days of head-scratching condensed into a recipe that actually works.

Linux Touchpad i2c-hid
Feb 2019 Networking

A headless Debian desktop with TightVNC over SSH

XFCE on a VPS, multi-user VNC, an SSH tunnel so the traffic isn't clear-text — and a systemd-era rewrite of the old init.d VNC service script. Plus when to reach for X2Go instead.

VNC XFCE SSH
Jan 2019 Dev Tools

PeerBlock 1.1 rebuild with HTTPS list support

The abandoned Windows IP-filter app shipped with an HTTP-only libcurl. Here's the story of rebuilding it against a modern SSL-enabled libcurl — and what to actually use in 2025.

Windows libcurl Legacy