FLOP:Universal Funtoo

From Funtoo
Revision as of 17:50, January 12, 2023 by D4g33z (talk | contribs) (Created page with "{{FLOP |Created on=2023/01/12 |Summary=Specify a sequence of operations on a Funtoo stage3 image in an architecturally agnostic way and execute them in a container. |Author=d4...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
Created on
2023/01/12
Original Author(s)
d4g33z
Git sources (for cloning)
Link
Status

Funtoo Linux Optimization Proposal: Universal Funtoo

Specify a sequence of operations on a Funtoo stage3 image in an architecturally agnostic way and execute them in a container.

xtoo: Universal Funtoo

Summary

`xtoo` is a MVC framework to create `docker` images from `stage3` archives downloaded from the Funtoo build server at https://build.funtoo.org. Each image is initialized from a parent image, and the arrangement of all parent and child images forms a tree. Each node in the tree is another tree of nodes, each node being a script of operations (e.g. `bash` or `python` scripts), and these nodes are executed in a depth-first traversal. The first executing node create a container from its parent's image, runs the script of operations, and commits the container back to the parent (and to itself, which is usually deleted), creating a new layer in the parent's image. The first node to execute creates a container from the image at the root of the tree and commits it to its parent to get everything going.

This tree of images is created with `yaml` configuration files that specify configuration values, volumes to mount on the container, and the tree of scripts which are executed to ultimately commit to the root node (and subsidiary temporary images). These configuration files can be easily made interactive to solicit user input (e.g. passwords, hostnames, programs, etc) to customize image creation. Each configuration file constitutes a `project`, with the most important types being `host`,`target`,`xdev`,`kantoo` and `stage4`. Each must have the proper type of parent and the creation of each is demonstrated below. The ability to create custom user defined projects is also possible and is under development.

These configuration files are stored in a tree of directories that specifies the parent/child relationship of the projects they represent. The name of the directories are the names of the projects and the directory's relative path to a work directory are translated into `docker` repo tags. The `xtoo` program uses these directories to find the hidden `.xtoo-config.yaml` files that specify the steps to create a `docker` image with a certain tag.

The idea is to organize and share steps to fine-tune a `stage3 ` to create a `stage4` by `emerge`ing packages, installing dotfiles, modifying run levels, creating users, setting passwords, etc. This creates a path to better 'out of the box' experiences for Funtoo. Eventually, we might create an api for handling such standard operations, easing the way to create such `stage4`s.

Included with `xtoo` is a `kantoo` type project to create such a `stage4` for the `arm-32bit/raspi*` and the `arm-64bit/raspi4` type sub-architectures. It creates a stage4 with the following programs:

   app-admin/metalog
   app-admin/sudo
   app-editors/vim
   sys-apps/dbus
   net-dns/avahi
   net-misc/chrony
   net-misc/networkmanager
   sys-auth/nss-mdns
   net-wireless/hostapd
   net-fs/nfs-utils

The hostname is set to the `project` name, a root password is set, and various other `raspi` specific tweaks are made.

Projects can also be used as pure `docker` applications.