Re: How poudriere's PACKAGE_FETCH_WHITELIST should work?

From: Miroslav Lachman <000.fbsd_at_quip.cz>
Date: Thu, 16 Feb 2023 00:28:03 UTC
On 15/02/2023 22:02, Mark Millard wrote:
> Miroslav Lachman <000.fbsd_at_quip.cz> wrote on
> Date: Wed, 15 Feb 2023 19:50:59 UTC :

[..]

> TMPFS_BLACKLIST="rust"
> TMPFS_BLACKLIST_TMPDIR=${BASEFS}/data/cache/tmp
> 
> (Of course, the file system for TMPFS_BLACKLIST_TMPDIR
> needs to have sufficient space available for whatever
> combination of blacklisted ports might be building
> at the same time.)

Thank you for pointing this out, I will try to set TMPFS_BLACKLIST, it 
seems useful!

> (Note: my familiarity is with poudriere-devel .)

Yes, I am on poudriere-devel too.

[..]

>> But the mystery is that "poudriere bulk" failed on building rust even if
>> it should be used from fetched package:
> 
> A possibility for the type of issue:
> 
> Using 1.66 vs. 1.67 as an example, there was a time frame when
> the most recent package available to download was 1.66 based
> but the port had been updated to 1.67 . The package for 1.67
> showed up later after the FreeBSD build-server poudriere
> bulk activity and the distribution to the download server
> that you happen to (potentially) use.
> 
> So it might have downloaded 1.66 but discovered that the ports
> tree involved was at 1.67 instead.

I am using quarterly to avoid fast moving targets. Local ports tree is 
2023Q quarterly, poudriere is set up to use quarterly packages for fetch 
too:
PACKAGE_FETCH_BRANCH=quarterly

The fetched rust was 1.66.0 and the built one is 1.66.0 too. That's why 
I am confused with this behavior.

> There is also that the packages for distribution are updated
> after the FreeBSD build server's poudriere bulk that involved
> the package: the packages are updated more like "as a unit"
> relative to the overall bulk build but distribution is spread
> over time and space.

I checked availability on FreshPorts too: 
https://www.freshports.org/lang/rust/
quarterly for FreeBSD:12:amd64 is listed as 1.66.0, last checked 
2023-02-15 10:00 so it should (and it is) available to download at it 
was downloaded but was not used by Poudriere and the build was started, 
then failed and then fetched again and used for next build. Very confusing.

[..]

> Using a more overall example context: Using poudriere, it
> rebuilds a port that are dependent on ports that have new
> versions, even if the port in question does not have a
> new version number. After rebuilding, the lack of a new
> version leads to package-update activity not installing
> an update. So: built but not put to use.
> 
> This gets to be sort of like the earlier 1.66 vs. 1.67
> illustration: The downloadable package might have been
> based on an earlier version of some other port(s) and,
> until rebuilt and distributed, is somewhat mismatched
> with some port(s) it was dependent on. This could lead
> to a rebuild, even if the rebuild might end up not being
> used because of a lack of version number change.

I hope I kind of understand what you are explaining but I am still 
puzzled in what conditions are / will be fetched packages used.
Why llvm10 is never fetched, always built from scratch?
Is there a way to debug what logic is Poudriere using for what 
dependency fetching? Is it logged somewhere?

Thank you for your explanation!

Kind regards
Miroslav Lachman