mrrl

Minimal Reliable Reproducible Linux
git clone https://ccx.te2000.cz/git/mrrl
Log | Files | Refs | Submodules | README

commit a3f91f1098d5c9127fc679d0ff32b0b7aa9bde81
parent 05c56da9ed88fd63cfc79bedc2a205d05d8dff39
Author: Jan Pobříslo <ccx@te2000.cz>
Date:   Thu, 15 Jun 2023 01:38:29 +0200

Add README

Diffstat:
AREADME | 104+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 104 insertions(+), 0 deletions(-)

diff --git a/README b/README @@ -0,0 +1,104 @@ +Packaging Through Hashed Build Scripts +====================================== + +Not a distro. Barely a packaging system. + +Intent of this project is to build robust, minimal Linux-based system that is +just enough to boot, start some containers (via unshare and pidns patch to s6), +and rebuild itself. + +It should be fully compatible with installation as a software overlay over +existing Linux distributions. + +The robustnes should come from two design decisions: +* picking simple software that does it's job right +* package versioning scheme inspired by Stow/Nix/Guix and also partly by + slashpackage convention + +How this works +-------------- + +Each package definition is actually a shell script that has all the instructions +to build the software in question as well as hash of any sources it needs, +either in form of file sha256sum or of git commit id. + +This shell script is then hashed with sha256 and the result is appended to +package name to form unique installation directory for that specific +configuration. +This way you are not limited from installing multiple versions or build +configurations of software and switching between them freely. + +These package installations then are combined into environments (similar to +profiles in Nix) implemented using symlink forest and are again identified by +their content hash. + +The packaging system itself is intended to pose as building block for larger +system configuration management suite that allows for atomic software and +configuration updates, A/B boot with rollback options, etc., without trying to +tell you how those should be managed. + +Dependencies of the package build and installation system are kept intentionally +as slim as possible. +Currently it's all done using busybox utilities and GNU make and this list is +expected to stay final. + +However, package dependency management can be very complex. +This design decouples the complexity of determining which software fits together +in desired configuration (which easily leads into combinatorial explosion) from +the packaging tool itself. + +The software packaged here is hand-picked minimal set, but there is nothing +preventing creation of a sophisticated package specification generator on top of +an efficient constraint solving algorithm and should work as a solid base for +that. + +Requirements +------------ + +The bootstrap is done by compiling musl-cross-make. +Ideally you should not need anything above requirements of that project but +currently the reproducible build checks are implemented using explicit calls to +busybox binary. (TODO) + +For regenerating the package build scripts from templates you will also need +Python3 and Jinja2. + +Packaged software +----------------- + +* busybox +* execline +* gnu-make +* mdevd +* musl-cross-make +* s6 +* s6-dns +* s6-linux-init +* s6-linux-utils +* s6-networking +* s6-portable-utils +* s6-rc +* skalibs + +Planned packages +---------------- + +* bison +* flex +* linux +* libretls +* curl +* git +* netbsd-curses +* zsh +* cgroup-tools (cgconfigparser) +* libcap (execcap tool) +* ... more iff needed + +Planned features +---------------- + +* build sandbox +* fully reproducible builds +* rewrite Python package generator into something easier to bootstrap on + POSIX-ish system (AWK?)