@@ -77,17 +77,19 @@ REPART_DDI_TYPE ?= "sysext"
REPART_DDI_EXTENSION ?= "ddi"
-# systemd-repart creates temporary directoryies under /var/tmp/.#repartXXXXXXX/,
-# to estimate partition size etc. Since files are copied there from the image/rootfs
-# folder - which are owned by pseudo-root - this temporary location has to be
-# added to the directories handled by pseudo; otherwise calls to e.g.
-# fchown(0,0) inside systemd git/src/shared/copy.c end up failing.
-PSEUDO_INCLUDE_PATHS .= ",/var/tmp/"
+# systemd-repart stages copies of the rootfs here; pseudo has to cover it
+REPART_WORKDIR = "${WORKDIR}/repart-tmp"
+PSEUDO_INCLUDE_PATHS .= ",${REPART_WORKDIR}"
oe_image_systemd_repart_make_ddi() {
local additional_args=""
+ # $TMP, not $TMPDIR: pseudo derives its own runtime paths from $TMPDIR
+ rm -rf "${REPART_WORKDIR}"
+ mkdir -p "${REPART_WORKDIR}"
+ export TMP="${REPART_WORKDIR}"
+
if [ -n "${REPART_PRIVATE_KEY}" ]
then
if [ -n "${REPART_PRIVATE_KEY_SOURCE}" ]
systemd-repart copies the rootfs into a temporary directory from var_tmp_dir() to populate the filesystems. With $TMPDIR, $TEMP and $TMP unset in the task, that is the host's /var/tmp, which the class adds to PSEUDO_INCLUDE_PATHS for the faked ownership to apply there. pseudo then tracks a host-wide directory shared by all builds and users, and an interrupted run can leave its staging tree outside the build directory. Stage into ${WORKDIR}/repart-tmp instead, recreated on every run, and cover only that with pseudo. The location is passed through $TMP rather than $TMPDIR, because pseudo derives its own runtime paths from $TMPDIR. Assisted-by: Claude:claude-opus-5-5 Signed-off-by: Johannes Schneider <johannes.schneider@leica-geosystems.com> --- Build-tested on scarthgap with this class and 1/2: two signed lzma sysext DDIs build, the files in the erofs partition are owned by root, and nothing is left in /var/tmp. A downstream copy of the class, which had no pseudo coverage for the staging directory at all, failed do_image_ddi in a CI container (EPERM on the ownership copy); this staging fixed it there. meta-oe/classes/discoverable-disk-image.bbclass | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-)