Thanks, applied as ae5c38009cceca58fb793c8de2c717f28dc31861. Michael
[sent from post-receive hook] On Fri, 24 Nov 2023 08:28:22 +0100, Roland Hieber <[email protected]> wrote: > Introduce a new kconfig option to package a hook script into the RAUC > bundle and reference it in the manifest. Otherwise leave the [hooks] > section in the manifest empty. The hook script is searched > config/images/rauc-hooks.sh in the usual search locations. RAUC will > complain if a hook script is referenced but no hook script is found in > the image (i.e. IMAGE_RAUC_HOOK_SCRIPT is empty). > > As hooks that should be called by RAUC need to be mentioned in the > manifest too (in the relevant slot or the [bundle] section), the image > config will still need to be forked by BSPs in order to adapt the > manifest for that use case. However, the mechanism to find the hook > script is then already in place, and can be used as-is. > > Signed-off-by: Roland Hieber <[email protected]> > Message-Id: <[email protected]> > Signed-off-by: Michael Olbrich <[email protected]> > > diff --git a/config/images/rauc.config b/config/images/rauc.config > index e4169cc8cd95..4a6b34deee29 100644 > --- a/config/images/rauc.config > +++ b/config/images/rauc.config > @@ -1,6 +1,7 @@ > image @IMAGE@ { > rauc { > file root.tar.gz { image = "root.tgz" } > + @RAUC_HOOK_FILE@ > manifest = " > [update] > compatible=@RAUC_BUNDLE_COMPATIBLE@ > @@ -11,6 +12,9 @@ image @IMAGE@ { > [bundle] > format=@RAUC_BUNDLE_FORMAT@ > > + [hooks] > + @RAUC_HOOK_MANIFEST@ > + > [image.rootfs] > filename=root.tar.gz > " > diff --git a/platforms/image-rauc.in b/platforms/image-rauc.in > index 391956a42f81..2070cf0069c1 100644 > --- a/platforms/image-rauc.in > +++ b/platforms/image-rauc.in > @@ -58,4 +58,13 @@ config IMAGE_RAUC_INTERMEDIATE > verification. The certificates must be stored in the CA of the > "update-intermediate" role of the code signing provider. > > +config IMAGE_RAUC_HOOK > + bool "include hook script" > + help > + If you enable this option and create a file named > + config/images/rauc-hooks.sh in any PTXDIST_PATH component, it will be > + included in the bundle and declared as a hook script in the manifest. > + Note that you still need to define the respective install or slot > + hooks in the manifest so that RAUC calls them. > + > endif > diff --git a/rules/image-rauc.make b/rules/image-rauc.make > index 23d8d83b5251..e267e78c68f2 100644 > --- a/rules/image-rauc.make > +++ b/rules/image-rauc.make > @@ -19,6 +19,10 @@ IMAGE_RAUC := image-rauc > IMAGE_RAUC_DIR := $(BUILDDIR)/$(IMAGE_RAUC) > IMAGE_RAUC_IMAGE := $(IMAGEDIR)/update.raucb > IMAGE_RAUC_CONFIG := rauc.config > +IMAGE_RAUC_HOOK_FILE := $(call ptx/in-path, PTXDIST_PATH, > config/images/rauc-hooks.sh) > + > +$(call ptx/cfghash, IMAGE_RAUC, $(IMAGE_RAUC_HOOK_FILE)) > +$(call ptx/cfghash-file, IMAGE_RAUC, $(IMAGE_RAUC_HOOK_FILE)) > > # > ---------------------------------------------------------------------------- > # Image > @@ -36,6 +40,16 @@ ifdef PTXCONF_IMAGE_RAUC_BUNDLE_FORMAT_CRYPT > IMAGE_RAUC_BUNDLE_FORMAT := "crypt" > endif > > +ifdef PTXCONF_IMAGE_RAUC_HOOK > +IMAGE_RAUC_ENV_HOOK = \ > + RAUC_HOOK_FILE="file hooks.sh { image = \\"$(IMAGE_RAUC_HOOK_FILE)\\" > }" \ > + RAUC_HOOK_MANIFEST="filename=hooks.sh" > +else > +IMAGE_RAUC_ENV_HOOK = \ > + RAUC_HOOK_FILE="" \ > + RAUC_HOOK_MANIFEST="" > +endif > + > IMAGE_RAUC_ENV = \ > $(CODE_SIGNING_ENV) \ > RAUC_BUNDLE_COMPATIBLE="$(call > remove_quotes,$(PTXCONF_RAUC_COMPATIBLE))" \ > @@ -43,6 +57,7 @@ IMAGE_RAUC_ENV = \ > RAUC_BUNDLE_VERSION="$(call remove_quotes, > $(PTXCONF_RAUC_BUNDLE_VERSION))" \ > RAUC_BUNDLE_BUILD=$(call ptx/sh, date +%FT%T%z) \ > RAUC_BUNDLE_DESCRIPTION=$(PTXCONF_IMAGE_RAUC_DESCRIPTION) \ > + $(IMAGE_RAUC_ENV_HOOK) \ > RAUC_KEY="$(shell cs_get_uri update)" \ > RAUC_CERT="$(shell cs_get_uri update)" \ > RAUC_KEYRING="$(shell cs_get_ca update)" \
