Someone may say that I am main reason why CirrOS project does releases.
In 2016 I got task at Linaro to get it running on AArch64. More details are in my blog post ‘my work on changing CirrOS images’. Result was 0.4.0 release.
Last year I got another task at Linaro. So we released 0.5.0 version today.
But that’s not how it happened.
Multiple contributors
Since 0.4.0 release there were changes done by several developers.
Robin H. Johnson took care of kernel modules. Added new ones, updated names. Also added several new features.
Murilo Opsfelder Araujo fixed build on Ubuntu 16.04.3 as gcc changed preprocessor output.
Jens Harbott took care of lack of space for data read from config-drive.
Paul Martin upgraded CirrOS build system to BuildRoot 2019.02.1 and bumped kernel/grub versions.
Maciej Józefczyk took care of metadata requests.
Marcin Sobczyk fixed starting of Dropbear and dropped creation of DSS ssh key which was no longer supported.
My Linaro work
At Linaro I got Jira card with “Upgrade CirrOS’ kernel to Ubuntu 18.04’s kernel” title.
This was needed as 4.4 kernel was far too old and gave us several booting issues. Internally we had builds with 4.15 kernel but it should be done properly and upstream.
So I fetched code, did some test builds and started looking how to improve situation. Spoke with Scott Moser (owner of CirrOS project) and he told me about his plans to migrate from Launchpad to GitHub. So we did that in December 2019 and then fun started.
Continuous Integration
GitHub has several ways of adding CI to projects. First we tried GitHub Actions but turned out that it is paid service. Looked around and then I decided to go with Travis CI.
Scott generated all required keys and integration started. Soon we had every pull request going through CI. Then I added simple script (bin/test-boot) so each image was booted after build. Scott improved script and fixed Power boot issue.
Next step was caching downloads and ccache files. This was huge improvement!
In meantime Travis bumped free service to 5 simultaneous builders which got our builds even faster.
CirrOS supports building only under Ubuntu LTS. But I use Fedora so we merged two changes to make sure that proper ‘grub(2)-mkimage’ command is used.
Kernel changes
4.4 kernel had to go. First idea was to move to 4.18 from Ubuntu 18.04 release. But if we upgrade then why not going for HWE one? I checked 5.0 and 5.3 versions. As both worked fine we decided to go with newer one.
Modules changes
During start of CirrOS image several kernel modules are loaded. But there were several “no kernel module found” like messages for built-in ones.
We took care of it by querying /sys/module/ directory so now module loading is quiet process. At the end a list of loaded ones is printed.
VirtIO changes
Lot of things happened since 4.4 kernels. So we added several VirtIO modules.
One of results is working graphical console on AArch64. Thanks to ‘virtio-gpu’ providing framebuffer and ‘hid-generic’ handling usb input devices.
As lack of entropy is common issue in VM instances we added ‘virtio-rng’ module. No more ‘uninitialized urandom read’ messages from kernel.
Final words
Yesterday Scott created 0.5.0 tag and CI built all release images. Then I wrote release notes (based on ones from pre-releases). Kolla project got patch to move to use new version.
When next release? Looking at history someone may say 2023 as previous one was in 2016 year. But know knows. Maybe we will get someone with “please add s390x support” question ;D