Posts

NanoClaw on RISC-V: from "it works on my board" to automated builds

NanoClaw on RISC-V: from "it works on my board" to automated builds

Photo by Pedro Romero on Unsplash Introduction In Part 1, I proved that NanoClaw builds and runs on riscv64 without source patches. Great. But …

NanoClaw on RISC-V: Running an AI Agent Runtime on a Banana Pi F3

NanoClaw on RISC-V: Running an AI Agent Runtime on a Banana Pi F3

Photo by Tom Fisk on Pexels Can you run a full AI agent orchestration runtime on a $100 RISC-V board? My money was on "probably not," but I …

Benchmarking llama.cpp on SpacemiT K3: RISC-V AI Cores vs Standard RVV (Part 4)

Benchmarking llama.cpp on SpacemiT K3: RISC-V AI Cores vs Standard RVV (Part 4)

TL;DR SpacemiT's K3 has two core types: X100 (general-purpose, vlen 256) and A100 ("AI cores", vlen 1024). Standard llama.cpp runs 2.3x …

Building a Python Wheel Factory for RISC-V

Building a Python Wheel Factory for RISC-V

Photo by Homa Appliances on Unsplash You know that feeling when you type pip install tokenizers and it finishes in three seconds? That satisfying …

Installing XCP-ng on Scaleway Elastic Metal: 30 Hours of Pain, 10 Minutes of Script

Installing XCP-ng on Scaleway Elastic Metal: 30 Hours of Pain, 10 Minutes of Script

