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

FreeBSD Manual Pages

  
 
  

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

NAME
     poudriere -- bulk package builder and port tester

SYNOPSIS
     poudriere poudriere-options command [command-options]

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

GLOBAL OPTIONS
     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 configura-
		  tion data.  See "FILES" and "ENVIRONMENT"  for  more	informa-
		  tion.

     -N 	  Disable color support.

     -s var	  Inherit the default for var from the environment.

     -s var=value
		  Set the default for var to the given value.

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

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

     audit (poudriere-audit(8))
       Audit packages using pkg-audit(8).

     bulk (poudriere-bulk(8))
       This command makes a ready-to-export package tree, and fills it with  bi-
       nary 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
       This command creates images.

     jail
       This  command  manages  the  poudriere  jails which are used as different
       building environments.

     ports
       This command provides management of different portstrees  which	will  be
       used by poudriere.

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

     options
       This command configures the options for a given port

     logclean
       This command will cleanup old logfiles

     distclean
       This command will cleanup old distfiles

     pkgclean
       This command will cleanup old and unwanted packages

     queue
       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
       This command shows status of current and previous builds

     version
       Show version of poudriere.

ENVIRONMENT
     The environment is cleared of variables not listed  in  this  section,  the
     "ENVIRONMENT"  section  of  a  subcommand,  specified  with  -s  var  or -s
     var=value, or listed in POUDRIERE_ENV_INHERIT.

     POUDRIERE_ENV_INHERIT  A list of variable names that will be inherited from
			    the environment.

     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.

FILES
     POUDRIERE_ETC/poudriere.conf	       See		 self-documented
					       /usr/local/etc/poudriere.conf.sample
					       for example.
     POUDRIERE_ETC/poudriere.d/poudriere.conf  The  configuration  can be stored
					       in the poudriere.d  directory  as
					       well.
     POUDRIERE_ETC/poudriere.d		       This  directory	contains various
					       configuration files for the  dif-
					       ferent jails.

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

EXAMPLES
   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  exam-
     ple:

	   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:

	   /usr/local/poudriere/data/packages/130i386

     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 de-
     pendencies  (except  runtime  ones) and log it to poudriere/data/logs/test-
     port/jailname/default/mybeautifulporttotest.log).

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

     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/mybeautifulport-
     totest.log

     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
     added.

FLAVORS
     bulk -a will build all FLAVORS for each port.  Otherwise bulk and	testport
     use the following rules:
     *	 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:
     *	 All FLAVORS for a port, without a specified FLAVOR, will be built using
	 the FLAVOR all: devel/foo@all.
     *	 The first (default) FLAVOR for a port is built by not specifying a FLA-
	 VOR: devel/foo.

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

   Known issues
     *	 An invalid FLAVOR for a port will cause an error during dependency cal-
	 culation.

