introduction

The core of isthmus is a portable shell script called eid. eid is works with bash, dash, busybox' default shell ash and hopefully more.

Copy and paste the following in a terminal, to create an isthmus working dir, and get a list of eid commands:

mkdir isthmus
cd isthmus
wget http://eid.cool/eid
chmod a+x eid
./eid

$ ./eid

eid - arch: i486

Usage: eid [command options]

Available commands:
  add <package(s)>     - add new package to i486/ 
  del <package(s)>     - remove package from i486/ 
  info <package(s)>    - get information about package
  files <package>      - list files installed by a package
  rebuild [package(s)] - rebuild package from source for i486
                         or no argument to build all installed
                         recipes in build order
  help <command>       - get help for a specific command
  list                 - list packages
  search               - search for a pattern in description, title or
                         installed file paths
  update               - update the collection of recipes
  installed            - compact list of packages installed on i486/ 
  build <package|file> - build package for a recipie
  log <package>        - examine/monitor building log of package
  arch                 - query or set architecture used, a query shows
                         current and lists available architectures
  update-server-info   - compact db and generate sha256sums for static/
                         http sharing
  generate <image>     - generate a filesystem image
  shell                - open a shell in /i486/

Running eid this way, it is a platform builder.

You can also start a shell, which has the side effect of installing the neccesary packages rootfs, busybox and musl.

./eid shell

From within the shell you are operating in an isolated from scratch target filesystem, invoking eid now and it is the package manager - but now using the eid insharing most commands with how it acts as a platform builder.

~ $ eid info musl

musl 1.1.4    compact libc for linux 
url:        http://www.etalabs.net/musl/releases/musl-1.1.4.tar.gz
license:    MIT
status:     installed
recipe:     28868323ee48b573d7d9678efefe0ee443562e49cbfc6f2c8fe586431cfc9a3f
binary:     3a0915b51005ea011cfa2aa4a79fabec743c2cee5294bcfc8b06d5e00da52505
          compressed: 757kb    uncompressed:  2730kb
deps:      *rootfs *musl 
build deps:*rootfs *musl 

~ $ eid info mc

mc 4.8.14     
url:        http://ftp.midnight-commander.org/mc-4.8.14.tar.xz
status:     available
recipe:     7883ce64a963f6e48af6758152f7e5748a9ce3e7b4d8865cff6aa3daf2de1b84
binary:     4e0a3bca464d37d9aed97af586e64570726a1534b7f4be3192da6a4c0178bb6c
deps:      -zlib -gettext -libffi -glib *rootfs *musl -ncurses -mc 
build deps:-zlib -gettext -libffi -glib -linux-headers *busybox -make -binutils -gcc -toolchain *rootfs *musl -ncurses -mc

Running an ARM chroot

It might be as easy as:

./eid arch arm
./eid shell

And you could be dropped into an arm environment living in the arm folder.

The most tested way is on 64bit debian hosts, further adaptations might be needed on other systems. Install qemu-user-binfmt and qemu-user. Build and install qemu in a i486 architecture for isthmus. Generate rootfs for arm, that should end up containing a qemu binary; that the systems binfmt suport has rigged up the right paths for. Using binary packages, the requirement of the i486 build-dep might be a hurdle most do not need to go through.

The corresponding qemu-user binfmts must be registered and the running kernel must have the binfmt-misc module. A missing feature in eid is making use of distcc or similar means of using cross compilers external to the jail to accelerate builds.