No description
Find a file
Tom Gundersen 566911cc27 osbuild.pi: grant access to loop device nodes
We are in the devices namespace, so we must explicitly grant
permission to devices and/or device classes if we are to use
them.

We rely on being able to create and access loop devices in
order to create partitions and filesystems.

/dev/loop-control allows us to create new loop devices backed by
files. The block-loop class allows access to the created block
devices to set up a partition table and the block-blkext class
allows access to the partitions to create and mount filesystems.

Signed-off-by: Tom Gundersen <teg@jklm.no>
2019-06-16 22:48:16 +02:00
assemblers stage api: pass options in a separate key 2019-06-16 12:07:27 +02:00
stages stage api: pass options in a separate key 2019-06-16 12:07:27 +02:00
LICENSE Add LICENSE 2019-04-09 18:18:44 +02:00
osbuild osbuild.py: add systemResourcesFromEtc key 2019-06-14 20:29:14 +02:00
osbuild-run osbuild.py: rename run-stage to osbuild-run 2019-06-14 18:45:55 +02:00
osbuild.py osbuild.pi: grant access to loop device nodes 2019-06-16 22:48:16 +02:00
README.md osbuild: replace --from and --save with --input and --output 2019-06-12 16:26:29 +02:00

osbuild

A build system for operating system images, working towards an image build pipeline that's more comprehensible, reproducible, and extendable.

Pipelines

The build process for an image is described by a pipeline. Each stage in a pipeline is a program that, given some configuration, modifies a file system tree. Pipelines are defined as JSON files like this one:

{
  "name": "Example Image",
  "pipeline": [
    {
      "name": "io.weldr.dnf",
      "options": {
        "packages": [ "@core", "httpd" ]
      }
    },
    {
      "name": "io.weldr.systemd",
      "options": {
        "enabled_services": [ "httpd" ]
      }
    },
    {
      "name": "io.weldr.qcow2",
      "options": {
        "target": "output.qcow2"
      }
    }
  ]
}

osbuild runs each of the stages in turn, isolating them from the host and from each other, with the exception that the first stage may be given an input directory, the last stage an output directory and all stages of a given pipeline are given the same filesystem tree to operate on.

Each stage is passed the (appended) options object as JSON over stdin.

The above pipeline has no input and produces a qcow2 image.

Running

osbuild [--input DIRECTORY] [--output DIRECTORY] PIPELINE

Runs PIPELINE. If --input is given, the directory is available read-only in the first stage. If --output is given it, it must be empty and is avialble read-write in the final stage.