Photo by Simon Infanger on Unsplash Series: AI Agents on Self-Hosted Infrastructure link:{% post_url …

Running 100 Wasm Containers on a Raspberry Pi (with 903 MB of RAM)

Running 100 Wasm Containers on a Raspberry Pi (with 903 MB of RAM)

Photo by Wolfgang Hasselmann on Unsplash In my link:{% post_url 2026-02-17-WebAssembly-on-Embedded-Devices-Atym %}[first article], I built …

Your AI Agents Need Their Own Computers

Your AI Agents Need Their Own Computers

Part 1 of 3: Why the future of AI-assisted development runs on hypervisors Photo by Cookiecutter on Pexels You know that moment when you read …

Running a Local LLM on RISC-V: Building llama.cpp on a Banana Pi F3 (Part 1)

Running a Local LLM on RISC-V: Building llama.cpp on a Banana Pi F3 (Part 1)

TL;DR I built llama.cpp from source on a Banana Pi F3 (SpacemiT K1, riscv64), ran TinyLlama 1.1B, and got an OpenAI-compatible API server running at …

Building WASI SDK on RISC-V: Self-Hosted WebAssembly Development on a Banana Pi F3

Building WASI SDK on RISC-V: Self-Hosted WebAssembly Development on a Banana Pi F3

Photo by Quang Vuong on Pexels In my previous article, I ran WebAssembly containers on a RISC-V board and hit a wall: WASI SDK, the standard …

When a Docker Captain Puts an AI Tool in a Container on RISC-V (Because Of Course He Does)

When a Docker Captain Puts an AI Tool in a Container on RISC-V (Because Of Course He Does)

TL;DR OpenClaw is one of those AI assistant tools that’s been making the rounds lately. My reflex when I see popular software? Two questions: can I …

Can WebAssembly Run on RISC-V? Testing Atym Containers on a Banana Pi F3

Can WebAssembly Run on RISC-V? Testing Atym Containers on a Banana Pi F3

Photo by Thibaut Tattevin on Pexels In my previous article, I built WebAssembly containers with Atym on x86 and got application binaries under 23 KB. …

WebAssembly on Embedded Devices: A Docker Captain Tries Atym

WebAssembly on Embedded Devices: A Docker Captain Tries Atym

Photo by Alexandre Debiève on Unsplash I’ve been running Docker containers on tiny ARM boards for twelve years. Rock Pi S with 512 MB of RAM. Orange …

Running Node.js on RISC-V with Docker (when there's no official image yet)

Running Node.js on RISC-V with Docker (when there's no official image yet)

Photo by Tatiana P on Unsplash You know that moment when you try docker pull node --platform linux/riscv64 and Docker comes back with this? Using …

What About iOS? Or, How a 30-Dollar Android Phone Embarrasses a 1000-Dollar iPad

What About iOS? Or, How a 30-Dollar Android Phone Embarrasses a 1000-Dollar iPad

Photo by Holmo on Unsplash I was giving my talk at a conference (the one about running Jenkins on old Android phones with Termux) and the demo had …

FOSDEM 2026: Jenkins Was There, and So Were You

FOSDEM 2026: Jenkins Was There, and So Were You

You know that feeling when you’ve been standing behind a booth for ten hours straight, your voice is gone, your feet are killing you, and you still …

How Docker Gave My 'Unsupported' GPU a Second Life

How Docker Gave My 'Unsupported' GPU a Second Life

Photo by Vanessa Frosali on Unsplash I became a Docker Captain in January 2026. After more than a decade of using Docker, 37 images on Docker Hub, …

The Old Dog Learns a New Trick: Cross-Compiling Tauri CLI for RISC-V

The Old Dog Learns a New Trick: Cross-Compiling Tauri CLI for RISC-V

Photo by Dariusz Piosik on Unsplash Previously, on "Bruno Fights RISC-V" If you missed the first episode (available here), here’s the recap: …

Adding RISC-V Support to Armbian Imager: A Tale of QEMU, Tauri, and Deja Vu

Adding RISC-V Support to Armbian Imager: A Tale of QEMU, Tauri, and Deja Vu

Photo by SnapSaga on Unsplash The Setup Armbian Imager is a Tauri 2 application: React frontend, Rust backend, builds for Linux (x64, ARM64), macOS …

BuildKit for RISC-V64: When Your Demo Decides to Betray You

BuildKit for RISC-V64: When Your Demo Decides to Betray You

<!-- Converted from AsciiDoc by asciidoc-to-jekyll agent Original file: …

Fixing Concurrent GitHub Actions Workflows: Multi-Architecture Package Repository Guide

Fixing Concurrent GitHub Actions Workflows: Multi-Architecture Package Repository Guide

Building and distributing software packages across multiple architectures (x86_64, aarch64, riscv64) sounds great in theory. But when I tried to …

Building Next.js SWC from Source for RISC-V: A Journey Through the ring Dependency Maze

Building Next.js SWC from Source for RISC-V: A Journey Through the ring Dependency Maze

<!-- Converted from AsciiDoc by asciidoc-to-jekyll agent Original file: …

Automating Jenkins on Old Android Phones: From Naive Experiment to Production-Ready Infrastructure

Automating Jenkins on Old Android Phones: From Naive Experiment to Production-Ready Infrastructure

I had this old Android phone sitting in my drawer. You know the type - perfectly functional, but replaced by a newer model, gathering dust for …

Android and Jenkins: What Is the Limit? Part Two.

Android and Jenkins: What Is the Limit? Part Two.

I know it’s been over two years since the first article of this series, but hey, life happens! I’ve been juggling quite a few things that are more …

A glimpse of the future

A glimpse of the future

A glimpse of the future You’ve all seen it before: the bitter sting of botched predictions. Flying cars, nuclear ovens in the kitchen, killer robot …

Building Android apps with Jenkins: release management

Building Android apps with Jenkins: release management

The previous blog post of this series discusses what I think makes CI/CD for mobile app development a unique kind of animal, and my first steps in …

Building Android apps with Jenkins: an introduction

Building Android apps with Jenkins: an introduction

image::assets/images/2023/04/05/2023-04-05-android-and-jenkins-discovery/profile_of_cicd_users.png[profile of ci/cd users] Why is mobile CI/CD …

Android and Jenkins

Android and Jenkins

Android and Jenkins. What is the limit? Wait, what? Why would there be a limit for Android and Jenkins? Is Jenkins somehow limited in building …

miniJen and RISC-V

miniJen and RISC-V

Short Introduction What is miniJen? It’s the Jenkins multi-cpu-architectures smallest instance known to this day. It’s composed of a 4 arm) …

miniJen is alive!

miniJen is alive!

miniJen The Jenkins multi-architecture CPU instance What is that contraption? Nope, it’s not a robot of some sort, it won’t move by itself. It’s not …

🍊 ARM your continuous integration system with fruits! 🍌

🍊 ARM your continuous integration system with fruits! 🍌

The goal of this howto is to show you how to add your own ARM Gitlab runner to your Gitlab instance Runners herd. Whaaaaaaaaaat? Ok, let me introduce …

Bringing AI Agents to RISC-V64: The First cagent Distribution Package

Bringing AI Agents to RISC-V64: The First cagent Distribution Package

Bringing AI Agents to RISC-V64: The First cagent Distribution Package <span id="author" class="author">Bruno …

Build a Jenkins MSI on your own Windows machine

Build a Jenkins MSI on your own Windows machine

Should you ever need to rebuild a Jenkins MSI on your Windows machine, here is a way to do it. Pre-requisites Jenkins WAR file First of all, you …

Building Node.js Natively on RISC-V: A 15-Hour Journey from Fork to Release

Building Node.js Natively on RISC-V: A 15-Hour Journey from Fork to Release

When I set out to add native RISC-V 64-bit build support to the Node.js unofficial builds project, I thought it would be straightforward: fork the …

BuildKit for RISC-V64: When Your Package Works But Your Container Doesn't

BuildKit for RISC-V64: When Your Package Works But Your Container Doesn't

I successfully built and packaged BuildKit for RISC-V64. Users could download it. The GitHub Actions workflows were green. Everything looked perfect. …

Compile FFmpeg on the Odroid XU4 to get hardware acceleration

Compile FFmpeg on the Odroid XU4 to get hardware acceleration

sudo apt-get build-dep ffmpeg sudo apt install debhelper libchromaprint-dev frei0r-plugins-dev libgnutls28-dev libx265-dev ladspa-sdk libaom-dev …

Create a new Jenkins node, and run your Jenkins agent as a service

Create a new Jenkins node, and run your Jenkins agent as a service

In this tutorial, we will see how to start a Jenkins agent as a Linux service with systemd. Most of the time, I use Docker for my agents, and I enter …

Docker Buildx for RISC-V64: When Infrastructure Just Works

Docker Buildx for RISC-V64: When Infrastructure Just Works

Sometimes the best technical stories aren’t about heroic debugging sessions or clever workarounds. They’re about the moment when you realize your …

Docker v29 Lands on RISC-V64 in Under a Week: The Future is Here

Docker v29 Lands on RISC-V64 in Under a Week: The Future is Here

Docker Engine v29.0.0 was officially released on November 6, 2025. Just 5 days later, Docker CLI v29.0.0 was available for RISC-V64. By November 12 …

Firefly Station P1 first review

Firefly Station P1 first review

Full disclosure: I was one of the winner of a free Station P1 and they asked to provide a feedback. I’m a RockChip RK3399 SoC family fanboy. That’s …

First Words: LLM Inference on RISC-V

First Words: LLM Inference on RISC-V

Photo by Pixabay on Pexels This is part three of the RISC-V wheel factory series. Part one: link:{% post_url …

How to install Armbian on the Station P1 starting from Android

How to install Armbian on the Station P1 starting from Android

balbes150 asked the other day on the Armbian forum if NicoD could make a video about installing Armbian on the Station P1 directly, without using …

Installing asciicast2gif on aarch64 Debian bullseye

Installing asciicast2gif on aarch64 Debian bullseye

asciicast2gif: one way to produce a GIF file from your terminal session Why? Last year, I wrote a blog post about producing SVG and GIF files from a …

Installing Caffe on the Orange Pi 4B

Installing Caffe on the Orange Pi 4B

Install dependencies sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev protobuf-compiler cmake sudo …

Installing libltc on armhf Debian

Installing libltc on armhf Debian

Installing libltc on armhf Debian One of my (way too many) current projects is to create a device that would mimic dish.tc. I have created a …

Installing TensorFlow on the Orange Pi 4B

Installing TensorFlow on the Orange Pi 4B

This quick howto is heavily based on Orange Pi’s documentation. To this day, Orange Pi recommended versions of TensorFlow and Python are quite old: …

Running a 70B LLM on Pure RISC-V: The MilkV Pioneer Deployment Journey

Running a 70B LLM on Pure RISC-V: The MilkV Pioneer Deployment Journey

When the 40GB download completed and the model loaded into memory, I wondered: would a 70-billion parameter language model actually run on a RISC-V …

Running GitHub Actions on RISC-V64: A Production Journey with Docker Builds

Running GitHub Actions on RISC-V64: A Production Journey with Docker Builds

Setting up continuous integration for RISC-V64 is not as straightforward as x86_64 or ARM64. The official GitHub Actions runner doesn’t support …

Sphinx: Installing sphinxbase on the OrangePi 4B

Sphinx: Installing sphinxbase on the OrangePi 4B

This post will be part of a series regarding generating subtitles for videos with the OrangePi 4B running Armbian. We’re not yet sure of what we’ll …

Spring Cleaning a 2.1M+ Pull Docker Project: From Buster to RISC-V

Spring Cleaning a 2.1M+ Pull Docker Project: From Buster to RISC-V

Abstract: I maintain docker-adb, a Docker image for Android Debug Bridge that’s been pulled over 2.1 million times from Docker Hub. Today I tackled …

Terminal recording on the OrangePi Zero

Terminal recording on the OrangePi Zero

Terminal recording on the OrangePi Zero Lately, I started writing a few articles on the OrangePi Zero, as I am trying to use it as part of a …

termtosvg on aarch64 Debian

termtosvg on aarch64 Debian

Installing termtosvg on an aarch64 machine running bullseye. What is termtosvg and what can I do with it? Term to what? termtosvg is an abandonned …

The Dependency Rabbit Hole: Why 25 RISC-V Python Wheels Weren't Enough

The Dependency Rabbit Hole: Why 25 RISC-V Python Wheels Weren't Enough

You know that feeling when you’ve just shipped something, everything’s green, and you lean back in your chair thinking "nailed it"? …

The One-Line Patch That Unlocked Next.js on RISC-V: A Detective Story

The One-Line Patch That Unlocked Next.js on RISC-V: A Detective Story

<!-- Converted from AsciiDoc by asciidoc-to-jekyll-converter Original file: …

The Ring Around the Rosie: Upgrading Next.js on RISC-V from 13.5.6 to 14.2.35

The Ring Around the Rosie: Upgrading Next.js on RISC-V from 13.5.6 to 14.2.35

I had a working Next.js 13.5.6 setup on my Banana Pi F3. Then Dependabot showed up with PRs bumping to 14.2.35, and suddenly my carefully built SWC …

Using jenkins to build Android applications

Using jenkins to build Android applications

Come join me at DevOps World 2022 for "Naively Building Android Apps with Jenkins. Not Natively, Naively.", a talk about my journey with …