ostree/gnomeos
Colin Walters 339271726a gnomeos: Kill Yocto init scripts, switch to my ginitscripts
There's reams of crud in the Yocto ones, and we need a place
to put our custom scripts.
2012-02-19 20:51:42 -05:00
..
3.4 gnomeos: Kill Yocto init scripts, switch to my ginitscripts 2012-02-19 20:51:42 -05:00
debian Move debian based bits to debian/ subdirectory 2011-11-12 17:47:12 -05:00
ostree-init gnomeos: Some yocto work 2011-11-13 18:53:14 -05:00
yocto gnomeos: Kill Yocto init scripts, switch to my ginitscripts 2012-02-19 20:51:42 -05:00
.gitignore Rename parallel-debian/ to gnomeos/ 2011-11-10 12:07:15 -05:00
README README: Some more details. 2012-02-03 18:21:42 -05:00
ostree_switch_root.c Rename parallel-debian/ to gnomeos/ 2011-11-10 12:07:15 -05:00

README

Overview
--------

The build process is divided into two levels:

1) Yocto
2) ostbuild

Yocto is used as a reliable, well-maintained bootstrapping tool.  It
provides the basic filesystem layout as well as binaries for core
build utilities like gcc and bash.  This gets us out of circular
dependency problems.

At the end, the Yocto build process generates two tarballs: one for a
base "runtime", and one "devel" with all of the development tools like
gcc.  We then import that into an OSTree branch
e.g. "bases/gnomeos-3.4-yocto-i686-devel".

We also have a Yocto recipe "ostree-native" which generates (as you
might guess) a native binary of ostree.  That binary is used to import
into an "archive mode" OSTree repository.  You can see it in
$builddir/tmp/deploy/images/repo.

Now that we have an OSTree repository storing a base filesystem, we
can use "ostbuild" which uses "linux-user-chroot" to chroot inside,
run a build on a source tree, and outputs binaries, which we then add
to the build tree for the next module, and so on.

ostbuild details
----------------

The simple goal of ostbuild is that it only takes as input a
"manifest" which is basically just a list of components to build.  A
component is a pure metadata file which includes the git repository
URL and branch name, as well as ./configure flags (--enable-foo).

There is no support for building from "tarballs" - I want the ability
to review all of the code that goes in, and to efficiently store
source code updates.

The result of a build of a component is an OSTree branch like
"artifacts/gnomeos-3.4-i686-devel/libxslt/master".  Then, a "compose"
process merges together the individual filesystem trees into the final
branches (e.g. gnomeos-3.4-i686-devel).

Doing a full build on your system
---------------------------------

srcdir=/src
builddir=/src/build

# First, you'll need "http://git.gnome.org/browse/linux-user-chroot/"
# installed as setuid root.

cd $srcdir

git clone gnome:linux-user-chroot
cd linux-user-chroot
NOCONFIGURE=1 ./autogen.sh
./configure
make
sudo make install
sudo chown root:root /usr/local/bin/linux-user-chroot
sudo chmod u+s /usr/local/bin/linux-user-chroot

# Next, we're grabbing my Poky branch.

git clone git://github.com/cgwalters/poky.git
cd $builddir

# This command enters the Poky environment, creating
# a directory named gnomeos-build.
. $srcdir/poky/oe-init-build-env gnomeos-build

# Now edit conf/bblayers.conf, and add
#   /src/ostree/gnomeos/yocto
# to BBLAYERS.

bitbake ostree-native
bitbake gnomeos-contents-{runtime,devel}

# This bit is just for shorthand convenience, you can skip it 
cd $builddir
ln -s tmp/deploy/images/repo repo

# Now create a file ~/.config/ostbuild.cfg
# example contents:
# [global]
# repo=/src/build/gnomeos-build/build/repo
# mirrordir=/src/build/ostbuild/src
# workdir=/src/build/ostbuild/work
# manifest=/src/ostree/gnomeos/3.4/manifest.json

# Now we want to use the "ostbuild" binary that was created
# as part of "bitbake ostree-native".  You can do e.g.:

export PATH=$build/tmp-eglibc/sysroots/x86_64-linux/usr/bin:$PATH

# This next command will download all of the source code to the
# modules specified in $srcdir/ostree/gnomeos/3.4/manifest.json,
# and create a file $workdir/manifest.json that has the
# exact git commits we want to build.
ostbuild resolve

# This command builds everything
ostbuild build