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

NAME
     poudriere -- bulk package builder and port tester

SYNOPSIS
     poudriere command subcommand [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 a global option:

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

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

     bulk	  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 get stats and
		  progress back.

     jail	  This command allows you to manage the jails used by  poudriere
		  which  are  building	environments differing by OS version and
		  architecture.

     ports	  This command allows you to manage different  portstrees  which
		  will	be  used  by  poudriere (create, update and delete port-
		  strees).

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

     options	  This command allows to configure the options for a given port

     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  com-
		  mands.

     status	  This command shows status of current and previous builds

     version	  Show version of poudriere.

SUBCOMMANDS
     Here  are	the  list  of  subcommands  and  associated options supported by
     poudriere, sorted by command order.

   bulk
     These subcommands are mutually exclusive.

     -a 	  Build all ports in the tree.

     -f file	  Absolute path to a file which contains the list  of  ports  to
		  build.   Ports must be specified in the form category/port and
		  shell-style comments are allowed.  Multiple -f file  arguments
		  may be specified at once.

     cat/port cat/port2 ...
		  A list of ports can be specified directly.

     See  "CUSTOMISATION" to know how to build binary packages with options that
     differs from defaults.

     Here are the options associated with the bulk command.

     -B name	  Specify    which    buildname    to	 use.	  By	 default
		  YYYY-MM-DD_HH:MM:SS  will be used.  This can be used to resume
		  a previous build and use the same log and URL paths.	Resuming
		  a build will not retry built/failed/skipped/ignored packages.

     -c 	  Clean all previously built packages and logs.

     -C 	  Clean only the packages specified on the command line or in in
		  the file given in -f file

     -F 	  Only fetch from original MASTER_SITES.  Skip FreeBSD mirrors.

     -j name	  Run the bulk build on the jail named name.

     -J number[:number]
		  This argument specifies how many number jobs will run in  par-
		  allel  for  a  bulk  build.  The optional second number is the
		  number of jobs used for the steps before the build,  they  are
		  more IO bound than CPU bound, so you may want to use a differ-
		  ent number.

     -i 	  Interactive  mode.  Enter jail for interactive testing and au-
		  tomatically cleanup when done.  A local pkg.conf(5) repository
		  configuration        will	   be	     installed	      to
		  LOCALBASE/etc/pkg/repos/local.conf  so that pkg(8) can be used
		  with any existing packages built for the  jail.   The  FreeBSD
		  repository will be disabled by default.

     -I 	  Advanced Interactive mode.  Leaves jail running with ports in-
		  stalled  after test.	When done with the jail you will need to
		  manually shut it down:
			poudriere jail -k -j JAILNAME.
		  As with -i this will install a pkg.conf(5) file for pkg(8) us-
		  age.

     -n 	  Dry run. Show what woud be done, but do not actually build  or
		  delete any packages.

     -N 	  Do  not  build  package repository or INDEX when build is com-
		  pleted.

     -p tree	  This flag specifies on which ports tree the bulk build will be
		  done.

     -R 	  Clean RESTRICTED packages after building.

     -s 	  Skip incremental rebuild and sanity checks.  Sanity tests  are
		  made	to check if the ports exists, does not have an increased
		  version number, packaged dependencies match, pkgname	matches,
		  if  the  compiled  options  match the current options from the
		  make.conf files  and	/usr/local/etc/poudriere.d/options,  and
		  that its own dependencies did not require rebuild as well.

     -S 	  Don't  recrusively rebuild packages affected by other packages
		  requiring incremental rebuild.  This is a subset of -s.   This
		  may  result  in broken packages if the ones they depend on are
		  updated and are not ABI-compatible.

     -t 	  Add some testing to the specified ports.   Add  -r  to  recur-
		  sively  test	all  port dependencies as well.  Currently unin-
		  stalls the port, and disable parallel  jobs  for  make.   When
		  used with -a then -rk are implied.

     -r 	  Recursively test all dependencies as well.  This flag is auto-
		  matically set when using -at.

     -k 	  When	using -t do not consider failures as fatal.  Do not skip
		  dependent ports on findings.	This flag is  automatically  set
		  when using -at.

     -T 	  Try building BROKEN ports by defining TRYBROKEN for the build.

     -w 	  Save	WRKDIR	on  build failure.  The WRKDIR will be tarred up
		  into ${POUDRIERE_DATA}/wrkdirs.

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

     -z set	  This	 specifies   which  SET  to  use  for  the  build.   See
		  "CUSTOMISATION" for examples of how this is used.

   jail
     These subcommands are mutually exclusive.

     -c 	  Creates a jail.

     -d 	  Deletes a jail.

     -i 	  Show information about a jail.  See also status.

     -l 	  List all available jails.

     -n 	  When combined with -l, only display jail name.

     -s 	  Starts a jail.

     -k 	  Kills a jail (stops it).

     -r name	  Rename a jail to name.

     -u 	  Update a jail.

     Except for -l, all of the subcommands require the -j option (see below).

     Here are the options associated with the jail command.

     -J number	  This argument specifies how many number jobs will run in  par-
		  allel for buildworld.

     -q 	  Remove  the  header when -l is the specified mandatory option.
		  Otherwise, it has no effect.

     -j name	  Specifies the name of the jail.

     -v version   Specifies which version of FreeBSD to use in the jail.  If you
		  are using method ftp then the version should in the  form  of:
		  9.0-RELEASE.	 If  you  are using method csup then the version
		  should be in the form of cvs branches: RELENG_9 or . for  cur-
		  rent.   If you are using method svn then the version should be
		  in the form of svn branches: stable/9 or head for current.

     -a architecture
		  Specifies which architecture of FreeBSD to use  in  the  jail.
		  (Default: same as host)

     -m method	  Specifies  which  method to use to create the jail.  (default:
		  ftp)

		  Pre-built distribution options:

		  allbsd	     Use www.allbsd.org.

		  ftp http	     Fetch from configured FREEBSD_HOST variable
				     from poudriere.conf.

		  freebsd-archive    Fetch from ftp-archive.freebsd.org.

		  null		     This option can be used to import an exist-
				     ing directory that already contains an  in-
				     stalled system.  The path must be specified
				     with -M path.  It is expected that this di-
				     rectory be installed to with the following:

					   /usr/src# make installworld DESTDIR=PATH DB_FROM_SRC=1
					   /usr/src# make distrib-dirs DESTDIR=PATH DB_FROM_SRC=1
					   /usr/src# make distribution DESTDIR=PATH DB_FROM_SRC=1

				     The   path   will	be  null-mounted  during
				     builds.  It will not be copied at the  time
				     of  running  jail.   Deleting the jail will
				     attempt to  revert  any  files  changed  by
				     poudriere.

		  src=PATH	     Install  from  the  given	src directory at
				     PATH.  This directory  will  not  be  built
				     from.   It  is  expected that it is already
				     built and maps to a corresponding	/usr/obj
				     directory.

		  tar=PATH	     Install from the tarball at the given PATH.
				     Note  that this method requires the tarball
				     contains the /usr/src files as well if  you
				     plan to build any port containing modules.

		  url=PATH	     Fetch  from  given PATH.  Any URL supported
				     by fetch(1) can be used.  For example:
					   url=file:///mirror/10.0

		  Build from source options:

		  csup		     Use legacy CVS repository.

		  svn svn+file svn+http svn+https
				     Use SVN.  This will use the SVN_HOST  vari-
				     able in poudriere.conf.

     -f filesystem
		  Specifies the filesystem name (${ZPOOL}/jails/filesystem).

     -M mountpoint
		  Gives an alternative mountpoint when creating jail.

     -p name	  This specifies which port tree to start/stop the jail with.

     -P patch	  Apply  the  specified patch to the source tree before building
		  the jail.

     -t version   instead of upgrading to the latest security fix  of  the  jail
		  version, you can jump to the new specified version.

     -z set	  This specifies which SET to start/stop the jail with.

     -x 	  Build  the  native-xbuild  target and copy this into the jail.
		  Used exclusively for cross building a ports set, typically via
		  qemu-user tools.

   ports
     These subcommands are mutually exclusive.

     -c 	  Creates a ports tree.

     -d 	  Deletes a ports tree.

     -u 	  Updates a ports tree.

     -l 	  List all available ports trees.

     Except for -l, all of the subcommands require the -p switch (see below).

     Here are the options associated with the ports command.

     -q 	  Remove the header when -l is the specified subcommand.  Other-
		  wise, it has no effect.

     -p name	  Specifies the name of the ports tree to use.

     -F 	  When used with -c, only create the needed ZFS file systems and
		  directories, but do not populate them.

     -f filesystem
		  Specifies the filesystem name (${ZPOOL}/jails/filesystem).

     -M mountpoint
		  Gives an alternative mountpoint when creating ports tree.

     -m method	  Specifies which method to use to create the ports tree.  Could
		  be  portsnap,  git,  svn{,+http,+https,+file,+ssh}   (Default:
		  portsnap).

     -v 	  Show more verbose output.

     -B branch	  Specifies  which  branch to checkout when using the svn or git
		  methods.  (Default: head/master)

     -k 	  When used with -d, only unregister the ports tree with out re-
		  moving the files.

   testport
     The specified port will be tested for build and  packaging  problems.   All
     missing dependencies will first be built in parallel.  TRYBROKEN=yes is au-
     tomatically defined in the environment to test ports marked as BROKEN.

     There is only 1 subcommand for the testport command.

     -o origin	  Specifies an origin in the ports tree

     Here are the options associated with the testport command.

     -c 	  Run make config for the given port.

     -i 	  Interactive  mode.  Enter jail for interactive testing and au-
		  tomatically cleanup when done.  A local pkg.conf(5) repository
		  configuration        will	   be	     installed	      to
		  LOCALBASE/etc/pkg/repos/local.conf  so that pkg(8) can be used
		  with any existing packages built for the  jail.   The  FreeBSD
		  repository will be disabled by default.

     -I 	  Advanced  Interactive mode.  Leaves jail running with port in-
		  stalled after test.  When done with the jail you will need  to
		  manually shut it down:
			poudriere jail -k -j JAILNAME.
		  As with -i this will install a pkg.conf(5) file for pkg(8) us-
		  age.

     -j name	  Runs only inside the jail named name.

     -J number	  This	argument specifies how many number jobs will run in par-
		  allel for building the dependencies.

     -k 	  Do not consider failures as fatal.  Find all failures.

     -P 	  Use custom prefix.

     -N 	  Do not build package repository or INDEX when build of  depen-
		  dencies is completed.

     -p tree	  Specifies which ports tree to use.

     -s 	  Skip	incremental rebuild and sanity checks.	Sanity tests are
		  made to check if the ports exists, does not have an  increased
		  version  number, packaged dependencies match, pkgname matches,
		  if the compiled options match the  current  options  from  the
		  make.conf  files  and  /usr/local/etc/poudriere.d/options, and
		  that its own dependencies did not require rebuild as well.

     -S 	  Don't recrusively rebuild packages affected by other	packages
		  requiring  incremental rebuild.  This is a subset of -s.  This
		  may result in broken packages if the ones they depend  on  are
		  updated and are not ABI-compatible.

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

     -w 	  Save WRKDIR on build failure.  The WRKDIR will  be  tarred  up
		  into ${POUDRIERE_DATA}/wrkdirs.

     -z set	  This	 specifies   which  SET  to  use  for  the  build.   See
		  "CUSTOMISATION" for examples of how this is used.

   distclean
     This command accepts the following options:

     -J number	  This argument specifies how many number jobs will run in  par-
		  allel for gathering distfile information.

     -n 	  Dry run, do not actually delete anything.

     -p tree	  Specifies which ports tree to use.  This can be specified mul-
		  tiple times to consider multiple tress.

     -y 	  Assume yes, do not confirm and just delete the files.

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

   pkgclean
     This command is used to delete all packages not specified to build.

     These subcommands are mutually exclusive.

     -a 	  Keep all ports in the tree.

     -f file	  Absolute path to a file which contains the list  of  ports  to
		  keep.   Ports  must be specified in the form category/port and
		  shell-style comments are allowed.  Multiple -f file  arguments
		  may be specified at once.

     cat/port cat/port2 ...
		  A list of ports can be specified directly.

     Here  are	the  options associated with the pkgclean command.  This command
     accepts the following options:

     -j name	  Jail to use for the packages to inspect.

     -J number	  This argument specifies how many number jobs will run in  par-
		  allel for gathering package information.

     -n 	  Dry run, do not actually delete anything.

     -N 	  Do not build package repository or INDEX when done cleaning.

     -p tree	  Specifies which ports tree to use.

     -R 	  Also clean restricted packages.

     -y 	  Assume yes, do not confirm and just delete the files.

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

     -z set	  SET to use for the packages to inspect.

   options
     This command accepts the following parameters:

     -f file	  Absolute path to a file which contains the list  of  ports  to
		  configure.   Ports must be specified in the form category/port
		  and shell-style comments are allowed.

     cat/port cat/port2 ...
		  A list of ports can be specified directly.

     This command accepts the following options:

     -c 	  Use 'config' target, which will always show the dialog for the
		  given ports.

     -C 	  Use 'config-conditional' target, which will only bring up  the
		  dialog  on  new options for the given ports.	(This is the de-
		  fault)

     -j jailname  If given, configure the options only for the given jail.

     -p portstree
		  Run the configuration inside the given ports tree (by  default
		  uses default)

     -n 	  Do not be recursive

     -r 	  Remove port options instead of configuring them

     -s 	  Show port options instead of configuring them

     -z set	  This	 specifies   which  SET  to  use  for  the  build.   See
		  "CUSTOMISATION" for examples of how this is used.

     The options subcommand can also take the list of ports to configure through
     command line arguments instead of the using a file list.

   queue
     This command takes a poudriere command in argument.

     There are no options associated with the queue command.

   status
     status sorts by SETNAME, PORTSTREE, JAILNAME and then BUILDNAME.

     This command accepts the following options:

     -a 	  Show all builds, not just latest.  This implies -f.

     -b 	  Show details about what each builder for  the  matched  builds
		  are doing.

     -B name	  Specifies  which  buildname  to match on.  This supports shell
		  globbing.  Defaults to "latest".  Specifying this implies  the
		  -f flag.

     -c 	  Show a more compact output and do not include some columns.

     -f 	  Show finished builds, not just currently running.  This is im-
		  plied by the -a, -B and -r flags.

     -H 	  Do  not  print headers and separate fields by a single tab in-
		  stead of arbitrary white space.

     -j name	  Specifies the name of the jail to filter by.

     -l 	  Show logs instead of URL.

     -p tree	  This flag specifies which ports tree to filter builds by.

     -r 	  Show build results.  This implies the -f flag.

     -z set	  This specifies which SET to filter builds by.  Use 0 to  match
		  on empty SET.

ENVIRONMENT
     The poudriere command may use the following environment variable:

     POUDRIERE_ETC  If specified, the path to poudriere's config directory.  De-
		    faults to /usr/local/etc.

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 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 8.2-RELEASE -a amd64 -j 82amd64

     A jail will take approximately 3GB of space.

     Of course you can use another version of FreeBSD, regarless on what version
     you are running.  amd64 users can choose i386 arch like in this example:

	   poudriere jail -c -v 8.1-RELEASE -a i386 -j 81i386

     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 it, so
     let us take the default configuration by creating 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.  You can specify to build for only one
     arch/version ; by default it will make the bulk build on all the jails cre-
     ated by poudriere.
	   poudriere bulk -f ~/pkglist -j 81i386

     [Find your packages]

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

	   /usr/local/poudriere_data/packages/81i386

     with 81i386 as the name of the jail.

   test a single port
     This second example show how to use poudriere for a single port.

     Let's 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 (pourdriere_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 exists it 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

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

     It  is  very  easy  to  extend  it so that we can easily add other tests if
     wanted.

CUSTOMISATION
     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/<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/lo-
     cal/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.  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/<jailname>-<tree>-blacklist
	   /usr/local/etc/poudriere.d/<jailname>-<setname>-blacklist
	   /usr/local/etc/poudriere.d/<jailname>-<tree>-<setname>-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.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/<jailname>-<tree>-poudriere.conf
	   /usr/local/etc/poudriere.d/<jailname>-<setname>-poudriere.conf
	   /usr/local/etc/poudriere.d/<jailname>-<tree>-<setname>-poudriere.conf

   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/<jailname>-<tree>-make.conf
	   /usr/local/etc/poudriere.d/<jailname>-<setname>-make.conf
	   /usr/local/etc/poudriere.d/<jailname>-<tree>-<setname>-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/<jailname>-src.conf

COMPATIBILITY
     The poudriere command must be used on a recent version of FreeBSD,  i.e.  a
     version which has ZFS >= v15, and a zpool.

CAVEATS
   Jailname
     -j  is the name of the jail which will also be the name of the zfs filesys-
     tem.

     Be careful to respects the names supported by jail(8):

	 "This is an arbitrary string that identifies a jail (except it
	  may not contain a '.')"

     Be also careful to not begin the name of the jail by a number  if	you  are
     not in -stable or current:

     http://svn.freebsd.org/viewvc/base?view=revision&revision=209820

BUGS
     In case of bugs, feel free to fill

     http://fossil.etoilebsd.net/poudriere/reportlist

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

FreeBSD 10.1		       September 15, 2014		    POUDRIERE(8)

home | help