123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200 |
- .\" $OpenBSD: bulk.8,v 1.10 2016/09/18 22:09:12 schwarze Exp $
- .\"
- .\" Copyright (c) 2016 Marc Espie <espie@openbsd.org>
- .\"
- .\"
- .\" Permission to use, copy, modify, and distribute this software for any
- .\" purpose with or without fee is hereby granted, provided that the above
- .\" copyright notice and this permission notice appear in all copies.
- .\"
- .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
- .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
- .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
- .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
- .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
- .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- .Dd $Mdocdate: September 18 2016 $
- .Dt BULK 8
- .Os
- .Sh NAME
- .Nm bulk
- .Nd building OpenBSD packages in bulk
- .Sh DESCRIPTION
- There are quite a few steps necessary to build packages on a cluster.
- They are:
- .Pp
- .Bl -enum -compact -offset indent
- .It
- Choose master machine setup and create partitions.
- .It
- Setup chrooted builds on the master.
- .It
- Add slaves and do a full bulk.
- .It
- Clean up and do subsequent bulks.
- .It
- Perform additional maintenance.
- .El
- .Ss 1. Choose master machine setup and create partitions
- Setup a master machine with enough room for a chroot, say
- .Pa /build .
- Assuming you are using a cluster of machines,
- this chroot should contain NFS exportable partitions for distfiles,
- plists, and packages (one single partition can be used for simplicity).
- A full setup requires on the order of 50GB for distfiles and 50GB for packages.
- .Pp
- It is possible to build packages without a chroot, but the space
- requirement difference is negligible (a full
- .Ox
- install is less than 1GB), and having everything chrooted means you may
- install useful tools to help with the process outside of the chroot
- .Po
- for instance
- .Xr rsync 1
- .Pc .
- .Pp
- Reserve one "scratch" partition under the chroot for WRKOBJDIR
- (for instance, mfs, async, or SSD).
- This partition should be roughly 10GB if you want to be able to
- build all ports.
- This can often double as
- .Pa /tmp
- under the chroot.
- .Pp
- Alternately, you can setup your whole chroot as a scratch partition,
- and reserve one more permanent space under it for distfiles,
- packages, and plists.
- .Pp
- Choose a strategy for the ports tree itself.
- There must be a copy under
- .Pa /build .
- You can either copy it from outside the chroot, have it in an NFS
- partition, or manually make sure all machines on the cluster have the
- same ports tree (cvs checkout, rsync ...).
- .Pp
- Note that logs are only produced on the master, and thus do not
- need to be nfs exportable, nor even inside the chroot.
- .Pp
- .Ox
- now comes with default users for package builds, namely _pbuild and _pfetch.
- .Pp
- However, the default
- .Xr login.conf 5
- is too small for building the largest ports and for machines with
- lots of cores.
- You should probably increase the limit on the number of processes and
- on the default data size for _pbuild.
- .Pp
- Note that _pbuild does not need network access, and can be blocked using
- .Xr pf 4
- with a rule such as
- .Bd -literal -offset indent
- block out quick proto {tcp,udp} from self user _pbuild
- .Ed
- .Pp
- Recent
- .Ox
- systems do not need any kind of
- .Xr doas 1
- setup for bulk ports builds, as
- .Xr dpb 1
- is run as root and drops permissions appropriately.
- .Ss 2. Setup chrooted builds on the master
- Populate the initial chroot with
- .Xr proot 1 .
- Point DISTDIR, PACKAGE_REPOSITORY, PLIST_REPOSITORY, WRKOBJDIR
- to appropriate locations.
- .Pp
- Pay attention to nodev and wxallowed warnings.
- A chroot setup that can't have devices won't work at all.
- A setup without wxallowed in /usr/local and WRKOBJDIR won't
- build a lot of things.
- .Pp
- Check that this setup can build ports by running
- .Li dpb -B /build
- as root.
- Fix any issues related to file ownership at this point.
- See
- .Xr dpb 1
- for details.
- .Pp
- If your WRKOBJDIR is a temporary partition, make sure it
- belongs to _pbuild:_pbuild after a reboot.
- .Ss 3. Add slaves and do a full bulk
- Create identical slave machines with the same release material.
- Have them import the NFS partitions from the master, they
- don't need root access to the partitions.
- Set up
- .Xr ssh 1
- so that the master can connect to the slaves, using ssh protocol 2,
- as root, preferably without a password or passphrase (however,
- .Xr dpb 1
- uses a master connection, so a password would be required just once per host).
- .Pp
- Note that code on slave machines will only run as _pbuild
- (during builds) or root (during dependency installation).
- Slave machines only require highly restricted network access.
- They just need to act as nfs clients to the master and to be reachable
- through ssh from the master.
- .Pp
- Use a similar
- .Xr proot 1 config
- to populate each slave.
- .Pp
- You should now be able to build ports on the slaves.
- A simple config will just have
- .Bd -literal -offset indent
- DEFAULT chroot=/build
- localhost
- host1
- \&...
- .Ed
- .Pp
- Check that the full config can still build ports.
- .Pp
- You're now ready for a full bulk.
- Beware that even fast configs (3 amd64 with 8 cores each) may take over 24 hours
- to finish. It's generally appropriate to run
- .Xr dpb 1
- under
- .Xr tmux 1 .
- .Ss 4. Clean up and do subsequent bulks
- Before running the next bulk, you should set up rotating logs and move the
- PACKAGE_REPOSITORY away.
- Save the PLIST_REPOSITORY and DISTDIR though.
- PLIST_REPOSITORY will catch problems in packing-lists.
- .Pa ${PLIST_REPOSITORY}/${ARCH}/history
- is also used to store
- .Xr sha256 1
- history, necessary to reorder files inside packages to speed updates up.
- .Pp
- The DISTDIR contains history information as well as DISTDIR/build-stats
- to speed further runs up.
- .Pp
- How you wipe things out depends on your setup.
- If you run
- .Xr proot 1
- again each time, most things will get cleaned up automatically
- .Po
- .Pa /build/usr/local , /build/var/db/pkg ...
- .Pc .
- Note that known directories such as WRKOBJDIR do not get cleaned up
- automatically, so you may want to set up a STARTUP_SCRIPT in
- .Xr dpb 1 .
- .Ss 5. Perform additional maintenance
- .Xr clean-old-distfiles 1
- should be run occasionally since the DISTDIR will continue growing.
- .Pp
- .Xr check-problems 1
- should be run occasionally to find out conflicts and dependency issues.
- .Sh SEE ALSO
- .Xr check-problems 1 ,
- .Xr clean-old-distfiles 1 ,
- .Xr dpb 1 ,
- .Xr proot 1 ,
- .Xr register-plist 1 ,
- .Xr tmux 1 ,
- .Xr bsd.port.mk 5 ,
- .Xr release 8
|