Ubuntu on Snapdragon X devices has been a long way coming. Getting it working on my Dell Inspiron 14 Plys (7441), was a fairly easy task. Thanks to improvements like Stubble, Secure Boot works as well. Here are the basics on getting Ubuntu 26.04 installed. Be sure to read through the whole guide before proceeding. Before Installation Before installing Ubuntu, you’ll need to perform a couple tasks within Windows. Using Disk Management shrink your Windows partition to make room for Ubuntu Create a tar file of C:\Windows\system32\DriverStore\FileRepository and transfer to a USB stick or network share. From Ubuntu, you’ll extract the firmware needed for Video, Audio, etc. Make sure you have a copy of your Bitlocker Recovery Key handy. You may be prompted for it the first couple times you boot back into Windows. Installation Insert the USB stick containing the installer image Spam F12, until you get a boot menu option. Pick the USB stick. Go through the setup wizard. Don’t wipe the disk. Once the install has finished, boot into Ubuntu. Transfer the tar of FileRepository to your system. Then, extract it. Install the firmware tool, sudo apt install qcom-firmware-extract Extract the firmware, sudo qcom-firmware-extract -d /full/path/to/FileRepository Reboot. Once the system comes back up, the following should be working: ...
Btrfs on a Hetzner Dedicated Server
This guide assumes you want to install Ubuntu 24.04, the server has a pair of NVME disks, and is set to boot using legacy mode. We also assume that the system has already been booted into the rescue system. Wipe Disks Assuming the disks are NVME. We’ll wipe the partition information from them, before proceeding. wipefs -fa /dev/nvme*n1 Install Ubuntu using installimage Hetzner provides an operating system installation tool, installimage. We’ll use this to partition, install the OS, and perform network configuration. The install configuration should look like the following: ...
Using Claude Code With Local Models
While Claude Code is designed to be used with Anthropic’s service. You can in fact use it with third-party services, and even local models. To get started using it with a local model, you’ll need a few things (I’m assuming you’re using a Linux systems): Docker NVIDIA Container Toolkit (If using some other GPU, you’ll need to adapte the Docker compose file) VS Code with Claude Code extension And, of course, a local model Personally, I like to use Docker to containerize my models. Using a container, you can easily try out different runtimes, proxies, etc. For this, I’m using Docker to run gpt-oss-120b under llama.cpp. In order to adapt the API of llama.cpp to what Claude Code expects, we’re using LiteLLM. ...
Splitting Production From Dev
When I moved to self-hosting everything, my production and development environments were merged. My on-prem hosting capacity is limited, and even more so now that component pricing has gone insane. I have opted to migrate my production services that aren’t located behind a VPN to a dedicated server with Hetzner. This has also given me an opportunity to play with new configurations like security options and file systems. For example, I have gone with btrfs in a RAID1 configuration. Over time, I plan to share more about how that deployment was done, and any lessons learned afterward.
Back to Self Hosting
For a long time, I have relied on VPS or VM hosting services to host my sites and applications. While that could be considered self hosting, as I managed the VPS myself, it’s not fully self hosting. Recently, I picked up a mini PC, with an Intel N150 CPU. Installed Proxmox, created VMs, etc. Just like before, I’m still using Ansible for system configuration. To handle the multiple web applications, and a desire to avoid custom ports, I am using Cloudflare’s tunnel service. This makes it easy to map hostnames to my services, avoid the need for dynamic DNS, and no need for port forwarding. As for what the future holds, perhaps I will move the blog to Cloudflare’s Workers at some point (they appear to be deprecating their much simpler Pages service).
Moved to a New Host
Until recently, I have been hosting my blog and other services on ColoCrossing. Unfortunately, their VPS service has been hacked. They are claiming that services were taken offline to prevent further issues, however, others have posted screenshots from the hackers indicating they may have deleted some customer data. So, in the interest of getting things back online, I opted to move everything to a new host. It’s a bit more expensive than what I was paying (I had been on a holiday special plan), but the performance is much better.
Shop and Roadster Update
The shop is coming along. Installed heat some weeks back, just a simple 18K BTU diesel fuel heater. It’s not perfect, but it does take the chill off. More recently, setup an old computer to make it easier to look up documentation, part specs, etc. I had been using my laptop on occassion, but didn’t want to get a greasy finger prints on it. As for the roadster project, it’s going slowly, but it is moving along. The suspension, brakes, and steering are assembled. Though, some need to be set to final torque. Currently working on pedals and steering column. Then back to sheet metal work. Should be ordering tires and remaining engine parts soon, though I do have an oil pan on the way.
Front Matter CMS
Along with the switch back to CF Pages, I am making the switch to using Front Matter for content management. Hopefully the switch will make things easier, and improve the rate at which I post stuff.
New Garage Is Almost Done
It’s true! The new garage is almost finished. It’s taken over a year to get to this point. The main delay was permitting related, both on the city side and the contractor side. The initial design proposal didn’t meet code requirements, and some negotiating was required. From there, we had delays due to employees being out sick (understandable), and general site plan issues. Once those were sorted, the project picked up speed. Now, we’re simply waiting on the door and gutters to be installed. That, and I’ve got to finish painting. But, that’s a relatively quick task with a sprayer.
Hosting Infrastructure Change
It wasn’t long ago that I moved my blog to IPFS. However, we’re back to a traditional setup. The change wasn’t due to some issue with IPFS, pinning service, etc. It was simply a change of requirements. I had a need for a VM to run some server-side logic for another project, so I chose to roll everything into one system. Here’s what my current setup is: Registrar / DNS: Cloudflare VM Hosting: OVHcloud Email: Mailbox.org On the VM side of things, I’m running: ...