CUSTOMIZATION
     For  bulk building, you can customize binary packages produced by poudriere
     by changing build options port by port, and you can also  specify	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 directories
     in this order:

	   /usr/local/etc/poudriere.d/<jailname>-<tree>-<setname>-options
	   /usr/local/etc/poudriere.d/<jailname>-<setname>-options
	   /usr/local/etc/poudriere.d/<jailname>-<tree>-options
	   /usr/local/etc/poudriere.d/<tree>-<setname>-options
	   /usr/local/etc/poudriere.d/<setname>-options
	   /usr/local/etc/poudriere.d/<tree>-options
	   /usr/local/etc/poudriere.d/<jailname>-options
	   /usr/local/etc/poudriere.d/options

     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  cor-
     rect directory.

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

	   WITH_FOO=true
	   WITHOUT_BAR=true

     As  a  starter,  you  may	want  to  copy	an  existing  /var/db/ports/  to
     /usr/local/etc/poudriere.d/options.

   Blacklist ports
     You can also specify a blacklist which will disallow the lists port origins
     from building on the matched jail.

     FLAVOR handling is different than described in the "FLAVORS" section.
     devel/foo	    Blacklist every FLAVOR.
     devel/foo@all  Blacklist every FLAVOR.
     devel/foo@-    Blacklist only the default FLAVOR.
     devel/foo@bar  Blacklist only the bar FLAVOR.

     Any of the following are allowed and will all be used in the order shown:

	   /usr/local/etc/poudriere.d/blacklist
	   /usr/local/etc/poudriere.d/<setname>-blacklist
	   /usr/local/etc/poudriere.d/<tree>-blacklist
	   /usr/local/etc/poudriere.d/<jailname>-blacklist
	   /usr/local/etc/poudriere.d/<tree>-<setname>-blacklist
	   /usr/local/etc/poudriere.d/<jailname>-<tree>-blacklist
	   /usr/local/etc/poudriere.d/<jailname>-<setname>-blacklist
	   /usr/local/etc/poudriere.d/<jailname>-<tree>-<setname>-blacklist

     If QEMU is being used then a special qemu blacklist is also loaded.
	   /usr/local/etc/poudriere.d/qemu-blacklist

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

	   /usr/local/etc/poudriere.conf
	   /usr/local/etc/poudriere.d/poudriere.conf
	   /usr/local/etc/poudriere.d/<setname>-poudriere.conf
	   /usr/local/etc/poudriere.d/<tree>-poudriere.conf
	   /usr/local/etc/poudriere.d/<jailname>-poudriere.conf
	   /usr/local/etc/poudriere.d/<tree>-<setname>-poudriere.conf
	   /usr/local/etc/poudriere.d/<jailname>-<tree>-poudriere.conf
	   /usr/local/etc/poudriere.d/<jailname>-<setname>-poudriere.conf
	   /usr/local/etc/poudriere.d/<jailname>-<tree>-<setname>-poudriere.conf

     Running poudriere with flag -v will show which files are included.

   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 order
     shown:

	   /usr/local/etc/poudriere.d/make.conf
	   /usr/local/etc/poudriere.d/<setname>-make.conf
	   /usr/local/etc/poudriere.d/<tree>-make.conf
	   /usr/local/etc/poudriere.d/<jailname>-make.conf
	   /usr/local/etc/poudriere.d/<tree>-<setname>-make.conf
	   /usr/local/etc/poudriere.d/<jailname>-<tree>-make.conf
	   /usr/local/etc/poudriere.d/<jailname>-<setname>-make.conf
	   /usr/local/etc/poudriere.d/<jailname>-<tree>-<setname>-make.conf
	   /usr/local/etc/poudriere.d/hooks/plugins/<plugin>/make.conf

   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:

	   /usr/local/etc/poudriere.d/src.conf
	   /usr/local/etc/poudriere.d/<setname>-src.conf
	   /usr/local/etc/poudriere.d/<jailname>-src.conf

   Create optional src-env.conf
     You can also specify a global src-env.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:

	   /usr/local/etc/poudriere.d/src-env.conf
	   /usr/local/etc/poudriere.d/<setname>-src-env.conf
	   /usr/local/etc/poudriere.d/<jailname>-src-env.conf

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

	   /usr/local/etc/poudriere.d/hooks/<hook>.sh
	   /usr/local/etc/poudriere.d/hooks/plugins/<plugin>/<hook>.sh

     For	  specific	     hook	    documentation	    see:
     https://github.com/freebsd/poudriere/wiki/hooks

SEE ALSO
     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)

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

     https://github.com/freebsd/poudriere/issues

AUTHORS
     Baptiste Daroussin <bapt@FreeBSD.org>
     Bryan Drewery <bdrewery@FreeBSD.org>

FreeBSD ports 15.quarterly	November 4, 2025		    POUDRIERE(8)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=poudriere&sektion=8&manpath=FreeBSD+15.1-RELEASE+and+Ports.quarterly>

home | help