alt text

Abstract

rkt implements the App Container Executor specification of the appc Container Specification and uses systemd unit properties to implement its features. The original proposal aimed to implement the OCI runtime spec, systemd unit properties are not suitable since they differ from what the spec defines. The idea was to replace systemd unit properties by runc to implement the OCI runtime spec. However, the last release of rkt was over a year ago and many project components were broken.

In agreement with my mentor, it was then decided that the main focus of this GSoC experience would be to “revive” rkt in terms of getting it up to date with its libraries and Go versions, fixing most of the broken components, making sure that all the tests pass again, and tweaking both of the CI pipelines to work as intended and with the latest releases of Go. The main challenge was updating to the latest version of systemd. Since systemd and rkt are very dependent on each other, small changes and breakages in systemd can break rkt. Sometimes this breakage was due to new intended systemd assumptions (so rkt tests had to be reworked) but others were actual systemd bugs (which were reported and fixed upstream).

What has been done

  • Update to the latest version of systemd (v241)
  • Fix broken tests due to systemd upgrade (one of the changes being systemd adding an extra directory in the cgroupv1 hierarchy)
  • Switch to Flatcar as a drop-in replacement of Container Linux as some of the tests were failing due to unexpected behaviour of systemd and Flatcar’s Edge channel contains the needed bug fixes.
  • Make rkt compatible with latest Go versions (in reference to gofmt and keyed composite literals being more future-proof)
  • Update both SemaphoreCI and Travis to use newer Go versions as well as fixing some of the dependency issues, thus making both platforms pass their builds successfully after the PR is merged.

TODO

  • Investigate and fix KVM flavor.
  • Add support for the OCI runtime spec by implementing a runc stage2.

Acknowledgements

I would like to express my sincere appreciation to my mentor Iago López Galeiras for his valuable and constructive input throughout the entirety of the programme, it has been an absolute pleasure to work with you. I would also like to thank Alban Crequy for his patient guidance, this has been a very enjoyable experience thanks to both of you.

Useful links: