From: "Paul Barker" <paul@pbarker.dev>
To: "Alex Kiernan" <alex.kiernan@gmail.com>,
<openembedded-core@lists.openembedded.org>
Subject: Re: [PATCH 0/4] fontcache: make the caches built into an image valid
Date: Mon, 09 Nov 2026 14:20:35 +0000 [thread overview]
Message-ID: <DMQQVSTB0X1G.UN5EOW5V25PS@pbarker.dev> (raw)
In-Reply-To: <20261013-fontcache-reproducible-mtime-v1-0-950f07b80f0f@gmail.com>
On Tue Oct 13, 2026 at 11:49 AM BST, Alex Kiernan wrote:
> The fontconfig caches update_font_cache builds into an image are never
> used on the target. fontconfig accepts a cache only while the directory
> mtime it recorded matches the directory, and three things disagree about
> that mtime:
>
> - fc-cache records min(directory mtime, SOURCE_DATE_EPOCH). When the
> intercept runs, the font directories still carry their packages'
> mtimes and SOURCE_DATE_EPOCH is the image's fallback value.
> - reproducible_final_image_task then sets every mtime in the rootfs to
> REPRODUCIBLE_TIMESTAMP_ROOTFS.
> - mke2fs clamps every inode time to the SOURCE_DATE_EPOCH in its
> environment, so an ext image ends up with a different time again from
> a tar or squashfs image of the same rootfs.
>
> So every process using fonts rescans and writes a cache of its own, or
> fails to on a read-only rootfs. fc-cache also deletes a cache it has
> just written for a directory newer than SOURCE_DATE_EPOCH, so with the
> default values some caches are missing from the image entirely.
>
> Patches 1-2 run fc-cache under REPRODUCIBLE_TIMESTAMP_ROOTFS, with the
> font directories' mtimes already set to it. Patch 3 keeps that time in ext
> images, as oe_mksquashfs already does for squashfs. That moves every
> inode and superblock time in an ext image from
> SOURCE_DATE_EPOCH_FALLBACK to REPRODUCIBLE_TIMESTAMP_ROOTFS, which with
> the bitbake.conf defaults is from 2011-04-05 to 2018-03-09. Patch 4
> adds a selftest that boots an image carrying a font and checks that
> fontconfig accepts every cache and writes none. On qemuarm64 it fails
> without patches 1-3 and passes with them.
Hi Alex,
If the selftest case in patch 4 is ran without the other changes in this
series, does it fail? I'd like to confirm that this test case would
catch the failure case.
Thanks,
--
Paul Barker
next prev parent reply other threads:[~2026-11-09 14:20 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-13 10:49 [PATCH 0/4] fontcache: make the caches built into an image valid Alex Kiernan
2026-10-13 10:49 ` [PATCH 1/4] package_manager: pass REPRODUCIBLE_TIMESTAMP_ROOTFS to intercepts Alex Kiernan
2026-10-13 10:49 ` [PATCH 2/4] update_font_cache: write caches that are valid in the final image Alex Kiernan
2026-10-13 10:49 ` [PATCH 3/4] image_types: keep the rootfs mtimes in ext2/3/4 images Alex Kiernan
2026-10-13 10:49 ` [PATCH 4/4] oeqa/selftest: check the font caches an image ships are used Alex Kiernan
2026-11-09 14:20 ` Paul Barker [this message]
2026-11-09 14:57 ` [PATCH 0/4] fontcache: make the caches built into an image valid Alex Kiernan
[not found] ` <18E6685CF84244C0.681194@lists.openembedded.org>
2026-11-09 18:45 ` [OE-core] " Alex Kiernan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=DMQQVSTB0X1G.UN5EOW5V25PS@pbarker.dev \
--to=paul@pbarker.dev \
--cc=alex.kiernan@gmail.com \
--cc=openembedded-core@lists.openembedded.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.