---
name: "sysconf-poudriere"
section: "8"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["freebsd"]
url: "https://new.carta.tech/sysconf-poudriere"
---

# sysconf-poudriere(8)

configure poudriere.conf and poudriere.d overlay files

## NAME

**sysconf poudriere** – configure poudriere.conf and poudriere.d overlay files

## SYNOPSIS

**sysconf** **poudriere** \[**-****-jail** *name*\] \[**-****-ports** *name*\] \[**-****-tree** *name*\] \[**-****-set** *name*\] \[*sysrc\_argument* *...*\]

**sysconf** **poudriere** {**make**\|**src**\|**src-env**} \[**-ceFinNqsvVx**\] \[**-****-jail** *name*\] \[**-****-ports** *name*\] \[**-****-tree** *name*\] \[**-****-set** *name*\] \[**-j** *jail* \| **-R** *dir*\] \[**-f** *file*\] *name*\[\[+\|-\]=*value*\] *...*

**sysconf** **poudriere** {**make**\|**src**\|**src-env**} \[**-eFnNqvV**\] \[**-****-jail** *name*\] \[**-****-ports** *name*\] \[**-****-tree** *name*\] \[**-****-set** *name*\] \[**-f** *file*\] **-a**

**sysconf** **poudriere** {**make**\|**src**\|**src-env**} \[**-E**\] \[**-****-jail** *name*\] \[**-****-ports** *name*\] \[**-****-tree** *name*\] \[**-****-set** *name*\] \[**-f** *file*\] **-l** \| **-L**

## DESCRIPTION

The **poudriere** target of [sysconf(8)](/sysconf/8.md) reaches the same files poudriere(8) sources. With no sub-target, it is the *poudriere.conf* collection, handed to [sysrc(8)](/sysrc/8.md) as **-f** files. The sub-targets are **make**, **src**, and **src-env**. Each is the matching [make(1)](/make/1.md) collection under *poudriere.d*, handled by the same engine as [sysconf-make(8)](/sysconf-make/8.md).

A unique prefix of the **poudriere** keyword is accepted (‘p’). A unique prefix of a sub-target is accepted the same way( ‘m’ selects **make**; ‘s’ and ‘sr’ are ambiguous between **src** and **src-env**).

### poudriere.conf

*poudriere.conf* is [rc.conf(5)](/rc.conf/5.md)-style shell written by the administrator; poudriere never writes it. The default collection, sourced by every poudriere command, is in order: *POUDRIERE\_ETC/poudriere.conf* if readable (default */usr/local/etc/poudriere.conf*), then *POUDRIERED/poudriere.conf* if readable and not the same file as the first (default *POUDRIERE\_ETC/poudriere.d/poudriere.conf*). At least one of those two files must exist. Honor POUDRIERE\_ETC and POUDRIERED when set.

When a jail, ports tree, or set is given, the matching files are appended, in the order poudriere(8) uses:

```
POUDRIERED/<setname>-poudriere.conf
POUDRIERED/<tree>-poudriere.conf
POUDRIERED/<jailname>-poudriere.conf
POUDRIERED/<tree>-<setname>-poudriere.conf
POUDRIERED/<jailname>-<tree>-poudriere.conf
POUDRIERED/<jailname>-<setname>-poudriere.conf
POUDRIERED/<jailname>-<tree>-<setname>-poudriere.conf
```

An explicit [sysrc(8)](/sysrc/8.md) **-f** replaces discovery. **-l** and **-L** are handled here and printed one path per line. For this *poudriere.conf* collection, **-l** lists each readable file. **-L** lists every location the given jail, tree, and set would consult, including overlays that do not exist yet. If no jail, tree, or set is given, the list is the two global *poudriere.conf* paths. **-E** limits either list to files that exist. **-l** and **-L** take no variable names. Other arguments except the **poudriere** keyword itself are handed to [sysrc(8)](/sysrc/8.md) verbatim. A bare ‘--’ means the next word is a variable in this collection, even when that word is **make**, **src**, **src-env**, or a unique prefix of one of those sub-targets.

### make.conf, src.conf, and src-env.conf

These live only under *POUDRIERED* and use [make(1)](/make/1.md) syntax, so they are not mixed into the *poudriere.conf* sysrc collection.

**poudriere** **make** consults, in the order shown by poudriere(8):

