LOCI — other way of building OpenStack images

Earlier this month I got a new task at Linaro: to take a look at LOCI project. How they are building container images with OpenStack components and does it work on AArch64. And fix it if it does not.

So I went. Fetched code, started run. Looked at failures, did some first hacks (wrong and bad ones) and then discussed with Sam Yaple (one of core developers in LOCI project) about those. And went more proper way.

Turned out that whole project is quite simple. You build ‘requirements’ image which works as a kind of cache for Python packages and then use it to build rest of images. Took me some attempts to get it built. Mostly because some modules are available as binaries when your target is x86-64 architecture (think ‘numpy’, ‘scipy’, ‘scikit-learn’).

So first good patch was adding some extra headers to get those packages compiled. Then handling of ‘numpy’ and ‘scipy’ got several versions.

In meantime I created ‘loci-base’ image to not populate LOCI repo with AArch64 details like extra Linaro repo (ERP:18.06) with newer version of libvirt or ceph packages. It also has all packages required by LOCI already preinstalled to cut some seconds from build time.

Then I added building of images into Linaro CI where we have multiple cpu cores machine available. It shown that ‘scipy’ is a nightmare package to build if your processor does not have 10GHz clock… So I started checking are were able to build all images without building ‘scipy’ (and ‘scikit-learn’) at all.

Turned out that we can as those packages were requested by ‘monasca_analytics’ project which we do not have to care about. Build time got cut by about half (on old 8 core machine).

Now all my patches got merged. Images build. Next step? Verification by deployment.

aarch64 containers docker loci openstack