May 22, 2025 - Radeon 9070 XT on Ubuntu 24.04 with ZFS

Radeon 9070 XT on Ubuntu 24.04 with ZFS

I rarely update my desktop but when I do I like to buy the latest things right when they come out. This can lead to some issues with Linux and drivers and most recently I bought a Radeon 9070 XT which the kernel AMD driver does not support in Ubuntu’s 6.8 kernel. I also use ZFS for much of my storage so I needed to have the kernel modules for that as well. The lates Mesa version and some addition GRUB command line settings are needed to prevent Steam from crashing.

(I briefly tried AMD’s proprietary driver and Steam would crash while running that with the default 6.8 kernel. I decided to go with the kernel driver since that seemed like a more documented path.)

1. Updating the Kernel

This blog post summarizes the options for drivers, however the Linux kernel drivers only support the Radeon 9070 XT after 6.12.

The latest kernels are readily built and distributed by Ubutu from the Mainline server.

1.1. Installing from Mainline

  1. Download all .deb packages from a version and arch directory of your choice. For example, v6.14.8/amd64
  2. Install them all with apt install ./*.deb. (Note the path specifier ./ which will make apt look for files instead of package names.)
  3. Reboot and verify the running kernel with uname -a.

But, make sure you don’t depend on ZFS for anything because you don’t have kernel modules for this kernel verison yet.

2. Installing the Latest OpenZFS

OpenZFS doesn’t support kernel 6.14 until version 2.3.2 so trying to use Ubuntu’s zfs-dkms package to build kernel drivers for the default version 2.2.2 won’t work. Now you’ll need to update ZFS to the latest release. They have nice support for building Debian DKMS packages though. However, because the mainline kernels are built with gcc-14, you will also need to install that compiler in order to build kernel modules for it.

2.1 Remove Default Ubuntu ZFS Packages

First the old version of ZFS has to go:

  1. apt remove zfs-zed zfsutils-linux zfs-dkms libzfs4linux
  2. apt auto-remove

2.2 Installing gcc-14

OpenZFS has a history of having a misleading error message for when the compiler does not match the one used to build the running kernel. If you see this error when trying to build OpenZFS:

*** This kernel does not include the required loadable module
*** support!
***
*** To build OpenZFS as a loadable Linux kernel module
*** enable loadable module support by setting
*** `CONFIG_MODULES=y` in the kernel configuration and run
*** `make modules_prepare` in the Linux source tree.
***
*** If you don't intend to enable loadable kernel module
*** support, please compile OpenZFS as a Linux kernel built-in.
***
*** Prepare the Linux source tree by running `make prepare`,
*** use the OpenZFS `--enable-linux-builtin` configure option,
*** copy the OpenZFS sources into the Linux source tree using
*** `./copy-builtin <linux source directory>`,
*** set `CONFIG_ZFS=y` in the kernel configuration and compile
*** kernel as usual.

Then check the build log in build/build.log.configure for a real error message. Chances are you do not have gcc-14 installed. Fortunately, that’s availible from Universe.

  1. Verify you have Universe enabled by looking for “universe” in the Components line in /etc/apt/sources.list.d/ubuntu.sources
  2. Install with apt install gcc-14

2.2 Building OpenZFS DKMS Packages and Installing

  1. Install needed packages with apt install build-essential autoconf automake libtool gawk alien fakeroot dkms libblkid-dev uuid-dev libudev-dev libssl-dev zlib1g-dev libaio-dev libattr1-dev libelf-dev linux-headers-generic python3 python3-dev python3-setuptools python3-cffi libffi-dev python3-packaging debhelper-compat dh-python po-debconf python3-all-dev python3-sphinx libpam0g-dev dh-dkms libtirpc-dev libcurl4-openssl-dev
  2. Download OpenZFS source tarball from a release, EG v2.3.2
  3. Extract with tar -xf zfs*.tar.gz
  4. Change to the zfs directory with cd zfs
  5. While running the new kernel, configure with ./configure
  6. Compile with make native-deb-utils
  7. In the directory above zfs, there will now be a bunch of packages. Delete an uneeded one with rm openzfs-zfs-dracut_2.3.2-1_all.deb and install the rest with apt install ./*.deb

You can now check with zfs or zpool commands to verify that the kernel module is finding your existing volumes.

After rebooting, you will need to run zpool import -a to re-import pools.

3. Installing the Latest Mesa Packages

The latest version of Mesa (25) is needed as well. A kind person runs a PPA with the latest Mesa packages.

  1. add-apt-repository ppa:kisak/kisak-mesa
  2. apt update
  3. apt upgrade

4. Adding GRUB Command Line Setting to Disable split-lock

This seems to be a common recommendation for performance and stability with Steam and gaming. There’s a long opinionated article on it, but I just disabled it and Steam stopped crashing.

  1. Edit /etc/default/grub and add split_lock_detect=off to the command line.
  2. Reboot and verify with cat /proc/cmdline

4. Bonus: Overclocking and Monitoring

Of course you want a handy control panel for managing the card with status monitoring:

LACT

Jul 31, 2022 - Pi Frame

Raspberry Pi Picture Frame

My digital picture frame passed on to its reward and I was very dissapointed in the available options on the market. The resolutions seemed terrible and they were all 16:9 aspect ratio. As is typical no days, most also wanted to connect to some cloud service to get their pictures as well, although they would read an SD card too.

I had my first LCD monitor still, actually one of a pair as I’d given away the other years before. It is a 15” 1024x768 but excellent (for 2002) color and contrast. I also had an original Pi that I paid a friend 0.2 BTC for back when Bitcoin was $100 that was collecting dust. So, I put things together by making a VESA mount case out of some epoxy-filled oak I had lying around as well:

Unassembled Case

Detail of Case

Back View

Front View

Materials

Programming

I wanted to only power the monitor from 7:00 am to 5:00 pm when I’m in my office to see it. Conveniently, there is a Pi command to have the video core put the monitor into standby mode which consumes less than 1W. I wrote a simple BASH script to show a random image from a folder every 4 hours and put it in a cron job that runs every minute. Not terribly efficient but the Pi doesn’t have anything else to do.

#!/bin/bash

hour=$( date +"%H" )
if [ $hour -ge 19 ] || [ $hour -le 7 ] ; then
        killall -q fbi
        vcgencmd display_power 0 > /dev/null
elif ! pgrep -x fbi > /dev/null  ; then
        vcgencmd display_power 1 > /dev/null
        killall -q fbi
        images=$( ls -d /home/pi/frame/images/* )
        fbi -a --noverbose -T 1 -t 14400 -u -1 $images > /dev/null
fi

May 23, 2022 - Budget Castle

My motivations behind tracking spending

Over the years I found myself having two feelings about spending: first, that I can’t afford what I want so I will spend hours pining away thinking about whatever it is and second, simply buying what I want and feeling unsure about whether I will be able to afford it. Coincidentally the oversaving from the first has off-set the overspending from the second. However I was left with perpetual uncertainty about how my choices to buy something now affected what I could buy later and whether I was buying what I truly wanted.

Around 2014 I read All Your Worth and made a better effort to really separate out the money I put towards things that I needed, things I wanted, and savings for the future. After doing so for a little while I decided there was a second dimension to spending money besides what you spend it on and that is when you make the decision to spend it.

Most of the needs and savings spending ends up being decided at one time, often rationally with a spreadsheet, and that decision is perpetuated through automatic tools. Examples are picking a payroll deduction percentage for a 401k retirement plan, signing a lease on an apartment with a fixed rent and setting up automatic payments, and even utility bills and cell phone bills are mostly fixed in that you can figure out a monthly average with historical data and consider that amount to be your spending.

After figuring out the needs and saving categories of my budget, I was left with the wants. I quickly figured out that signing up for Netflix, eating out for a restaurant, and buying a new woodworking tool all feel very different even though they are all in the want category. Using the same strategy as I did with my needs and savings, I listed out all the things I had already decided to spend money on like haircuts, streaming media, and house cleaners and considered that part of my wants budget already spent. What was left with was money I was going to decide how to spend on a daily basis. This is the money I needed to manage emotionally.

I needed help managing how I felt about small daily treats like eating out and major hobby purchases that did require some saving. I wanted a way to be conscious in my choices about them instead of continuing to just spend and hope everything worked out. What I wanted was to control small impulsive spending and have that restraint enable me to feel that larger purchases were ok to make. I wanted both discipline and permission to be part of my spending. An obvious strategy would be to use only cash for this spending but cash can’t be used with modern spending like Amazon or Steam and most credit cards give rewards you would miss out on by not using them.

Enter the budget castle. I decided to imitate cash by using plastic poker chips. I would set out a fixed amount each week and when I purchased things, I would take them away to leave me with a physical representation of the money I had left. Of course, being a woodworker, I used a Forstner bit to put some holes in a board to keep the chips stacked and set the board on a spare fabric box to hold discarded chips. I later made a proper one for a friend out of southern yellow pine and its appearance led me to dub it the budget castle because the sections that hold the chips look like the outline of a castle turret and the bin for the chips looks like a moat. I made a run of four of them out of ½” plywood for myself.

Initially I did budgeting monthly but I decided later to do it on an interval of 4 weeks since that gave me a consistent day (Sunday for me) to lay out my next round of spending. This requires a bit more spreadsheet work since a lot of spending is set up to be monthly and it must be converted to weekly when figuring out your initial budget.

budget castle

Using the Budget Castle

The goal of the budget castle is to bring the tangibleness of cash to budgeting and spending decisions without needing to use actual cash or a data-stealing phone app. By not using cash, you can use and manage credit cards with rewards, points in app stores and other ways of spending that are more convenient or give you perks for using them. The compromise is that you have a physical thing you have to remember to update, the budget castle’s chips, but the act of doing that is what adds deliberateness to the act of spending.

The castle also provides a tangible representation of how much you have decided it is ok to spend. This means you can trade off current spending against future spending by making conscious decisions. As an example, you might choose to skip eating out during a cycle and collect leftover chips in order to use them on a vacation in a few months.

However, the castle is not a cash flow tool. The timing of your spending is not considered in the process so you must have the savings available to support that. If you already have several months of spending in a cash account, you can safely use this process. If you do not, you may need to greatly reduce your budget (below) and carefully manage your cash flow for a few months until you do.

Selecting a budget

The castle helps with making decisions about your priorities for spending your money. As such, the most important part of the process is selecting the amount of money you want help with making decisions about on a daily basis. The budget you pick should be the part of your income that you have a choice in how you spend it. Warren suggests dividing budgets into needs, wants, and savings in her book All Your Worth. You can further divide the wants category into those you have decided in advance to pay for, like an upgraded cable package or a spa membership, and those you make decisions about on a daily basis. It is these daily wants decisions that the budget castle is used for tracking.

To select a weekly budget:

  1. Calculate an average weekly income for yourself.
  2. Calculate all your needs and savings categories on a weekly basis and subtract them.
  3. Calculate any wants that you have that you regularly pay for on a weekly basis and subtract them.
  4. The remaining value is the amount you should be free to spend on discretionary wants.

What things to track

Picking what purchases count when tracking is the key to the castle working for you. Pick things you feel you have a choice about because that is what the castle is for: letting you feel good about your spending. We don’t feel good about being forced to do things so all your required spending should be subtracted upfront when picking a budget to represent with the castle.

The budget cycle

A spending cycle for the castle is four weeks. This means that the budgeting doesn’t line up with months but using weeks means you have a consistent day, like Sundays, on which to evaluate your week and reset the cycle if it is time.

The weekly time scale is also easy to think about when making decisions and seeing their effects because we often end up on a weekly cycle of spending eg dining out on Fridays, shopping on Saturdays, etc.

The main cycle

  1. Begin the cycle at the end of a Sunday by loading each column of the castle with chips that represent your weekly budget. You can define the denominations for the chips and the number of each denomination as you like. To start, try white = $5, red = $10 or $20, blue = $20 or $50.
  2. Starting Monday, each day that you spend money on your wants during the week, round the amounts to the nearest $5 and remove chips from the first week’s column and drop them into the bin. You can make change from the bin if you need to.
  3. For the next four weeks, continue to track your spending from the next column. You might have chips left over in a week, but leave them and start removing chips from the next week’s column on Mondays.
  4. At the end of the cycle, write down how much you have not spent. This can be spent in the future and can represent a long-term savings fund.

Advanced things

  • You can borrow chips from another week, typically left over chips from prior weeks but you can use future weeks, if you find yourself spending a lot in one week. Examples might be a large hobby purchase or special dinner. Or if you are spending prior weeks’ chips, your past decisions are enabling you to spend now. This borrowing makes it clear that you are choosing to spend this money now but that has an effect on what you can spend in the future.
  • You don’t have to have the same budget every week. You might find that you like to spend more at the beginning of the calendar month. When loading your castle, you can transfer more chips to that column so you don’t have to do so much borrowing.
  • Instead of saving your leftover chips separately you can roll them forward and add them to a future cycle. If you don’t have a long term saving goal, you can just distribute leftover chips onto the next cycle and spend them as you want in following weeks. You can also do both saving and rolling over.

Disclaimer: I don’t have experience with these practices without enough of a cash cushion that the timing of spending does not matter. In my case that means that all my spending comes off an account that has several months of spending in cash sitting in it. Be very aware that just following these practices won’t necessarily help you avoid carrying a credit card balance or overdrawing your account.