Overview 
  -  Background and Motivation 
 
  -  Anatomy of a bulk build 
 
  -  pbulk components 
 
  -  Future plans 
 
 
 Some background 
  -  Fixing issues in FreeBSD ports since end of 2003 
 
  -  Moved to pkgsrc in summer 2005 
 
  -  Regular bulk builds since October 2005 
 
  -  Rule: A problem fixed in the bulk build is a problem no user can complain about. 
 
  -  Rule: A problem in a bulk build is easier to reproduce than a problem from a user. 
 
  -  Binary packages are a by-product 
 
 
 Anatomy of a bulk build 
  -  Setup of machine and bulk build 
 
  -  Prepare the pkgsrc tree 
 
  -  Find out what to build 
 
  -  Build packages 
 
  -  Summarize results 
 
  -  Upload results 
 
  -  Upload binary packages 
 
 
 Specific problems 
  -  Stray directories in /usr/pkg 
 
  -  Stray dependencies in /usr/pkg (gmake, pkg-config) 
 
  -  .if exists(${X11BBASE}/include/X11/Xdefs.h) ... .endif 
 
  -  math/p5-Math-Pari 
 
  -  Writing to /etc 
 
  -  Writing to /home 
 
  -  Scalability 
 
 
 pbulk components (I)
  -  pbulk-scan: Schedule scanning of pkgsrc parts 
 
  -  pbulk-resolve: Compute dependency tree 
 
  -  pbulk-build: Schedule build of packages 
 
  -  Small glue in mk/pbulk for scan target 
 
 
 pbulk components (II)
  -  Schedulers in C: network access, memory usage 
 
  -  Resolver in C: code reuse for Dewey, speed 
 
  -  Upload logic somewhat overlapped with pbulk-build 
 
  -  Report logic completely in awk 
 
 
 The scan component 
  -  Take list of PKGPATH or extract subdirectories using make 
 
  -  Pull/push model for distributed scans 
 
  -  Call "make pbulk-index" for every PKGPATH 
 
  -  make is the only way to get reliable results 
 
  -  Collect and reorder list, drop duplicate entries 
 
 
 The resolver component 
  -  Implement a mix of pkg_add and pkgsrc algorithm to find dependencies 
 
  -  If in doubt, prefer pkgsrc view, but warn 
 
  -  {gs,gs-esp}-[0-9]*:../../print/ghostscript requested, gs-7.0 and gs-esp-7.0nb1 exist — what to pick?
 
  -  Complain or list what couldn't be found 
 
 
 The build component 
  -  Pull/push model for distributed scans 
 
  -  Find package with all dependencies done and highest priority 
 
  -  Sort order: number of packages depending on this 
 
 
 Future plans 
  -  Allow to easier restrict multi-version logic 
 
  -  Allow using incremental mode + post-filtering when missing dependencies 
 
  -  Move restricted subset logic for upload into upload itself 
 
  -  Tag bootstrap packages and don't install them 
 
  -  Remove package if install/deinstall test fails 
 
  -  Implement poll loop directly to get rid of libevent 
 
  -  Split into base part and distinguish official bulk build and simple user case