[Aboriginal] extending aboriginal -concept idea
rob at landley.net
Sat Jun 29 21:36:40 PDT 2013
On 06/25/2013 07:53:19 PM, scsijon wrote:
> Firstly, may I say I love it and are playing with a couple of basic
> builds at present to get the feeling of what it can do. I am
> considering using it for the basis of a wayland build or even a
> small multi-server system.
Sorry I'm behind on email, I normally catch up on weekends but I was at
a convention last weekend where the power went out for 24 hours, so
instead I fell further behind. Catching up now, I've apparently made it
> However, I was wondering if there was the ability of extending what
> packages were in a build by using an additional script. Such as, if
> (1)it exists it's added; or (2) by also adding an extra build switch
> to (1) to include it and without the switch it's not.
In the "design goals" section of
http://landley.net/aboriginal/about.html it does talk about eliminating
the need for cross compiling. The general idea is building stuff
natively within a system image.
That said, if you want to add a new build script you can just drop it
in the top level directory and add it to build.sh. The plumbing works
# Suck in common functions and variable definitions
source sources/include.sh || exit 1
# Suck in target-specific data from sources/targets
# Find a package "thingy" out of sources/sections.
# tar up the result into $STAGE_NAME-$ARCH.tar.bz2
Regarding sources/sections: scripts ending in .sh do their own setup
and teardown (see gcc.sh for example), the "setupfor" function
snapshots the package source code into sources/temp-$ARCH/packagename
and changes directory into there, the "cleanup" function does an rm -rf
on that directory. If you need to build out of tree blank_workdir
creates a named temporary directory.
The scripts ending in .build have setupfor and cleanup called for them,
so you can just do the configure make and install. (See make.build for
There's a lot more complexity like the "package cache", explained at
some length in the FAQ, but I try to make it so you can ignore as much
of the infrastructure as possible.
> concept is something like:
> for 1- if a builder added to the aboriginal default (location where
> ./build.sh exists) a script called additional.sh its content would be
> added into the standard build.
Ok. I note there's already SIMPLE_ROOT_OVERLAY in config that can point
to a directory that gets copied into the resulting root filesystem
> I'm not at this point considering what it should or should not
> contain and
> what it's structure should be, but something like this for each
> package may be sufficient.
I recommend looking at the Linux From Scratch build control image. I
build additional stuff natively on each target, because cross compiling
really does suck.
The script more/chroot-splice.sh does native builds in a chroot instead
of in qemu, which is a bit faster if you're building for i686 or
x86-64. (That's generally a good first pass test.) As with all of them,
run it without any arguments to see usage.
What I haven't explicitly documented (probably should) is that you can
point it at the build directory instead of the sqf file, and it'll
--bind mount that so live updates you do to the source show up in the
more/chroot-splice.sh i686 ../control-images/build/lfs-bootstrap
(and then at that shell prompt)
The scripts in there are:
1) init - first thing that runs. If the root filesystem is read only
(which the squashfs under qemu is), copy it into a chroot under /home,
and chroot into there. Either way, launches run-build-stages.sh next.
2) run-build-stages.sh - iterate through package-list and call
build-one-package.sh on each entry. There are #tags in there that can
be used to filter out packages so you don't build them, so if you
export "FILTER=busybox" it won't build packages that busybox provides
3) build/* - the build scripts for each individual package.
4) packages/* - the extracted source code for each package.
> source url (complete)
> error checking for missing pre-requisite packages
> compile scripts (unpack; ./configure;make;make install)
> for 2- including 1- but also adding to your build script something
> ./build.sh i486 additional
> to include both the default set AND the additional set
The third argument from build.sh is "restart build from this stage". So
when I change toybox and want to rebuild that in the target but _not_
rebuild the cross or native compilers, I can go "./build.sh x86_64
simple-root-filesystem" and that will do that, root-filesystem,
root-image, it'll redo linux-kernel if SYSIMAGE_TYPE=initramfs, and
Probably what you want is a new chunk between cross-compiler and
simple-root-filesystem that does:
if [ -e additional.sh] && not_already additional
time ./additional.sh "$ARCH" || exit 1
Or something like that.
> if you only use ./build.sh i486
> then it would build without the content of the additional.sh packages
> In all cases it would be up to the builder to populate this file and
> handle any problems associated with it.
> I'm not sure how much work or changes would be needed to the existing
> scripts, but I see it as a way of extending aboriginals functionality
> and thus the community using it.
I've encouraged adding more packages via native building. Cross
compiling more packages has... issues:
(The next dozen or so slides from there are on that topic.)
If there seriously is interest in this, I can document the required
infrastructure better. (At one point I had, but it bit-rootted as
everything changed over the years.)
More information about the Aboriginal