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