misc

This contains bit of documentation in progress, or that haven't found a better location in the site yet.

Reproducable builds

A benefit in the making. When libfaketime is available it is used, some packages like make opt out of faketime building. And other packages are not reproducible without further effort, making more builds reproducible reduces amount of unneded binary update downloads, in addition to other benefits such improvements to packaging brings.

Bootstrapping

To build you need: a posix compatible shell (tested with bash, dash and busybox' ash), wget, and musl-cross[1] installed, eid tries to download and unpack the latest version in /opt/cross. For generating bootable USB images you also need syslinux and dosfstools installed.

To generate an image, run

eid generate <target-image>

Where is a configuration file, these files live along with the recipes, and are prefixed with image- some of them generate just a directory while other generate bootable file system images. Running $ ./eid generate # will show a list of available images. You must currently set the appropriate architecture for the image to be built.

For completing the process all the way through building an usb image, you need syslinux installed on the host system, and perhaps adjusting the SYSLINUX path in the build system.

Example:

to build mrg, the microraptor gui distribution, on i486, run:

eid generate mrg

This will read mrg and compile all included packages and their dependencies, and create images. Note that the diskusage at peak - during compilation of gcc, exceeds 1.2GB.

Isthmus picks up the number of siblings a processing core has in /proc and adds the corresponding flag to make to speed up the build.

To cross-compile your own linux-kernel packages from outside - you need:

perl, make, host, gcc, busybox, binutils, musl(glibc) - these might have different names in your operating system package management.

Debugging

If you encounter unexpected behavior from eid or a recipe you can enable verbose package builds by setting the V environment variable to any value. This has the effect of teeing to screen what ends up in the build log which is also accessible by running eid log package. Here's an example:

V=1 eid add gcc

If that does not provide enough clues as to what's going on, you can turn on eid-wide shell debugging through the D variable, which passes any arguments to the set command. For instance, you can set -x by running:

D=x eid rebuild

Note that eid does not pass these variables to sub-invocations of itself. For instance, adding a package might trigger a build which will be run without the D or V env vars.

Jail-like

Isthmus uses chroots to build packages and to provide target architecture shells. This mechanism can be augmented with jail style compartmentalization with systemd-nspawn. Enable the use of nspawn with by setting ISTHMUS_NSPAWN=1 before calling eid.

export ISTHMUS_NSPAWN=1 eid rebuild vim

There is a known issue with nspawn where due to an incomplete mapping between host and container UID's the file system becomes owned by root and the calling eid does not have permissions to manipulate it. Symptoms of this are eid reporting failures when hard-linking.

Web site

The isthmus website is a live monitor of multi-arch build, generated by eid. It uses markdown for formatting a small set of text files.

ARM cross compiles

Boy, there are a lot of ARMs out there. We've aimed to provide a base compatible with as many of them as possible, but only tested on Kobo, Pi(Zero, 1, 2) and Beaglebone BLACK. Anything that supports the ARMv7 instruction set should work.

If you're trying to build things from scratch yourself on target, you might be in for some trouble. GCC has some stupidity in its automata generations (ref https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60743) and will eat way more RAM than the target often has available (1G), death by OOM killer. Fix this by increasing your swap size or using a bigger/better/badder box.

If you're trying to build some esoteric ARM be warned, there are issues with the cross compilers. Here be dragons.

We have started mirroring the musl-cross tarballs and building our own starting with musl 1.1.16.