Getting Started, Aboriginal 1.2.0.x

This file is taken out of the 'aboriginal-project-1.2.0.2' tarball

You must first read the introduction, at readme.htm

You must be running an x86_64 host Linux distribution. In a nutshell, what you will do is copy the 'rootfs-1.2.0.x-amd64.tar.gz' file into folder 'work', expand it, chroot into it, and then be able to compile source packages linked against uClibc.

There are two aspects to this:

  1. After chrooting into folder 'rootfs-1.2.0.x', you will then be able to compile packages, such as busybox, e2fsprogs, etc., and create static utilities.
  2. Compile 'aboriginal-1.2.0.x', the source code of Aboriginal Linux, and generate rootfs's for other architectures, such as i686 and armv6l.

At the time of writing this webpage, that "x" is "2", meaning version "1.2.0.2".
Starting with aspect-1...

1a. Setup the x86_64 rootfs

Perform these steps:

Open a terminal in the 'work' folder. Then, copy-in the x86_64 rootfs, expand, copy-in all sources, and chroot into it:

# cp -f ../binary/rootfs-1.2.0.2-amd64.tar.gz ./
# tar -xf rootfs-1.2.0.2-amd64.tar.gz
# cp -f ../source/* rootfs-1.2.0.2-amd64/
# sync
# ./chroot-rootfs rootfs-1.2.0.2-amd64

That's it, ready for action!

1b. Pump steroids into the x86_64 rootfs

The original Aboriginal 1.2.0 is a bit "weak" as a compile environment. 1.2.0.2 has enhanced uClibc slightly, and bumped the kernel from 3.5 to 4.3, however, there are a minimal set of busybox applets, and many of those are inadequate. For compiling of source packages, many "full" utilities are required, for example, 'cp', 'cut', 'date', plus some improvements to the infrastructure.

To improve the build environment, there are some source packages, and build scripts. Run each of these, in order:

Note, proper commandline editing, such as auto-completion with TAB, left-arrow to go back, history, do not work until 5-build* is completed.

bash-2.05b# ./1-build-ncurses

Busybox 'patch' cannot handle "fuzz" substitutions. Bump to the full utility:

bash-2.05b# ./2-build-patch

We really do need a more up-to-date and fully-featured busybox:

bash-2.05b# ./3-build-busybox-static

To use the new 'busybox', exit then chroot back in;

bash-2.05b# exit
# ./chroot-rootfs rootfs-1.2.0.2-amd64

'coreutils' has "full" utilities, to replace busybox applets. This makes life easier when compiling source packages:

bash-2.05b# ./4-build-coreutils-static

/bin/sh is a symlink to 'bash', version 2.05b. Many source packages require v3 or v4, so let's bump it. Also, after the upgrade will have improved commandline editing (compiled with internal 'readline'):

bash-2.05b# ./5-build-bash-static

The 'LVM2' package is one of those that requires bash v4. To switch over to the new bash, once again you have to exit and re-enter:

bash-2.05b# exit
# ./chroot-rootfs rootfs-1.2.0.2-amd64

Good oh, now we have proper commandline editing, tab-completion, left and right arrows, history with up and down arrows.

Now for something challenging. I have a particular requirement, I want just the 'dmsetup' utility from LVM2, and want it compiled statically. This script will do it:

bash-4.4# ./6-build-lvm2-static

...installed /usr/sbin/dmsetup

We now have a build environment with enhancements, for compiling your own source packages.

Note that all of those packages compiled above, could be fed back into the 'aboriginal-1.2.0.x' source, so that we won't have to go through all of the above. Which leads to aspect-2...

2a. cross-compile Aboriginal source

Source package 'aboriginal-1.2.0.2.tar.gz' has already been copied-in. It is extemely simple to use. For example, say we want to compile a x86_64 rootfs:

bash-4.4# tar -xf aboriginal-1.2.0.2.tar.gz
bash-4.4# cd aboriginal-1.2.0.2
bash-4.4# ./build.sh x86_64

That's it, she's off and running. Note that Internet access is not required, as all source packages are already downloaded. Though, this chroot environment does inherit the host's Internet access, so it is there if required.

It doesn't take long, on my desktop PC about 9 minutes, so, stare at the screen for awhile. That really is fast, considering that it also compiled the linux kernel.

When finished, aboriginal-1.2.0.2/build/root-filesystem-x86_64.tar.bz2 is our x86_64 chrootable filesystem.

You can rename the folder, then create a new tarball with an appropriate name, such as 'rootfs-1.2.0.3-amd64.tar.gz'. Like this:

bash-4.4# cd build
bash-4.4# DIRNAME=rootfs-1.2.0.3-amd64
bash-4.4# cp -a root-filesystem-x86_64 $DIRNAME
bash-4.4# cp -a ../../[1-9]-build-* ${DIRNAME}/
bash-4.4# cp -a ../../BBconfig* ${DIRNAME}/
bash-4.4# tar -c -f {DIRNAME}.tar ${DIRNAME}/
bash-4.4# gzip ${DIRNAME}.tar

...what you now have is a new x86_64 rootfs, with the build-scripts in it.

2b. Aboriginal source projects

I have played with this, now have to move onto other things, so I am offering this to anyone who is interested. It will be most interesting to explore ways of upgrading this Aboriginal source. Some suggestions:

  1. It uses uClibc 0.9.33.2, which was released in 2012. As mentioned in the readme.htm file (see link top of this page), there is uClibc-20150705, however, is requires symbol '__builtin_unreachable', that was introduced in gcc 4.5. An alternative to attempting to upgrade gcc, would be to find out where this dependency on '__builtin_unreachable' came in, and remove it.
  2. Rob Landley's last release of Aboriginal Linux was version 1.4.5, in 2016. Some of those packages are upgraded since 1.2.0, and they could be ported into 1.2.0.x.
  3. Some of the upgrades that I am compiling in a target environment, such as ncurses, patch and busybox, could be ported into Aboriginal source 1.2.0.x.
  4. Then there's uClibc-ng, the currently active project. That would be an interesting upgrade, and probably a challenge. The OpenADK project uses a recent uClibc-ng, so maybe that could be a source of ideas. My report on OpenADK: http://bkhome.org/news/201803/finally-success-with-openadk.html
  5. What about an 'aarch64', or 'armv7l' target? Aboriginal currently only has 'armv4l', 'armv5l' and 'armv6l'.
  6. If you want to "reach for the sky", you could even compile a complete Linux distro, even with graphical desktop -- for ideas on a tiny desktop, see the 'xwoaf' resurrection by forum member 'goingnuts': http://murga-linux.com/puppy/viewtopic.php?t=109062

This should be lots of fun for the developer/tinkerer. If you would like to play with it, please do. I will start a thread on the Puppy Forum for feedback. OK, done, here it is:

http://murga-linux.com/puppy/viewtopic.php?t=112885

Have fun!

Regards,
Barry Kauler
March 9, 2018
Blog: http://bkhome.org/news/