Poudriere rebuilding same packages

My poudriere runs every hour and takes in my list of ports and builds packages if needed. For the last few days it's been building the same 11 packages every hour (net-mgmt/netbox and dependencies), always the same versions.

I haven't found anything in logs to explain why it thinks it needs to rebuild the packages, any ideas?
 
For the last few days it's been building the same 11 packages every hour (net-mgmt/netbox and dependencies), always the same versions.
You sure you're not starting your poudriere-bulk(8) builds with the -c option?
Code:
     -c       Clean all previously built packages and logs.

I haven't found anything in logs to explain why it thinks it needs to rebuild the packages, any ideas?
Can you post the start of the log?

It'll tell you what it does:
Code:
[00:00:15] Checking packages for incremental rebuild needs
[00:00:15] Deleting Imath-3.2.2_1.pkg: new version: 3.2.2_2
[00:00:15] Deleting bind-tools-9.20.17.pkg: new version: 9.20.18
[00:00:15] Deleting bind918-9.18.43.pkg: new version: 9.18.44
[00:00:15] Deleting cmocka-2.0.1.pkg: new version: 2.0.2
[00:00:15] Deleting dejavu-2.37_3.pkg: new version: 2.37_4
[00:00:15] Deleting fping-5.3.pkg: new version: 5.5
[00:00:15] Deleting fzf-0.67.0_1.pkg: new version: 0.67.0_2
[00:00:15] Deleting galera26-26.4.22_2.pkg: new version: 26.4.25
[00:00:15] Deleting gitlab-analyzers-secrets-7.20.1_1.pkg: new version: 7.20.1_2
[00:00:15] Deleting gitlab-runner-18.6.3_1.pkg: new version: 18.8.0
[00:00:15] Deleting gitleaks-8.30.0_1.pkg: new version: 8.30.0_2
[00:00:15] Deleting go-bindata-3.1.3_33.pkg: new version: 3.1.3_34
[00:00:15] Deleting go124-1.24.11.pkg: new version: 1.24.12
[00:00:15] Deleting go125-1.25.5.pkg: new version: 1.25.6
[00:00:15] Deleting haproxy-3.2.10.pkg: new version: 3.2.10_1
[00:00:15] Deleting kea-3.0.2.pkg: new version: 3.0.2_1
[00:00:15] Deleting libheif-1.19.8_6.pkg: new version: 1.21.2
[00:00:15] Deleting libtasn1-4.20.0_1.pkg: new version: 4.21.0
[00:00:15] Deleting luajit-2.1.0.20251208.pkg: new version: 2.1.0.20260109
[00:00:15] Deleting luv-1.51.0.1_1.pkg: new version: 1.51.0.2
[00:00:15] Deleting openexr-3.4.4.pkg: new version: 3.4.4_1
[00:00:15] Deleting openjdk17-17.0.17+10.1.pkg: new version: 17.0.17+10.1_1
[00:00:15] Deleting openjdk20-20.0.2+9.1_3.pkg: new version: 20.0.2+9.1_4
[00:00:15] Deleting openjdk8-8.472.08.1.pkg: new version: 8.472.08.1_1
[00:00:15] Deleting openjph-0.25.3.pkg: new version: 0.26.0
[00:00:15] Deleting opus-1.6.pkg: new version: 1.6.1
[00:00:15] Deleting p11-kit-0.25.10.pkg: new version: 0.26.1
[00:00:15] Deleting py311-cffi-1.17.1.pkg: new version: 2.0.0
[00:00:15] Deleting py311-cryptography-45.0.7_2,1.pkg: new version: 46.0.3,1
[00:00:15] Deleting py311-cython-0.29.37_2.pkg: new version: 3.2.4
[00:00:15] Deleting py311-identify-2.6.15.pkg: new version: 2.6.16
[00:00:15] Deleting py311-jsonschema-4.25.1.pkg: new version: 4.26.0
[00:00:15] Deleting py311-maturin-1.10.2_1.pkg: new version: 1.11.5
[00:00:15] Deleting py311-pyparsing-3.3.0.pkg: new version: 3.3.1
{...}

There's sometimes a problem with OPTIONS not registering properly on specific ports, it then always thinks the OPTIONS changed and deletes the offending package. If that package is a dependency of something those packages get deleted too. That can trigger a constant rebuild of a whole dependency chain. You can see this happening in the logs though.
 
It's been running like this for years, poudriere doesn't have the '-c' flag. Usually it doesn't build anything, unless theres an updated port. Then all of a sudden, January 15th, it starts rebuilding netbox every hour.

I've rebuilt the jail and the ports tree, made no difference.
 
