Building a CI/CD with #Poudriere? Great idea.

But what if your port has to rebuild main on every build, with no distfile checks getting in the way?

#FreeBSD ports really do not want you to do this. Here is how I made it work anyway:

https://oshogbo.com/blog/91/

How to Fetch a Moving Target with Poudriere

The FreeBSD ports framework has a simple idea about the world: a distfile never changes. It has a fixed size and a fixed checksum, written once into `distinfo` and verified every time after that. It is super useful to verify that the upstream has not changed the package, or that someone changed it without authorization. Basically this is the trust contract between our FreeBSD ports system and the upstream ports. My problem is that one of my distfiles has to change - almost every build.

oshogbo//vx

Tweaking your #poudriere build on #FreeBSD? Wanting to try out that new version without rebuilding the entire tree? That was me earlier tonight. With the help of rsync, I copied my repo, and then built only the bits I needed to build. Not a whole repo.

https://dan.langille.org/2026/06/12/giving-poudriere-a-jump-start/

Giving poudriere a jump start – Dan Langille's Other Diary

When building packages, it's CPU which is my bottleneck (surprise!).

I try different hosts, different disks, different options. The biggest difference: parallel builds.

https://dan.langille.org/2026/06/11/how-changes-to-poudriere-conf-affect-the-build-time/

#FreeBSD #poudriere

How changes to poudriere.conf affect the build time – Dan Langille's Other Diary

poudriere, out of the box, with no special settings, has taken 17 hours building llvm19, so far:

[07] 16:55:19 devel/llvm19@default | llvm19-19.1.7_3 build 16:53:09 6.06 GiB 72.3% 0.2%

I have a new host[1] available and for laughs, I'm comparing it against an existing host[2]. The goal: just how much do various poudriere options get you in terms of performance.

The third build on the new host started last night. It's very bare bones right now.

These are the new host options:

#
# This was the intial run for pkg02
#
BASEFS=/usr/local/poudriere
DISTFILES_CACHE=/usr/ports/distfiles
FREEBSD_HOST=_PROTO_://_CHANGE_THIS_
RESOLV_CONF=/etc/resolv.conf
USE_PORTLINT=no
USE_TMPFS=yes
ZPOOL=data01

These are the options for the existing host:

ALLOW_MAKE_JOBS=yes
ALLOW_MAKE_JOBS_PACKAGES="pkg ccache py* llvm* mongodb* cmake binutils samba* gdb mysql*-server png graphviz gcc* sdocbook rust vaultwarden librenms ghc"
ALLOW_UNSUPPORTED_SYSTEM=1
BASEFS=/usr/local/poudriere
BUILD_AS_NON_ROOT=yes
CCACHE_DIR_NON_ROOT_SAFE=no
COMMIT_PACKAGES_ON_FAILURE=yes
DISTFILES_CACHE=/usr/ports/distfiles
FREEBSD_HOST=https://download.FreeBSD.org
GIT_BASEURL=git.freebsd.org/ports.git
PKG_REPO_SIGNING_KEY=/usr/local/etc/ssl/pkg.key
RESOLV_CONF=/etc/resolv.conf
SVN_HOST=svn0.us-east.FreeBSD.org
URL_BASE=https://services.unixathome.org/poudriere
USE_PORTLINT=yes
USE_TMPFS="all"
ZPOOL=data03
ZROOTFS=/poudriere

1 - new host: https://dan.langille.org/2026/06/03/r7425-01/

2 - existing host: https://dan.langille.org/2026/05/24/r730-01-4/

#FreeBSD #poudriere

download.FreeBSD.org

FreeBSD people: anyone monitoring poudriere output checking for failed/ignored/skipped packages in an automated way somehow? Answering questions like "how many ports were skipped? Was www/nginx built successfully?" #FreeBSD #poudriere

Great #video by @garyhtech on why #BSD will never own the cloud.

#Linux owns the #cloud and frankly I'm fine with that. #FreeBSD doesn't need to compete with Linux in this area. It may not have the massive ecosystem, but given its strengths, it functions just fine for back end #infrastructure, in general and niche use cases.

People frequently tout FreeBSD for #ZFS and #Jails but honestly I think #Ports and #Poudriere are huge selling points

https://www.youtube.com/watch?v=XWf1z1ifjOc

Why Linux Owns the Cloud (And BSD Probably Never Will)

YouTube

@dvl I always chose the pkgbase method when using poudriere to create a jail.

Historically (before FreeBSD 16.0-CURRENT):

poudriere jail -c -v 15 -j main -m pkgbase=base_latest -U https://pkg.freebsd.org/

– from <https://www.reddit.com/r/freebsd/comments/1cmffhu/poudriere_jail_method_pkgbase/l3atzzs/> (you were in a different thread under the same post).

poudriere-jail(8) and pkgbase: FreeBSD-base package cache accumulation: <https://github.com/freebsd/poudriere/discussions/1276>

#FreeBSD #poudriere #pkgbase

pkg.FreeBSD.org

Well wouldja lookit that. It actually did need that much memory, and with a bit more configuration I got it to build the package that I wanted. 😲

A little more mucking about with setting up a bare-bones local package repository and it's done. It works, as far as I can tell.

Of course after building over 350 packages, when I went to install it, it only needed 4 packages to satisfy everything.

Will I get significant mileage out of the new application? Hard to tell. But at least I'm in a place where I can perform decent builds to plug the odd gap in the quarterly package repository.

Thank you #FreeBSD and #poudriere.

I had been thinking of what to do with the 2012 #MacPro that I crammed full of 64 GB of memory.

I found something in #FreeBSD #ports that I wanted to build, and my newer machines with 32 GB of memory each couldn't handle it. Somewhere within the giant dependency graph of over 350 ports, there are two versions of LLVM as well as all of Node and Rust. A #slow process would be one way to describe it, but that might be underselling it a bit.

I guess I'm #reducing #waste a little bit, maybe? I don't know. I don't know if what I'm building will even work or be useful. But hey, at least I get a little experience with #poudriere so I guess it can't be all bad?