Finishing the Odroid C2 PicoCluster

This weekend I was making good progress on my PicoCluster project. Initially I had thought that I could assemble everything first, replacing the OS with a cloud-init enabled version later on. But as it turns out, this is pretty much impossible when using eMMC instead of µSD as storage device - there is just not enough room to detach and reattach the eMMCs. So I needed to have the proper image on the eMMCs right from the start.

HypriotOS & cloud-init

Stefan Scherer had already implemented cloud-init support for HypriotOS in his GitHub fork of image-builder-rpi, and I had already integrated most of his changes - everthing except for documentation - into my working fork of the image-builder-odroid-c2 a while ago. Rebasing those changes onto master and running a local build of the image-builder was straightforward, and I could start flashing the eMMCs within 30 minutes.

My cloud-init Configuration

The configuration I’ve initially used for the five Odroids is available at GitHub, and I will update the repository as the project advances. In order to run, the included flash script requires a clone of the HypriotOS flash utility in the repository next to it. The script itself is a simplification for passing in the correct arguments for each of the Odroids.

Example: to load my locally build image for the first instance, the script has to be run as follows:

# flash ./flash dockeroid01 ../image-builder-odroid-c2/hypriotos-odroid-c2-dirty.img.zip

Since I didn’t want to risk having to disassemble everything again, I was flashing the image board by board, verifying after each step that I could boot & connect to the system. Once done with all the flashing, I assembled all the other pieces of the PicoCluster, though I had to deviate from the instructions at some point. The finished result looks like this:

Complete Pico 5 Cluster

What’s next?

Now that the cluster is assembled, there is more to do: set up Puppet, Swarm Mode, Treafik, and migrating my existing docker containers over to the new cluster. But that’s something for another post.