```
POUDRIERED/make.conf
POUDRIERED/<setname>-make.conf
POUDRIERED/<tree>-make.conf
POUDRIERED/<jailname>-make.conf
POUDRIERED/<tree>-<setname>-make.conf
POUDRIERED/<jailname>-<tree>-make.conf
POUDRIERED/<jailname>-<setname>-make.conf
POUDRIERED/<jailname>-<tree>-<setname>-make.conf
```

**-l** always prints the global path, even when that file does not exist: *POUDRIERED/make.conf* for **make**, *POUDRIERED/src.conf* for **src**, and *POUDRIERED/src-env.conf* for **src-env**. An overlay is printed only when the file exists. **-L** lists every location the given jail, tree, and set would consult, including files that do not exist yet. **src** and **src-env** have no per-tree file, so **-****-tree** does not add a path to those lists. **-E** limits either list to files that exist, so a missing global is omitted. On a read, a missing global is skipped and an overlay is consulted only when the file exists. Hook-plugin *make.conf* files are not collected.

**poudriere** **src** follows the shorter list poudriere(8) uses when building jails (global, then set, then jail; no tree):

```
POUDRIERED/src.conf
POUDRIERED/<setname>-src.conf
POUDRIERED/<jailname>-src.conf
```

**poudriere** **src-env** uses that same order, with *src-env.conf* in place of *src.conf*:

```
POUDRIERED/src-env.conf
POUDRIERED/<setname>-src-env.conf
POUDRIERED/<jailname>-src-env.conf
```

An explicit **-f** replaces discovery, as on other **sysconf** targets. A name already defined is rewritten in the last file in the collection that defines it, so the change is not placed where a later overlay would mask it. A name defined nowhere is appended to the global file, and that write creates the global file when it is missing. A bare *name* reads, and *name*=*value* writes, including ‘+=’ and ‘-=’. Those rules are the “Assignment syntax” section of [sysconf(8)](/sysconf/8.md).

### Context long options

- **-****-jail** *name*

  Poudriere jail name, as in *\<jailname\>-make.conf* and the other jail files.

- **-****-ports** *name*, **-****-tree** *name*

  Poudriere ports tree. **-****-tree** is an alias of **-****-ports**; when both are given, the last wins. A tree applies to *poudriere.conf* and the **make** sub-target. **src** and **src-env** ignore it; poudriere does not read a per-tree src file.

- **-****-set** *name*

  Poudriere set name.

**-****-jail**=*name* (and the same attached form for the others) is accepted. These long options are consumed here and never passed to [sysrc(8)](/sysrc/8.md) or mistaken for **sysconf** operands. They are distinct from **-j** on [sysconf(8)](/sysconf/8.md) and [sysrc(8)](/sysrc/8.md), which name a running jail.

### Out of scope

Poudriere maintains the following itself, or they are a different format:

- *poudriere.d/jails/*, *poudriere.d/ports/*

  One file per property; the whole file is the value.

- *poudriere.d/\*-options/*

  A PORT\_DBDIR tree of per-port ‘OPTIONS’ files, written by ‘poudriere options’ (‘make config’).

- *poudriere.d/\*-blacklist*

  Port origins, one per line (with optional ‘@flavor’); ‘#’ comments. Not ‘name=value’.

- *poudriere.d/hooks/*

  Shell scripts, including plugin *make.conf* files under *hooks/plugins/*.

## ENVIRONMENT

- POUDRIERE\_ETC

  Directory containing *poudriere.conf* (default */usr/local/etc*).

- POUDRIERED

  Overlay directory (default *POUDRIERE\_ETC/poudriere.d*).

## EXAMPLES

```
sysconf poudriere ZPOOL=zroot
```

```
sysconf poudriere --jail 131amd64 PARALLEL_JOBS=8
```

```
sysconf p ZPOOL
```

```
sysconf p -- src
```

```
sysconf poudriere make --jail 131amd64 CFLAGS
```

```
sysconf p m --jail 131amd64 CFLAGS+=-O2
```

```
sysconf poudriere src --set dev WITHOUT_LLVM_BINUTILS=
```

```
sysconf p src-env --jail 131amd64 SRC_ENV_VAR
```

## SEE ALSO

poudriere(8), [sysconf(8)](/sysconf/8.md), [sysconf-make(8)](/sysconf-make/8.md), [sysconf-rc(8)](/sysconf-rc/8.md), [sysrc(8)](/sysrc/8.md)

## HISTORY

The **sysconf** utility first appeared in FreeBSD 16.0.

## AUTHORS

Devin Teske ⟨*dteske@FreeBSD.org*⟩ Faraz Vahedi ⟨*kfv@FreeBSD.org*⟩
