tech-pkg archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Speeding up the bulk build scan phase



Hi!

If you're running your own bulk builds, I'll describe a method to
majorly speed up the 'scan' part of the build.

This is heavily based on jperkin's work and help, thank you, Jonathan!

The basic idea is to avoid forks. Most forks during the scan phase
compute the same values over and over again while scanning the whole
pkgsrc tree, for stuff that does not change.

Since both pbulk and bob use the same pbulk-index-item target, this
works for both of them.

1. Create a cache file for the variables used by the built-in detection

   There's a Makefile target in a dummy package in pkgtools/varcache:

       cd /usr/pkgsrc/pkgtools/varcache
       make show-varcache > /etc/varcache.mk
       echo .include "varcache.mk" >> /etc/mk.conf

   This also sets a couple more variables that rarely change:
   HOST_OSTYPE, machine endian-ness, pkgtools version, gcc version,
   location of the pkgsrc tree.

   (You will have to regenerate this when a built-in package is
   updated or one of the other mentioned characteristics changes. It's
   fast, so you could run it before every bulk build.)

2. Set some more variables

       NATIVE_PKG_TOOLS_BIN=/usr/sbin # NetBSD location
       NO_PKGTOOLS_REQD_CHECK=yes     # assume pkg tools are up-to-date
       SKIP_LICENSE_CHECK=yes 	      # do not check license validity
       _SRC_TOP_= 	              # we're not running from inside /usr/src
       UNPRIVILEGED_GROUP=builder     # use the appropriate group for your system
       UNPRIVILEGED_GROUPS=builder    # use the appropriate groups for your system
       UNPRIVILEGED_USER=pbulk 	      # use the appropriate user for your system

   Note: You might not want to set SKIP_LICENSE_CHECK, since this
   disables checking the license(s) against your ACCEPTABLE_LICENSES
   settings.

   If you're on NetBSD-current, you can also set

       _TOOLS_USE_PKGSRC.flex=no

   since -current has flex 2.6.4, which is new enough for everything
   in pkgsrc as of 20260111.

3. Set some variables in the environment

   These variables are computed before /etc/mk.conf is read, so they
   need be passed in from the environment - so perhaps add them to
   your shell startup files.

         export HOST_MACHINE_ARCH=`uname -m`
         export NATIVE_OPSYS=`uname -s`
         export NATIVE_OPSYS_VERSION=`uname -r | awk -F. '{major=int($1); minor=int($2); if (minor>=100) minor=99; patch=int($3); if (patch>=100) patch=99; printf "%02d%02d%02d", major, minor, patch}'`
         export NATIVE_OS_VERSION=`uname -r`

With these change (and my commits from yesterday) I got the scan phase
for a full NetBSD-current/pkgsrc-current bulk build using 'bob scan'
down to less than 20 minutes. I have no reliably "before" number, but
it was definitely over an hour.

Enjoy!
 Thomas


Home | Main Index | Thread Index | Old Index