Fedora IoT GSoC 2018: Final Report
Final work submission for the Fedora IoT: Atomic Host Upgrade Daemon GSoC 2018 Project
Who are you and how did you hear about Fedora? What is something personal or interesting about you?
My name is Christian Glombek and I am a student of Electrical Engineering & Business Management at RWTH University in Aachen, Germany. About three years ago I had my open source awakening. I started looking into Linux and set out to find the distro that was best suited for me. Containers were the hot new thing back then and the Fedora Community was already on the leading edge of development in this area, so I made my choice for it quite quickly. I eventually joined the Fedora Community to be able to write bug reports and to stay in the in loop in general (you can join here!). My Open Source journey had begun.
Fun Fact about me: While I like to build software containers, my father works for a company building physical ones. Ship ahoy!
What was the problem/challenge/feature/goal you set out to solve that defined your project.
In order to make the latest of Fedora’s objectives - IoT - a success, its ideator and principal architect Peter Robinson had determined the crucial parts that were still missing. One of them was the operating system’s ability to automatically and autonomously upgrade to a new version and fall back to the previous one in case of failures.
How did you solve it? What was the process like? What worked well, what didn’t? What did you learn?
While the goal was clearly defined, there were a lot of moving parts and different ways forward to evaluate and choose from. During the first weeks of GSoC my mentors helped me determine what functionality was already there and exactly what was missing and had to be done to fullfill the project proposal.
Fedora IoT is based on rpm-ostree, which already brings upgrade and rollback features to the table. Missing was a way to determine whether or not a boot was successful and to automatically kick off the rollback in case of an unsuccessful boot. We also concluded that we should probably re-try a failing deployment a number of times before actually rolling back to the older version to not fall victim to random, one-time-only failures.
My mentors and I were in constant contact via IRC and held a weekly video chat meeting to which we regularly invited contributors and maintainers of the projects my work was touching on.
At times the process of finding a way forward seemed hard and slow because different people with different opinions on how to solve a problem were required to weigh in, but in the end getting these issues done felt all the more rewarding.
In conclusion, I am glad to say that I learned a lot. I dove deep into the mechanics of systemd, the grub2 bootloader and bash scripting. Another great takeaway for me was to learn that communication really is key to success in Open Source. And to rather have something that works, than something that is perfect (which it probably won’t ever be).
Where can we find your final work?
The main part of my work can be found in the greenboot project, a generic health check framework for systemd:
I am quite proud that a few lines of my code also made it into the Fedora 29 branch of Grub2, enabling the boot attempt countdown feature (a.k.a. boot counting):
For creating custom rpm-ostree composes for testing I made this:
On Fedora 28 and Rawhide, the package is already installable from COPR: Simply
dnf copr enable lorbus/greenboot && dnf install greenboot. A review request has been filed to officially get this into the Fedora distribution, too:
What’s next for you? In Fedora? In general?
Open Source Software Development has become my passion and I will continue with it! I will stay an active Fedora Commmunity Member, Packager and Container SIG Member. greenboot is my baby and I’ll give my best to care for it. My goal is to never stop learning, to continue contributing to great projects such as the awesome Fedora Community and to be a vocal Open Source advocate.
First and foremost I would like to thank my mentors Peter, Jonathan and Dusty for making this a success story! Really, thank you three so much! Working with you was an excellent experience and I am looking forward to more Open Source collaboration with you!
I’d also like to thank all the others who have chimed in, tested, given feedback and shared their tipps and knowledge! You are a great community and I am very glad and proud to be a part of it!
And what’s next for me right now? I think I’ll grub me a beer!