One of my responsibilities on the Linux Kernel team is to build our version of the Linux Kernel from distinct branched in a git repo. Our approach is a little different than most organizations, and so we have custom code to implement our logic. Over time, I have come to realize a few patterns that make our lives easier in how I approach organizing this code.
Continue readingFind the IP address of a machine I just booted
I am booting VMs via qemu (no libvirt) and sometimes they don't tell me what IP address they got when booted. To figure it out, considering I know the IP address, I can query the network via the Address Resolution Protocol (ARP)
I know they get address in sequence, so:
ayoung@sut11sys-r112:~/devel/ampvirt$ arp -n | grep -i "52:54:00:70:0c:"
10.76.112.154 ether 52:54:00:70:0c:02 C virbr0
10.76.112.153 ether 52:54:00:70:0c:04 C virbr0
10.76.112.155 ether 52:54:00:70:0c:03 C virbr0
Teaching Python using a Caesar Cipher
A Caesar cipher is a letter for letter exchange from a clear text to a encrypted text by shifting a set distance in the alphabet. Thus, if your set distance is 2, the letter A becomes C, the letter X becomes Z. To encrypt the last letters of the alphabet, you wrap around to the beginning, so Y becomes A and Z becomes B.
Caesar is commonly respelled to Ceasar, which I have done for this article. Use the spelling of your choice.
This is a fairly easy algorithm to code, and makes for a decent early class in python. Here are the steps I would go through to teach someone:
Father’s day project
Getting a little more organized in my workshop. My pain point was boxes of nails or screws falling off shelves.
And, of course, I wanted an excuse to use the laser cutter.


I took a lesson from Minecrafters and put an instance of what was inside the box on the front id the box.
Downloading from gitlab
We use gitlab to post internal releases of archives. I want to be able to automate the process of downloading these artifacts. Here it is using the glab CLI.
Continue readingDebugging Rust in Vim
On Fedora:
yum install termdebug
in ~/.vimrc
let g:termdebug_config = {}
let g:termdebug_config['command'] = 'rust-gdb'
packadd! termdebug
Inside vim:
Termdebug target/debug<executable>
Use Ctrl-W DownArrow to switch between windows
Use :Break to set a breakpoint in the code window
Use Ctrl-W UpArrow to go to the gdb window
use run to run the program and cont to continue after hitting a break point.
Selecting a subset of files for ctags
I usually don’t want all of the files in the linux Kernel for my ctags. Sometimes I want a cvery small subset: a set of C files and the included header files.
Continue readingFixing my virt Network
I got my network working again, and this time I am running the VM as non-root user.
Continue readingResizing filesystem on A Fedora 43 Cloud image
THe cloud image is shipped as a qcow2 file. It has about 3 GB of usable space. I need more.
Continue readingNetwork setup for a custom Qemu Virtual Machine
After building a custom Qemu, there are a couple ways to run a VM to get to it. The older approach to VM management is to create a block device, run the VM with a boot device, do a full install and log in to the serial console. However, if you run the Qemu/KVM machine from the command lilne, hitting control C will stop your VM, and this is annoying. I have found it worth while to set up networking and then to SSH in to the machine.
My notes here suck. I am going to try and document what I have here working, and, over time, reverse engineer how I got here.
Edit: here are the steps