Fix spacing
[ikiwiki.git] / docs / developer / PbulkBuilding.mdwn
1 ## Bulk build notes 
2
3 Joerg Sonnenberger's new bulk building interface is located in pkgtools/pbulk.  On pkgbox, this is located in /archive/NetBSD-pkgsrc.
4
5
6
7 To do this without affecting the existing pkgsrc setup on the machine you are using, you create a chroot and install pkgsrc twice inside it - once for pbulk and the various support programs, and once for the actual pkgsrc where everything is built.
8
9
10
11 These notes are taken from Justin Sherrill's test builds on pkgbox.dragonflybsd.org, and from suggestions from Joerg.  This reflects using version 0.36 of pbulk.
12
13
14
15 ### Setting up the chroot 
16
17 If getting rid of an earlier install, delete all the files you can, adjust the permissions on the ones left, and then delete what remains.
18
19
20
21     
22
23     rm -rf /build/pbulk_chroot
24
25     chflags -R noschg /build/pbulk_chroot
26
27     rm -rf /build/pbulk_chroot
28
29
30
31 Create dir for chroot
32
33
34
35     
36
37     mkdir /build/pbulk_chroot
38
39
40
41 Add files to chroot
42
43
44
45     
46
47     cd /usr/src
48
49
50
51 If there was no prior buildworld in this , you'll need to do this step
52
53
54
55     
56
57     make DESTDIR=/build/pbulk_chroot buildworld
58
59
60
61 Add world to chroot
62
63
64
65     
66
67     make DESTDIR=/build/pbulk_chroot installworld
68
69
70
71 note that this is not /etc, but /usr/src/etc
72
73
74
75     
76
77     cd etc
78
79     make DESTDIR=/build/pbulk_chroot distribution
80
81
82
83 Additional files that will be needed in the chroot
84
85
86
87     
88
89     cp /etc/resolv.conf /build/pbulk_chroot/etc
90
91
92
93
94
95 Make sure you've loaded the linux module if you don't want to get unnecessary messages about unknown ELF types.
96
97
98
99     
100
101     kldload linux.ko
102
103
104
105
106
107 Jeremy C. Reed has a large repository of the distfiles for pkgsrc in another directory outside of the chroot; mounting it and adding it to DIST_PATH should make it available, saving the bulk build process (and Matt's bandwidth) from having to download more.
108
109
110
111     
112
113     mkdir /build/pbulk_chroot/archive
114
115     mount_null /archive /build/pbulk_chroot/archive
116
117
118
119
120
121 Should be ready to go...
122
123
124
125     
126
127     chroot /build/pbulk_chroot
128
129     /etc/rc.d/ldconfig start
130
131
132
133 ### Adding pkgsrc bootstrap 
134
135 Everything past this point is in the chroot!
136
137
138
139     
140
141     mkdir /bulklog
142
143     mkdir /scratch
144
145     mkdir /distfiles
146
147     mkdir /packages
148
149
150
151 Grab the most recent quarterly release of pkgsrc:
152
153
154
155     
156
157     setenv CVSROOT anoncvs@anoncvs.NetBSD.org:/cvsroot
158
159     setenv CVS_RSH ssh
160
161     cd /usr
162
163     cvs -q checkout -rpkgsrc-2008Q1 -P pkgsrc
164
165
166
167 To update the pkgsrc files later
168
169
170
171     
172
173     cvs -q update -dP
174
175
176
177 Put this in /root/mk-base.conf, for use later when building the first bootstrap:
178
179
180
181     
182
183     WRKOBJDIR = /scratch
184
185     PKGSRCDIR = /usr/pkgsrc
186
187     DISTDIR = /distfiles
188
189     DIST_PATH = /archive/distfiles
190
191     PACKAGES = /packages
192
193     
194
195     FAILOVER_FETCH= yes
196
197     
198
199     _ACCEPTABLE=                    yes
200
201     ALLOW_VULNERABLE_PACKAGES=      yes
202
203     
204
205     PKG_DEVELOPER?= yes
206
207
208
209 We need to create a clean bootstrap kit for later.  This installs pkgsrc tools into /usr/pkg_bulk, too.
210
211
212
213     
214
215     mkdir /usr/pkg_bulk/
216
217     cd /usr/pkgsrc/bootstrap
218
219     ./bootstrap --prefix /usr/pkg_bulk --pkgdbdir /usr/pkg_bulk/.pkgdb
220
221     
222
223     cd /usr/pkgsrc/pkgtools/pbulk
224
225     env PATH=/usr/pkg_bulk/bin:/usr/pkg_bulk/sbin:${PATH} bmake package
226
227     
228
229     cd /usr/pkgsrc/bootstrap
230
231     ./cleanup
232
233     ./bootstrap --gzip-binary-kit /usr/pkgsrc/bootstrap/bootstrap.tgz --mk-fragment=/root/mk-base.conf
234
235
236
237
238
239 We need to make a binary kit with the corrected mk.conf so that pbulk is always set up with the right version as it builds/removes/adds packages
240
241
242
243     
244
245     cd /usr/pkgsrc/bootstrap
246
247     mkdir temp
248
249     mv bootstrap.tgz temp
250
251     cd temp
252
253     tar xf bootstrap.tgz
254
255     cp /usr/pkg/etc/mk.conf usr/pkg/etc/mk.conf
256
257     tar hzcf ../bootstrap.tar.gz usr var
258
259
260
261
262
263
264
265 Edit /usr/pkg_bulk/etc/pbulk.conf and change these lines to what is needed.  Be sure to put in a destination for the rsync command, as a side effect of that process is the removal of packages that are not for distribution due to various laws.  If this is being performed on a single machine, nfsmount directories in the chroot so that you can still copy the files around.  The rsync options below assume the packages and report are being copied around on the local machine.
266
267
268
269     
270
271     base_url=http://something/you_should_change_here
272
273     master_mode=no
274
275     
276
277     pkg_rsync_args="-av --delete-excluded"
278
279     pkg_rsync_target="/archive/packages/DragonFly-2.0/pkgsrc-current"
280
281     report_rsync_args="-avz --delete-excluded"
282
283     report_rsync_target="/archive/packages/DragonFly-2.0/pbulk_report"
284
285     report_recipients="you@your.email"
286
287     make=/usr/pkg/bin/bmake
288
289     
290
291     # optional
292
293     keep_wrkdir=no
294
295     keep_prefix=no
296
297     
298
299
300
301
302
303 If the system you are building on is a slightly different version than the target for your packages, pkg_add will complain about the difference in uname.  To fix this, change the UNAME_r and UNAME_v environment variables to the desired values before building.
304
305
306
307     
308
309     (before)
310
311     # uname -v
312
313     DragonFly 2.1.0-DEVELOPMENT #0: Wed Sep 24 04:26:56 PDT 2008     root@:/usr/obj/usr/src/sys/PKGBOX
314
315     # uname -r
316
317     2.1.0-DEVELOPMENT
318
319     
320
321     # setenv UNAME_v 'DragonFly 2.0.1-RELEASE #0: Wed Sep 24 04:26:56 PDT 2008     root@:/usr/obj/usr/src/sys/PKGBOX'
322
323     # setenv UNAME_r 2.0.1-RELEASE  
324
325     
326
327     (after)
328
329     # uname -v
330
331     DragonFly 2.0.1-RELEASE #0: Wed Sep 24 04:26:56 PDT 2008     root@:/usr/obj/usr/src/sys/PKGBOX
332
333     # uname -r
334
335     2.0.1-RELEASE
336
337
338
339
340
341 Kick off the bulk build.  It takes a LONG time, so it's worth doing this in a screen session.  Unless you install screen in the same way as pbulk, it won't be available in the chroot, so you may need to get out of the chroot, enter a screen session, and re-enter the chroot before this step.
342
343
344
345     
346
347     /usr/pkg_bulk/bin/bulkbuild
348
349
350
351 The line for setting up a rsync server for the mirrors: (do this outside the chroot)
352
353
354
355     
356
357     rsync --daemon --bwlimit#200 --config/usr/pkg/etc/rsync/rsyncd.conf
358
359
360
361 If the build stops or pauses or whatever, this line will restart it, for versions 0.28 and older.
362
363
364
365     
366
367     /usr/pkg_bulk/libexec/pbulk/build
368
369
370
371 Version 0.29 and later restart the build with this:
372
373
374
375     
376
377     /usr/pkg_bulk/bin/bulkbuild-restart
378
379
380