Enabling PostgreSQL Data Checksums on an Existing CNPG Cluster
When I initially set up my CNPG (Cloud Native PostgreSQL) cluster, I overlooked the option to enable data checksums. Data checksums ensure data integrity in PostgreSQL by allowing the system to detect corruption in data pages. When enabled, a checksum is calculated for each data page and stored alongside it. Upon reading, the checksum is recalculated and compared to the stored value, ensuring corruption can be detected early. This guide will help you enable data checksums on an existing CNPG cluster....
Transfer WhatsApp Messages from Android to iOS
After nearly a decade, I decided to switch back to iPhone for the first time since the iPhone 4. I was willing to spend an afternoon redownloading all my apps and meticulously signing in to each one, but my years of chat history on WhatsApp eluded me. Currently, there is no official way to transfer your chat history from Android to iOS. This may be changing soon, as WhatsApp recently added support for iOS to Samsung transfers on select devices with the promise of support to come soon....
Proxmox GPU Passthrough Guide
My wife and I recently started playing Cities: Skylines together with a multiplayer mod, but her older MacBook Pro wasn’t powerful enough, causing the server to throttle my game to allow hers to catch up. With the ongoing chip shortage and crypto boom, buying new hardware to remedy this issue was off the table. Instead, I opted to share my existing hardware through virtualization using Proxmox Virtual Environment and GPU passthrough....
Using the OpenFaaS IngressOperator with Traefik v2 on Kubernetes
Lately, I have been migrating the public services I have running on a DigitalOcean Droplet to a cluster of Raspberry Pis running K3s at home. To simplify the development workflow for my projects I have converted many of them to OpenFaaS functions that run on the cluster. As many of these projects are exposed as subdomains, I have deployed OpenFaaS with its IngressOperator which helps me manage the mapping from nodeinfo....
Migrate from Authy to Another 2FA App
With the recent changes to LastPass Free limiting the types of devices you can concurrently use with one account, I decided now was the time to migrate to a new service. I settled on a self-hosted instance of Bitwarden, specifically the bitwarden_rs implementation in Rust that allows me to run it within a single Docker container. One new feature of Bitwarden I was particularly happy with was the integration of a TOTP generator....
How to Create and Enable Swap in Linux
Running low on memory can cause applications to crash, the system to become unresponsive, and other issues. This is common on memory limited systems, especially on SBCs like the Raspberry Pi. Swapping to disk can be used to allow for some extra breathing room at the cost of performance. You can check to see if you already have swapping enabled by running the following command in a root shell, or with sudo....
Raspberry Pi iSCSI Root on Ubuntu 20.04
Over the holidays, I wanted to build a Kubernetes cluster on some Raspberry Pis I had, which were collecting dust. I spun up a simple Rancher K3s cluster, but quickly discovered they were heavily IO-bound. I decided that if I was going to use this cluster for real applications, I would need a better storage solution. IO performance is the primary issue keeping me from using Raspberry Pis in more of my projects....
How to Downgrade Steam Games
Yesterday, Sid Meier’s Civilization VI got a new update for the New Frontier Pass. This update had the unfortunate side effect of breaking compatibility between the Windows and macOS versions of the game, meaning that when the two versions tried to join an online game it would spit out a “Version Mismatch Error”. In order to regain compatibility I needed to rollback or downgrade my Windows version so that it would be on the same, older version as my friends on macOS....
Making a piSCSI USB Drive — Part 2
Continuing directly from my previous post, I have received my RockPi 4b in the mail and, using the exact same methods outlined before, have set it up for OTG and iSCSI. To automate these steps, I created a simple script that initiates the device and starts the mass storage module, and put it into /root/piscsi.sh #!/bin/bash -ex iscsiadm -m discovery -t st -p SERVER-IP iscsiadm -m node --targetname "TARGET-NAME" --portal "SERVER-IP:3260" --login /sbin/modprobe g_mass_storage file=/dev/sdX stall=0 I then added the following rule to crontab under root to have the script run at startup....
Making a piSCSI USB Drive — Part 1
I use my home Synology NAS to consolidate nearly all my data in one place. One exception to this is my PlayStation 4, which can connect to the NAS to consume media, but not to store games or backups. As my console’s hard drive quickly filled up, I had considered taking advantage of the PlayStation’s external hard drive support. This, however, would completely ignore the eager terabytes of available storage sitting just a few feet away in my NAS....