No description
Find a file
Tom Gundersen a41ce99521 test: make the testsuite passive rather than active
Let the image be responsible for running its own test, and simply
listen for the output from the testsuite.

Hook this up with a standard f30 image that contains a simple boot
test case, using systemctl to verify that all services started
correctly.

This replaces the old web-server test, giving similar functionality.
The reason for the change is twofold: this way the tests are fully
specificed in the pipeline, so easier to reproduce. Moreover, this
is less intrusive, as the test does not require network support in
the image.

Signed-off-by: Tom Gundersen <teg@jklm.no>
2019-08-30 12:00:47 +02:00
assemblers assembler/qcow2: copy the tree into the target image 2019-08-26 09:25:42 +03:00
osbuild osbuild: split package into separate files 2019-08-21 09:56:50 +04:00
samples test: make the testsuite passive rather than active 2019-08-30 12:00:47 +02:00
stages stages: add test stage 2019-08-29 10:25:15 +02:00
test test: make the testsuite passive rather than active 2019-08-30 12:00:47 +02:00
.gitignore .gitignore: add additional directories to ignore 2019-08-07 10:01:17 +02:00
.packit.yaml Set up continuous delivery for Fedora Rawhide/30 2019-08-30 11:32:14 +02:00
.pylintrc pylint: disable too-many-arguments rule 2019-07-24 12:55:48 +02:00
.travis.yml osbuild: add description() methods 2019-08-07 10:01:17 +02:00
LICENSE Add LICENSE 2019-04-09 18:18:44 +02:00
Makefile Set up continuous delivery for Fedora Rawhide/30 2019-08-30 11:32:14 +02:00
MANIFEST.in introduce spec file and related build scripts 2019-07-23 15:22:40 +02:00
osbuild-run osbuild-run: remove any /etc/nsswitch.conf 2019-08-02 00:57:28 +02:00
osbuild.spec download sources from github as <name>-<version>.tar.gz 2019-08-01 16:17:11 +02:00
README.md ObjectStore: add an object store class 2019-08-01 22:39:52 +02:00
setup.py introduce spec file and related build scripts 2019-07-23 15:22:40 +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. Finally, an assembler takes a filesystem tree, and assembles it into an image. Pipelines are defined as JSON files like this one:

{
  "name": "Example Image",
  "stages": [
    {
      "name": "org.osbuild.dnf",
      "options": {
        "releasever": "30",
        "repos": {
          "fedora": {
            "name": "Fedora",
            "metalink": "https://mirrors.fedoraproject.org/metalink?repo=fedora-$releasever&arch=$basearch",
            "gpgkey": "file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-$releasever-$basearch"
          }
        },
        "packages": [ "@Core", "grub2-pc", "httpd" ]
        }
    },
    {
      "name": "org.osbuild.systemd",
      "options": {
        "enabled_services": [ "httpd" ]
      }
    },
    {
      "name": "org.osbuild.grub2",
      "options": {
        "root_fs_uuid": "76a22bf4-f153-4541-b6c7-0332c0dfaeac"
      }
    }
  ],
  "assembler": {
    "name": "io.weldr.qcow2",
    "options": {
      "filename": "example.qcow2",
      "root_fs_uuid": "76a22bf4-f153-4541-b6c7-0332c0dfaeac"
    }
  }
}

osbuild runs each of the stages in turn, isolating them from the host and from each other, with the exception that they all operate on the same filesystem-tree. The assembler is similarly isolated, and given the same tree, in read-only mode and assembles it into an image without altering its contents.

The filesystem tree produced by the final stage of a pipeline, is named and optionally saved to be reused as the base for future pipelines.

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

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

Running

usage: python3 -m osbuild [-h] [--store DIRECTORY] [-l DIRECTORY] -o DIRECTORY
                   PIPELINE

Build operating system images

positional arguments:
  PIPELINE              json file containing the pipeline that should be built

optional arguments:
  -h, --help            show this help message and exit
  --store DIRECTORY   the directory where intermediary os trees are stored
  -l DIRECTORY, --libdir DIRECTORY
                        the directory containing stages, assemblers, and the
                        osbuild library

required named arguments:
  -o DIRECTORY, --output DIRECTORY
                        provide the empty DIRECTORY as output argument to the
                        last stage