Over the last weekends i played around with Snappy Ubuntu. I thought i can learn the platform best by doing some porting. As a result i present the image for the ODROID-C1 (1.5Ghz quad core ARM CPU, Gigabit Ethernet).

Download

https://www.stdin.xyz/downloads/snappy/odroidc/

The image contains the current stable 15.04 Snappy release (ubuntu-core 3), has webdm and ssh access as ubuntu/ubuntu enabled (developer mode).

To use it you need to unxz the .img.xz file after downloading and flash it to a 4GB micro SD or eMMC using the dd command.

Build yourself

Alternatively i also provide downloads for the OEM snap and the device part. You can use those to create your own image with the ubuntu-device-flash tool.

The OEM snap and the device part have been built from source using my Snappy ODROIDC builder from https://github.com/longsleep/snappy-odroidc/. That repository has links to patched Kernel and U-Boot source. Both are required to make Snappy work on ODROIDC.

Issues

Everything seems to work, including ubuntu-core update and rollback. Please report issues at the GitHub tracker of Snappy ODROIDC builder.

Experience

While creating the image and the gear to build it, i learned a tremendous amount of things. There are plenty of compatibility issues between the ODROIDC software (U-Boot, Kernel) provided by Hardkernel and the needs of Ubuntu Snappy. I managed to add work arounds and backports, but it would be nice if the two things could be closer together, meaning Snappy should be more flexible and the Kernel and U-Boot for the hardware should not be ancient.

Overall it was a fun experience and the guys at the #snappy IRC channel have been very helpful when i had stupid questions. Thank you all.

Kernel

The ODROIDC uses a patched Kernel based on 3.10. Kernel 3.10 is a longterm Kernel so that is not so bad. Though to make this work with Snappy it needs AppArmor3. The AppArmor backport situation is not clear and i had a hard time to find what is required to patch in. Also i was not able to find documentation what configuration options are required to be turned on to have 100% of the security relevant options for Snappy. I came up with a manually created defconfig.

U-Boot

It turned out that the U-Boot for ODROIDC is a mess and does not have a shared history with upstream U-Boot. That is bad and pretty much makes the thing unmergable. I backported the missing stuff to the ODROIDC U-Boot tree from upstream U-Boot and hacked around in boot.ini to make Snappy work with old U-Boot commands. Works for now, but very messy.

Strangenesses

While working on Snappy, i encountered a bunch of issues and problems.

I had a hard time to find any information about the initrd which needs to be included in the OEM snap so the system is actually working. This is not just any initrd - it needs special gear for Snappy. I solved this by downloading an official perinstalled Ubuntu tarball and extracting the initrd from there. See device.mk for details.

In my first images the snappy tool did not detect that the system is using U-Boot. It turned out that the tool checks for the uEnv.txt file. I now ship an empty one but it is not required or used while booting.

To make Ubuntu Snappy on ODROIDC really nice, some stuff needs to be added to the base system, I have not yet found a solution for this - except some minimal extensions using the device part. I guess i can do more stuff with the device part and have to explore more.

Currently only the OEM snap can be uploaded to the Ubuntu store. The device part is kept out. I heard this is going to change somehow. Looking forward to this as it is really required to have the OEM and device stuff in the store to create a fully signed system, without downloading stuff from ‘somewhere’ and to be able to update without flashing.