added PKG_DEFAULT_OPTIONS="dri inet6" to mk.conf per Hasso/Sascha
[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     mkdir /build/pbulk_chroot/archive
110     mount_null /archive /build/pbulk_chroot/archive
111
112 Should be ready to go...
113
114     chroot /build/pbulk_chroot
115     /etc/rc.d/ldconfig start
116
117 ### Adding pkgsrc bootstrap 
118
119 Everything past this point is in the chroot!
120
121     mkdir /bulklog
122     mkdir /scratch
123     mkdir /distfiles
124     mkdir /packages
125
126 Grab the most recent quarterly release of pkgsrc:
127    
128     setenv CVSROOT anoncvs@anoncvs.NetBSD.org:/cvsroot
129     setenv CVS_RSH ssh
130     cd /usr
131     cvs -q checkout -rpkgsrc-2008Q1 -P pkgsrc
132
133 To update the pkgsrc files later
134
135     cvs -q update -dP
136
137 Put this in /root/mk-base.conf, for use later when building the first bootstrap:
138
139     WRKOBJDIR = /scratch
140     PKGSRCDIR = /usr/pkgsrc
141     DISTDIR = /distfiles
142     DIST_PATH = /archive/distfiles
143     PACKAGES = /packages
144
145     FAILOVER_FETCH= yes
146     _ACCEPTABLE=                    yes
147     ALLOW_VULNERABLE_PACKAGES=      yes
148
149     PKG_DEVELOPER?= yes
150     PKG_DEFAULT_OPTIONS="dri inet6"
151
152 We need to create a clean bootstrap kit for later.  This installs pkgsrc tools into /usr/pkg_bulk, too.
153
154
155
156     
157
158     mkdir /usr/pkg_bulk/
159
160     cd /usr/pkgsrc/bootstrap
161
162     ./bootstrap --prefix /usr/pkg_bulk --pkgdbdir /usr/pkg_bulk/.pkgdb
163
164     
165
166     cd /usr/pkgsrc/pkgtools/pbulk
167
168     env PATH=/usr/pkg_bulk/bin:/usr/pkg_bulk/sbin:${PATH} bmake package
169
170     
171
172     cd /usr/pkgsrc/bootstrap
173
174     ./cleanup
175
176     ./bootstrap --gzip-binary-kit /usr/pkgsrc/bootstrap/bootstrap.tgz --mk-fragment=/root/mk-base.conf
177
178
179
180
181
182 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
183
184
185
186     
187
188     cd /usr/pkgsrc/bootstrap
189
190     mkdir temp
191
192     mv bootstrap.tgz temp
193
194     cd temp
195
196     tar xf bootstrap.tgz
197
198     cp /usr/pkg/etc/mk.conf usr/pkg/etc/mk.conf
199
200     tar hzcf ../bootstrap.tar.gz usr var
201
202
203
204
205
206
207
208 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.
209
210
211
212     
213
214     base_url=http://something/you_should_change_here
215
216     master_mode=no
217
218     
219
220     pkg_rsync_args="-av --delete-excluded"
221
222     pkg_rsync_target="/archive/packages/DragonFly-2.0/pkgsrc-current"
223
224     report_rsync_args="-avz --delete-excluded"
225
226     report_rsync_target="/archive/packages/DragonFly-2.0/pbulk_report"
227
228     report_recipients="you@your.email"
229
230     make=/usr/pkg/bin/bmake
231
232     
233
234     # optional
235
236     keep_wrkdir=no
237
238     keep_prefix=no
239
240     
241
242
243
244
245
246 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.
247
248
249
250     
251
252     (before)
253
254     # uname -v
255
256     DragonFly 2.1.0-DEVELOPMENT #0: Wed Sep 24 04:26:56 PDT 2008     root@:/usr/obj/usr/src/sys/PKGBOX
257
258     # uname -r
259
260     2.1.0-DEVELOPMENT
261
262     
263
264     # setenv UNAME_v 'DragonFly 2.0.1-RELEASE #0: Wed Sep 24 04:26:56 PDT 2008     root@:/usr/obj/usr/src/sys/PKGBOX'
265
266     # setenv UNAME_r 2.0.1-RELEASE  
267
268     
269
270     (after)
271
272     # uname -v
273
274     DragonFly 2.0.1-RELEASE #0: Wed Sep 24 04:26:56 PDT 2008     root@:/usr/obj/usr/src/sys/PKGBOX
275
276     # uname -r
277
278     2.0.1-RELEASE
279
280
281
282
283
284 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.
285
286
287
288     
289
290     /usr/pkg_bulk/bin/bulkbuild
291
292
293
294 The line for setting up a rsync server for the mirrors: (do this outside the chroot)
295
296
297
298     
299
300     rsync --daemon --bwlimit#200 --config/usr/pkg/etc/rsync/rsyncd.conf
301
302
303
304 If the build stops or pauses or whatever, this line will restart it, for versions 0.28 and older.
305
306
307
308     
309
310     /usr/pkg_bulk/libexec/pbulk/build
311
312
313
314 Version 0.29 and later restart the build with this:
315
316
317
318     
319
320     /usr/pkg_bulk/bin/bulkbuild-restart
321
322
323