1OSBUILD-MANIFEST(5) File Formats Manual OSBUILD-MANIFEST(5)
2
3
4
6 osbuild-manifest - OSBuild Manifest Format
7
9 {
10 "pipeline": {
11 "build": { ... },
12 "stages": [ ... ],
13 "assembler": { ... }
14 },
15
16 "sources": {
17 "org.osbuild.files": {
18 "urls": {
19 ...
20 }
21 }
22 }
23 }
24
25
26
28 The osbuild manifest format describes to osbuild(1) which build pipe‐
29 line to execute and which resources to make available to it. A manifest
30 is always formatted as a single JSON document and must contain all
31 information needed to execute a specified pipeline. Furthermore, a man‐
32 ifest must be authoritative in that data passed to osbuild(1) via other
33 means than the manifest must not affect the outcome of the pipeline.
34 Therefore, the content of a manifest deterministicly describes the
35 expected output.
36
37 The exact schema of the manifest is available online as the OSBuild
38 JSON Schema [1].
39
40 A manifest consists of a fixed amount of top-level sections. These
41 include sections that describe the steps of the pipeline to execute,
42 but also external resources to make available to the pipeline execu‐
43 tion. The following manual describe the different sections available in
44 the manifest, as well as short examples how these sections can look
45 like.
46
48 The pipeline section describes the pipeline to execute. This includes a
49 description of the build system to use for the execution, the stages to
50 execute, and the final assemblers whichproduce the desired output for‐
51 mat.
52
53 "pipeline": {
54 "build": { ... },
55 "stages": [ ... ],
56 "assembler": { ... }
57 }
58
59
60
61 PIPELINE: build
62 The build section specifies the system to use when executing stages of
63 a pipeline. The definition of this section is recursive, in that it
64 requires a pipeline definition as its value. The build system is cre‐
65 ated by recursively executing its pipeline definition first. It is then
66 used as the build system to execute the pipeline that defined this
67 build system.
68
69 Additionally to the pipeline description, a build definition must also
70 define the runner to use when executing applications in this system.
71 These runners are shipped with osbuild(1) and perform environment setup
72 before executing a stage.
73
74 "build": {
75 "pipeline": {
76 "build": { ... },
77 "stages": [ ... ],
78 "assembler": { ... }
79 },
80 "runner": "org.osbuild.linux"
81 }
82
83
84
85 PIPELINE: stages
86 The stages section is an array of stages to execute as part of the
87 pipeline. Together they produce a file system tree that forms the out‐
88 put of the pipeline. Each stage can modify the tree, alter its con‐
89 tent, or add new data to it. All stages are executed in sequence, each
90 taking the output of the previous stage as their input.
91
92 "stages": [
93 {
94 "name": "<stage-A>",
95 "options": {
96 ...
97 }
98 },
99 {
100 "name": "<stage-B>",
101 "options": {
102 ...
103 }
104 }
105 ]
106
107
108
109 Stages are shipped together with osbuild(1). The manifest can option‐
110 ally contain options that are passed to the respective stage.
111
112 PIPELINE: assembler
113 The assembler is the final stage of a pipeline. It is similar to a
114 stage but always executed last. Furthermore, it is not allowed to mod‐
115 ify the file system tree. Instead, it is expected to take the file sys‐
116 tem tree and produce a desired output format for consumption by the
117 user.
118
119 "assembler": {
120 "name": "<assembler-A>",
121 "options": {
122 ...
123 }
124 }
125
126
127
128 Assemblers are shipped together with osbuild(1). The manifest can
129 optionally contain options that are passed to the respective assembler.
130
132 The sources section describes external resources that are needed to
133 execute a pipeline. Specified sources do not have to be used by a pipe‐
134 line execution. Hence, it is not an error to specify more resources
135 than actually required.
136
137 Note: The pipeline executor might prefetch resources before executing
138 a pipeline. Therefore, you should only specify resources that
139 are actually required to execute a pipeline.
140
141 The sources section thus allows to hide from the pipeline execution
142 where an external resource comes from and how it is fetched. Instead,
143 it provides an internal API to the pipeline to access these external
144 resources in a common way. Depending on which pipeline stages are
145 defined, they required different source types to provide configured
146 resources.
147
148 The following sub-sections describe the different available source
149 types. To configure a specific source type, you would use something
150 like the following:
151
152 "sources": {
153 "<source-type-A>": {
154 ...
155 },
156 "<source-type-B>": {
157 ...
158 }
159 }
160
161
162
163 SOURCE: org.osbuild.files
164 The org.osbuild.files source type allows to provide external files to
165 the pipeline execution. The argument to this type is a dictionary of
166 file names and their corresponding resource URIs. The file name must be
167 the hash of the expected file, prefixed with the hash-type.
168
169 The following example shows how you could provide two files to a pipe‐
170 line execution via the org.osbuild.files source type:
171
172 "sources": {
173 "org.osbuild.files": {
174 "sha256:<hash-A>": "https://example.com/some-file-A",
175 "sha256:<hash-B>": "https://example.com/some-file-B"
176 }
177 }
178
179
180
182 osbuild(1), osbuild-composer(1)
183
185 [1] OSBuild JSON Schema: https://osbuild.org/schemas/osbuild1.json
186
187
188
189
190 OSBUILD-MANIFEST(5)