summaryrefslogtreecommitdiff
path: root/doc/HOWTO-pbulk
blob: 1a18e81e755b9c83fc516de1ad2a285d6b788394 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
Step One: Suggested Filesystem Layout

For the DragonFly builds I'm using:
- /bulklog for the bulk meta data and log files of each package
- /scratch as WRKOBJDIR
- /distfiles as DISTDIR
- /packages as PACKAGES
- separate physical filesystems for /var and /usr/pkg
All filesystems but those are read-only, /tmp and /dev need platform
specific handling either as tmpfs or link. ptyfs helps for /dev.

For parallel builds, /bulklog, /packages and /usr/pkgsrc are supposed to
be shared (null mounts, NFS). /usr/pkg and /var/db/pkg needs to be
per-node and /scratch should be per-node.

Step Two: Preparing pbulk prefix

Install pkgtools/pbulk and possibly helper programs like screen into
LOCALBASE=/usr/pkg_bulk, PKG_DBDIR=/usr/pkg_bulk/.pkgdb. A full
bootstrap is the recommented approach. Copy /usr/pkg_bulk to the client
nodes for parallel builds.

Step Three: Configure pbulk

(a)
Setup general build parameters in mk.conf. Below is an example
fragment to add.

(b) [not for netbsd]
Build a binary bootstrap kit and override the included mk.conf with the
file created in (a). Compress the tarball with gzip.

(c)
Edit /usr/pkg_bulk/etc/pbulk.conf:
- For NetBSD:
  - pkg_install_prefix should be /usr.
  - bootstrapkit should be empty.
- For non-NetBSD:
  - pkg_install_prefix should /usr/pkg_bulk.
  - make must be changed to /usr/pkg/bin/bmake.
  - bootstrapkit should be changed to the tarball in (b). Both master
    and client nodes access this, so keep it in a shared location.

- master_mode=yes needs a proper list of client nodes.
- base_url goes into the report mail, the rsync targets are used
  for uploads.
- for limited bulk builds, set limited_list to a file with one
  location per line

Step Four: Running pbulk

/usr/pkg_bulk/bin/bulkbuild in screen runs the full build.

/usr/pkg_bulk/libexec/pbulk/{pre-build,scan,build,report,upload} are the
individual build phases. They depend on the execution of the phase
before. Exceptions are report and upload which both depend on build.

--- sample mk.conf fragment ---

WRKOBJDIR = /scratch
PKGSRCDIR = /usr/pkgsrc
DISTDIR = /distfiles
PACKAGES = /packages

FAILOVER_FETCH=	yes

X11_TYPE=	modular

_ACCEPTABLE=			yes
ALLOW_VULNERABLE_PACKAGES=	yes

PKG_DEVELOPER?= yes