Concurrent FreeBSD port builder
Pull request Compare This branch is 185 commits behind DragonSA:master.
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
admin
libpb
port
.gitattributes
.gitignore
BUGS
COPYRIGHT
ChangeLog
README
TODO
portbuilder
setup.py

README

DESCRIPTION
-----------
A concurrent ports building tool.  Although FreeBSD ports supports building a
single port using multiple jobs (via MAKE_JOBS), it cannot build multiple ports
concurrently.  This tool accomplishes just that.

Some of it's key features:
 * Concurrent port building
 * Load control
 * Top like UI
 * Persistent builds (by default)


REQUIREMENTS
------------
python >= 2.6


INSTALLATION
------------
Unpack (or clone) the source files and in the portbuilder directory do:
# python setup.py build
# python setup.py install


USAGE
-----
NOTE: all ports are specified using [category]/[directory] as found in the ports
tree.  For example, to build all of KDE specify x11/kde4, or for VLC specify
multimedia/vlc


Usage:  portbuilder [-abdnpruFNU] [-c config] [-C chroot] [-D variable]
                    [-f file] [long-options] [variable=value] port ...

Options:
  --version             show program's version number and exit
  -h, --help            show this help message and exit
  -a, --all             Add all installed ports to the list (aka `pkg_info-
                        aoq`)
  --arch=ARCH           Set the architecture environment variables (for cross
                        building)
  -b, --batch           Batch mode.  Skips the config stage
  -c CONFIG, --config=CONFIG
                        Specify which ports to configure (none, changed,
                        newer, all) [default: changed]
  -C CHROOT             Build ports in chroot environment
  -d, --debug           Turn off extra diagnostic information (faster)
  --depend=DEPEND       Comma separated list of methods to resolve
                        dependencies (build, package) [default=build]
  -D variable           Define the given variable for make (i.e. add ``-D
                        variable'' to the make calls)
  -f PORTS_FILE, --ports-file=PORTS_FILE
                        Use ports from file
  -F, --fetch-only      Only fetch the distribution files for the ports
  --force               Force (re)installation of specified ports.
  --force-all           Force (re)installation of specified ports and all its
                        dependencies.
  -n                    Display the commands that would have been executed,
                        but do not actually execute them.
  -N                    Do not execute any commands.
  -p, --package         Create packages for specified ports.
  -P, --package-all     Create packages for all installed ports
  --profile=PROFILE     Produce a profile of a run saved to file PROFILE
  -u, --upgrade         Upgrade specified ports.
  -U, --upgrade-all     Upgrade specified ports and all its dependencies.


EXAMPLES
--------
Install KDE 4 and Xorg:
# portbuilder x11/kde4 x11/xorg

Install all ports specified in a file (# comments respected)
# cat /root/ports
print/cups      # For printing
devel/svk       # For development
^C
# portbuilder -f /root/ports

Fetch all the files required to update all ports in a file
# portbuilder -Fuf /root/ports

Reconfigure and upgrade all ports (and their dependencies) in a file
# portbuilder -c all -Uf /root/ports

Display the commands that will upgrade all installed ports
# portbuilder -anU

Simulate the above (using the Top display) without printing the commands
# portbuilder -aNU

Rebuild strigi with debug symbols
# portbuilder --force deskutils/strigi -DWITH_DEBUG

Build all ports, specified in a file, in an i386 chroot environment, using
packages were possible
# portbuilder --arch=i386 -C /scratchpad -f /root/ports -DUSE_PACKAGE_DEPENDS


INTERFACE
---------
Portbuilder offers a user interface similar to the top(1) program.  The
interface should be intuitive however some commands are provided:

^L   - Redraw screen
d    - Toggle displaying ports with failed dependencies
f    - Toggle displaying only failed (and skipped) ports
i    - Toggle displaying only idle ports
PgDn - Scroll down display
PgUp - Scroll up display
q    - Quit portbuilder (once to send SIGTERM to all jobs,
                         twice to send SIGKILL to all jobs,
                         thrice to send SIGKILL to all and die)


NOTES
-----
 * Build log files are stored in /tmp/portbuilder, check there if a port failed.
 * Ensure the program runs as root, or has write access to build area (and
   /usr/ports/distfiles if ports need to fetch).
 * The load per stage can be seen under libpb/queue.py (at end of file).
   Default values (build load can be as high as cpus * 3 - 1, or more):
      attr     = CPUS * 2
      config   = 1
      clean    = 1
      checksum = max(CPUS // 2, 1)
      fetch    = 1
      build    = CPUS * 2
      install  = 1
      package  = 1
   NOTE: pkginstall stage shares the install queue