OmniOS-on-demand is a cron(1)-driven script. It tracks changes in local copies of both illumos-omnios and omnios-build. If there are changes (“gate churn”) in either, the script will start a build after a certain period of calm after the last gate churn event. It is available in $OMNIOS_BUILD_PATH/tools/.
OmniOS-on-demand starts parallel builds of illumos-omnios and omnios-build. It uses the PREBUILT_ILLUMOS environment variable to allow the parallel builds. Because of the current default ordering of omnios-build’s package list, omnios-build will block for a while waiting for illumos-omnios to finish.
On an 8-core single-processor 3.2GHz Xeon E5 system, a build of OmniOS-on-demand takes slightly more than 5 hours. Improvements in this script, or in buildctl itself should further reduce this time.
A machine that can build illumos-omnios AND has enough swap in /tmp to build any arbitrary package in omnios-build is all you need. Our experience has shown that 16-32GB of memory, at least 4 processor cores, and 100GB of disk space should be more than enough to make this work. Due to illumos bug 5938, there must be a swap device (e.g. a zvol) enabled, even a very small one, or else at least the OpenJDK build will hang the build process until a swap devices is added.
A dedicated user (we use “builder”) can be assigned to run the OmniOS-on-demand script in its cron(1) table, once per minute. Unless gate churn is high, this script will perform no-change git pulls, followed by a quick exit.
The user profile for OmniOS-on-demand requires a specific entry in
/etc/sudoers.d. Basically, the Kayak build script should
be allowed to be run under sudo without user interaction. This allows
cron(1)-driven OmniOS-on-demand to run smoothly. An example line:
builder ALL=(ALL) NOPASSWD: <omnios-build path>.../build/kayak/build.sh
$OMNIOS_BUILD_PATH/tools/ directory also contains a sample file