UPDATING revision 1.98 1 $NetBSD: UPDATING,v 1.98 2003/11/20 08:07:52 wiz Exp $
2
3 This file is intended to be a brief introduction to the build
4 process and a reference on what to do if something doesn't work.
5
6 For a more detailed description see Makefile.
7
8 Recent changes:
9 ^^^^^^^^^^^^^^^
10
11 20031111:
12 A newer mkdep is needed. Error noting that is
13 cc: Ambiguous abbreviation --
14
15 20031008:
16 /usr/include/sys/disklabel_mbr.h was removed.
17 It's necessary to "make cleandir" to ensure that
18 the dependencies will be rebuilt correctly.
19
20 20030906:
21 With the addition of siginfo support the old signal trampoline
22 code has been deprecated to COMPAT_16. Make sure that your running
23 kernel has COMPAT_16 enabled before building userland.
24
25 20030801:
26 With the new openssl, there is some header and library shuffling.
27 rm -f /usr/include/des.h /usr/include/kerberosIV/* /lib/libdes* \
28 /usr/lib/libdes* before building.
29
30 20030703:
31 Texinfo was updated to 4.6. To avoid failures when trying to
32 build the included texinfo files, do:
33
34 cd src/gnu/usr.bin/texinfo
35 make MKINFO=no dependall install
36
37 20030630:
38 Groff was update to 1.19; it's probably necessary to do
39 cd share/mk && make install
40 cd src/gnu/usr.bin/groff
41 make MKMAN=no dependall install
42 (untested).
43
44 20030516:
45 Due to bugs in the export handling code, invalid export lines
46 were accepted before and caused the kernel to panic when
47 mountd got restarted because it freed memory that had already
48 been freed. This has been fixed and the kernel checks
49 export addresses very strictly. If you upgrade your kernel,
50 make sure you also upgrade mountd, because if your export
51 file contains lines with an old inet4 address syntax (i.e.
52 a.b.c or a.b or a), they will get rejected by the new kernel.
53
54 20030402:
55 The superblock layout for FFS was changed. If you have 1.6
56 fsck binaries, they will signal a fatal superblock mismatch
57 with the first alternate, because they compare too many
58 fields (even ones that aren't useful). If possible, upgrade
59 your fsck_ffs binary before using a new kernel.
60 None of this signals actual filesystem damage.
61
62 20030324:
63 sendmail version 8.12.8 was imported. Since sendmail is
64 now setgid to the smmsp group, and runs in "collection"
65 mode for most common activities, there is a new config
66 file called submit.cf that needs to live in /etc/mail.
67 The generic submit.cf sample in /usr/share/sendmail/cf
68 is named netbsd-msp.cf. Upgrading your regular sendmail
69 configuration file is also strongly advised.
70
71 See the section named "MESSAGE SUBMISSION PROGRAM" in
72 the updated /usr/share/sendmail/README file for more
73 information.
74
75 20030117:
76 Texinfo was updated to 4.3. To avoid failures when trying to
77 build the included texinfo files, do:
78
79 cd src/gnu/usr.bin/texinfo
80 make MKINFO=no dependall install
81
82 20021223:
83 The METALOG format changed slightly, to remove the leading
84 "${DESTDIR}" from path names.
85 This only affects people building with UNPRIVED.
86 For complete safety, remove the DESTDIR entirely and
87 update tools/mtree, before running make build.
88
89 20021219:
90 CVS repository layout was changed. See the following for details
91 if you are using (anonymous) cvs to update your tree.
92
93 http://mail-index.NetBSD.org/netbsd-announce/2002/12/19/0000.html
94
95 20021219:
96 install(1) had a '-N dbdir' option added, to specify an
97 alternate location to look up users & groups (instead
98 of the host system passwd(5) and group(5) databases).
99
100 The build system was modified to take advantage of
101 this option (using ${NETBSDSRCDIR}/etc), so if you
102 use USETOOLS==no, you may have to rebuild and
103 reinstall usr.bin/xinstall first.
104
105 20021130:
106 fparseln(3) moved from libutil to libc.
107 If building to DESTDIR=/, reinstall the includes
108 and rebuild libc:
109 make includes
110 make do-lib-libc
111 If using build.sh, "cd tools/compat && make clean"
112 before rebuilding the tools.
113
114 20021126:
115 The mk.conf(5) variable SYS_INCLUDE has been deprecated,
116 including the optional "SYS_INCLUDE=symlinks" support.
117 All header files, including <sys/*.h> are copied into
118 /usr/include.
119
120 20021121:
121 The C run-time support files crtbegin.o and crtend.o
122 (and their companions crtbeginS.o and crtendS.o) were
123 split up, with new crti.o and crtn.o files resulting.
124 This means that libtool needs to be rebuilt once the
125 new libraries are installed. The process of rebuilding
126 libtool will cause it to automatically notice the new
127 required files, but it *must* be rebuilt in order to
128 do this.
129
130 An out-of-date libtool will result in shared libraries
131 which lack _init() and _fini() routines, which means that
132 their global contructors/destructors will not be invoked.
133
134 20021121:
135 A bug related to how ARM ELF objects were tagged has been
136 corrected.
137
138 NetBSD ARM ELF uses the soft-VFP floating point model by
139 default. However, the assembler lacked support for marking
140 objects as using the VFP floating point format, and the
141 compiler was not properly passing the flag indicating "soft-VFP"
142 to the assembler.
143
144 Unfortunately, this means that the linker will now consider
145 old (i.e. not marked "softvfp") NetBSD ARM ELF objects to be
146 incompatible with new (properly marked) objects.
147
148 The problem will only manifest itself if you attempt to compile
149 a new program using the fixed toolchain, and link that program
150 against old libraries which do not have the proper "softvfp"
151 markings. ALL OF YOUR EXISTING BINARIES AND SHARED LIBRARIES
152 WILL CONTINUE TO WORK PROPERLY.
153
154 The only work-around for the problem is to recompile all of
155 the libraries on the system. The easiest way to do this for
156 system libraries is to install a binary snapshot; they are
157 generally available on releng.NetBSD.org. Any packages you
158 have installed which supply libraries will have to be recompiled
159 if you wish to link new programs against those libraries.
160
161 If you have questions about this matter, please contact
162 port-arm (a] NetBSD.org.
163
164 20021011:
165 Systrace has been improved to support privilege elevation.
166 Updating the kernel requires the userland part of systrace
167 to be rebuilt.
168
169 20021010:
170 The config(8) grammar was changed to allow options to register
171 dependencies on attributes, as well as other options. Users
172 must update and reinstall usr.sbin/config before building a new
173 kernel.
174
175 20021009:
176 A new attribute dependency syntax was introduced to config(8),
177 which is now used by the SCSI configuration description. Users
178 must update and reinstall usr.sbin/config before building a new
179 kernel.
180
181 20021003:
182 Several changes have been made to the autoconfiguration
183 framework. Users must update and reinstall usr.sbin/config
184 before building a new kernel.
185
186 20021001:
187 The i386mp branch has been merged. To compile a kernel, users
188 will need to add the option 'cpu* at mainbus?' to their configuration
189 file. Multiprocessor kernels will need
190 ioapic* at mainbus? apid ?
191 options MULTIPROCESSOR
192 options COM_MPLOCK
193
194 20020922:
195 MKDYNAMICROOT=yes enabled by default, which means that
196 certain shared libraries are installed into /lib, the shared
197 linker is installed into /libexec, and all programs in /bin
198 and /sbin are dynamically linked.
199 If you do not use "make build", you should ensure that
200 you have the libraries and shared linker in the new locations,
201 with:
202 make do-lib-csu do-lib-libc do-lib do-gnu-lib do-ld.elf_so
203
204 20020917:
205 USE_NEW_TOOLCHAIN has been replaced with:
206 - TOOLCHAIN_MISSING -- set to "yes" on platforms for which
207 there is no working in-tree toolchain (hppa, ns32k, sh5,
208 x86_64).
209 - EXTERNAL_TOOLCHAIN -- if defined by the user, points to the
210 root of an external toolchain (e.g. /usr/local/gnu). This
211 enables the cross-build framework even for TOOLCHAIN_MISSING
212 platforms.
213
214 20020906:
215 gehenna-devsw has been merged into the trunk. Need to update and
216 reinstall usr.sbin/config before building the kernel.
217
218 20020822:
219 Crunched rescue tools (contents of /bin and /sbin, plus others)
220 are now provided in /rescue.
221
222 To ensure that these are built statically linked (no matter
223 what the setting of LDSTATIC is), use a crunchgen(1) built
224 from sources newer than 20020820 (see the next entry).
225
226 20020820:
227 crunchgen(1) changed to ensure that the generated program
228 is statically linked.
229
230 Solution: update and reinstall usr.bin/crunch
231
232 20020605:
233 smmsp user/group has been added for sendmail.
234
235 Add the following into /etc/group:
236
237 smmsp:*:17:
238
239 and the following to /etc/master.passwd (via vipw):
240
241 smmsp:*:17:17::0:0:Sendmail Message Submission Program:/nonexistent:/sbin/nologin
242
243 20020515:
244 sshd user/group has been added. Need to hand add this in, or sshd
245 will not let you log in (with default, or UsePrivlegeSeparation=yes)
246
247 Add the following into /etc/group:
248
249 sshd:*:16:
250
251 and the following to /etc/master.passwd (via vipw):
252
253 sshd:*:16:16::0:0:& pseudo-user:/var/chroot/sshd:/sbin/nologin
254
255 Also /var/chroot/sshd directory needs to be present (digged as part of
256 the build process).
257
258 20020426:
259 NBUILDJOBS obsoleted in favor of just using -j.
260
261 20020426:
262 etc/postinstall added, which performs various checks for
263 configuration file updates and changes, and can fix most of
264 the problems identified.
265 This should make it much easier to upgrade a system's
266 configuration from earlier systems (as far back as NetBSD 1.5).
267
268 20020320:
269 <bsd.lib.mk> needs a new install(1) for its "-a cmd" support.
270 Build and install at usr.bin/xinstall before the build.
271
272 20020319:
273 Raw IPv6 socket now makes strict checking for sa_family and sa_len
274 on send(2) operation. Be sure to have sbin/rtsol and usr.sbin/rtsold
275 newer than November 2001 when you upgrade the kernel.
276
277 20020311:
278 ssh configuration files were moved from /etc to /etc/ssh. Beware
279 if you restart your machine from remote. Note that sshd.conf needs
280 to be changed (due to the use of "/etc" inside).
281
282 20020223:
283 Users of the VAX port will need to rebuild and install gas
284 so it deal with the now present register prefix used in all
285 the VAX assembly files.
286
287 20020118:
288 ntpd user/group has been added. Need to hand add this in or builds
289 will break as mtree aborts early.
290
291 Add the following into /etc/group:
292
293 ntpd:*:15:
294
295 and the following to /etc/master.passwd (via vipw):
296
297 ntpd:*:15:15::0:0:Ntpd pseudo-user:/var/chroot/ntpd:/sbin/nologin
298
299 20011207:
300 If you're attempting to build a snapshot on sparc64 and are getting
301 reloc errors from the toolchain groff binary this means your native
302 toolchain has some broken C++ bits.
303
304 To fix:
305
306 Build a new toolchain (i.e. build.sh -t)
307 Use the new toolchain to build and install natively (i.e. /usr/lib)
308
309 gnu/lib/libgcc
310 gnu/lib/libstdc++
311
312 After this a snapshot will be able to be built.
313
314 20011201:
315 In order for a sparc64 build to work you must have a working awk. If
316 you've built and installed a system with the new toolchain up to this
317 point you do not have a working awk as its ability to do floating
318 point is broken.
319
320 To build:
321
322 remake and install gnu/lib/libgcc
323 remake and install gnu/usr.bin/gawk into /usr/bin (make sure it links
324 against the new libgcc.a)
325
326 20011128:
327 Kernel config information was changed to use defflag in
328 the various "files" files. Bug fixes to config(8) are
329 required in order for this to work properly. Make sure
330 to build and install in usr.sbin/config before attempting
331 to build a new kernel.
332
333 20011030:
334 libc/locale/wcstod.c now needs new lint(1). Update lint(1)
335 before building libc.
336
337 20011029:
338 The new document BUILDING.mdoc (view with nroff | more, or
339 see pre-generated .txt and .html versions) describes the build
340 procedure in great detail. BUILDING, and the USE_NEW_TOOLCHAIN
341 build process, are intended in the long run to replace this
342 manual update log.
343
344 Users building a USE_NEW_TOOLCHAIN system should read the
345 BUILDING document for caveats. Generally, BUILDING supersedes
346 UPDATING for these systems, as tool updating is taken care of
347 by the new build system.
348
349 20011028:
350 src/etc/Makefile now needs install to be able to handle
351 symlinks that point to nowhere. A bug in install that
352 prevented this was corrected.
353
354 Solution: update and reinstall usr.bin/xinstall
355 Better Solution: Use the new toolchain and it will just work
356 for you.
357
358 20011006:
359 /etc/mtree/NetBSD.dist has been updated to take advantage of
360 absolute path support added to mtree(8). Older mtree(8)s don't
361 understand the format.
362
363 Solution: update and reinstall usr.sbin/mtree
364
365 20011004:
366 Crunchgen has been updated to work via reach-over makefiles. Updating
367 is suggested before running a snapshot build
368
369 20010915:
370 The new "ubcperf" code committed by Chuck Silvers removed
371 a header file, uvm/uvm_vnode.h. There may be stale .depend
372 files that still reference this file.
373
374 Solution: "make cleandir && make dependall" in affected
375 directories.
376
377 20010803:
378 grep.info is now built from grep.texi using makeinfo. Since it
379 requires makeinfo v4.0, you need to install new texinfo before
380 building gnu/usr.bin/grep. To install new texinfo, please follow
381 the instruction described in 20010726 entry.
382
383 20010803:
384 (i386 only): i386 kernel now uses new instructions like
385 `fxsave' which old gas doesn't understand. To build the
386 kernel successfully, you need to build and install a new toolchain,
387 (i.e., build.sh -t) or (temporarily) comment out "options I686_CPU"
388 from your kernel configuration until you rebuild your userland.
389 See 20011029 above and BUILDING file in this directory for more information.
390 [updated 20020630 since i386 gas moved when USE_NEW_TOOLCHAIN enabled]
391
392 20010731:
393 Bootloader update on ELF platforms. DDB in kernels from before
394 this will be unable to read symbol tables provided by newer
395 bootloaders.
396
397 20010726:
398 Texinfo was updated to 4.0. To avoid failures when trying to
399 build the included texinfo files, do:
400
401 cd src/gnu/usr.bin/texinfo
402 make MKINFO=no dependall install
403
404 20010718:
405 Enabled correct .init/.fini processing in crt0. The way this
406 was done was to change a -I directive to cc(1), which means
407 make(1) will have a stale dependency (it will be checking the
408 timestamp on the wrong "dot_init.h").
409
410 The symptom you will see is that new programs die with SIGSEGV
411 if you have a stale dependency.
412
413 Solution: "make cleandir" in both lib/csu and libexec/ld.elf_so
414 before starting your build.
415
416 20010628:
417 A construct was added to uvm_page.h that uncovered a bug
418 in lint(1). If you get a warning/error about a non-portable
419 bitfield, update your lint(1) before proceeding.
420
421 20010226:
422 Added named user/group to system. Need to hand add this in or builds
423 will break as mtree aborts early.
424
425 To work around add by hand:
426
427 named:*:14:
428
429 to /etc/group and add:
430
431 named:*:14:14::0:0:Named pseudo-user:/var/named:/sbin/nologin
432
433 to master.passwd (use vipw for instance if doing by hand).
434
435 Now a make build should progress.
436
437 20010219:
438 get/setprogname() added. Any hostprogs that may use this will need
439 to be bootstrapped manually until the host system is current.
440
441 Known problems: sys/arch/macppc/stand/fixcoff
442 usr.sbin/config (adding -DMAKE_BOOTSTRAP to
443 CFLAGS and rebuilding should work)
444 usr.sbin/mdsetimage - Build a static copy if
445 building a snapshot before fully bootstrapped.
446
447 20010204:
448 prepare the code to compile with stricter gcc flags. in
449 particular start eliminating redundant declarations. Yacc
450 needs to be installed before make build.
451
452 20010114:
453 introduce .if commands(target) in make(1). You need to
454 bring everything up-to-date first, then without installing
455 anything make and install in usr.bin/make, then proceed
456 with make build.
457
458 20010101:
459 bsd.subdir.mk committed 20001230 had a bug which caused
460 afterinstall targets to run too soon; update again.
461
462 20001230:
463 New share/mk files needed to support .WAIT in SUBDIR variables.
464 If you get make errors,
465 (cd share/mk; make install)
466 Also, PRINTOBJDIR has changed and is now used more heavily.
467
468 20001019:
469 The `ca' device driver has been replaced by `ld'; although the
470 major and minor numbers haven't changed, you should update your /dev
471 directory.
472
473 20000929:
474 The following make directives are obsoleted.
475 MKCRYPTO_RSA NOCRYPTO_RSA NOCRYPTO_RC5 NOCRYPTO_IDEA
476 By default, RSA is built into libcrypto. IDEA and RC5 will not be
477 built into libcrypto. By using MKCRYPTO_{RC5,IDEA}, you can build
478 additional library libcrypto_{idea,rc5}.
479
480
481 Hints for a more successful build:
482 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
483 Build a new kernel first:
484 This makes sure that any new system calls or features
485 expected by the new userland will be present. This
486 helps to avoid critical errors when upgrading.
487 Use object directories:
488 This helps to keep stale object
489 files from polluting the build if a Makefile "forgets"
490 about one. It also makes it easier to clean up after
491 a build. It's also necessary if you want to use the
492 same source tree for multiple machines.
493 To use object directories:
494 a) cd /usr/src ; make cleandir
495 b) Add "OBJMACHINE=yes" to /etc/mk.conf
496 c) Add "MKOBJDIRS=yes" to /etc/mk.conf
497 d) cd /usr/src ; make build
498 Note that running "make obj" in a directory will create
499 in obj.$MACHINE directory.
500 Build to a DESTDIR:
501 This helps to keep old
502 installed files (especially libraries) from interfering
503 with the new build.
504 To build to a DESTDIR, set the DESTDIR environment
505 variable before running make build. It should be set to
506 the pathname of an initially empty directory.
507 Problems: you might need to update critical utilities
508 without using DESTDIR since nothing is executed
509 from what is installed in DESTDIR.
510 (See critical utils, below)
511 Build often:
512 This keeps critical utilities current enough to not choke
513 on any other part of the source tree that depends on up to
514 date functionality.
515
516 What to do if things don't work:
517 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
518 When things don't work there is usually a few things that commonly
519 should be done.
520 1) make includes
521 This should be done automatically by make build.
522 2) cd share/mk && make install
523 Again, automatically done by make build.
524
525 Failsafe rebuild of a small part of the tree:
526 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
527 To make sure you rebuild something correctly you want to do
528 something like the following:
529 1) Make sure the includes and .mk files are up to date.
530 2) Make sure any program used to build the particular
531 utility is up to date. (yacc, lex, etc...)
532 3) cd ...path/to/util...
533 make cleandir
534 rm ...all obj directories...
535 make cleandir # yes, again
536 make obj
537 make depend && make
538
539 Failsafe rebuild of the entire tree:
540 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
541 If you really want to make sure the source tree is clean and
542 ready for a build try the following. Note that sourcing /etc/mk.conf
543 (a make(1) Makefile) in this manner is not right, and will not work
544 for anyone who uses any make(1) features in /etc/mk.conf.
545
546 ---cut here---
547 #!/bin/sh
548 . /etc/mk.conf
549
550 if [ -z $NETBSDSRCDIR ] ; then
551 NETBSDSRCDIR=/usr/src
552 fi
553 if [ \! -d $NETBSDSRCDIR ] ; then
554 echo Unable to find sources
555 exit 1
556 fi
557 find $NETBSDSRCDIR -name \*.o -o -name obj.\* -o -name obj -exec rm \{\} \;
558
559 if [ -z $BSDOBJDIR ] ; then
560 BSDOBJDIR=/usr/obj
561 fi
562 if [ -d $BSDOBJDIR ] ; then
563 rm -rf $BSDOBJDIR
564 fi
565
566 cd $NETBSDSRCDIR && make cleandir
567
568 ---cut here---
569
570 Critical utilities:
571 ^^^^^^^^^^^^^^^^^^^
572 gnu/usr.bin/egcs
573 usr.bin/compile_et
574 usr.bin/make
575 usr.bin/yacc
576 usr.bin/lex
577 usr.bin/xlint
578 usr.sbin/config
579
580 Other problems and possible solutions:
581 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
582 Symptom:Unreasonable compiler errors.
583 Fix: Rebuild gnu/usr.bin/egcs
584
585 Symptom:Complaints involving a Makefile.
586 Fix: Rebuild usr.bin/make:
587 cd usr.bin/make && make && make install
588 Or, a failsafe method if that doesn't work:
589 cd usr.bin/make && cc *.c */*.c -I . -o make && mv make /usr/bin
590
591 Fix: Make sure .mk files are up to date.
592 cd share/mk && make install
593
594 Symptom:Kernel `config' fails to configure any kernel, including GENERIC.
595 Fix: Rebuild usr.sbin/config
596
597 Symptom:
598 Fix: Rebuild usr.bin/yacc
599
600 Symptom:
601 Fix: Rebuild usr.bin/lex
602
603 Symptom:
604 Fix: rm /usr/lib/libbfd.a
605
606 Symptom:Obsolete intermediate files are used during compilation
607 Fix: Try the following sequence of commands in the directory in question.
608 make cleandir; rm `make print-objdir`; make cleandir; make obj
609 (If you built the tree without "make obj" in the past, obsolete files
610 may remain. The command tries to clean everything up)
611
612 Symptom:.../sysinst/run.c:xx: warning: initialization from incompatible pointer type
613 Fix: Rebuild and install usr.bin/menuc
614
615 Symptom:mklocale not found during build in share/locale/ctype
616 Fix: Build and install usr.bin/mklocale
617
618 Symptom:undefined reference to `__assert13' or `__unsetenv13'
619 Fix: Rebuild and install lib/libc
620
621 Symptom:usr.sbin/config fails to build.
622 Fix: Try building with -DMAKE_BOOTSTRAP added to CFLAGS in Makefile.
623
624 Symptom:undefined reference to `getprogname' or `setprogname'
625 Fix: Rebuild and install lib/libc
626
627 Symptom:lint does not understand the '-X' option
628 Fix: May need to build & install libs with NOLINT=1 before rebuilding lint
629