1Updating Information for FreeBSD current users 2 3This file is maintained and copyrighted by M. Warner Losh 4<imp@village.org>. See end of file for further details. For commonly 5done items, please see the COMMON ITEMS: section later in the file. 6 7Items affecting the ports and packages system can be found in 8/usr/ports/UPDATING. Please read that file before running 9portupgrade. 10 11NOTE TO PEOPLE WHO THINK THAT FreeBSD 6.x IS SLOW: 12 FreeBSD 6.x has many debugging features turned on, in 13 both the kernel and userland. These features attempt to detect 14 incorrect use of system primitives, and encourage loud failure 15 through extra sanity checking and fail stop semantics. They 16 also substantially impact system performance. If you want to 17 do performance measurement, benchmarking, and optimization, 18 you'll want to turn them off. This includes various WITNESS- 19 related kernel options, INVARIANTS, malloc debugging flags 20 in userland, and various verbose features in the kernel. Many 21 developers choose to disable these features on build machines 22 to maximize performance. 23 2420050605: 25 if_bridge was added to the tree. This has changed struct ifnet. 26 Please recompile userland and all network related modules. 27 2820050603: 29 The n_net of a struct netent was changed to an uint32_t, and 30 1st argument of getnetbyaddr() was changed to an uint32_t, to 31 conform to POSIX-2001. These changes broke an ABI 32 compatibility on 64 bit architecture. With these changes, 33 shlib major of libpcap was bumped. You have to recompile 34 userland programs that use getnetbyaddr(3), getnetbyname(3), 35 getnetent(3) and/or libpcap on 64 bit architecture. 36 3720050528: 38 Kernel parsing of extra options on '#!' first lines of shell 39 scripts has changed. Lines with multiple options likely will 40 fail after this date. For full details, please see 41 http://people.freebsd.org/~gad/Updating-20050528.txt 42 4320050503: 44 The packet filter (pf) code has been updated to OpenBSD 3.7 45 Please note the changed anchor syntax and the fact that 46 authpf(8) now needs a mounted fdescfs(5) to function. 47 4820050415: 49 The NO_MIXED_MODE kernel option has been removed from the i386 50 amd64 platforms as its use has been superceded by the new local 51 APIC timer code. Any kernel config files containing this option 52 should be updated. 53 5420050227: 55 The on-disk format of LC_CTYPE files was changed to be machine 56 independent. Please make sure NOT to use NO_CLEAN buildworld 57 when crossing this point. 58 5920050225: 60 The ifi_epoch member of struct if_data has been changed to 61 contain the uptime at which the interface was created or the 62 statistics zeroed rather then the wall clock time because 63 wallclock time may go backwards. This should have no impact 64 unless an snmp implementation is using this value (I know of 65 none at this point.) 66 6720050224: 68 The acpi_perf and acpi_throttle drivers are now part of the 69 acpi(4) main module. They are no longer built separately. 70 7120050223: 72 The layout of struct image_params has changed. You have to 73 recompile all compatibility modules (linux, svr4, etc) for use 74 with the new kernel. 75 7620050223: 77 The p4tcc driver has been merged into cpufreq(4). This makes 78 "options CPU_ENABLE_TCC" obsolete. Please load cpufreq.ko or 79 compile in "device cpufreq" to restore this functionality. 80 8120050220: 82 The responsibility of recomputing the file system summary of 83 a SoftUpdates-enabled dirty volume has been transferred to the 84 background fsck. A rebuild of fsck(8) utility is recommended 85 if you have updated the kernel. 86 87 To get the old behavior (recompute file system summary at mount 88 time), you can set vfs.ffs.compute_summary_at_mount=1 before 89 mounting the new volume. 90 9120050206: 92 The cpufreq import is complete. As part of this, the sysctls for 93 acpi(4) throttling have been removed. The power_profile script 94 has been updated, so you can use performance/economy_cpu_freq in 95 rc.conf(5) to set AC on/offline cpu frequencies. 96 9720050206: 98 NG_VERSION has been increased. Recompiling kernel (or ng_socket.ko) 99 requires recompiling libnetgraph and userland netgraph utilities. 100 10120050114: 102 Support for abbreviated forms of a number of ipfw options is 103 now deprecated. Warnings are printed to stderr indicating the 104 correct full form when a match occurs. Some abbreviations may 105 be supported at a later date based on user feedback. To be 106 considered for support, abbreviations must be in use prior to 107 this commit and unlikely to be confused with current key words. 108 10920041221: 110 By a popular demand, a lot of NOFOO options were renamed 111 to NO_FOO (see bsd.compat.mk for a full list). The old 112 spellings are still supported, but will cause annoying 113 warnings on stderr. Make sure you upgrade properly (see 114 the COMMON ITEMS: section later in this file). 115 11620041219: 117 Auto-loading of ancillary wlan modules such as wlan_wep has 118 been temporarily disabled; you need to statically configure 119 the modules you need into your kernel or explicitly load them 120 prior to use. Specifically, if you intend to use WEP encryption 121 with an 802.11 device load/configure wlan_wep; if you want to 122 use WPA with the ath driver load/configure wlan_tkip, wlan_ccmp, 123 and wlan_xauth as required. 124 12520041213: 126 The behaviour of ppp(8) has changed slightly. If lqr is enabled 127 (``enable lqr''), older versions would revert to LCP ECHO mode on 128 negotiation failure. Now, ``enable echo'' is required for this 129 behaviour. The ppp version number has been bumped to 3.4.2 to 130 reflect the change. 131 13220041201: 133 The wlan support has been updated to split the crypto support 134 into separate modules. For static WEP you must configure the 135 wlan_wep module in your system or build and install the module 136 in place where it can be loaded (the kernel will auto-load 137 the module when a wep key is configured). 138 13920041201: 140 The ath driver has been updated to split the tx rate control 141 algorithm into a separate module. You need to include either 142 ath_rate_onoe or ath_rate_amrr when configuring the kernel. 143 14420041116: 145 Support for systems with an 80386 CPU has been removed. Please 146 use FreeBSD 5.x or earlier on systems with an 80386. 147 14820041110: 149 We have had a hack which would mount the root filesystem 150 R/W if the device were named 'md*'. As part of the vnode 151 work I'm doing I have had to remove this hack. People 152 building systems which use preloaded MD root filesystems 153 may need to insert a "/sbin/mount -u -o rw /dev/md0 /" in 154 their /etc/rc scripts. 155 15620041104: 157 FreeBSD 5.3 shipped here. 158 15920041102: 160 The size of struct tcpcb has changed again due to the removal 161 of RFC1644 T/TCP. You have to recompile userland programs that 162 read kmem for tcp sockets directly (netstat, sockstat, etc.) 163 16420041022: 165 The size of struct tcpcb has changed. You have to recompile 166 userland programs that read kmem for tcp sockets directly 167 (netstat, sockstat, etc.) 168 16920041016: 170 RELENG_5 branched here. For older entries, please see updating 171 in the RELENG_5 branch. 172 173COMMON ITEMS: 174 175 General Notes 176 ------------- 177 Avoid using make -j when upgrading. From time to time in the 178 past there have been problems using -j with buildworld and/or 179 installworld. This is especially true when upgrading between 180 "distant" versions (eg one that cross a major release boundary 181 or several minor releases, or when several months have passed 182 on the -current branch). 183 184 Sometimes, obscure build problems are the result of environment 185 poisoning. This can happen because the make utility reads its 186 environment when searching for values for global variables. 187 To run your build attempts in an "environmental clean room", 188 prefix all make commands with 'env -i '. See the env(1) manual 189 page for more details. 190 191 To build a kernel 192 ----------------- 193 If you are updating from a prior version of FreeBSD (even one just 194 a few days old), you should follow this procedure. With a 195 /usr/obj tree with a fresh buildworld, 196 make -DALWAYS_CHECK_MAKE buildkernel KERNCONF=YOUR_KERNEL_HERE 197 make -DALWAYS_CHECK_MAKE installkernel KERNCONF=YOUR_KERNEL_HERE 198 199 To test a kernel once 200 --------------------- 201 If you just want to boot a kernel once (because you are not sure 202 if it works, or if you want to boot a known bad kernel to provide 203 debugging information) run 204 make installkernel KERNCONF=YOUR_KERNEL_HERE KODIR=/boot/testkernel 205 nextboot -k testkernel 206 207 To just build a kernel when you know that it won't mess you up 208 -------------------------------------------------------------- 209 This assumes you are already running a 5.X system. Replace 210 ${arch} with the architecture of your machine (e.g. "i386", 211 "alpha", "amd64", "ia64", "pc98", "sparc64", etc). 212 213 cd src/sys/${arch}/conf 214 config KERNEL_NAME_HERE 215 cd ../compile/KERNEL_NAME_HERE 216 make depend 217 make 218 make install 219 220 If this fails, go to the "To build a kernel" section. 221 222 To rebuild everything and install it on the current system. 223 ----------------------------------------------------------- 224 # Note: sometimes if you are running current you gotta do more than 225 # is listed here if you are upgrading from a really old current. 226 227 <make sure you have good level 0 dumps> 228 make buildworld 229 make kernel KERNCONF=YOUR_KERNEL_HERE 230 [1] 231 <reboot in single user> [3] 232 mergemaster -p [5] 233 make installworld 234 mergemaster [4] 235 <reboot> 236 237 238 To cross-install current onto a separate partition 239 -------------------------------------------------- 240 # In this approach we use a separate partition to hold 241 # current's root, 'usr', and 'var' directories. A partition 242 # holding "/", "/usr" and "/var" should be about 2GB in 243 # size. 244 245 <make sure you have good level 0 dumps> 246 <boot into -stable> 247 make buildworld 248 make buildkernel KERNCONF=YOUR_KERNEL_HERE 249 <maybe newfs current's root partition> 250 <mount current's root partition on directory ${CURRENT_ROOT}> 251 make installworld DESTDIR=${CURRENT_ROOT} 252 cd src/etc; make distribution DESTDIR=${CURRENT_ROOT} # if newfs'd 253 make installkernel KERNCONF=YOUR_KERNEL_HERE DESTDIR=${CURRENT_ROOT} 254 cp /etc/fstab ${CURRENT_ROOT}/etc/fstab # if newfs'd 255 <edit ${CURRENT_ROOT}/etc/fstab to mount "/" from the correct partition> 256 <reboot into current> 257 <do a "native" rebuild/install as described in the previous section> 258 <maybe install compatibility libraries from src/lib/compat> 259 <reboot> 260 261 262 To upgrade in-place from 5.x-stable to current 263 ---------------------------------------------- 264 <make sure you have good level 0 dumps> 265 make buildworld [9] 266 make kernel KERNCONF=YOUR_KERNEL_HERE [8] 267 [1] 268 <reboot in single user> [3] 269 mergemaster -p [5] 270 make installworld 271 mergemaster -i [4] 272 <reboot> 273 274 Make sure that you've read the UPDATING file to understand the 275 tweaks to various things you need. At this point in the life 276 cycle of current, things change often and you are on your own 277 to cope. The defaults can also change, so please read ALL of 278 the UPDATING entries. 279 280 Also, if you are tracking -current, you must be subscribed to 281 freebsd-current@freebsd.org. Make sure that before you update 282 your sources that you have read and understood all the recent 283 messages there. If in doubt, please track -stable which has 284 much fewer pitfalls. 285 286 [1] If you have third party modules, such as vmware, you 287 should disable them at this point so they don't crash your 288 system on reboot. 289 290 [3] From the bootblocks, boot -s, and then do 291 fsck -p 292 mount -u / 293 mount -a 294 cd src 295 adjkerntz -i # if CMOS is wall time 296 Also, when doing a major release upgrade, it is required that 297 you boot into single user mode to do the installworld. 298 299 [4] Note: This step is non-optional. Failure to do this step 300 can result in a significant reduction in the functionality of the 301 system. Attempting to do it by hand is not recommended and those 302 that pursue this avenue should read this file carefully, as well 303 as the archives of freebsd-current and freebsd-hackers mailing lists 304 for potential gotchas. 305 306 [5] Usually this step is a noop. However, from time to time 307 you may need to do this if you get unknown user in the following 308 step. It never hurts to do it all the time. You may need to 309 install a new mergemaster (cd src/usr.sbin/mergemaster && make 310 install) after the buildworld before this step if you last updated 311 from current before 20020224 or from -stable before 20020408. 312 313 [8] In order to have a kernel that can run the 4.x binaries 314 needed to do an installworld, you must include the COMPAT_FREEBSD4 315 option in your kernel. Failure to do so may leave you with a system 316 that is hard to boot to recover. 317 318 Make sure that you merge any new devices from GENERIC since the 319 last time you updated your kernel config file. 320 321 [9] When checking out sources, you must include the -P flag to have 322 cvs prune empty directories. 323 324 If CPUTYPE is defined in your /etc/make.conf, make sure to use the 325 "?=" instead of the "=" assignment operator, so that buildworld can 326 override the CPUTYPE if it needs to. 327 328 MAKEOBJDIRPREFIX must be defined in an environment variable, and 329 not on the command line, or in /etc/make.conf. buildworld will 330 warn if it is improperly defined. 331FORMAT: 332 333This file contains a list, in reverse chronological order, of major 334breakages in tracking -current. Not all things will be listed here, 335and it only starts on October 16, 2004. Updating files can found in 336previous releases if your system is older than this. 337 338Copyright information: 339 340Copyright 1998-2005 M. Warner Losh. All Rights Reserved. 341 342Redistribution, publication, translation and use, with or without 343modification, in full or in part, in any form or format of this 344document are permitted without further permission from the author. 345 346THIS DOCUMENT IS PROVIDED BY WARNER LOSH ``AS IS'' AND ANY EXPRESS OR 347IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 348WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 349DISCLAIMED. IN NO EVENT SHALL WARNER LOSH BE LIABLE FOR ANY DIRECT, 350INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 351(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 352SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 353HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 354STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 355IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 356POSSIBILITY OF SUCH DAMAGE. 357 358If you find this document useful, and you want to, you may buy the 359author a beer. 360 361Contact Warner Losh if you have any questions about your use of 362this document. 363 364$FreeBSD$ 365