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