4 Starting the Build

Several separate builds for each architecture - branch combination are supported. All data private to a build (ports tree, src tree, packages, distfiles, log files, bindist, Makefile, etc) are located under ${arch}/${branch}/builds/${buildid}. The last created build can be alternatively referenced under buildid latest, the one before is called previous.

New builds are cloned from the latest, which is fast since it uses ZFS.

4.1 dopackages scripts

The scripts/dopackages* scripts are used to perform the builds. Most useful are:

These are wrappers around dopackages, and are all symlinked to dopackages.wrapper. New branch wrapper scripts can be created by symlinking dopackages.${branch} to dopackages.wrapper. These scripts take a number of arguments. For example:

dopackages.6 ${arch} [-options]

[-options] may be zero or more of the following:

If the last build finished cleanly you do not need to delete anything. If it was interrupted, or you selected -nocleanup, you need to clean up clients by running

build cleanup ${arch} ${branch} ${buildid} -full

errors/, logs/, packages/, and so forth, are cleaned by the scripts. If you are short of space, you can also clean out ports/distfiles/. Leave the latest/ directory alone; it is a symlink for the webserver.

Note: dosetupnodes is supposed to be run from the dopackages script in the -restart case, but it can be a good idea to run it by hand and then verify that the clients all have the expected job load. Sometimes, dosetupnode cannot clean up a build and you need to do it by hand. (This is a bug.)

Make sure the ${arch} build is run as the ports-${arch} user or it will complain loudly.

Note: The actual package build itself occurs in two identical phases. The reason for this is that sometimes transient problems (e.g. NFS failures, FTP sites being unreachable, etc.) may halt a build. Doing things in two phases is a workaround for these types of problems.

Be careful that ports/Makefile does not specify any empty subdirectories. This is especially important if you are doing an -exp build. If the build process encounters an empty subdirectory, both package build phases will stop short, and an error similar to the following will be written to ${arch}/${branch}/make.[0|1]:

don't know how to make dns-all(continuing)

To correct this problem, simply comment out or remove the SUBDIR entries that point to empty subdirectories. After doing this, you can restart the build by running the proper dopackages command with the -restart option.

Note: This problem also appears if you create a new category Makefile with no SUBDIRs in it. This is probably a bug.

Example 1. Update the i386-6 tree and do a complete build

dopackages.6 i386 -nosrc -norestr -nofinish

Example 2. Restart an interrupted amd64-8 build without updating

dopackages.8 amd64 -nosrc -noports -norestr -continue -noindex -noduds -nofinish

Example 3. Post-process a completed sparc64-7 tree

dopackages.7 sparc64 -finish

Hint: it us usually best to run the dopackages command inside of screen(1).

4.2 build command

You may need to manipulate the build data before starting it, especially for experimental builds. This is done with build command.

4.3 Building a single package

Sometimes there is a need to rebuild a single package from the package set. This can be accomplished with the following invocation:

/var/portbuild/evil/qmanager/packagebuild amd64 7-exp 20080904212103 aclock-0.2.3_2

This, and other documents, can be downloaded from ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

For questions about FreeBSD, read the documentation before contacting <questions@FreeBSD.org>.
For questions about this documentation, e-mail <doc@FreeBSD.org>.