Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
POUDRIERE(8)		FreeBSD	System Manager's Manual		  POUDRIERE(8)

     poudriere -- bulk package builder and port	tester

     poudriere poudriere-options command [command-options]

     The poudriere tool	is used	to build packages from the ports tree.	It can
     also be used to test a single port.

     poudriere accepts the following global options.

     -A		  Force	color support, even if not in a	TTY.

     -e	etcdir	  Path to the directory	where poudriere	will find its configu-
		  ration data.	See FILES and ENVIRONMENT for more informa-

     -N		  Disable color	support.

     -v		  This will show more information during the build.  Specify
		  twice	to enable debug	output.

     The first argument	to poudriere must be a command from the	following

     bulk (poudriere-bulk(8))
       This command makes a ready-to-export package tree, and fills it with
       binary packages built from a given list of ports.  During the build,
       hit ^T to send SIGINFO and show stats and progress about	the build.

     image (poudriere-image(8))
       This command creates images.

     jail (poudriere-jail(8))
       This command manages the	poudriere jails	which are used as different
       building	environments.

     ports (poudriere-ports(8))
       This command provides management	of different portstrees	which will be
       used by poudriere.

     testport (poudriere-testport(8))
       This command, mainly targeted at	ports developers, launches a test on a
       given port (useful before submitting/committing a port).

     options (poudriere-options(8))
       This command configures the options for a given port

     logclean (poudriere-logclean(8))
       This command will cleanup old logfiles

     distclean (poudriere-distclean(8))
       This command will cleanup old distfiles

     pkgclean (poudriere-pkgclean(8))
       This command will cleanup old and unwanted packages

     queue (poudriere-queue(8))
       This command allows a non-root user to queue poudriere commands.	 It is
       currently EXPERIMENTAL.	Using it requires starting poudriered via the
       provided	rc script.

     status (poudriere-status(8))
       This command shows status of current and	previous builds

     version (poudriere-version(8))
       Show version of poudriere.

     POUDRIERE_ETC	   If specified, the path to poudriere's config	direc-
			   tory.  Defaults to /usr/local/etc.

     UMASK		   The umask for files created by poudriere.  Defaults
			   to 022.

     See subcommand manpage ENVIRONMENT	sections for more information.

     POUDRIERE_ETC/poudriere.conf	       See self-documented
					       for example.
     POUDRIERE_ETC/poudriere.d/poudriere.conf  The configuration can be	stored
					       in the poudriere.d directory as
     POUDRIERE_ETC/poudriere.d		       This directory contains various
					       configuration files for the
					       different jails.

     The poudriere utility exits 0 on success, and >0 if an error occurs.

   Bulk	build of specific binary packages
     This first	example	provides a guide on how	to use poudriere for bulk
     build packages.

     [Prepare infrastructure]

     First you have to create a	jail, which will hold all the building infra-
     structure needs.

	   poudriere jail -c -v	13.1-RELEASE -a	amd64 -j 131amd64

     A jail will take approximately 3GB	of space.

     Of	course you can use another version of FreeBSD, regardless of what ver-
     sion you are running.  amd64 users	can choose i386	arch like in this ex-

	   poudriere jail -c -v	13.0-RELEASE -a	i386 -j	130i386

     This command will fetch and install a minimal jail, small (~400MB)	so you
     can create	a lot of them.	It will	install	the jail under the pool	you
     have chosen, at poudriere/jailname.

     You also need to have at least one	ports tree to build packages from, so
     let us take the default configuration and create a	ports tree.

	   poudriere ports -c

     A ports tree will take approximately 4GB of space.

     [Specify a	list of	ports you want to build]

     Create a flat text	file in	which you put the ports	you want to see	built
     by	poudriere:

	   echo	'sysutils/screen' > ~/pkglist
	   echo	'editors/vim' >> ~/pkglist

     Any line starting with the	hash sign will be treated as a comment.

     [Launch the bulk build]

     Now you can launch	the bulk build.	 At minimum the	jail and list of pack-
     ages to build must	be specified.

	   poudriere bulk -f ~/pkglist -j 130i386

     [Find your	packages]

     Once the bulk build is over, you can meet your shiny new packages here:


     with 130i386 as the name of the jail.

   Test	a single port
     This second example show how to use poudriere for a single	port.  Take
     the example of building a single port;

	   poudriere testport -o category/port -j myjail

     all the tests will	be done	in myjail.

     It	starts the jail, then mount the	ports tree (nullfs), then mounts the
     package dir (poudriere/data/packages/<jailname>-<tree>-<setname>),	then
     it	mounts the ~/ports-cvs/mybeautifulporttotest (nullfs) it builds	all
     the dependencies (except runtime ones) and	log it to

     If	packages for the dependencies already exist, then poudriere will use

     When all the dependencies are built, packages for them are	created	so
     that next time it will be faster.

     All the dependency	phase is done with PREFIX == LOCALBASE.

     After that	it will	build the port itself with LOCALBASE !=	PREFIX and log
     the build to poudriere/data/logs/testport/jailname/default/mybeautiful-

     Poudriere will try	to: install it,	create a package from it, deinstall
     it, check for cruft left behind and propose the line to add to pkg-plist
     if	needed.

     Poudriere is very easy to extend so that additional tests can be easily

     bulk -a will build	all FLAVORS for	each port.  Otherwise bulk and
     testport use the following	rules:
     o	 A FLAVOR of bar for port devel/foo is specified as devel/foo@bar.

     If	FLAVOR_DEFAULT_ALL is not set, or is set to no (the default), in
     poudriere.conf, then:
     o	 All FLAVORS for a port, without a specified FLAVOR, will be built us-
	 ing the FLAVOR	all: devel/foo@all.
     o	 The first (default) FLAVOR for	a port is built	by not specifying a
	 FLAVOR: devel/foo.

     If	FLAVOR_DEFAULT_ALL is set to yes in poudriere.conf, then:
     o	 All FLAVORS for a port, without a specified FLAVOR, will be built:
     o	 The first (default) FLAVOR for	a port is built	by specifying the FLA-
	 VOR -:	devel/foo@-

   Known issues
     o	 An invalid FLAVOR for a port will cause an error during dependency

     o	 MOVED entries do not support a	source FLAVOR, only a target one.

     For bulk building,	you can	customize binary packages produced by
     poudriere by changing build options port by port, and you can also	spec-
     ify building directives in	a make.conf file.

   Custom build	options
     Before building a package,	poudriere can mount a directory	containing op-
     tion files	if available.  poudriere will check for	any of these directo-
     ries in this order:


     If	a directory with this name exists, it is null-mounted into the
     /var/db/ports/ directory of the jail, thus	allowing to build package with
     custom OPTIONS.

     The options subcommand can	be used	to easily configure options in the
     correct directory.

     This directory has	the usual layout for options: it contains one direc-
     tory per port (the	name of	the port) containing an	'options' file with
     lines similar to:


     As	a starter, you may want	to copy	an existing /var/db/ports/ to

   Blacklist ports
     You can also specify a blacklist which will disallow the lists port ori-
     gins from building	on the matched jail.  Any of the following are allowed
     and will all be used in the order shown:


     If	QEMU is	being used then	a special qemu blacklist is also loaded.

   Create optional poudriere.conf
     You can also specify an optional poudriere.conf that is pulled in depend-
     ing on the	build.	Any of the following are allowed and will all be used
     in	the order shown:


   Create optional make.conf
     You can also specify a global make.conf which will	be used	for all	the
     jails.  Any of the	following are allowed and will all be used in the or-
     der shown:


   Create optional src.conf
     You can also specify a global src.conf which will be used for building
     jails with	the jail -c subcommand.	 Any of	the following are allowed and
     will all be used in the order shown:


   Create optional src-env.conf
     You can also specify a global src-env.conf	which will be used for build-
     ing jails with the	jail -c	subcommand.  Any of the	following are allowed
     and will all be used in the order shown:


     Hook scripts may be loaded	in any of the following	paths:


     For specific hook documentation see:

     jail(8), poudriere-bulk(8), poudriere-distclean(8), poudriere-image(8),
     poudriere-jail(8),	poudriere-logclean(8), poudriere-options(8),
     poudriere-pkgclean(8), poudriere-ports(8),	poudriere-queue(8),
     poudriere-status(8), poudriere-testport(8), poudriere-version(8)

     In	case of	bugs, feel free	to file	a report:

     Baptiste Daroussin	<>
     Bryan Drewery <>

FreeBSD	13.0			 March 4, 2019			  FreeBSD 13.0


Want to link to this manual page? Use this URL:

home | help