09 March 2016 / Last updated: 27 Jan 2017

Open-sourcing, part three: The universal base image

Execution time:
It’s taken us a while to release the next installment of internal code. Sometimes the simplest things take the longest time. With the device software now fully open source, the next logical step is the backend services. Our backend services are all built on a uniform base image called resin-base. This image is based on resin/amd64-systemd:jessie - an in-house base image which is the same image we push to our devices. Our universal base image is a resin/amd64-debian:jessie that reflects a lot of iteration on the core container: a stripped down Debian, with systemd calling the shots.
On top of that core, we add the fundamental packages needed for a service to function within the resin architecture.
One group of tools is focused on debugging. Others are for the deployment workflow. Others still are the languages we use across the stack: Node.js and the occasional Python. Another set is related to inter-service communication.
It may sound crazy, but open sourcing this image has taken the longest time, as we needed to remove several sensitive pieces of information (such as keys, etc.) from its history, and create an additional internal add-on to it that contains what’s left of the keys. As we open-source more and more services, the internal layer will also become thinner, until it disappears.
This process has held up our open sourcing programme, which we hope to now continue at a faster pace, with substantial pieces of code being released.
Prime candidates for the first internal services to be released are our Container Registry (thin layer around Docker Registry), our git server, our VPN service, and our Container Delta server.
While you wait for the next installment, feel free to poke around the resin-base source code as well as our other open source projects. As always you can catch the team on gitter for any feedback or questions.
by Alexandros MarinosFounder/CEO, balena

Share this post