Edi’s 10th Anniversary

3 minute read

Exactly 10 years ago, I decided to start a small open-source project as part of my professional development. The idea for the project originated during a previous job, and the goal was to provide infrastructure for embedded developers so they could work comfortably with Debian. Apparently, I managed back then to define the goal in such a way that I still enjoy the project today, and it constantly presents me with new challenges. Here’s a quick recap:

From the very beginning, Linux containers have been my go-to solution - they’re perfect for running a target system in an isolated environment on a host system. Somehow, I actually managed to set up cross-compilation for the arm(6)hf Raspberry Pi in a container on an amd64 machine. To be perfectly honest, it was a time-consuming dead end that I gave up on after Debian bookworm. It took me a bit more than a year until I was able to present a complete workflow that was able to build an OS image for the Raspberry Pi 3 in a reproducible manner.

command pipeline

A little later, I installed a PREEMPT_RT kernel on that exact same Raspberry Pi. The blog post about this little detour was viewed a lot, even though it was just a small experiment. The next chapter was initiated by the need for a robust OTA update, and since then, Mender has been an integral part of the project. Being able to reliably update a single device via OTA is all well and good - but things get fascinating when you need to manage a large fleet of devices. I searched the internet, borrowed a few interesting ideas, and pieced them together into a solution suitable for the IoT.

Fleet Repository

Being able to present this approach at the Open Source Summit 2022 in Dublin was definitely one of the project’s highlights so far. And that brings us to another amusing topic: Whenever I give a presentation, someone always comes up to me at the end and tells me that I’m doing everything wrong and that I should use this other project instead of Debian. In an attempt to smooth things over, I took an embedded device apart, compared its individual software components, and realized that Debian isn’t all that different from this other solution after all. By 2024, it was time to revamp edi’s workflow. The goal was to build all artifacts without requiring root privileges.

Workflow v2

As part of this, LXD was replaced by Buildah and Podman. It also became clear that Distrobox is far superior to my own helper implementation. Since the transition to the new workflow requires a significant amount of effort for existing projects, I will continue to support the old workflow until further notice. Since my time for this open-source project is limited, efficiency and automation are top priorities.

Workflow Setup

After all, I want to be able to dive right into the interesting parts instead of doing repetitive, boring tasks…

Final Thoughts

When I started the project, I had no idea where the journey would take me. I just wanted to learn something. Back then, I couldn’t have imagined that ten years later, nearly a million devices would be equipped with images generated by edi. This also shows me that - even though I apparently did everything wrong (see above) - I was still able to create a solution that scales well. Of course, I’m also pleased by the numerous positive responses and the detailed descriptions of errors, which make a positive contribution to edi’s reliability. Like many other open-source projects, I haven’t been able to make as much progress with contributors as I have with users. As a result, the further development of edi remains largely a one-man show. Anyway - it’s fun, and I’m learning a lot, so I’ll keep going!

Updated:

Leave a comment