Code:
[00:00:00] Updating portstree "143amd64_default" with git+https... done
poudriere-build-143amd64_default.sh: Ports tree has been updated
poudriere-build-143amd64_default.sh: Updating ports overlay tree 143amd64_default_overlay
[00:00:00] Updating portstree "143amd64_default_overlay" with git+https... done
poudriere-build-143amd64_default.sh: Ports overlay tree has been updated
poudriere-build-143amd64_default.sh: Starting build for builder: 143amd64, set: default (Fri Jan 23 11:05:01 UTC 2026)
[00:00:00] Creating the reference jail... done
[00:00:00] Mounting system devices for 143amd64-143amd64_default-default
[00:00:00] Stashing existing package repository
[00:00:00] Mounting ccache from: /var/cache/ccache
[00:00:00] Mounting ports from: /usr/local/poudriere/ports/143amd64_default
[00:00:00] Mounting ports overlay from: /usr/local/poudriere/ports/143amd64_default_overlay
[00:00:00] Mounting packages from: /usr/local/poudriere/data/packages/143amd64-143amd64_default-default
[00:00:00] Mounting distfiles from: /usr/local/poudriere/distfiles
[00:00:00] Copying /var/db/ports from: /usr/local/etc/poudriere.d/143amd64-143amd64_default-default-options
[00:00:00] Appending to make.conf: /usr/local/etc/poudriere.d/143amd64-143amd64_default-default-make.conf
/etc/resolv.conf -> /usr/local/poudriere/data/.m/143amd64-143amd64_default-default/ref/etc/resolv.conf
[00:00:00] Starting jail 143amd64-143amd64_default-default
Updating /var/run/os-release done.
[00:00:00] Will build as root:wheel (0:0)
[00:00:01] Ports supports: FLAVORS SUBPACKAGES SELECTED_OPTIONS
[00:00:01] Inspecting /usr/local/poudriere/data/.m/143amd64-143amd64_default-default/ref//usr/ports for modifications to git checkout... no
[00:00:02] Ports top-level git hash: fa69b48a007c62b2da441c02865036ae40965149
[00:00:02] Acquiring build logs lock for 143amd64-143amd64_default-default... done
[00:00:02] Logs: /usr/local/poudriere/data/logs/bulk/143amd64-143amd64_default-default/2026-01-23_11h05m01s
[00:00:02] Loading MOVED for /usr/local/poudriere/data/.m/143amd64-143amd64_default-default/ref/usr/ports
[00:00:03] Gathering ports metadata
[00:00:07] Calculating ports order and dependencies
[00:00:09] Sanity checking the repository
[00:00:09] Trimming IGNORED and blacklisted ports
[00:00:09] Package fetch: Looking for missing packages to fetch from pkg+http://pkg.FreeBSD.org/${ABI}/latest
[00:00:09] Package fetch: No eligible missing packages to fetch
[00:00:09] Checking packages for incremental rebuild needs
[00:00:10] Deleting py311-pyyaml-env-tag-1.1.pkg: devel/py-pyyaml-env-tag@py311 moved to devel/py-pyyaml-env-tag@py311
[00:00:11] Deleting py311-mkdocs-1.6.1_1.pkg: missing dependency: py311-pyyaml-env-tag-1.1
[00:00:11] Deleting py311-mkdocs-minify-plugin-0.8.0_1.pkg: missing dependency: py311-mkdocs-1.6.1_1
[00:00:11] Deleting py311-mkdocs-redirects-1.2.0_1.pkg: missing dependency: py311-mkdocs-1.6.1_1
[00:00:11] Deleting py311-mkdocs-rss-plugin-1.17.9.pkg: missing dependency: py311-mkdocs-1.6.1_1
[00:00:11] Deleting py311-mkdocstrings-1.0.0.pkg: missing dependency: py311-mkdocs-1.6.1_1
[00:00:12] Deleting netbox-4.4.10.pkg: missing dependency: py311-mkdocstrings-1.0.0
[00:00:12] Deleting py311-mkdocs-autorefs-1.4.3.pkg: missing dependency: py311-mkdocs-1.6.1_1
[00:00:12] Deleting py311-mkdocs-material-9.7.1.pkg: missing dependency: py311-mkdocs-1.6.1_1
[00:00:12] Deleting py311-mkdocstrings-python-2.0.1.pkg: missing dependency: py311-mkdocs-autorefs-1.4.3
[00:00:12] Deleting py311-mkdocstrings-crystal-0.3.9.pkg: missing dependency: py311-mkdocs-autorefs-1.4.3
[00:00:14] Deleting stale symlinks... done
[00:00:14] Deleting empty directories... done
[00:00:14] Unqueueing existing packages
[00:00:14] Unqueueing orphaned build dependencies
[00:00:15] Sanity checking build queue
[00:00:15] [143amd64-143amd64_default-default] [2026-01-23_11h05m01s] [pkgqueue_sanity_check] Time: 00:00:14
           Queued: 11 Inspected: 0 Ignored: 0 Built: 0 Failed: 0 Skipped: 0 Fetched: 0 Remaining: 11
[00:00:15] Recording filesystem state for prepkg... done
[00:00:15] Processing PRIORITY_BOOST
[00:00:16] Building 11 packages using up to 11 builders
 
Guessing that's the problem, but the log line is misleading. The port was moved to devel/py-pyyaml_env_tag

Yep. Deletion of that package cascades, deleting everything that depends on it, and then everything that depends on those, and so on.


No, the other way around.

devel/py-pyyaml_env_tag -> devel/py-pyyaml-env-tag
Yeah, but in the log it's the same portname, and I just checked, py-mkdocs has been bumped with the new dependency, so I think it's something very subtle or a bug in how MOVED is processed
 
It messes up somewhere, it might be the FLAVOR.
Could it be because of circular records in MOVED:

Code:
devel/py-pyyaml-env-tag|devel/py-pyyaml_env_tag|2021-09-28|Renamed to match upstream naming
devel/py-pyyaml_env_tag|devel/py-pyyaml-env-tag|2026-01-15|Rename to match upstream naming
 
Back
Top