debian-forge/README.md
2019-06-06 17:08:00 +02:00

55 lines
1.4 KiB
Markdown

# 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*](/stages) in a pipeline is a program that, given some configuration,
modifies a file system tree. Pipelines are defined as JSON files like this one:
```json
{
"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 into mount and pid
namespaces. It injects the `options` object with a `tree` key pointing to the
file system tree and passes that to the stage via its `stdin`. Each stage has
private `/tmp` and `/var/tmp` directories that are deleted after the stage is
run.
Stages may have side effects: the `io.weldr.qcow2` stage in the above
example packs the tree into a `qcow2` image.
## Running
```
osbuild [--from ARCHIVE] [--save ARCHIVE] PIPELINE
```
Runs `PIPELINE`. If `--from` is given, unpacks its contents (`.tar.gz`) into
the tree before running the first stage. If `--save` is given, saves the
contents of the tree in the given archive.