Dextrose/Building

< Dextrose
Revision as of 21:56, 24 August 2010 by Dfarning (talk | contribs) (edit for readability)

Build system

Dextrose uses olpc-os-builder, a tool create by OLPC to build official and customized system images. The Dextrose git repository contains, olpc-os-builder, local customizations specific to Dextrose, and fixes and enhancements waiting to be pushed upstream.

Build host requirements

The Dextrose build system runs on Fedora 11 i386 through Fedora 13 x86_64. The host system runs _shouldn't_ matter, because the build runs in a chroot environment. olpc-os-builder does not yet run on Ubuntu due to a missing dependency.

The initial build requires about 700MB of rpm packages and Sugar activity bundles. The packages and bundles are cached for futures builds.

Initial setup

  • Checkout Dextrose build system
 git clone git://git.sugarlabs.org/dextrose/mainline.git dextrose
  • Install dependencies
 yum upgrade
 yum install libtomcrypt-devel bitfrost make gcc mtd-utils python-imgcreate zip unzip
  • Compile build helper programs
 make
  • Generate initial sequence number for the builds
 echo 42 >buildnr-dx

Creating a build

  • Run the Build
 time sudo ./osbuilder.py examples/dextrose2-xo1.ini

The initial build may take several hours depending on available bandwith. Subsequent builds will take about 15-20 minutes

Upon completion the new image is available at build/output.

Because several build tools, olpc-os-builder, imgcreate and yum, are nested, error output could be misleading or obscure. Before digging into code, you please ask on IRC in case someone has already seen the same problem.

Publishing the images

Please do not publish signed builds unless they implement the http://wiki.laptop.org/go/Antitheft_HowTo OLPC anti-theft system]).

Customizing the build

The topic of is too vast to discuss in detail here. Start by reading README in the olpc-os-builder tree. Then, as needed, read the various README files contained in the modules directory.

Being a Build Master involves knowledge of many workflows, including:

  • Dealing with yum and rpm.
  • Creating yum package repositories with [1].
  • Uploading activities to [2].
  • General understanding of the Linux system plumbing infrastructure: kernel,

udev, dbus, DeviceKit, NetworkManager, Xorg...

  • Flashing laptops and debugging any problems
  • Interaction with the Sugar and OLPC community to solve issues and minimize our divergence from the official builds.

Upstream

Our upstream code comes from dev.laptop.org:

git remote add olpc git://dev.laptop.org/projects/olpc-os-builder
git fetch olpc
git log olpc/master

Building custom RPMs

  • Go to the rpms/PACKAGENAME in the dextrose tree
  • Edit the spec file. Typically this involves adding a new patch, which is done by adding a PatchNN: tag and a corresponding %patchNN rule in %setup. Some of the intricacies of RPM spec files are unveiled in the Fedora Packaging Guidelines.
  • Remember to bump the revision after each change or your package won't be seen as an update relative to what is in the cache!
  • make i586
  • Wait for rpmbuild to do its job
  • Now upload this rpm to a yum repository and add it to the ini file used by the OLPC OS builder.
  • To automate this step, we have a rule make uploadrpm which points at the Dextrose repository. Edit rpms/common/Makefile.common or rpms/common/uploadrpm to retarget this rule to your repository.


Building custom OLPC kernels

$ git clone http://dev.laptop.org/git/olpc-2.6/
$ cd olpc-2.6
$ setarch i386 make ARCH=i386 xo_1-kernel-rpm