ARMImageBuildingConsole

Differences between revisions 3 and 4
Revision 3 as of 2010-05-26 20:40:15
Size: 3160
Editor: 118-92-178-198
Comment:
Revision 4 as of 2010-05-28 04:08:00
Size: 4482
Editor: 118-92-178-198
Comment:
Deletions are marked like this. Additions are marked like this.
Line 8: Line 8:
We will provide infrastructure to build images with a web UI.
Line 9: Line 10:
Infrastructure to build images with a web UI.

XXX expansion needed!
It will be possible for partners to install our software on their own hardware, and eventually use a Canonical-hosted instance of the software (once there is a virtualized/emulated ARM build farm).
Line 27: Line 26:
XXX something about a virtualization approach for ARM?

XXX something about depending on launchpad vs not
 * Running code as root on our slave hardware is OK for now.
Line 33: Line 30:
It's probably possible to use qemu to build images on intel hardware should we want to (will be very slow though, obviously). The UI of this tool will be a web application.
Line 35: Line 32:
Building images will chew up a lot of disk space very quickly. As the image building tool we will be using only supports image building in a native environment.
Line 37: Line 34:
There is a need to store a manifest -- a record of what went into the image. The application needs to support automatic daily builds as well as one-off manually triggered builds.
Line 39: Line 36:
Web UI for creating builds and seeing the logs etc. The application will take as input for a build the URL of a branch that contains a configuration for the image building tool.
Line 41: Line 38:
Be able to go from image to the configuration that created it. XXX This section should probably be expanded to explain the other requirements. Unfortunately I don't know what they are.
Line 45: Line 42:
Based on Launchpad? Canonical have an internally-developed, currently proprietary, tool that does most of this, 'lexbuilder'. We will open source and base our work on this.
Line 47: Line 44:
OEM services have done lots of Canonical-internal development here, at the very least we should talk to them about that, if we can't reuse it for some reason. We will not be changing the basic architecture of this software. There are two major sections of the system, the master/slave part that builds the images and the UI part.

The master/slave part consists of a master daemon, only one of which is running for a given installation, and a number of slaves, which run on the hardware which is to build the images. These two daemons communicate via XML-RPC.

The UI is implemented as a web application implemented using Django. It allows users to request builds and set up automated daily builds.

The two parts communicate via a postgres database.

As well as producing the binary image, the tool will produce a manifest -- a record of what went into the image -- as part of the log.

The lexbuilder code has some issues that it need to be fixed before it can be turned into a deployable product:

 * Dependencies are simply included wholesale into the project
 * The model code is duplicated: one for the Django ORM and one for the Storm ORM.
   * Probably just using the Django ORM makes sense.
 * Currently image configuration is done by (effectively) specifying only the name of a branch on Launchpad -- the branch owner and project are hard coded.
   * We should probably allow the application to define a project, and a project will specify the full URL of a branch containing the config.
 * Setting up slaves is a little complicated.

We will want to package our software into master, slave and webapp debs for ease of installation.
Line 51: Line 67:
Would we want to migrate OEM services to using our new infrastructure? Would we want to migrate OEM services to using the version of the code we're developing?
Line 64: Line 80:
There is [[https://blueprints.edge.launchpad.net/ubuntu-arm/+spec/arm-m-image-builds-without-root|a spec]] about image building without root, although the gobby notes for that spec seem to talk about rootstock, not live-helper.  Presumably, changes to not require root would require hacking live-helper a bit. There is [[https://blueprints.edge.launchpad.net/ubuntu-arm/+spec/arm-m-image-builds-without-root|a spec]] about image building without root.
Line 72: Line 88:
 * add support for ARM bootloaders to live-helper
 * write a proposal for image building service (DB, web ui, etc.)
 * Look into livehelper 2
 * Investigate easier config for live-helper
 * Simplification of live-helper usage (configuration) for common targets.

Summary

We will provide infrastructure to build images with a web UI.

It will be possible for partners to install our software on their own hardware, and eventually use a Canonical-hosted instance of the software (once there is a virtualized/emulated ARM build farm).

Release Note

?

Rationale

It is desirable to be able to create images on a reference system for sharing with others or releasing, aiding reproducibility and reducing unpredictability. For this reason, we will provide a system which can be set up for image building on request, allowing developers to trigger daily builds or milestone builds on the reference hardware.

User stories

Project lead Boris wants to build the final version of the operating system for his internet tablet to send to the factory and build onto 100,000 units of hardware. He goes to the image building console, selects the final configuration and clicks go. A few minutes later, the image is available for download.

Assumptions

  • Running code as root on our slave hardware is OK for now.

Design

The UI of this tool will be a web application.

As the image building tool we will be using only supports image building in a native environment.

The application needs to support automatic daily builds as well as one-off manually triggered builds.

The application will take as input for a build the URL of a branch that contains a configuration for the image building tool.

XXX This section should probably be expanded to explain the other requirements. Unfortunately I don't know what they are.

Implementation

Canonical have an internally-developed, currently proprietary, tool that does most of this, 'lexbuilder'. We will open source and base our work on this.

We will not be changing the basic architecture of this software. There are two major sections of the system, the master/slave part that builds the images and the UI part.

The master/slave part consists of a master daemon, only one of which is running for a given installation, and a number of slaves, which run on the hardware which is to build the images. These two daemons communicate via XML-RPC.

The UI is implemented as a web application implemented using Django. It allows users to request builds and set up automated daily builds.

The two parts communicate via a postgres database.

As well as producing the binary image, the tool will produce a manifest -- a record of what went into the image -- as part of the log.

The lexbuilder code has some issues that it need to be fixed before it can be turned into a deployable product:

  • Dependencies are simply included wholesale into the project
  • The model code is duplicated: one for the Django ORM and one for the Storm ORM.
    • Probably just using the Django ORM makes sense.
  • Currently image configuration is done by (effectively) specifying only the name of a branch on Launchpad -- the branch owner and project are hard coded.
    • We should probably allow the application to define a project, and a project will specify the full URL of a branch containing the config.
  • Setting up slaves is a little complicated.

We will want to package our software into master, slave and webapp debs for ease of installation.

Migration

Would we want to migrate OEM services to using the version of the code we're developing?

Test/Demo Plan

-

Unresolved issues

TBD

If image building requires root then building in the build farm will require some kind of virtualization for ARM. Even if image building doesn't require root, this is probably a good idea in any case (unless we trust live-helper a lot). Do we block on this? (Essentially, Launchpad would need to support ARM ppas).

There is a spec about image building without root.

Actions

This is from the gobby notes, but they are (a) a bit vague and (b) not assigned to anyone, so I don't know how to weave them into the spec.

  • virtual ppa infrastructure needed for ARM because image building requires building parts as root
    • virtualized QEMU is possible but slow.


CategorySpec

Specs/M/ARMImageBuildingConsole (last edited 2010-08-17 14:04:33 by 204)