Robert C Jennings
0d56c46d24
In parallel builds where a list of image targets are provided the build may produce binaries that are not part of the named set of targets but are created by series dependencies. These implicitly created binaries may be generated by multiple builds but are unused as our convention for the ubuntu-cpc project is to only consume binaries from the explicitly named image targets; this avoid overwriting the same object by multiple parallel builds. This patch adds support for a 'provides' keyword for series files. It can be specified multiple times per series file. The field is used by the make-hooks script to generate a list of output files created explicitly by the named image targets. The list is saved to the "explicit_provides" file in the hooks output directory. In the case of the "all" target this list would be empty. This list is consumed by the "final.binary" hook file. This patch adds support for optional final.binary hooks in hooks.d/base and/or hooks.d/extra. These final.binary hooks are always included as the last hook(s) if either exist with the hook in "extra" running last. The base/final.binary hook includes logic to parse the "explicit_provides" file generated by the make-hooks script and remove any binary output not explicitly specified. Some series files named unnecessary dependencies, specifically disk-image, to keep output of implicit artifacts consistent between parallel builds. These unnecessary dependencies are removed in this patch. |
5 years ago | |
---|---|---|
.. | ||
hooks.d | ubuntu-cpc: Only produce explicitly named artifacts (LP: #1837254) | 5 years ago |
includes.chroot/etc | * Enable systemd-networkd by default. | 7 years ago |
README.cpc.md | Use series files with dependency handling to generate hook symlinks dynamically | 6 years ago |
README.cpc.md
TL;DR
In order to generate the hooks for a specific image target set, call the
make-hooks
script, located in hooks.d
as
./make-hooks --hooks-dir ../hooks <image_set>
where image_set
is the name of a series file (e.g. "vagrant") without leading
path components. Do not check in the hooks
folder, it is automatically
generated by auto/config
during Live Build runs.
Hook placement and ordering
Scripts live in subfolders below the hooks.d
folder. Currently the folders
chroot
and base
exist. The folder with the name extra
is reserved for
private scripts, which are not included in the source of livecd-rootfs. The
scripts are not numbered, instead the order of their execution depends on the
order in which they are listed in a series file.
Series files are placed in subfolders hooks.d/base/series
or
hooks.d/extra/series
. Each series file contains a list of scripts to be
executed. Empty lines and lines starting with a #
are ignored.
Series files in extra/series
override files in base/series
with the same
name. For example, if a series file base/series/cloudA
exists and a series
file extra/series/cloudA
, then the latter will be preferred.
A series file in extra/series
may also list scripts that are located in the
chroot
and base
folders. In addition, series files can depend on other
series files. For example, the series files for most custom images look similar
to this:
depends disk-image
depends extra-settings
extra/cloudB.binary
Where disk-image
and extra-settings
may list scripts and dependencies which
are to be processed before the script extra/cloudB.binary
is called.
ACHTUNG: live build runs scripts with the suffix ".chroot" in a batch separate from scripts ending in ".binary". Even if you arrange them interleaved in your series files, the chroot scripts will be run before the binary scripts.
Image set selection for Live Build
During a Live Build, enumerated symbolic links are generated based on the
contents of one or more series files. The series files are selected according
to the contents of the IMAGE_TARGETS
environment variable. For example, in
order to trigger the build of squashfs
and vagrant
, list them in the
IMAGE_TARGETS
variable as squashfs,vagrant
. The separator can be a comma,
a semi-colon or whitespace.
The generation of the symbolic links is triggered from the auto/config
script,
from where the contents of the IMAGE_TARGETS
environment variable are passed
on to the make-hooks
script.
Symlink generation
Since Live Build itself does not know about series files, a traditional hooks
folder is generated using the make-hooks
script. The script takes as arguments
the names of the series files to be processed.
The script parses the series files and generates enumerated symbolic links for
all entries. Per default, these are placed into a directory named hooks
next
to the hooks.d
directory. This can be changed using the --hooks-dir
parameter.