UPDATING revision 1.235
1$NetBSD: UPDATING,v 1.235 2012/02/15 23:32:27 joerg Exp $ 2 3This file (UPDATING) is intended to be a brief reference to recent 4changes that might cause problems in the build process, and a guide for 5what to do if something doesn't work. 6 7For a more detailed description of the recommended way to build NetBSD 8using build.sh, see the BUILDING file. 9 10Note that much of the advice in this UPDATING file was written before 11build.sh existed. Nevertheless, the advice here may be useful for 12working around specific problems with build.sh. 13 14See also: BUILDING, build.sh, Makefile. 15 16Recent changes: 17^^^^^^^^^^^^^^^ 18 1920120216: 20 Default for MKCATPAGES changed to NO. Update builds will fail 21 unless DESTDIR is cleaned manually. If you built between 20120207 22 and 20120216, daily and weekly could have created an unreable 23 /var/db/man.db index for apropos. Running makemandb -f or 24 the next run of weekly will fix it. 25 2620111227: 27 If you built between 20111225 and 20111227 you need to remove 28 /usr/lib/libpam.so.4* and /usr/lib/security/*.so.4, since the 29 bump has been reverted. 30 3120111125: 32 The "rnd" pseudodevice has been added to sys/conf/std, which 33 means it should no longer be explicitly listed in kernel 34 configuration files. The line "pseudo-device rnd" should be 35 removed from any custom kernel config files users may have. 36 3720111119: 38 A problem with the datastructures used by the rndctl(8) 39 utility (pointers in datastructures in an array, making 32->64 40 bit compatibility very painful) has been fixed in a 41 non-backwards-compatible way. If you replace your kernel, 42 replace your rndctl executable too. 43 4420111001: 45 the prop_*_send_syscall() functions from proplib(3) have been 46 changed and their new version is not backward compatible with the old 47 one. So ensure that all consumers of these functions (currently: 48 quota2 code and its tests) are updated together with the new lib. 49 5020110817: 51 sparc has been changed to use GCC 4.5.3, so any objdir or 52 DESTDIR for them should be deleted before updating. 53 5420110806: 55 i386 and amd64 have been changed to use GCC 4.5.3, so any 56 objdir or DESTDIR for them should be deleted before updating. 57 5820110805: 59 The update to GCC 4.5.3 requires a non-trivial portion of 60 the tree to be cleaned. Best to delete both objdir and 61 DESTDIR before running this update. So far, only the 62 sparc64, mips and powerpc platforms have changed. 63 6420110803: 65 The layout of external/public-domain/xz has changed. To do an 66 update build you will have to remove the contents of the OBJDIR 67 for external/public-domain/xz/bin by hand as the xz entry there 68 is now a directory. 69 7020110410: 71 The configuration of src/tools/gcc has changed. To do an 72 update build you have to clean both tools/binutils and 73 tools/gcc by hand. 74 7520110328: 76 Building the Xorg binary was moved into a subdirectory to fix 77 ordering issues with "make all". It may be necessary to remove 78 the OBJDIR for external/mit/xorg/server/xorg-server/hw/xfree86 79 if your update build fails, as the "Xorg" entry there is now a 80 directory. 81 8220110121: 83 Assembler files no longer use -traditional-cpp. This can break 84 the build of individual parts of the tree. This is handled 85 correctly by build.sh. Manual builds have to update /usr/share/mk 86 and re-run config(1) for any kernel configurations as needed. 87 8820101217: 89 The tcpdump(8) program was changed to drop privileges and chroot(2) 90 by default. It may be necessary to manually update passwd(5) and 91 group(5) in order to make the program work with existing setups. 92 9320101125: 94 The latest changes to setenv(3) dissallow setting environment 95 variables with names that contain '='. Revision 1.18 of env.c 96 assumed that this was allowed. Installing a new libc with an 97 old copy of /usr/bin/env causes env x=1 printenv | grep x= to 98 break which affects the autoconf tests for dependency finding, 99 so building gcc will end up printing: 100 checking dependency style of gcc... none 101 configure: error: no usable dependency style found 102 Fix it by rebuilding and re-installing env. 103 10420101119: 105 Recent Xorg updates in xsrc/external/mit/ may cause various build 106 or run-time problems. Delete your entire DESTDIR and OBJDIR if you 107 have any build problems with xsrc, or problems with mismatched 108 versions between xorg-server and drivers. 109 11020100604: 111 The update of ATF to 0.9 causes old tests written in shell to fail 112 unless they are rebuilt. If you are building with MKUPDATE=yes, 113 you need to clean the src/external/bsd/atf/tests/ and the src/tests/ 114 trees by hand. 115 11620100522: 117 Recent Xorg updates in xsrc/external/mit/ will cause various build 118 problems. Delete your entire DESTDIR and OBJDIR if you have any 119 build problems with xsrc. 120 12120100522: 122 private section of <ctype.h> was splitted, and now mklocale(1) 123 include ctype_local.h, so you have to make cleandir in tools/mklocale. 124 12520100520: 126 The location of the xkb compiled descriptions has changed. Please 127 remove usr/X11R7/lib/X11/xkb/compiled from your $DESTDIR. 128 12920100222: 130 The shared objects file extension has been changed from .so to 131 .pico, in order to avoid conflicts with shared libraries names 132 libXX.so. All now stale regular .so files can be removed from 133 your object directories. 134 13520100204: 136 The termcap database has been removed from the sources, 137 but has not been marked obsolete so it is not removed 138 from the system when upgrading. 139 As such, you will need to remove them from your object 140 and destination directories. 141 14220091101: 143 After updating, it may be necessary to make the 'cleandir' 144 target in src/tools/yacc/ and in src/usr.bin/yacc/ before a 145 'build.sh -u tools' or 'build.sh -u distribution'. Ditto 146 src/tools/lex/ and src/usr.bin/lex/. 147 14820091001: 149 On amd64 you must rebuild tools (to get the new binutils) 150 before building a kernel, or the build fails on cpufunc.S. 151 15220091001: 153 An error will create a ./usr/X11R7/lib/X11/xkb/compiled/xkb 154 symlink, failing the build. Delete the link, and the subdir 155 it is in, and retry your build. 156 15720090718: 158 libc build changed so that strchr() provides the extra entry 159 point for index(). Update build of libc.a (and libc_pic.a) 160 may fail because the archive contains the unwanted index.o. 161 (Similarly for strrchr() and rindex().) 162 16320090709: 164 Native Xorg was upgraded again. Builds will probably fail again 165 without a clean objdir, at least for src/external/mit/xorg. 166 16720090616: 168 Native Xorg was upgraded. Builds will need a clean objdir for 169 src/external/mit/xorg. Upgrading a system from sets will not 170 work properly yet as the /usr/X11R7/lib/X11/xkb/symbols/pc 171 subdirectory has been changed into a file, and this needs to 172 be manually "rm -r"'ed before installing xbase.tgz. 173 17420090501: 175 Several new functions were added to string.h/libc, and this 176 can cause autoconf problems during the tool build for people 177 who fail to clean out their tools objects properly. If you 178 note messages about stpcpy, stpncpy or strnlen accompanying a 179 failure during the tool build, clean out all your tools 180 objects and start again. 181 18220090325: 183 The i386 port was switched to i486 default toolchain. This requires 184 cleaning your src/tools directory and $TOOLDIR and rebuilding them. 185 18620090126: 187 The __posix_fadvise50 system call changed assembly stub type. You 188 need to 'rm -f __posix_fadvise50.*' in the libc build directory 189 to avoid using the old assembly stub. 190 19120090202: 192 pkg_install now depends on the pkgdb cache for automatic conflict 193 detection. It is recommented to rebuild the cache with 194 ``pkg_admin rebuild''. 195 19620090110: 197 time_t and dev_t have been bumped to 64 bit quantities. To upgrade: 198 1. Make sure your kernel has COMPAT_50 in it. Build and install. 199 This is needed even in the MODULAR kernel because there is 200 conditionally compiled code in rtsock.c. 201 2. make sure build.sh completes and the binaries in a chroot work 202 before installing. 203 3. If you don't use build.sh and you build directly to root, and 204 your build breaks in the middle, don't despair. Make sure headers 205 are installed properly, and start building libraries first libc 206 and libutil, install them and then continue building all the 207 libraries in src/lib and src/gnu/lib and install them. Once 208 the new libraries are installed, you can restart the build. 209 4. If you compile packages and you notice link time warnings, 210 rebuild the required packages to update their shared libraries. 211 Any package you rebuild will require rebuilding all the packages 212 that depend on it. 213 5. Next time you run pwd_mkdb with the new binary, the file 214 will be upgraded and it will not be backwards compatible. 215 6. The utmpx/wtmpx files (/var/run/utmpx and /var/log/wtmpx, see 216 lastlogx(5)) have been versioned, and there is a heuristic 217 for utmp. You are better off removing the old files after 218 upgrading. The automated clearing of /var/run during 219 boot, and the automated rotating of files in /var/log by 220 newsyslog(8), may mean that you do not have to remove the 221 files manually. 222 7. The optional accounting file (/var/account/acct, see 223 accton(8)) has not been versioned, and will need to be 224 removed. The automatic rotation of the accounting file by 225 /etc/daily limits the bad consequences of failure to remove 226 the file. 227 8. Application software that writes time_t to binary files on 228 disk will break or need attention. Most notably: if you are 229 using PostgreSQL < 8.4, you need to dump your databases, 230 rebuild PostgreSQL with the new time_t, then restore. 231 23220081219: 233 config(1) has been updated, and one of the files it creates - 234 swapnetbsd.o - has changed format. You need to rebuild config 235 (done automatically by build.sh) and then you need to rerun 236 config on all kernel configuration files before rebuilding those 237 kernels. 238 23920081205: 240 If you build with MKX11=no, you should remove /etc/rc.d/xdm and 241 /etc/rc.d/xfs from DESTDIR because those files were moved to the xetc 242 set and will appear as extra files for MKX11=no update builds. 243 24420081122: 245 On i386, various kernel options(4) in GENERIC including 246 file systems have been disabled and moved into kernel modules. 247 Before trying a new GENERIC kernel, you have to prepare the 248 following files as well as a new GENERIC kernel: 249 250 - build and install kernel modules from src/sys/modules 251 252 - install the latest bootloader, which will load a module 253 for the file system from which the kernel is loaded automatically 254 255 If you have to load your kernel from a file system which is not of 256 the same type as the root file system, you have to load the necessary 257 file system module manually on the boot prompt or in the boot.cfg file. 258 25920080827: 260 If you built and installed a libc from sources between 261 2008/08/20 and 2008/08/26 you got a broken strtouq(3) 262 which results in false errors reported by lint(1). 263 Since this breaks the libc build itself, manual help is 264 needed -- lint must be disabled temporarily, e.g.: 265 $ (cd lib/libc && make MKLINT=no dependall install) 266 26720080813: 268 MKDEBUG build was broken because the .depend files did not know 269 about .go files. You need to remove all .depend files and rebuild. 270 27120080802: 272 A regression in binary compatibility for pthread_mutex_t has 273 been fixed. Unfortunately, the price is breaking compatibility 274 for -current. 275 276 Threaded programs (using libpthread) and C++ programs (using 277 libstdc++) compiled after 20070907 and before 20080802 need to 278 be recompiled. 279 280 One way to find affected pkgsrc packages: 281 282 $ grep REQUIRES=/usr/lib/libpthread /var/db/pkg/*/+BUILD_INFO 283 $ grep REQUIRES=/usr/lib/libstdc++ /var/db/pkg/*/+BUILD_INFO 284 28520080731: 286 WAPBL (metadata journaling support) has been added, but at this 287 time isn't backwards compatible with pre-WAPBL aware kernels 288 and userland (fsck_ffs in particular). Please make sure you 289 don't use a journaled filesystem with an older kernel/userland, 290 especially an uncleanly mounted journaled filesystem. WAPBL 291 also requires the super block to be in the UFS2 format. You 292 can use fsck_ffs -c 4 to update the superblock format. 293 29420080721: 295 Assembler warnings are now fatal if $WARNS>0 and $NOGCCERROR 296 isn't defined. 297 29820080531: 299 The ioctl number of DRVSUSPENDDEV command on /dev/drvctl changed 300 from 125 (conflicted with DRVCTLCOMMAND) to 129. The drvctl(8) 301 utility needs to be rebuilt and reinstalled as older binaries 302 won't work correctly. The following sequence of commands: 303 304 $ (cd sys/sys/ && nbmake-$arch includes) 305 $ (cd sbin/drvctl/ && nbmake-$arch clean) 306 $ (cd sbin/drvctl/ && nbmake-$arch all) 307 308 leaves new drvctl utility in sbin/drvctl build directory. 309 31020080503: 311 The <bsd.lib.mk> variable MKPRIVATELIB was renamed to LIBISPRIVATE. 312 31320080521: 314 For a while, unprivileged UPDATE builds would fail to 315 succeed at the checkflist stage, complaining that 316 ${DESTDIR}/stand/<arch>/ did not exist. A fix for this 317 problem was committed to share/mk/bsd.kmodule.mk, revision 1.9. 318 If you already hit this problem, update the .mk file, 319 remove ${DESTDIR}/stand/<arch>, and re-run the build. 320 32120080303: 322 Linker warnings are now fatal if $WARNS>0. 323 32420080126: 325 The posix_fadvise system call has been changed from an assembly 326 stub, to a c file that calls an assembly stub. You need to 327 'rm -f posix_fadvise.* .depend' in the libc build directory to 328 avoid using the old assembly stub. 329 33020071209: 331 The acpiec(4) driver has been split into two attachments. If you 332 get ACPI errors before the attachment, please update your kernel 333 configuration file appropriately or see GENERIC for more details. 334 33520071115: 336 The it(4) driver has been renamed to itesio(4) and the old port 337 argument specified in the kernel configuration file is not valid 338 anymore. The itesio(4) driver now uses the Super I/O address port 339 rather than the EC address port. Please update your kernel 340 configuration file appropriately or see GENERIC for more details. 341 34220071028: 343 The pccons(4) driver has been removed from the NetBSD/shark port. 344 You need to update any custom kernel configuration file you have 345 to remove any references to pccons (which includes removing the 346 now useless XSERVER option) and replace them with the correct 347 entries for the wscons driver. See the GENERIC configuration file 348 for more details. 349 35020070913: 351 A latent bug in dhclient/dhcpd that caused it to be unable to 352 enumerate interfaces was fixed. The bug began to cause 353 problems after 20070911 when the kernel's SIOCGIFCONF 354 implementation was repaired. From 20070529 to 20070911 racoon 355 could not enumerate interfaces. (These are noted because 356 normal kernel/userspace version matching hygiene is not 357 sufficient to avoid this problem.) Ensure that both kernel 358 and userland are from after 20070913. 359 36020070703: 361 nbinstall has been renamed ${MACHINE_GNU_ARCH}-install. It 362 calls the target-specific strip program, and the logic to pass 363 down STRIP from make has been removed. This requires a 364 re-installation of tools. 365 36620070422: 367 The way OS emulations lookup filenames inside the emulation root 368 has been changed. Rather than modify the pathname (and copy back 369 to userspace) namei() and lookup() directly check the emulation 370 root. One side effect is that absolute symlinks inside the emulated 371 root file system will be relative to that file system - unless they 372 start /../ this is useful when the emulated root is a real install 373 that has such links. 374 This might affect symlinks that have been added to reference outside 375 the emulated root. 376 37720070412: 378 The pckbc driver on sgimips IP32 has been removed. Use macekbc 379 instead. See the GENERIC32_IP3x kernel configuration for an 380 example. 381 38220070319: 383 src/lib/libc/Makefile revision 1.129 broke libc and ld.elf_so 384 on many platforms due to incorrect flags settings. If you 385 updated and built after about 20070315, do "nbmake-$arch 386 cleandir" in src/lib/libc and src/libexec/ld.elf_so to force a 387 rebuild of object files that might have been built 388 incorrectly, and ensure that you have at least 389 src/lib/libc/Makefile 1.130. 390 39120070210: 392 src/sys/sys/{sa.h,savar.h} were removed. 393 find ${OBJDIR} \( -name .depend -o -name '*.d' \) -print \ 394 | xargs egrep -l '/sa.h|/savar.h' | xargs rm 395 will allow dependencies on those files to get get rebuilt 396 39720070209: 398 The threading model was changed when the newlock2 branch 399 was merged to NetBSD-current. If you boot with a new 400 kernel (version 4.99.10), then you also need a new pthread 401 library (/usr/lib/libpthread.so.0.7). If you boot with 402 an old kernel, then you need the old pthread library 403 (/usr/lib/libpthread.so.0.6). Provided you keep the kernel and 404 the pthread library in sync, old threaded applications should 405 continue to work with an old or new kernel. Note that named(8) 406 is the only threaded application in the base system. 407 40820061214: 409 Following the move of string_to_flags() and flags_to_string() 410 from the bin/ls/ sources to libutil, users doing UPDATE builds 411 will need to do a "make cleandir" in 412 tools/mtree/, tools/makefs/, tools/binstall/, tools/pax/, 413 bin/pax/, bin/ls/, usr.sbin/mtree/, usr.sbin/makefs/, 414 usr.bin/xinstall/, libexec/ftpd/, rescue/, as well 415 as the installation images in distrib/ 416 in order to excise stale references to the old stat_flags.h header 417 file in the ls sources -- stat_flags.h has been removed. 418 41920061108: 420 The configure script used in the src/tools/gcc compiler has been 421 changed to indicate that our libc has ssp support built-in and 422 does not depend on -lssp and -lssp-nonshared. You'll need to 423 make clean in src/tools/gcc first to rebuild the compiler. 424 42520061009: 426 The sysctl variables net.inet{,6}.tcp{,6}.newreno are no longer 427 available. Use net.inet{,6}.tcp{,6}.congctl.selected instead. 428 42920060814: 430 The vt, vidcconsole, kbd, and rpckbd drivers on acorn32 have been 431 withdrawn. Use vidcvideo and pckbd instead. See the GENERIC 432 kernel configuration for an example. X servers from the last 433 few years should cope. 434 43520060703: 436 MPACPI is no more. We always configure PCI interrupts using ACPI 437 if we have an ACPI kernel. The option MPACPI_SCANPCI has been renamed 438 to ACPI_SCANPCI. Thanks to work from fvdl. 439 44020060627: 441 socket(2) has changed, and its system call has been versioned. 442 For userlands with the old version of socket(2), make sure that 443 your kernel has 'options COMPAT_30' set, or else 'bad system call' 444 errors will result. 445 446Hints for a more successful build: 447^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 448 Use build.sh, but do not use its "expert mode": 449 This will automatically build the tools in the 450 correct order, and it will keep the tools and the 451 new build products from interfering with the running 452 system. This will allow you to ignore most of the 453 other advice in this file. 454 Build a new kernel first: 455 This makes sure that any new system calls or features 456 expected by the new userland will be present. This 457 helps to avoid critical errors when upgrading. 458 Use object directories: 459 This helps to keep stale object 460 files from polluting the build if a Makefile "forgets" 461 about one. It also makes it easier to clean up after 462 a build. It's also necessary if you want to use the 463 same source tree for multiple machines. 464 To use object directories with build.sh: 465 a) invoke build.sh with the "-M" or "-O" options. 466 To use object directories without using build.sh: 467 a) cd /usr/src ; make cleandir 468 b) Add "OBJMACHINE=yes" to /etc/mk.conf 469 c) Add "MKOBJDIRS=yes" to /etc/mk.conf 470 d) cd /usr/src ; make build 471 Note that running "make obj" in a directory will create 472 in obj.$MACHINE directory. 473 Build to a DESTDIR: 474 This helps to keep old installed files (especially libraries) 475 from interfering with the new build. 476 To build to a DESTDIR with build.sh, use the "-D" option. 477 To build to a DESTDIR without using build.sh, set the DESTDIR 478 environment variable before running make build. It should be 479 set to the pathname of an initially empty directory. 480 Problems: if you do not use build.sh, you might need to 481 update critical utilities without using DESTDIR since 482 nothing is executed from what is installed in DESTDIR. 483 (See critical utils, below.) 484 Build often: 485 This keeps critical utilities current enough to not choke 486 on any other part of the source tree that depends on up to 487 date functionality. If you use build.sh, you should not have 488 this problem. 489 490What to do if things don't work: 491^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 492When things don't work there are usually a few things that commonly 493should be done. 494 1) make includes 495 This should be done automatically by make build. 496 2) cd share/mk && make install 497 Again, automatically done by make build. 498 499Failsafe rebuild of a small part of the tree: 500^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 501To make sure you rebuild something correctly you want to do 502something like the following: 503 1) Make sure the includes and .mk files are up to date. 504 2) Make sure any program used to build the particular 505 utility is up to date. (yacc, lex, etc...) 506 3) cd ...path/to/util... 507 make cleandir 508 rm ...all obj directories... 509 make cleandir # yes, again 510 make obj 511 make depend && make 512 513Failsafe rebuild of the entire tree: 514^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 515If you really want to make sure the source tree is clean and 516ready for a build try the following. Note that sourcing /etc/mk.conf 517(a make(1) Makefile) in this manner is not right, and will not work 518for anyone who uses any make(1) features in /etc/mk.conf. 519 520---cut here--- 521#!/bin/sh 522. /etc/mk.conf 523 524if [ -z $NETBSDSRCDIR ] ; then 525 NETBSDSRCDIR=/usr/src 526fi 527if [ \! -d $NETBSDSRCDIR ] ; then 528 echo Unable to find sources 529 exit 1 530fi 531find $NETBSDSRCDIR -name \*.o -o -name obj.\* -o -name obj -exec rm \{\} \; 532 533if [ -z $BSDOBJDIR ] ; then 534 BSDOBJDIR=/usr/obj 535fi 536if [ -d $BSDOBJDIR ] ; then 537 rm -rf $BSDOBJDIR 538fi 539 540cd $NETBSDSRCDIR && make cleandir 541 542---cut here--- 543 544Critical utilities: 545^^^^^^^^^^^^^^^^^^^ 546 usr.bin/compile_et 547 usr.bin/make 548 usr.bin/yacc 549 usr.bin/lex 550 usr.bin/xlint 551 usr.bin/config 552 553Other problems and possible solutions: 554^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 555Symptom:Complaints involving a Makefile. 556Fix: Rebuild usr.bin/make: 557 cd usr.bin/make && make && make install 558 Or, a failsafe method if that doesn't work: 559 cd usr.bin/make && cc *.c */*.c -I . -o make && mv make /usr/bin 560 561Fix: Make sure .mk files are up to date. 562 cd share/mk && make install 563 564Symptom:Kernel `config' fails to configure any kernel, including GENERIC. 565Fix: Rebuild usr.bin/config 566 567Symptom: 568Fix: Rebuild usr.bin/yacc 569 570Symptom: 571Fix: Rebuild usr.bin/lex 572 573Symptom: 574Fix: rm /usr/lib/libbfd.a 575 576Symptom:Obsolete intermediate files are used during compilation 577Fix: Try the following sequence of commands in the directory in question. 578 make cleandir; rm `make print-objdir`; make cleandir; make obj 579 (If you built the tree without "make obj" in the past, obsolete files 580 may remain. The command tries to clean everything up) 581 582Symptom:.../sysinst/run.c:xx: warning: initialization from incompatible 583 pointer type 584Fix: Rebuild and install usr.bin/menuc 585 586Symptom:mklocale not found during build in share/locale/ctype 587Fix: Build and install usr.bin/mklocale 588 589Symptom:undefined reference to `__assert13' or `__unsetenv13' 590Fix: Rebuild and install lib/libc 591 592Symptom:usr.bin/config fails to build. 593Fix: Try building with -DMAKE_BOOTSTRAP added to CFLAGS in Makefile. 594 595Symptom:undefined reference to `getprogname' or `setprogname' 596Fix: Rebuild and install lib/libc 597 598Symptom:lint does not understand the '-X' option 599Fix: May need to build & install libs with NOLINT=1 before rebuilding lint 600 601Symptom:Update build fails in src/tools/gcc complaining that a variable 602 (e.g. CPPFLAGS) has changed since the previous run. 603Fix: Run "nbmake-${ARCH} clean" in src/tools/gcc or do a clean build. 604