Home | History | Annotate | Line # | Download | only in src
UPDATING revision 1.170.6.2
      1 $NetBSD: UPDATING,v 1.170.6.2 2008/09/18 04:27:24 wrstuden Exp $
      2 
      3 This file (UPDATING) is intended to be a brief reference to recent
      4 changes that might cause problems in the build process, and a guide for
      5 what to do if something doesn't work.
      6 
      7 For a more detailed description of the recommended way to build NetBSD
      8 using build.sh, see the BUILDING file.
      9 
     10 Note that much of the advice in this UPDATING file was written before
     11 build.sh existed.  Nevertheless, the advice here may be useful for
     12 working around specific problems with build.sh.
     13 
     14 See also: BUILDING, build.sh, Makefile.
     15 
     16 Recent changes:
     17 ^^^^^^^^^^^^^^^
     18 
     19 
     20 20080827:
     21 	If you built and installed a libc from sources between
     22 	2008/08/20 and 2008/08/26 you got a broken strtouq(3)
     23 	which results in false errors reported by lint(1).
     24 	Since this breaks the libc build itself, manual help is
     25 	needed -- lint must be disabled temporarily, e.g:
     26 	  $ (cd lib/libc && make MKLINT=no dependall install)
     27 
     28 20080813:
     29 	MKDEBUG build was broken because the .depend files did not know
     30 	about .go files. You need to remove all .depend files and rebuild.
     31 
     32 20080731:
     33 	WAPBL (metadata journaling support) has been added, but at this
     34 	time isn't backwards compatible with pre-WAPBL aware kernels
     35 	and userland (fsck_ffs in particular).  Please make sure you
     36 	don't use a journaled filesystem with an older kernel/userland,
     37 	especially an uncleanly mounted journaled filesystem.  WAPBL
     38 	also requires the super block to be in the UFS2 format.  You
     39 	can use fsck_ffs -c 4 to update the superblock format.
     40 
     41 20080721:
     42 	Assembler warnings are now fatal if $WARNS>0 and $NOGCCERROR
     43 	isn't defined.
     44 
     45 20080531:
     46 	The ioctl number of DRVSUSPENDDEV command on /dev/drvctl changed 
     47 	from 125 (conflicted with DRVCTLCOMMAND) to 129. The drvctl(8)
     48 	utility needs to be rebuilt and reinstalled as older binaries
     49 	won't work correctly. The following sequence of commands:
     50 
     51 	  $ (cd sys/sys/ && nbmake-$arch includes)
     52 	  $ (cd sbin/drvctl/ && nbmake-$arch clean)
     53 	  $ (cd sbin/drvctl/ && nbmake-$arch all)
     54 
     55 	leaves new drvctl utility in sbin/drvctl build directory.
     56 
     57 20080503:
     58 	The <bsd.lib.mk> variable MKPRIVATELIB was renamed to LIBISPRIVATE.
     59 
     60 20080521:
     61 	For a while, unprivileged UPDATE builds would fail to
     62 	succeed at the checkflist stage, complaining that
     63 	${DESTDIR}/stand/<arch>/ did not exist.  A fix for this
     64 	problem was committed to share/mk/bsd.kmodule.mk, revision 1.9.
     65 	If you already hit this problem, update the .mk file,
     66 	remove ${DESTDIR}/stand/<arch>, and re-run the build.
     67 
     68 20080303:
     69 	Linker warnings are now fatal if $WARNS>0.
     70 
     71 20080126:
     72 	The posix_fadvise system call has been changed from an assembly
     73 	stub, to a c file that calls an assembly stub. You need to
     74 	'rm -f posix_fadvise.* .depend' in the libc build directory to
     75 	avoid using the old assembly stub.
     76 
     77 20071209:
     78 	The acpiec(4) driver has been split into two attachments. If you
     79 	get ACPI errors before the attachment, please update your kernel
     80 	configuration file appropriately or see GENERIC for more details.
     81 
     82 20071115:
     83 	The it(4) driver has been renamed to itesio(4) and the old port
     84 	argument specified in the kernel configuration file is not valid
     85 	anymore. The itesio(4) driver now uses the Super I/O address port
     86 	rather than the EC address port. Please update your kernel
     87 	configuration file appropriately or see GENERIC for more details.
     88 
     89 20071028:
     90 	The pccons(4) driver has been removed from the NetBSD/shark port.
     91 	You need to update any custom kernel configuration file you have
     92 	to remove any references to pccons (which includes removing the
     93 	now useless XSERVER option) and replace them with the correct
     94 	entries for the wscons driver.  See the GENERIC configuration file
     95 	for more details.
     96 
     97 20070913:
     98 	A latent bug in dhclient/dhcpd that caused it to be unable to
     99 	enumerate interfaces was fixed.  The bug began to cause
    100 	problems after 20070911 when the kernel's SIOCGIFCONF
    101 	implementation was repaired.  From 20070529 to 20070911 racoon
    102 	could not enumerate interfaces.  (These are noted because
    103 	normal kernel/userspace version matching hygiene is not
    104 	sufficient to avoid this problem.)  Ensure that both kernel
    105 	and userland are from after 20070913.
    106 
    107 20070703:
    108 	nbinstall has been renamed as it calls the target specific and
    109 	the logic to pass down STRIP from mk been removed.  This forces
    110 	a re-installation of tools.
    111 
    112 20070422:
    113 	The way OS emulations lookup filenames inside the emulation root
    114 	has been changed.  Rather than modify the pathname (and copy back
    115 	to userspace) namei() and lookup() directly check the emulation
    116 	root. One side effect is that absolute symlinks inside the emulated
    117 	root file system will be relative to that file system - unless they
    118 	start /../ this is useful when the emulated root is a real install
    119 	that has such links.
    120 	This might affect symlinks that have been added to reference outside
    121 	the emulated root.
    122 
    123 20070412:
    124 	The pckbc driver on sgimips IP32 has been removed. Use macekbc
    125 	instead. See the GENERIC32_IP3x kernel configuration for an
    126 	example.
    127 
    128 20070319:
    129         src/lib/libc/Makefile revision 1.129 broke libc and ld.elf_so
    130         on many platforms due to incorrect flags settings.  If you
    131         updated and built after about 20070315, do "nbmake-$arch
    132 	cleandir" in src/lib/libc and src/libexec/ld.elf_so to force a
    133 	rebuild of object files that might have been built
    134 	incorrectly, and ensure that you have at least
    135 	src/lib/libc/Makefile 1.130.
    136 
    137 20070210: 
    138         src/sys/sys/{sa.h,savar.h} were removed.
    139           find ${OBJDIR} \( -name .depend -o -name '*.d' \) -print \
    140               | xargs egrep -l '/sa.h|/savar.h' | xargs rm
    141         will allow dependencies on those files to get get rebuilt
    142 
    143 20070209:
    144         The threading model was changed when the newlock2 branch
    145         was merged to NetBSD-current.  If you boot with a new
    146         kernel (version 4.99.10), then you also need a new pthread
    147         library (/usr/lib/libpthread.so.0.7).  If you boot with
    148         an old kernel, then you need the old pthread library
    149         (/usr/lib/libpthread.so.0.6).  Provided you keep the kernel and
    150         the pthread library in sync, old threaded applications should
    151         continue to work with an old or new kernel.  Note that named(8)
    152 	is the only threaded application in the base system.
    153 
    154 20061214:
    155 	Following the move of string_to_flags() and flags_to_string()
    156 	from the bin/ls/ sources to libutil, users doing UPDATE builds
    157 	will need to do a "make cleandir" in
    158 		tools/mtree/, tools/makefs/, tools/binstall/, tools/pax/,
    159 		bin/pax/, bin/ls/, usr.sbin/mtree/, usr.sbin/makefs/,
    160 		usr.bin/xinstall/, libexec/ftpd/, rescue/, as well
    161 		as the installation images in distrib/
    162 	in order to excise stale references to the old stat_flags.h header
    163 	file in the ls sources -- stat_flags.h has been removed.
    164 
    165 20061108:
    166 	The configure script used in the src/tools/gcc compiler has been
    167 	changed to indicate that our libc has ssp support built-in and
    168 	does not depend on -lssp and -lssp-nonshared. You'll need to
    169 	make clean in src/tools/gcc first to rebuild the compiler.
    170 
    171 20061009:
    172 	The sysctl variables net.inet{,6}.tcp{,6}.newreno are no longer
    173 	available. Use net.inet{,6}.tcp{,6}.congctl.selected instead.
    174 
    175 20060814:
    176 	The vt, vidcconsole, kbd, and rpckbd drivers on acorn32 have been
    177 	withdrawn.  Use vidcvideo and pckbd instead.  See the GENERIC
    178 	kernel configuration for an example.  X servers from the last
    179 	few years should cope.
    180 
    181 20060703:
    182 	MPACPI is no more. We always configure PCI interrupts using ACPI
    183 	if we have an ACPI kernel. The option MPACPI_SCANPCI has been renamed
    184 	to ACPI_SCANPCI. Thanks to work from fvdl.
    185 
    186 20060627:
    187 	socket(2) has changed, and its system call has been versioned.
    188 	For userlands with the old version of socket(2), make sure that
    189 	your kernel has 'options COMPAT_30' set, or else 'bad system call'
    190 	errors will result.
    191 
    192 Hints for a more successful build:
    193 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    194     Use build.sh, but do not use its "expert mode":
    195 	This will automatically build the tools in the
    196 	   correct order, and it will keep the tools and the
    197 	   new build products from interfering with the running
    198 	   system.  This will allow you to ignore most of the
    199 	   other advice in this file.
    200     Build a new kernel first:
    201 	This makes sure that any new system calls or features
    202 	   expected by the new userland will be present.  This
    203 	   helps to avoid critical errors when upgrading.
    204     Use object directories:
    205 	This helps to keep stale object
    206 	   files from polluting the build if a Makefile "forgets"
    207 	   about one.  It also makes it easier to clean up after
    208 	   a build.  It's also necessary if you want to use the
    209 	   same source tree for multiple machines.
    210 	   To use object directories with build.sh:
    211 	    a) invoke build.sh with the "-M" or "-O" options.
    212 	   To use object directories without using build.sh:
    213 	    a) cd /usr/src ; make cleandir
    214 	    b) Add "OBJMACHINE=yes" to /etc/mk.conf
    215 	    c) Add "MKOBJDIRS=yes" to /etc/mk.conf
    216 	    d) cd /usr/src ; make build
    217 	   Note that running "make obj" in a directory will create
    218 	   in obj.$MACHINE directory.
    219     Build to a DESTDIR:
    220 	This helps to keep old installed files (especially libraries)
    221 	   from interfering with the new build.
    222 	   To build to a DESTDIR with build.sh, use the "-D" option.
    223 	   To build to a DESTDIR without using build.sh, set the DESTDIR
    224 	   environment variable before running make build.  It should be
    225 	   set to the pathname of an initially empty directory.
    226 	   Problems: if you do not use build.sh, you might need to
    227 		update critical utilities without using DESTDIR since
    228 		nothing is executed from what is installed in DESTDIR.
    229 		(See critical utils, below.)
    230     Build often:
    231 	This keeps critical utilities current enough to not choke
    232 	on any other part of the source tree that depends on up to
    233 	date functionality.  If you use build.sh, you should not have
    234 	this problem.
    235  
    236 What to do if things don't work:
    237 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    238 When things don't work there is usually a few things that commonly
    239 should be done.
    240     1)	make includes
    241 	This should be done automatically by make build.
    242     2)  cd share/mk && make install
    243 	Again, automatically done by make build.
    244 
    245 Failsafe rebuild of a small part of the tree:
    246 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    247 To make sure you rebuild something correctly you want to do
    248 something like the following:
    249     1)  Make sure the includes and .mk files are up to date.
    250     2)  Make sure any program used to build the particular
    251 	utility is up to date.  (yacc, lex, etc...)
    252     3)  cd ...path/to/util...
    253 	make cleandir
    254 	rm ...all obj directories...
    255 	make cleandir			# yes, again
    256 	make obj
    257 	make depend && make
    258 
    259 Failsafe rebuild of the entire tree:
    260 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    261 If you really want to make sure the source tree is clean and
    262 ready for a build try the following.  Note that sourcing /etc/mk.conf
    263 (a make(1) Makefile) in this manner is not right, and will not work
    264 for anyone who uses any make(1) features in /etc/mk.conf.
    265 
    266 ---cut here---
    267 #!/bin/sh
    268 . /etc/mk.conf
    269 
    270 if [ -z $NETBSDSRCDIR ] ; then
    271     NETBSDSRCDIR=/usr/src
    272 fi
    273 if [ \! -d $NETBSDSRCDIR ] ; then
    274     echo Unable to find sources
    275     exit 1
    276 fi
    277 find $NETBSDSRCDIR -name \*.o -o -name obj.\* -o -name obj -exec rm \{\} \;
    278 
    279 if [ -z $BSDOBJDIR ] ; then
    280     BSDOBJDIR=/usr/obj
    281 fi
    282 if [ -d $BSDOBJDIR ] ; then
    283     rm -rf $BSDOBJDIR
    284 fi
    285 
    286 cd $NETBSDSRCDIR && make cleandir
    287 
    288 ---cut here---
    289 
    290 Critical utilities:
    291 ^^^^^^^^^^^^^^^^^^^
    292 	usr.bin/compile_et
    293 	usr.bin/make
    294 	usr.bin/yacc
    295 	usr.bin/lex
    296 	usr.bin/xlint
    297 	usr.bin/config
    298 
    299 Other problems and possible solutions:
    300 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    301 Symptom:Complaints involving a Makefile.
    302 Fix:	Rebuild usr.bin/make:
    303 	cd usr.bin/make && make && make install
    304 	Or, a failsafe method if that doesn't work:
    305 	cd usr.bin/make && cc *.c */*.c -I . -o make && mv make /usr/bin
    306 
    307 Fix:	Make sure .mk files are up to date.
    308 	cd share/mk && make install
    309 
    310 Symptom:Kernel `config' fails to configure any kernel, including GENERIC.
    311 Fix:	Rebuild usr.bin/config
    312 
    313 Symptom:
    314 Fix:	Rebuild usr.bin/yacc
    315 
    316 Symptom:
    317 Fix:	Rebuild usr.bin/lex
    318 
    319 Symptom:
    320 Fix:	rm /usr/lib/libbfd.a
    321 
    322 Symptom:Obsolete intermediate files are used during compilation
    323 Fix:	Try the following sequence of commands in the directory in question.
    324 	make cleandir; rm `make print-objdir`; make cleandir; make obj
    325 	(If you built the tree without "make obj" in the past, obsolete files
    326 	may remain.  The command tries to clean everything up)
    327 
    328 Symptom:.../sysinst/run.c:xx: warning: initialization from incompatible pointer type
    329 Fix:	Rebuild and install usr.bin/menuc
    330 
    331 Symptom:mklocale not found during build in share/locale/ctype
    332 Fix:	Build and install usr.bin/mklocale
    333 
    334 Symptom:undefined reference to `__assert13' or `__unsetenv13'
    335 Fix:    Rebuild and install lib/libc
    336 
    337 Symptom:usr.bin/config fails to build.
    338 Fix:	Try building with -DMAKE_BOOTSTRAP added to CFLAGS in Makefile.
    339 
    340 Symptom:undefined reference to `getprogname' or `setprogname'
    341 Fix:    Rebuild and install lib/libc
    342 
    343 Symptom:lint does not understand the '-X' option
    344 Fix:    May need to build & install libs with NOLINT=1 before rebuilding lint
    345