What is CirrOS and why I was working on it? This was quite common question when I mentioned what I am working on during last weeks.
So, CirrOS is small image to run in a cloud. OpenStack developers use it to test their projects.
Technically it is yet another Frankenstein OS. Built using Buildroot 2015.05 uses uclibc or glibc (depending on target architecture). Then Ubuntu 16.04 kernel is applied on top and “grub” (also from Ubuntu) is used to make it bootable.
The problem was that it was not done in UEFI bootable way…
My first changes were: switch images to GPT, create EFI system partition and put some bootloader there. I first used CentOS “grub2-efi” packages (as they provided ready to use EFI binaries) and later switched to Ubuntu ones as upstream maintainer (Scott Moser) prefers to have all external binaries to came from one source.
When he was on vacations (so merge request had to wait) I started digging more and more into scripts.
Fixed getopt use as arguments passed between scripts were read partly via getopt, partially by assigning variables to ${X} (where X is a number).
All scripts were moved to use Bash (as /bin/sh in Ubuntu is usually Dash which is minimalist POSIX shell), whitespace got unified between all scripts and some other stuff happened as well.
At one moment all scripts had 1835 lines and my diff was 2250 lines (+1018/-603) long. Hopefully Scott was back and we got most of that stuff merged.
Recent (2016.07.21) images are available and work fine on all platforms. If someone uses them with OpenStack then please remember about setting “short_id” property to “ubuntu16.04” — otherwise there may be a problem with finding rootfs (no virtio-scsi in disk images).
Summary:
architecture | booting before | booting after |
---|---|---|
aarch64 | direct kernel | UEFI or direct kernel |
arm | direct kernel | UEFI or direct kernel |
i386 | BIOS or direct kernel | BIOS, UEFI or direct kernel |
powerpc | direct kernel | direct kernel |
ppc64 | direct kernel | direct kernel |
ppc64le | direct kernel | direct kernel |
x86-64 | BIOS or direct kernel | BIOS, UEFI or direct kernel |