UPDATING revision 1.308
1$NetBSD: UPDATING,v 1.308 2020/06/01 14:46:04 christos 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 14Sections are marked with "^^^^^". After the section on "Recent changes" 15are several sections containing more general information. 16 17See also: BUILDING, build.sh, Makefile. 18 19Recent changes: 20^^^^^^^^^^^^^^^ 21 2220200601: 23 Due to a mistake in LIBISPRIVATE handling, .so libraries were 24 created in the build directories and need cleaning. 25 2620200311: 27 GCC 8 ports will need cleaning in src/tools/gcc and 28 src/external/gpl3/gcc due to GCC 8.4 update. 29 3020191118: 31 More architectures were switched to gcc8: 32 i386, ia64 powerpc64, sparc, sparc64, arm 33 The same comments as in 20191022 apply. 34 3520191112: 36 The LLVM update requires a clean rebuild for all architectures using 37 LLVM during the tools build phase (i386, amd64, aarch64). 38 3920191022: 40 Ports amd64 and aarch64 switched to GCC 8.3 by default. 41 In-place ("expert mode", build.sh -E) builds are not supported 42 when going from a GCC 7 userland to GCC 8. Do a regular 43 build to a different DESTDIR (or preferably: build.sh -U) at least 44 once and install sets, or download comp.{tar.xz,tgz} from the 45 daily builds and install that before doing the next in-place build. 46 4720191001: 48 GCC 8.3 was imported. Builds of src/tools/gcc may fail if 49 old builds with GCC 7 output now uses GCC 8. Clean this 50 directory, and also clean src/external/gpl3/gcc. 51 5220190903: 53 Files with names that coincide with existing files' names on 54 case-insensitive file systems were inadvertently committed, for 55 radeon GPU firmware. We cannot mark these as obsolete for 56 postinstall to fix, so if you updated src since 2019-08-26, and 57 ran build.sh distribution or ran build.sh release, you must 58 manually delete the following files in your DESTDIR (which is 59 usually $OBJDIR/destir.$ARCH), or from / if you have installed 60 them: 61 62 /libdata/firmware/radeon/bonaire_ce.bin 63 /libdata/firmware/radeon/bonaire_mc.bin 64 /libdata/firmware/radeon/bonaire_me.bin 65 /libdata/firmware/radeon/bonaire_mec.bin 66 /libdata/firmware/radeon/bonaire_pfp.bin 67 /libdata/firmware/radeon/bonaire_rlc.bin 68 /libdata/firmware/radeon/bonaire_sdma.bin 69 /libdata/firmware/radeon/bonaire_smc.bin 70 /libdata/firmware/radeon/bonaire_uvd.bin 71 /libdata/firmware/radeon/hainan_ce.bin 72 /libdata/firmware/radeon/hainan_mc.bin 73 /libdata/firmware/radeon/hainan_me.bin 74 /libdata/firmware/radeon/hainan_pfp.bin 75 /libdata/firmware/radeon/hainan_rlc.bin 76 /libdata/firmware/radeon/hainan_smc.bin 77 /libdata/firmware/radeon/hawaii_ce.bin 78 /libdata/firmware/radeon/hawaii_mc.bin 79 /libdata/firmware/radeon/hawaii_me.bin 80 /libdata/firmware/radeon/hawaii_mec.bin 81 /libdata/firmware/radeon/hawaii_pfp.bin 82 /libdata/firmware/radeon/hawaii_rlc.bin 83 /libdata/firmware/radeon/hawaii_sdma.bin 84 /libdata/firmware/radeon/hawaii_smc.bin 85 /libdata/firmware/radeon/kabini_ce.bin 86 /libdata/firmware/radeon/kabini_me.bin 87 /libdata/firmware/radeon/kabini_mec.bin 88 /libdata/firmware/radeon/kabini_pfp.bin 89 /libdata/firmware/radeon/kabini_rlc.bin 90 /libdata/firmware/radeon/kabini_sdma.bin 91 /libdata/firmware/radeon/kaveri_ce.bin 92 /libdata/firmware/radeon/kaveri_me.bin 93 /libdata/firmware/radeon/kaveri_mec.bin 94 /libdata/firmware/radeon/kaveri_mec2.bin 95 /libdata/firmware/radeon/kaveri_pfp.bin 96 /libdata/firmware/radeon/kaveri_rlc.bin 97 /libdata/firmware/radeon/kaveri_sdma.bin 98 /libdata/firmware/radeon/mullins_ce.bin 99 /libdata/firmware/radeon/mullins_me.bin 100 /libdata/firmware/radeon/mullins_mec.bin 101 /libdata/firmware/radeon/mullins_pfp.bin 102 /libdata/firmware/radeon/mullins_rlc.bin 103 /libdata/firmware/radeon/mullins_sdma.bin 104 /libdata/firmware/radeon/oland_ce.bin 105 /libdata/firmware/radeon/oland_mc.bin 106 /libdata/firmware/radeon/oland_me.bin 107 /libdata/firmware/radeon/oland_pfp.bin 108 /libdata/firmware/radeon/oland_rlc.bin 109 /libdata/firmware/radeon/oland_smc.bin 110 /libdata/firmware/radeon/pitcairn_ce.bin 111 /libdata/firmware/radeon/pitcairn_mc.bin 112 /libdata/firmware/radeon/pitcairn_me.bin 113 /libdata/firmware/radeon/pitcairn_pfp.bin 114 /libdata/firmware/radeon/pitcairn_rlc.bin 115 /libdata/firmware/radeon/pitcairn_smc.bin 116 /libdata/firmware/radeon/tahiti_ce.bin 117 /libdata/firmware/radeon/tahiti_mc.bin 118 /libdata/firmware/radeon/tahiti_me.bin 119 /libdata/firmware/radeon/tahiti_pfp.bin 120 /libdata/firmware/radeon/tahiti_rlc.bin 121 /libdata/firmware/radeon/tahiti_smc.bin 122 /libdata/firmware/radeon/verde_ce.bin 123 /libdata/firmware/radeon/verde_mc.bin 124 /libdata/firmware/radeon/verde_me.bin 125 /libdata/firmware/radeon/verde_pfp.bin 126 /libdata/firmware/radeon/verde_rlc.bin 127 /libdata/firmware/radeon/verde_smc.bin 128 129 We will re-import these radeon firmware images another way 130 later. 131 13220190727: 133 The uefi bootloader has gained tftp support and needs a clean 134 build. If you do update builds, manually clean its object 135 directory by something like: 136 cd sys/arch/i386/stand/efiboot && make clean 137 13820190723: 139 The jemalloc allocator in libc is now build without extended 140 debugging (for performance reasons). In update builds make sure 141 to rebuild it completly, by removing all affected object files, 142 including compat builds, something like: 143 cd /usr/obj && find . -type d -name jemalloc|xargs rm -rf 144 14520190207: 146 GCC 7 switched for many ports. Update builds are likely to fail. 147 14820180924: 149 A newer OpenSSL version has been imported. If you are doing 150 update builds, make sure to remove all old obj dirs, like: 151 cd /usr/obj && find . -type d -name openssl | xargs rm -rf 152 15320180717: 154 On aarch64 int64_t and related types have changed from long long 155 to long. This requires recompiling all C++ binaries. 156 15720180713: 158 On amd64 and i386 static binaries are now build position 159 independend. This requires recompilation of all object 160 files used to create the crunched /rescue binary. 161 Clean the rescue directory in your obj directory before 162 doing an update build, otherwise linking will fail. 163 16420180414: 165 Existing binutils was migrated to binutils.old. Manual 166 removal of tools/binutils objects directory may be required 167 to fix tools build failure. 168 16920180311: 170 bdftopcf was updated and may need cleaning in the 171 src/external/mit/xorg/tools/bdftopcf subdirectory if there are 172 link errors. 173 17420180212: 175 between OpenSSL and GCC updates, many things may fail to build. 176 any failure that looks like GCC or openssl is best handled by 177 a clean destdir and objdir. Full cleandir and destdir deletion 178 is recommended if build failures occur. 179 18020171225: 181 removal of the vadvise syscall requires manual removal of all 182 associated files from the libc build object directory (including 183 the .depend files) - a command like: 184 cd $OBJ && find . -type d -name libc | xargs rm -rf 185 For architectures that support multiple "compat" binary targets, 186 you'll need to cleanup both the regular libc directory and the 187 compat ones (the above command will do that). 188 18920171010: 190 a change to the build structure of external/bsd/acpica/bin/iasl 191 means that its objdir (or *.d and .depend at least) might need 192 to be manually removed - or a build done once without -u. 193 19420170822: 195 a new version of GMP has been imported and probably 196 will break parts of builds related to themselves or GCC, both 197 in the tools and the native section. Remove all GCC, GMP, MPFR 198 and MPC objdirs or build once without -u. 199 20020170816: 201 a new version of MPFR and MPC have been imported and probably 202 will break parts of builds related to themselves or GCC, both 203 in the tools and the native section. Remove all GCC, GMP, MPFR 204 and MPC objdirs or build once without -u. 205 20620170402: 207 a new version of dhcpcd has been imported, which does not support 208 update builds from the previous version. Remove your 209 external/bsd/dhcpcd object dir or build once without -u. 210 21120170211: 212 a new terminfo database has been imported. 213 The structure of it has changed slightly from prior versions and 214 an updated tic tool is required. 215 If you build.sh, don't use -u 216 21720170207: 218 various arch dependent libc/exect.S files were removed 219 Either remove the obj directories (lib/libc and compat/amd64/i386/lib 220 if it exists) or do a clean build. 221 (This is a bug in the make system, it should be corrected without 222 human intervention, but isn't.) 223 22420170104: 225 xinput build options have changed. 226 Remove the obj directory (external/mit/xorg/bin/xinput) 227 if you build.sh -u 228 22920170103: 230 a new version of flex has been imported. 231 Remove the file from obj (external/bsd/flex) 232 if you build.sh -u 233 23420161014: 235 a new version of OpenSSL has been imported. 236 Remove the files from obj (crypto/external/bsd/openssl) 237 if you build.sh -u 238 23920161009: 240 a new version of dhcpcd has been imported with slightly changed 241 build infrastructure. When doing a build.sh -u this requires 242 pruning the external/bsd/dhcpcd objdir. 243 24420160914: 245 i386, amd64, shark, ofppc and macppc have joined shark and x68k 246 ports in using xorg-server 1.18. This requires a clean destdir 247 and a clean objdir. 248 24920160527: 250 i386 needs a full cleandir or objdir deletion because PIE has 251 been enabled. (see the amd64 entry two down for further info) 252 25320160418: 254 libedit needs manual removal of all autogenerated files since 255 some of them are not autogenerated anymore. Remember that there 256 might be two copies of libedit if your platform builds "compat". 257 25820160410: 259 amd64 needs full "make cleandir" or deletion of objdir now that 260 PIE has been enabled for amd64. PIE, or position-independent 261 executables, means all code, including executables and not just 262 shared libraries, is position-independent and hence able to be 263 relocated by ASLR, address space layout randomization. 264 265 The change was made in Makefile variables for compiler and 266 linker flags, for which make(1) does not record dependencies, 267 hence it is unable to detect that all .o files need rebuilding. 268 269 Partial rebuilds with some modified source files will likely 270 fail when linking executables, since the linker refuses to mix 271 position-independent code with position-dependent code in 272 position-independent executables: 273 274 .../x86_64--netbsd/bin/ld: foo.o: relocation R_X86_64_32 against `...' cannot be used when making a shared object; recompile with -fPIC 275 27620160401: 277 Ports switching to GCC 5.3 will need a full "make cleandir". 278 Some people have found that cleandir is not sufficient, so if 279 in doubt delete the entire object directory tree for gcc. 280 28120160306: 282 NetBSD's regexp implementation is now part of libnbcompat. 283 Nblex, nbm4, nbpax, nbsed use it and they may crash on 284 non-NetBSD hosts if linked with stale object files produced 285 while they included a non-NetBSD regex.h. 286 In any case, you should "make cleandir" at least these tools 287 before updating your toolchain. 288 28920160125: 290 Dtrace has been enabled by default on some architectures. 291 When doing an update build, make sure to clean the etc/mtree 292 object directory before starting the build - otherwise the 293 needed directories in destdir will not be created. 294 An easy way to do this is: 295 cd src/etc/mtree && $TOOLDIR/bin/nbmake-$arch cleandir 296 29720150818: 298 New acpica requires "make cleandir" in src/external/bsd/acpica 299 again. 300 30120150413: 302 New acpica requires "make cleandir" and reinstalling yacc 303 in /usr/src/external/bsd/byacc and /usr/src/tools/yacc and 304 also "make cleandir" in /usr/src/external/bsd/acpica. 305 30620150404: 307 Lint changes require a full rebuild of the tool, so make 308 sure to build without -u option to build.sh, or manually 309 do a make cleandir in src/tools/lint1 and 310 src/usr.bin/xlint. 311 31220150310: 313 Improvements to openssl for arm mean that update builds of 314 the openssl libraries will fail. A make cleandir in 315 external/bsd/openssl/lib is needed 316 31720141026: 318 A mishap during the import of pppd may cause your corruption 319 in your cvs directory if you happened to do a cvs update 320 during a short period of time. To fix, just remove the 321 directory src/external/bsd/ppp/dist/pppd completely 322 and let cvs restore it on next update. 323 32420140721: 325 The src/external/mit/lua/src directory was accidentally created 326 and then deleted in the CVS repository. If you get errors like 327 328 cvs [update aborted]: cannot open directory 329 /cvsroot/src/external/mit/lua/src: No such file or directory 330 331 then delete your local copy of that directory tree and try again. 332 33320140530: 334 ARM eABI switched to DWARF based exception handling. This requires 335 rebuilding all C++ code. It is strongly advised to do a clean build. 336 33720140131: 338 The new compiler_rt/libc integration moved a few things. It is strongly 339 advised to do a clean build. At least lib/libc, the compat version(s) 340 of libc, libkern, rump and the kernels need to be cleaned. 341 34220131227: 343 1. The new ntpd runs in a restricted mode to prevent amplification 344 attacks. If you need ntpdc to work you need to explicitly enable 345 mode7 in your config file. Make sure you put the necessary restrict 346 statements to avoid being exposed. 347 2. strncat has moved from lib/libc to common/lib/libc; you might need 348 to make clean in libc 349 35020131129: 351 The GMP sources were updated, and builds will likely fail without 352 cleaning their build trees for both tools and in-tree, like below. 353 35420131128: 355 The MPC and MPFR sources were updated, and builds may require their 356 tools and in-tree directories cleaned for successful updates. 357 35820130605: 359 The kernel option FAST_IPSEC no longer exists, it's been renamed 360 to IPSEC (and the older IPSEC version removed). 361 36220130605: 363 Previous freetype installations eroneously installed private 364 header files. If you are building against a non-empty $DESTDIR, 365 please remove ${DESTDIR}//usr/X11R7/include/freetype2/freetype/. 366 36720130531: 368 The xdm update may cause build failure due to xdm.man being 369 in the obj tree. Make sure to ensure any like this: 370 nbmake: nbmake: don't know how to make xdm.man. Stop 371 is fixed by deleting the xdm.man in the obj tree. 372 37320130530: 374 Updates of many xsrc packages will leave old .pc files around. 375 Best to clean out the xsrc objdir entirely before rebuilds. 376 37720130301: 378 The removal of netiso requires manual removal of /usr/include/netiso 379 prior to the build and make cleandir in /usr/src/usr.bin/{ktruss,kdump} 380 38120120726: 382 The update of OpenSSL requires cleaning both the OpenSSL build 383 directory and DESTDIR. *Even non-update builds require cleaning 384 DESTDIR.* Builds done without taking these steps may fail, or in 385 some cases may succeed and install broken OpenSSL libraries that 386 cause third-party software to link incorrectly and/or crash. 387 38820120507: 389 The database schema for makemandb was changed. You will 390 need to update the database using 'makemandb -f' or wait 391 for the next weekly run to fix it. 392 39320120319: 394 sys/conf/Makefile.kern.inc has been modified to adjust the 395 size of db_symtab automatically. You need to update dbsym in 396 your $TOOLDIR to build kernels with options SYMTAB_SPACE. If 397 you don't want this behavior, add AUTO_SYMTAB_SPACE=no to your 398 mk.conf. 399 40020120216: 401 Default for MKCATPAGES changed to NO. Update builds will fail 402 unless DESTDIR is cleaned manually. If you built between 20120207 403 and 20120216, daily and weekly could have created an unreadable 404 /var/db/man.db index for apropos. Running makemandb -f or 405 the next run of weekly will fix it. 406 40720111227: 408 If you built between 20111225 and 20111227 you need to remove 409 /usr/lib/libpam.so.4* and /usr/lib/security/*.so.4, since the 410 bump has been reverted. 411 41220111125: 413 The "rnd" pseudodevice has been added to sys/conf/std, which 414 means it should no longer be explicitly listed in kernel 415 configuration files. The line "pseudo-device rnd" should be 416 removed from any custom kernel config files users may have. 417 41820111119: 419 A problem with the datastructures used by the rndctl(8) 420 utility (pointers in datastructures in an array, making 32->64 421 bit compatibility very painful) has been fixed in a 422 non-backwards-compatible way. If you replace your kernel, 423 replace your rndctl executable too. 424 42520111001: 426 the prop_*_send_syscall() functions from proplib(3) have been 427 changed and their new version is not backward compatible with the old 428 one. So ensure that all consumers of these functions (currently: 429 quota2 code and its tests) are updated together with the new lib. 430 43120110817: 432 sparc has been changed to use GCC 4.5.3, so any objdir or 433 DESTDIR for them should be deleted before updating. 434 43520110806: 436 i386 and amd64 have been changed to use GCC 4.5.3, so any 437 objdir or DESTDIR for them should be deleted before updating. 438 43920110805: 440 The update to GCC 4.5.3 requires a non-trivial portion of 441 the tree to be cleaned. Best to delete both objdir and 442 DESTDIR before running this update. So far, only the 443 sparc64, mips and powerpc platforms have changed. 444 44520110803: 446 The layout of external/public-domain/xz has changed. To do an 447 update build you will have to remove the contents of the OBJDIR 448 for external/public-domain/xz/bin by hand as the xz entry there 449 is now a directory. 450 45120110410: 452 The configuration of src/tools/gcc has changed. To do an 453 update build you have to clean both tools/binutils and 454 tools/gcc by hand. 455 45620110328: 457 Building the Xorg binary was moved into a subdirectory to fix 458 ordering issues with "make all". It may be necessary to remove 459 the OBJDIR for external/mit/xorg/server/xorg-server/hw/xfree86 460 if your update build fails, as the "Xorg" entry there is now a 461 directory. 462 46320110121: 464 Assembler files no longer use -traditional-cpp. This can break 465 the build of individual parts of the tree. This is handled 466 correctly by build.sh. Manual builds have to update /usr/share/mk 467 and re-run config(1) for any kernel configurations as needed. 468 46920101217: 470 The tcpdump(8) program was changed to drop privileges and chroot(2) 471 by default. It may be necessary to manually update passwd(5) and 472 group(5) in order to make the program work with existing setups. 473 47420101125: 475 The latest changes to setenv(3) dissallow setting environment 476 variables with names that contain '='. Revision 1.18 of env.c 477 assumed that this was allowed. Installing a new libc with an 478 old copy of /usr/bin/env causes env x=1 printenv | grep x= to 479 break which affects the autoconf tests for dependency finding, 480 so building gcc will end up printing: 481 checking dependency style of gcc... none 482 configure: error: no usable dependency style found 483 Fix it by rebuilding and re-installing env. 484 48520101119: 486 Recent Xorg updates in xsrc/external/mit/ may cause various build 487 or run-time problems. Delete your entire DESTDIR and OBJDIR if you 488 have any build problems with xsrc, or problems with mismatched 489 versions between xorg-server and drivers. 490 49120100604: 492 The update of ATF to 0.9 causes old tests written in shell to fail 493 unless they are rebuilt. If you are building with MKUPDATE=yes, 494 you need to clean the src/external/bsd/atf/tests/ and the src/tests/ 495 trees by hand. 496 49720100522: 498 Recent Xorg updates in xsrc/external/mit/ will cause various build 499 problems. Delete your entire DESTDIR and OBJDIR if you have any 500 build problems with xsrc. 501 50220100522: 503 private section of <ctype.h> was splitted, and now mklocale(1) 504 include ctype_local.h, so you have to make cleandir in tools/mklocale. 505 50620100520: 507 The location of the xkb compiled descriptions has changed. Please 508 remove usr/X11R7/lib/X11/xkb/compiled from your $DESTDIR. 509 51020100222: 511 The shared objects file extension has been changed from .so to 512 .pico, in order to avoid conflicts with shared libraries names 513 libXX.so. All now stale regular .so files can be removed from 514 your object directories. 515 51620100204: 517 The termcap database has been removed from the sources, 518 but has not been marked obsolete so it is not removed 519 from the system when upgrading. 520 As such, you will need to remove them from your object 521 and destination directories. 522 52320091101: 524 After updating, it may be necessary to make the 'cleandir' 525 target in src/tools/yacc/ and in src/usr.bin/yacc/ before a 526 'build.sh -u tools' or 'build.sh -u distribution'. Ditto 527 src/tools/lex/ and src/usr.bin/lex/. 528 52920091001: 530 On amd64 you must rebuild tools (to get the new binutils) 531 before building a kernel, or the build fails on cpufunc.S. 532 53320091001: 534 An error will create a ./usr/X11R7/lib/X11/xkb/compiled/xkb 535 symlink, failing the build. Delete the link, and the subdir 536 it is in, and retry your build. 537 53820090718: 539 libc build changed so that strchr() provides the extra entry 540 point for index(). Update build of libc.a (and libc_pic.a) 541 may fail because the archive contains the unwanted index.o. 542 (Similarly for strrchr() and rindex().) 543 54420090709: 545 Native Xorg was upgraded again. Builds will probably fail again 546 without a clean objdir, at least for src/external/mit/xorg. 547 54820090616: 549 Native Xorg was upgraded. Builds will need a clean objdir for 550 src/external/mit/xorg. Upgrading a system from sets will not 551 work properly yet as the /usr/X11R7/lib/X11/xkb/symbols/pc 552 subdirectory has been changed into a file, and this needs to 553 be manually "rm -r"'ed before installing xbase.tgz. 554 55520090501: 556 Several new functions were added to string.h/libc, and this 557 can cause autoconf problems during the tool build for people 558 who fail to clean out their tools objects properly. If you 559 note messages about stpcpy, stpncpy or strnlen accompanying a 560 failure during the tool build, clean out all your tools 561 objects and start again. 562 56320090325: 564 The i386 port was switched to i486 default toolchain. This requires 565 cleaning your src/tools directory and $TOOLDIR and rebuilding them. 566 56720090126: 568 The __posix_fadvise50 system call changed assembly stub type. You 569 need to 'rm -f __posix_fadvise50.*' in the libc build directory 570 to avoid using the old assembly stub. 571 57220090202: 573 pkg_install now depends on the pkgdb cache for automatic conflict 574 detection. It is recommented to rebuild the cache with 575 ``pkg_admin rebuild''. 576 57720090110: 578 time_t and dev_t have been bumped to 64 bit quantities. To upgrade: 579 1. Make sure your kernel has COMPAT_50 in it. Build and install. 580 This is needed even in the MODULAR kernel because there is 581 conditionally compiled code in rtsock.c. 582 2. make sure build.sh completes and the binaries in a chroot work 583 before installing. 584 3. If you don't use build.sh and you build directly to root, and 585 your build breaks in the middle, don't despair. Make sure headers 586 are installed properly, and start building libraries first libc 587 and libutil, install them and then continue building all the 588 libraries in src/lib and src/gnu/lib and install them. Once 589 the new libraries are installed, you can restart the build. 590 4. If you compile packages and you notice link time warnings, 591 rebuild the required packages to update their shared libraries. 592 Any package you rebuild will require rebuilding all the packages 593 that depend on it. 594 5. Next time you run pwd_mkdb with the new binary, the file 595 will be upgraded and it will not be backwards compatible. 596 6. The utmpx/wtmpx files (/var/run/utmpx and /var/log/wtmpx, see 597 lastlogx(5)) have been versioned, and there is a heuristic 598 for utmp. You are better off removing the old files after 599 upgrading. The automated clearing of /var/run during 600 boot, and the automated rotating of files in /var/log by 601 newsyslog(8), may mean that you do not have to remove the 602 files manually. 603 7. The optional accounting file (/var/account/acct, see 604 accton(8)) has not been versioned, and will need to be 605 removed. The automatic rotation of the accounting file by 606 /etc/daily limits the bad consequences of failure to remove 607 the file. 608 8. Application software that writes time_t to binary files on 609 disk will break or need attention. Most notably: if you are 610 using PostgreSQL < 8.4, you need to dump your databases, 611 rebuild PostgreSQL with the new time_t, then restore. 612 61320081219: 614 config(1) has been updated, and one of the files it creates - 615 swapnetbsd.o - has changed format. You need to rebuild config 616 (done automatically by build.sh) and then you need to rerun 617 config on all kernel configuration files before rebuilding those 618 kernels. 619 62020081205: 621 If you build with MKX11=no, you should remove /etc/rc.d/xdm and 622 /etc/rc.d/xfs from DESTDIR because those files were moved to the xetc 623 set and will appear as extra files for MKX11=no update builds. 624 62520081122: 626 On i386, various kernel options(4) in GENERIC including 627 file systems have been disabled and moved into kernel modules. 628 Before trying a new GENERIC kernel, you have to prepare the 629 following files as well as a new GENERIC kernel: 630 631 - build and install kernel modules from src/sys/modules 632 633 - install the latest bootloader, which will load a module 634 for the file system from which the kernel is loaded automatically 635 636 If you have to load your kernel from a file system which is not of 637 the same type as the root file system, you have to load the necessary 638 file system module manually on the boot prompt or in the boot.cfg file. 639 64020080827: 641 If you built and installed a libc from sources between 642 2008/08/20 and 2008/08/26 you got a broken strtouq(3) 643 which results in false errors reported by lint(1). 644 Since this breaks the libc build itself, manual help is 645 needed -- lint must be disabled temporarily, e.g.: 646 $ (cd lib/libc && make MKLINT=no dependall install) 647 64820080813: 649 MKDEBUG build was broken because the .depend files did not know 650 about .go files. You need to remove all .depend files and rebuild. 651 65220080802: 653 A regression in binary compatibility for pthread_mutex_t has 654 been fixed. Unfortunately, the price is breaking compatibility 655 for -current. 656 657 Threaded programs (using libpthread) and C++ programs (using 658 libstdc++) compiled after 20070907 and before 20080802 need to 659 be recompiled. 660 661 One way to find affected pkgsrc packages: 662 663 $ grep REQUIRES=/usr/lib/libpthread /var/db/pkg/*/+BUILD_INFO 664 $ grep REQUIRES=/usr/lib/libstdc++ /var/db/pkg/*/+BUILD_INFO 665 66620080731: 667 WAPBL (metadata journaling support) has been added, but at this 668 time isn't backwards compatible with pre-WAPBL aware kernels 669 and userland (fsck_ffs in particular). Please make sure you 670 don't use a journaled filesystem with an older kernel/userland, 671 especially an uncleanly mounted journaled filesystem. WAPBL 672 also requires the super block to be in the UFS2 format. You 673 can use fsck_ffs -c 4 to update the superblock format. 674 67520080721: 676 Assembler warnings are now fatal if $WARNS>0 and $NOGCCERROR 677 isn't defined. 678 67920080531: 680 The ioctl number of DRVSUSPENDDEV command on /dev/drvctl changed 681 from 125 (conflicted with DRVCTLCOMMAND) to 129. The drvctl(8) 682 utility needs to be rebuilt and reinstalled as older binaries 683 won't work correctly. The following sequence of commands: 684 685 $ (cd sys/sys/ && nbmake-$arch includes) 686 $ (cd sbin/drvctl/ && nbmake-$arch clean) 687 $ (cd sbin/drvctl/ && nbmake-$arch all) 688 689 leaves new drvctl utility in sbin/drvctl build directory. 690 69120080503: 692 The <bsd.lib.mk> variable MKPRIVATELIB was renamed to LIBISPRIVATE. 693 69420080521: 695 For a while, unprivileged UPDATE builds would fail to 696 succeed at the checkflist stage, complaining that 697 ${DESTDIR}/stand/<arch>/ did not exist. A fix for this 698 problem was committed to share/mk/bsd.kmodule.mk, revision 1.9. 699 If you already hit this problem, update the .mk file, 700 remove ${DESTDIR}/stand/<arch>, and re-run the build. 701 70220080303: 703 Linker warnings are now fatal if $WARNS>0. 704 70520080126: 706 The posix_fadvise system call has been changed from an assembly 707 stub, to a c file that calls an assembly stub. You need to 708 'rm -f posix_fadvise.* .depend' in the libc build directory to 709 avoid using the old assembly stub. 710 71120071209: 712 The acpiec(4) driver has been split into two attachments. If you 713 get ACPI errors before the attachment, please update your kernel 714 configuration file appropriately or see GENERIC for more details. 715 71620071115: 717 The it(4) driver has been renamed to itesio(4) and the old port 718 argument specified in the kernel configuration file is not valid 719 anymore. The itesio(4) driver now uses the Super I/O address port 720 rather than the EC address port. Please update your kernel 721 configuration file appropriately or see GENERIC for more details. 722 72320071028: 724 The pccons(4) driver has been removed from the NetBSD/shark port. 725 You need to update any custom kernel configuration file you have 726 to remove any references to pccons (which includes removing the 727 now useless XSERVER option) and replace them with the correct 728 entries for the wscons driver. See the GENERIC configuration file 729 for more details. 730 73120070913: 732 A latent bug in dhclient/dhcpd that caused it to be unable to 733 enumerate interfaces was fixed. The bug began to cause 734 problems after 20070911 when the kernel's SIOCGIFCONF 735 implementation was repaired. From 20070529 to 20070911 racoon 736 could not enumerate interfaces. (These are noted because 737 normal kernel/userspace version matching hygiene is not 738 sufficient to avoid this problem.) Ensure that both kernel 739 and userland are from after 20070913. 740 74120070703: 742 nbinstall has been renamed ${MACHINE_GNU_ARCH}-install. It 743 calls the target-specific strip program, and the logic to pass 744 down STRIP from make has been removed. This requires a 745 re-installation of tools. 746 74720070422: 748 The way OS emulations lookup filenames inside the emulation root 749 has been changed. Rather than modify the pathname (and copy back 750 to userspace) namei() and lookup() directly check the emulation 751 root. One side effect is that absolute symlinks inside the emulated 752 root file system will be relative to that file system - unless they 753 start /../ this is useful when the emulated root is a real install 754 that has such links. 755 This might affect symlinks that have been added to reference outside 756 the emulated root. 757 75820070412: 759 The pckbc driver on sgimips IP32 has been removed. Use macekbc 760 instead. See the GENERIC32_IP3x kernel configuration for an 761 example. 762 76320070319: 764 src/lib/libc/Makefile revision 1.129 broke libc and ld.elf_so 765 on many platforms due to incorrect flags settings. If you 766 updated and built after about 20070315, do "nbmake-$arch 767 cleandir" in src/lib/libc and src/libexec/ld.elf_so to force a 768 rebuild of object files that might have been built 769 incorrectly, and ensure that you have at least 770 src/lib/libc/Makefile 1.130. 771 77220070210: 773 src/sys/sys/{sa.h,savar.h} were removed. 774 find ${OBJDIR} \( -name .depend -o -name '*.d' \) -print \ 775 | xargs egrep -l '/sa.h|/savar.h' | xargs rm 776 will allow dependencies on those files to get get rebuilt 777 77820070209: 779 The threading model was changed when the newlock2 branch 780 was merged to NetBSD-current. If you boot with a new 781 kernel (version 4.99.10), then you also need a new pthread 782 library (/usr/lib/libpthread.so.0.7). If you boot with 783 an old kernel, then you need the old pthread library 784 (/usr/lib/libpthread.so.0.6). Provided you keep the kernel and 785 the pthread library in sync, old threaded applications should 786 continue to work with an old or new kernel. Note that named(8) 787 is the only threaded application in the base system. 788 78920061214: 790 Following the move of string_to_flags() and flags_to_string() 791 from the bin/ls/ sources to libutil, users doing UPDATE builds 792 will need to do a "make cleandir" in 793 tools/mtree/, tools/makefs/, tools/binstall/, tools/pax/, 794 bin/pax/, bin/ls/, usr.sbin/mtree/, usr.sbin/makefs/, 795 usr.bin/xinstall/, libexec/ftpd/, rescue/, as well 796 as the installation images in distrib/ 797 in order to excise stale references to the old stat_flags.h header 798 file in the ls sources -- stat_flags.h has been removed. 799 80020061108: 801 The configure script used in the src/tools/gcc compiler has been 802 changed to indicate that our libc has ssp support built-in and 803 does not depend on -lssp and -lssp-nonshared. You'll need to 804 make clean in src/tools/gcc first to rebuild the compiler. 805 80620061009: 807 The sysctl variables net.inet{,6}.tcp{,6}.newreno are no longer 808 available. Use net.inet{,6}.tcp{,6}.congctl.selected instead. 809 81020060814: 811 The vt, vidcconsole, kbd, and rpckbd drivers on acorn32 have been 812 withdrawn. Use vidcvideo and pckbd instead. See the GENERIC 813 kernel configuration for an example. X servers from the last 814 few years should cope. 815 81620060703: 817 MPACPI is no more. We always configure PCI interrupts using ACPI 818 if we have an ACPI kernel. The option MPACPI_SCANPCI has been renamed 819 to ACPI_SCANPCI. Thanks to work from fvdl. 820 82120060627: 822 socket(2) has changed, and its system call has been versioned. 823 For userlands with the old version of socket(2), make sure that 824 your kernel has 'options COMPAT_30' set, or else 'bad system call' 825 errors will result. 826 827Hints for a more successful build: 828^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 829 Use build.sh, but do not use its "expert mode": 830 This will automatically build the tools in the 831 correct order, and it will keep the tools and the 832 new build products from interfering with the running 833 system. This will allow you to ignore most of the 834 other advice in this file. 835 Build a new kernel first: 836 This makes sure that any new system calls or features 837 expected by the new userland will be present. This 838 helps to avoid critical errors when upgrading. 839 Use object directories: 840 This helps to keep stale object 841 files from polluting the build if a Makefile "forgets" 842 about one. It also makes it easier to clean up after 843 a build. It's also necessary if you want to use the 844 same source tree for multiple machines. 845 To use object directories with build.sh: 846 a) invoke build.sh with the "-M" or "-O" options. 847 To use object directories without using build.sh: 848 a) cd /usr/src ; make cleandir 849 b) Add "OBJMACHINE=yes" to /etc/mk.conf 850 c) Add "MKOBJDIRS=yes" to /etc/mk.conf 851 d) cd /usr/src ; make build 852 Note that running "make obj" in a directory will create 853 in obj.$MACHINE directory. 854 Build to a DESTDIR: 855 This helps to keep old installed files (especially libraries) 856 from interfering with the new build. 857 To build to a DESTDIR with build.sh, use the "-D" option. 858 To build to a DESTDIR without using build.sh, set the DESTDIR 859 environment variable before running make build. It should be 860 set to the pathname of an initially empty directory. 861 Problems: if you do not use build.sh, you might need to 862 update critical utilities without using DESTDIR since 863 nothing is executed from what is installed in DESTDIR. 864 (See critical utils, below.) 865 Build often: 866 This keeps critical utilities current enough to not choke 867 on any other part of the source tree that depends on up to 868 date functionality. If you use build.sh, you should not have 869 this problem. 870 871What to do if things don't work: 872^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 873When things don't work there are usually a few things that commonly 874should be done. 875 1) make includes 876 This should be done automatically by make build. 877 2) cd share/mk && make install 878 Again, automatically done by make build. 879 880Failsafe rebuild of a small part of the tree: 881^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 882To make sure you rebuild something correctly you want to do 883something like the following: 884 1) Make sure the includes and .mk files are up to date. 885 2) Make sure any program used to build the particular 886 utility is up to date. (yacc, lex, etc...) 887 3) cd ...path/to/util... 888 make cleandir 889 rm ...all obj directories... 890 make cleandir # yes, again 891 make obj 892 make depend && make 893 894Failsafe rebuild of the entire tree: 895^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 896If you really want to make sure the source tree is clean and 897ready for a build try the following. Note that sourcing /etc/mk.conf 898(a make(1) Makefile) in this manner is not right, and will not work 899for anyone who uses any make(1) features in /etc/mk.conf. 900 901---cut here--- 902#!/bin/sh 903. /etc/mk.conf 904 905if [ -z $NETBSDSRCDIR ] ; then 906 NETBSDSRCDIR=/usr/src 907fi 908if [ \! -d $NETBSDSRCDIR ] ; then 909 echo Unable to find sources 910 exit 1 911fi 912find $NETBSDSRCDIR -name \*.o -o -name obj.\* -o -name obj -exec rm \{\} \; 913 914if [ -z $BSDOBJDIR ] ; then 915 BSDOBJDIR=/usr/obj 916fi 917if [ -d $BSDOBJDIR ] ; then 918 rm -rf $BSDOBJDIR 919fi 920 921cd $NETBSDSRCDIR && make cleandir 922 923---cut here--- 924 925Critical utilities: 926^^^^^^^^^^^^^^^^^^^ 927 usr.bin/compile_et 928 usr.bin/make 929 usr.bin/yacc 930 usr.bin/lex 931 usr.bin/xlint 932 usr.bin/config 933 934Other problems and possible solutions: 935^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 936Symptom:Complaints involving a Makefile. 937Fix: Rebuild usr.bin/make: 938 cd usr.bin/make && make && make install 939 Or, a failsafe method if that doesn't work: 940 cd usr.bin/make && cc *.c */*.c -I . -o make && mv make /usr/bin 941 942Fix: Make sure .mk files are up to date. 943 cd share/mk && make install 944 945Symptom:Kernel `config' fails to configure any kernel, including GENERIC. 946Fix: Rebuild usr.bin/config 947 948Symptom: 949Fix: Rebuild usr.bin/yacc 950 951Symptom: 952Fix: Rebuild usr.bin/lex 953 954Symptom: 955Fix: rm /usr/lib/libbfd.a 956 957Symptom:Obsolete intermediate files are used during compilation 958Fix: Try the following sequence of commands in the directory in question. 959 make cleandir; rm `make print-objdir`; make cleandir; make obj 960 (If you built the tree without "make obj" in the past, obsolete files 961 may remain. The command tries to clean everything up) 962 963Symptom:.../sysinst/run.c:xx: warning: initialization from incompatible 964 pointer type 965Fix: Rebuild and install usr.bin/menuc 966 967Symptom:mklocale not found during build in share/locale/ctype 968Fix: Build and install usr.bin/mklocale 969 970Symptom:undefined reference to `__assert13' or `__unsetenv13' 971Fix: Rebuild and install lib/libc 972 973Symptom:usr.bin/config fails to build. 974Fix: Try building with -DMAKE_BOOTSTRAP added to CFLAGS in Makefile. 975 976Symptom:undefined reference to `getprogname' or `setprogname' 977Fix: Rebuild and install lib/libc 978 979Symptom:lint does not understand the '-X' option 980Fix: May need to build & install libs with NOLINT=1 before rebuilding lint 981 982Symptom:Update build fails in src/tools/gcc complaining that a variable 983 (e.g. CPPFLAGS) has changed since the previous run. 984Fix: Run "nbmake-${ARCH} clean" in src/tools/gcc or do a clean build. 985 986Symptom:cvs [update aborted]: cannot open directory /cvsroot/src/...: 987 No such file or directory. 988Cause: If a directory is created by mistake, then it is sometimes 989 deleted from the CVS repository using administrative commands 990 that bypass the normal cvs access controls. If your cvs working tree 991 contains references to a directory that has been deleted on the 992 server in this way, then "cvs update" reports this error. 993Fix: Recursively delete the affected directory from your working tree 994 and try the update again. 995