]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - share/doc/smm/01.setup/3.t
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / share / doc / smm / 01.setup / 3.t
1 .\" Copyright (c) 1980, 1986, 1988, 1993
2 .\"      The Regents of the University of California.  All rights reserved.
3 .\"
4 .\" Redistribution and use in source and binary forms, with or without
5 .\" modification, are permitted provided that the following conditions
6 .\" are met:
7 .\" 1. Redistributions of source code must retain the above copyright
8 .\"    notice, this list of conditions and the following disclaimer.
9 .\" 2. Redistributions in binary form must reproduce the above copyright
10 .\"    notice, this list of conditions and the following disclaimer in the
11 .\"    documentation and/or other materials provided with the distribution.
12 .\" 3. All advertising materials mentioning features or use of this software
13 .\"    must display the following acknowledgement:
14 .\"     This product includes software developed by the University of
15 .\"     California, Berkeley and its contributors.
16 .\" 4. Neither the name of the University nor the names of its contributors
17 .\"    may be used to endorse or promote products derived from this software
18 .\"    without specific prior written permission.
19 .\"
20 .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21 .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22 .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23 .\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24 .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25 .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26 .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27 .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28 .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30 .\" SUCH DAMAGE.
31 .\"
32 .\" $FreeBSD$
33 .\"     @(#)3.t 8.1 (Berkeley) 7/27/93
34 .\"
35 .ds lq ``
36 .ds rq ''
37 .ds RH "Upgrading a \*(Ps System
38 .ds CF \*(Dy
39 .Sh 1 "Upgrading a \*(Ps system"
40 .PP
41 This section describes the procedure for upgrading a \*(Ps
42 system to \*(4B.  This procedure may vary according to the version of
43 the system running before conversion.
44 If you are converting from a
45 System V system, some of this section will still apply (in particular,
46 the filesystem conversion).  However, many of the system configuration
47 files are different, and the executable file formats are completely
48 incompatible.
49 .PP
50 In particular be wary when using this information to upgrade
51 a \*(Ps HP300 system.
52 There are at least four different versions of ``\*(Ps'' out there:
53 .IP 1)
54 HPBSD 1.x from Utah.
55 .br
56 This was the original version of \*(Ps for HP300s from which the
57 other variants (and \*(4B) are derived.
58 It is largely a \*(Ps system with Sun's NFS 3.0 filesystem code and
59 some \*(Ps-Tahoe features (e.g. networking code).
60 Since the filesystem code is 4.2/4.3 vintage and the filesystem
61 hierarchy is largely \*(Ps, most of this section should apply.
62 .IP 2)
63 MORE/bsd from Mt. Xinu.
64 .br
65 This is a \*(Ps-Tahoe vintage system with Sun's NFS 4.0 filesystem code
66 upgraded with Tahoe UFS features.
67 The instructions for \*(Ps-Tahoe should largely apply.
68 .IP 3)
69 \*(Ps-Reno from CSRG.
70 .br
71 At least one site bootstrapped HP300 support from the Reno distribution.
72 The Reno filesystem code was somewhere between \*(Ps and \*(4B: the VFS switch
73 had been added but many of the UFS features (e.g. ``inline'' symlinks)
74 were missing.
75 The filesystem hierarchy reorganization first appeared in this release.
76 Be extremely careful following these instructions if you are
77 upgrading from the Reno distribution.
78 .IP 4)
79 HPBSD 2.0 from Utah.
80 .br
81 As if things were not bad enough already,
82 this release has the \*(4B filesystem and networking code
83 as well as some utilities, but still has a \*(Ps hierarchy.
84 No filesystem conversions are necessary for this upgrade,
85 but files will still need to be moved around.
86 .Sh 2 "Installation overview"
87 .PP
88 If you are running \*(Ps, upgrading your system
89 involves replacing your kernel and system utilities.
90 In general, there are three possible ways to install a new \*(Bs distribution:
91 (1) boot directly from the distribution tape, use it to load new binaries
92 onto empty disks, and then merge or restore any existing configuration files
93 and filesystems;
94 (2) use an existing \*(Ps or later system to extract the root and
95 .Pn /usr
96 filesystems from the distribution tape,
97 boot from the new system, then merge or restore existing
98 configuration files and filesystems; or
99 (3) extract the sources from the distribution tape onto an existing system,
100 and use that system to cross-compile and install \*(4B.
101 For this release, the second alternative is strongly advised,
102 with the third alternative reserved as a last resort.
103 In general, older binaries will continue to run under \*(4B,
104 but there are many exceptions that are on the critical path
105 for getting the system running.
106 Ideally, the new system binaries (root and
107 .Pn /usr
108 filesystems) should be installed on spare disk partitions,
109 then site-specific files should be merged into them.
110 Once the new system is up and fully merged, the previous root and
111 .Pn /usr
112 filesystems can be reused.
113 Other existing filesystems can be retained and used,
114 except that (as usual) the new
115 .Xr fsck
116 should be run before they are mounted.
117 .PP
118 It is \fBSTRONGLY\fP advised that you make full dumps of each filesystem
119 before beginning, especially any that you intend to modify in place
120 during the merge.
121 It is also desirable to run filesystem checks
122 of all filesystems to be converted to \*(4B before shutting down.
123 This is an excellent time to review your disk configuration
124 for possible tuning of the layout.
125 Most systems will need to provide a new filesystem for system use
126 mounted on
127 .Pn /var
128 (see below).
129 However, the
130 .Pn /tmp
131 filesystem can be an MFS virtual-memory-resident filesystem,
132 potentially freeing an existing disk partition.
133 (Additional swap space may be desirable as a consequence.)
134 See
135 .Xr mount_mfs (8).
136 .PP
137 The recommended installation procedure includes the following steps.
138 The order of these steps will probably vary according to local needs.
139 .IP \(bu
140 Extract root and
141 .Pn /usr
142 filesystems from the distribution tapes.
143 .IP \(bu
144 Extract kernel and/or user-level sources from the distribution tape
145 if space permits.
146 This can serve as the backup documentation as needed.
147 .IP \(bu
148 Configure and boot a kernel for the local system.
149 This can be delayed if the generic kernel from the distribution
150 supports enough hardware to proceed.
151 .IP \(bu
152 Build a skeletal
153 .Pn /var
154 filesystem (see
155 .Xr mtree (8)).
156 .IP \(bu
157 Merge site-dependent configuration files from
158 .Pn /etc
159 and
160 .Pn /usr/lib
161 into the new
162 .Pn /etc
163 directory.
164 Note that many file formats and contents have changed; see section 3.4
165 of this document.
166 .IP \(bu
167 Copy or merge files from
168 .Pn /usr/adm ,
169 .Pn /usr/spool ,
170 .Pn /usr/preserve ,
171 .Pn /usr/lib ,
172 and other locations into
173 .Pn /var .
174 .IP \(bu
175 Merge local macros, dictionaries, etc. into
176 .Pn /usr/share .
177 .IP \(bu
178 Merge and update local software to reflect the system changes.
179 .IP \(bu
180 Take off the rest of the morning, you've earned it!
181 .PP
182 Section 3.2 lists the files to be saved as part of the conversion process.
183 Section 3.3 describes the bootstrap process.
184 Section 3.4 discusses the merger of the saved files back into the new system.
185 Section 3.5 gives an overview of the major
186 bug fixes and changes between \*(Ps and \*(4B.
187 Section 3.6 provides general hints on possible problems to be
188 aware of when converting from \*(Ps to \*(4B.
189 .Sh 2 "Files to save"
190 .PP
191 The following list enumerates the standard set of files you will want to
192 save and suggests directories in which site-specific files should be present.
193 This list will likely be augmented with non-standard files you
194 have added to your system.
195 If you do not have enough space to create parallel
196 filesystems, you should create a
197 .Xr tar
198 image of the following files before the new filesystems are created.
199 The rest of this subsection describes where theses files
200 have moved and how they have changed.
201 .TS
202 lfC c l.
203 /.cshrc \(dg    root csh startup script (moves to \f(CW/root/.cshrc\fP)
204 /.login \(dg    root csh login script (moves to \f(CW/root/.login\fP)
205 /.profile       \(dg    root sh startup script (moves to \f(CW/root/.profile\fP)
206 /.rhosts        \(dg    for trusted machines and users (moves to \f(CW/root/.rhosts\fP)
207 /etc/disktab    \(dd    in case you changed disk partition sizes
208 /etc/fstab      *       disk configuration data
209 /etc/ftpusers   \(dg    for local additions
210 /etc/gettytab   \(dd    getty database
211 /etc/group      *       group data base
212 /etc/hosts      \(dg    for local host information
213 /etc/hosts.equiv        \(dg    for local host equivalence information
214 /etc/hosts.lpd  \(dg    printer access file
215 /etc/inetd.conf *       Internet services configuration data
216 /etc/named*     \(dg    named configuration files
217 /etc/netstart   \(dg    network initialization
218 /etc/networks   \(dg    for local network information
219 /etc/passwd     *       user data base
220 /etc/printcap   *       line printer database
221 /etc/protocols  \(dd    in case you added any local protocols
222 /etc/rc *       for any local additions
223 /etc/rc.local   *       site specific system startup commands
224 /etc/remote     \(dg    auto-dialer configuration
225 /etc/services   \(dd    for local additions
226 /etc/shells     \(dd    list of valid shells
227 /etc/syslog.conf        *       system logger configuration
228 /etc/securettys *       merged into ttys
229 /etc/ttys       *       terminal line configuration data
230 /etc/ttytype    *       merged into ttys
231 /etc/termcap    \(dd    for any local entries that may have been added
232 /lib    \(dd    for any locally developed language processors
233 /usr/dict/*     \(dd    for local additions to words and papers
234 /usr/include/*  \(dd    for local additions
235 /usr/lib/aliases        *       mail forwarding data base (moves to \f(CW/etc/aliases\fP)
236 /usr/lib/crontab        *       cron daemon data base (moves to \f(CW/etc/crontab\fP)
237 /usr/lib/crontab.local  *       local cron daemon data base (moves to \f(CW/etc/crontab.local\fP)
238 /usr/lib/lib*.a \(dg    for local libraries
239 /usr/lib/mail.rc        \(dg    system-wide mail(1) initialization (moves to \f(CW/etc/mail.rc\fP)
240 /usr/lib/sendmail.cf    *       sendmail configuration (moves to \f(CW/etc/sendmail.cf\fP)
241 /usr/lib/tmac/* \(dd    for locally developed troff/nroff macros (moves to \f(CW/usr/share/tmac/*\fP)
242 /usr/lib/uucp/* \(dg    for local uucp configuration files
243 /usr/man/manl   *       for manual pages for locally developed programs (moves to \f(CW/usr/local/man\fP)
244 /usr/spool/*    \(dg    for current mail, news, uucp files, etc. (moves to \f(CW/var/spool\fP)
245 /usr/src/local  \(dg    for source for locally developed programs
246 /sys/conf/HOST  \(dg    configuration file for your machine (moves to \f(CW/sys/<arch>/conf\fP)
247 /sys/conf/files.HOST    \(dg    list of special files in your kernel (moves to \f(CW/sys/<arch>/conf\fP)
248 /*/quotas       *       filesystem quota files (moves to \f(CW/*/quotas.user\fP)
249 .TE
250 .DS
251 \(dg\|Files that can be used from \*(Ps without change.
252 \(dd\|Files that need local changes merged into \*(4B files.
253 *\|Files that require special work to merge and are discussed in section 3.4.
254 .DE
255 .Sh 2 "Installing \*(4B"
256 .PP
257 The next step is to build a working \*(4B system.
258 This can be done by following the steps in section 2 of
259 this document for extracting the root and
260 .Pn /usr
261 filesystems from the distribution tape onto unused disk partitions.
262 For the SPARC, the root filesystem dump on the tape could also be
263 extracted directly.
264 For the HP300 and DECstation, the raw disk image can be copied
265 into an unused partition and this partition can then be dumped
266 to create an image that can be restored.
267 The exact procedure chosen will depend on the disk configuration
268 and the number of suitable disk partitions that may be used.
269 It is also desirable to run filesystem checks
270 of all filesystems to be converted to \*(4B before shutting down.
271 In any case, this is an excellent time to review your disk configuration
272 for possible tuning of the layout.
273 Section 2.5 and
274 .Xr config (8)
275 are required reading.
276 .LP
277 The filesystem in \*(4B has been reorganized in an effort to
278 meet several goals:
279 .IP 1)
280 The root filesystem should be small.
281 .IP 2)
282 There should be a per-architecture centrally-shareable read-only
283 .Pn /usr
284 filesystem.
285 .IP 3)
286 Variable per-machine directories should be concentrated below
287 a single mount point named
288 .Pn /var .
289 .IP 4)
290 Site-wide machine independent shareable text files should be separated
291 from architecture specific binary files and should be concentrated below
292 a single mount point named
293 .Pn /usr/share .
294 .LP
295 These goals are realized with the following general layouts.
296 The reorganized root filesystem has the following directories:
297 .TS
298 lfC l.
299 /etc    (config files)
300 /bin    (user binaries needed when single-user)
301 /sbin   (root binaries needed when single-user)
302 /local  (locally added binaries used only by this machine)
303 /tmp    (mount point for memory based filesystem)
304 /dev    (local devices)
305 /home   (mount point for AMD)
306 /var    (mount point for per-machine variable directories)
307 /usr    (mount point for multiuser binaries and files)
308 .TE
309 .LP
310 The reorganized
311 .Pn /usr
312 filesystem has the following directories:
313 .TS
314 lfC l.
315 /usr/bin        (user binaries)
316 /usr/contrib    (software contributed to \*(4B)
317 /usr/games      (binaries for games, score files in \f(CW/var\fP)
318 /usr/include    (standard include files)
319 /usr/lib        (lib*.a from old \f(CW/usr/lib\fP)
320 /usr/libdata    (databases from old \f(CW/usr/lib\fP)
321 /usr/libexec    (executables from old \f(CW/usr/lib\fP)
322 /usr/local      (locally added binaries used site-wide)
323 /usr/old        (deprecated binaries)
324 /usr/sbin       (root binaries)
325 /usr/share      (mount point for site-wide shared text)
326 /usr/src        (mount point for sources)
327 .TE
328 .LP
329 The reorganized
330 .Pn /usr/share
331 filesystem has the following directories:
332 .TS
333 lfC l.
334 /usr/share/calendar     (various useful calendar files)
335 /usr/share/dict (dictionaries)
336 /usr/share/doc  (\*(4B manual sources)
337 /usr/share/games        (games text files)
338 /usr/share/groff_font   (groff font information)
339 /usr/share/man  (typeset manual pages)
340 /usr/share/misc (dumping ground for random text files)
341 /usr/share/mk   (templates for \*(4B makefiles)
342 /usr/share/skel (template user home directory files)
343 /usr/share/tmac (various groff macro packages)
344 /usr/share/zoneinfo     (information on time zones)
345 .TE
346 .LP
347 The reorganized
348 .Pn /var
349 filesystem has the following directories:
350 .TS
351 lfC l.
352 /var/account    (accounting files, formerly \f(CW/usr/adm\fP)
353 /var/at (\fIat\fP\|(1) spooling area)
354 /var/backups    (backups of system files)
355 /var/crash      (crash dumps)
356 /var/db (system-wide databases, e.g. tags)
357 /var/games      (score files)
358 /var/log        (log files)
359 /var/mail       (users mail)
360 /var/obj        (hierarchy to build \f(CW/usr/src\fP)
361 /var/preserve   (preserve area for vi)
362 /var/quotas     (directory to store quota files)
363 /var/run        (directory to store *.pid files)
364 /var/rwho       (rwho databases)
365 /var/spool/ftp  (home directory for anonymous ftp)
366 /var/spool/mqueue       (sendmail spooling directory)
367 /var/spool/news (news spooling area)
368 /var/spool/output       (printer spooling area)
369 /var/spool/uucp (uucp spooling area)
370 /var/tmp        (disk-based temporary directory)
371 /var/users      (root of per-machine user home directories)
372 .TE
373 .PP
374 The \*(4B bootstrap routines pass the identity of the boot device
375 through to the kernel.
376 The kernel then uses that device as its root filesystem.
377 Thus, for example, if you boot from
378 .Pn /dev/\*(Dk1a ,
379 the kernel will use
380 .Pn \*(Dk1a
381 as its root filesystem. If
382 .Pn /dev/\*(Dk1b
383 is configured as a swap partition,
384 it will be used as the initial swap area,
385 otherwise the normal primary swap area (\c
386 .Pn /dev/\*(Dk0b )
387 will be used.
388 The \*(4B bootstrap is backward compatible with \*(Ps,
389 so you can replace your old bootstrap if you use it
390 to boot your first \*(4B kernel.
391 However, the \*(Ps bootstrap cannot access \*(4B filesystems,
392 so if you plan to convert your filesystems to \*(4B,
393 you must install a new bootstrap \fIbefore\fP doing the conversion.
394 Note that SPARC users cannot build a \*(4B compatible version
395 of the bootstrap, so must \fInot\fP convert their root filesystem
396 to the new \*(4B format.
397 .PP
398 Once you have extracted the \*(4B system and booted from it,
399 you will have to build a kernel customized for your configuration.
400 If you have any local device drivers,
401 they will have to be incorporated into the new kernel.
402 See section 4.1.3 and ``Building 4.3BSD UNIX Systems with Config'' (SMM:2).
403 .PP
404 If converting from \*(Ps, your old filesystems should be converted.
405 If you've modified the partition
406 sizes from the original \*(Ps ones, and are not already using the
407 \*(4B disk labels, you will have to modify the default disk partition
408 tables in the kernel.  Make the necessary table changes and boot
409 your custom kernel \fBBEFORE\fP trying to access any of your old
410 filesystems!  After doing this, if necessary, the remaining filesystems
411 may be converted in place by running the \*(4B version of
412 .Xr fsck (8)
413 on each filesystem and allowing it to make the necessary corrections.
414 The new version of
415 .Xr fsck
416 is more strict about the size of directories than
417 the version supplied with \*(Ps.
418 Thus the first time that it is run on a \*(Ps filesystem,
419 it will produce messages of the form:
420 .DS
421 \fBDIRECTORY ...: LENGTH\fP xx \fBNOT MULTIPLE OF 512 (ADJUSTED)\fP
422 .DE
423 Length ``xx'' will be the size of the directory;
424 it will be expanded to the next multiple of 512 bytes.
425 The new
426 .Xr fsck
427 will also set default \fIinterleave\fP and
428 \fInpsect\fP (number of physical sectors per track) values on older
429 filesystems, in which these fields were unused spares; this correction
430 will produce messages of the form:
431 .DS
432 \fBIMPOSSIBLE INTERLEAVE=0 IN SUPERBLOCK (SET TO DEFAULT)\fP\**
433 \fBIMPOSSIBLE NPSECT=0 IN SUPERBLOCK (SET TO DEFAULT)\fP
434 .DE
435 .FS
436 The defaults are to set \fIinterleave\fP to 1 and
437 \fInpsect\fP to \fInsect\fP.
438 This is correct on most drives;
439 it affects only performance (usually virtually unmeasurably).
440 .FE
441 Filesystems that have had their interleave and npsect values
442 set will be diagnosed by the old
443 .Xr fsck
444 as having a bad superblock; the old
445 .Xr fsck
446 will run only if given an alternate superblock
447 (\fIfsck \-b32\fP),
448 in which case it will re-zero these fields.
449 The \*(4B kernel will internally set these fields to their defaults
450 if fsck has not done so; again, the \fI\-b32\fP option may be
451 necessary for running the old
452 .Xr fsck .
453 .PP
454 In addition, \*(4B removes several limits on filesystem sizes
455 that were present in \*(Ps.
456 The limited filesystems
457 continue to work in \*(4B, but should be converted
458 as soon as it is convenient
459 by running
460 .Xr fsck
461 with the \fI\-c 2\fP option.
462 The sequence \fIfsck \-p \-c 2\fP will update them all,
463 fix the interleave and npsect fields,
464 fix any incorrect directory lengths,
465 expand maximum uid's and gid's to 32-bits,
466 place symbolic links less than 60 bytes into their inode,
467 and fill in directory type fields all at once.
468 The new filesystem formats are incompatible with older systems.
469 If you wish to continue using these filesystems with the older
470 systems you should make only the compatible changes using
471 \fIfsck \-c 1\fP.
472 .Sh 2 "Merging your files from \*(Ps into \*(4B"
473 .PP
474 When your system is booting reliably and you have the \*(4B root and
475 .Pn /usr
476 filesystems fully installed you will be ready
477 to continue with the next step in the conversion process,
478 merging your old files into the new system.
479 .PP
480 If you saved the files on a
481 .Xr tar
482 tape, extract them into a scratch directory, say
483 .Pn /usr/convert :
484 .DS
485 \fB#\fP \fImkdir /usr/convert\fP
486 \fB#\fP \fIcd /usr/convert\fP
487 \fB#\fP \fItar xp\fP
488 .DE
489 .PP
490 The data files marked in the previous table with a dagger (\(dg)
491 may be used without change from the previous system.
492 Those data files marked with a double dagger (\(dd) have syntax
493 changes or substantial enhancements.
494 You should start with the \*(4B version and carefully
495 integrate any local changes into the new file.
496 Usually these local changes can be incorporated
497 without conflict into the new file;
498 some exceptions are noted below.
499 The files marked with an asterisk (*) require
500 particular attention and are discussed below.
501 .PP
502 As described in section 3.3,
503 the most immediately obvious change in \*(4B is the reorganization
504 of the system filesystems.
505 Users of certain recent vendor releases have seen this general organization,
506 although \*(4B takes the reorganization a bit further.
507 The directories most affected are
508 .Pn /etc ,
509 that now contains only system configuration files;
510 .Pn /var ,
511 a new filesystem containing per-system spool and log files; and
512 .Pn /usr/share,
513 that contains most of the text files shareable across architectures
514 such as documentation and macros.
515 System administration programs formerly in
516 .Pn /etc
517 are now found in
518 .Pn /sbin
519 and
520 .Pn /usr/sbin .
521 Various programs and data files formerly in
522 .Pn /usr/lib
523 are now found in
524 .Pn /usr/libexec
525 and
526 .Pn /usr/libdata ,
527 respectively.
528 Administrative files formerly in
529 .Pn /usr/adm
530 are in
531 .Pn /var/account
532 and, similarly, log files are now in
533 .Pn /var/log .
534 The directory
535 .Pn /usr/ucb
536 has been merged into
537 .Pn /usr/bin ,
538 and the sources for programs in
539 .Pn /usr/bin
540 are in
541 .Pn /usr/src/usr.bin .
542 Other source directories parallel the destination directories;
543 .Pn /usr/src/etc
544 has been greatly expanded, and
545 .Pn /usr/src/share
546 is new.
547 The source for the manual pages, in general, are with the source
548 code for the applications they document.
549 Manual pages not closely corresponding to an application program
550 are found in
551 .Pn /usr/src/share/man .
552 The locations of all man pages is listed in
553 .Pn /usr/src/share/man/man0/man[1-8] .
554 The manual page
555 .Xr hier (7)
556 has been updated and made more detailed;
557 it is included in the printed documentation.
558 You should review it to familiarize yourself with the new layout.
559 .PP
560 A new utility,
561 .Xr mtree (8),
562 is provided to build and check filesystem hierarchies
563 with the proper contents, owners and permissions.
564 Scripts are provided in
565 .Pn /etc/mtree
566 (and
567 .Pn /usr/src/etc/mtree )
568 for the root,
569 .Pn /usr
570 and
571 .Pn /var
572 filesystems.
573 Once a filesystem has been made for
574 .Pn /var ,
575 .Xr mtree
576 can be used to create a directory hierarchy there
577 or you can simply use tar to extract the prototype from
578 the second file of the distribution tape.
579 .Sh 3 "Changes in the \f(CW/etc\fP directory"
580 .PP
581 The
582 .Pn /etc
583 directory now contains nearly all the host-specific configuration
584 files.
585 Note that some file formats have changed,
586 and those configuration files containing pathnames are nearly all affected
587 by the reorganization.
588 See the examples provided in
589 .Pn /etc
590 (installed from
591 .Pn /usr/src/etc )
592 as a guide.
593 The following table lists some of the local configuration files
594 whose locations and/or contents have changed.
595 .TS
596 l l l
597 lfC lfC l.
598 \*(Ps and Earlier       \*(4B   Comments
599 _       _       _
600 /etc/fstab      /etc/fstab      new format; see below
601 /etc/inetd.conf /etc/inetd.conf pathnames of executables changed
602 /etc/printcap   /etc/printcap   pathnames changed
603 /etc/syslog.conf        /etc/syslog.conf        pathnames of log files changed
604 /etc/ttys       /etc/ttys       pathnames of executables changed
605 /etc/passwd     /etc/master.passwd      new format; see below
606 /usr/lib/sendmail.cf    /etc/sendmail.cf        changed pathnames
607 /usr/lib/aliases        /etc/aliases    may contain changed pathnames
608 /etc/*.pid      /var/run/*.pid
609
610 .T&
611 l l l
612 lfC lfC l.
613 New in \*(Ps-Tahoe      \*(4B   Comments
614 _       _       _
615 /usr/games/dm.config    /etc/dm.conf    configuration for games (see \fIdm\fP\|(8))
616 /etc/zoneinfo/localtime /etc/localtime  timezone configuration
617 /etc/zoneinfo   /usr/share/zoneinfo     timezone configuration
618 .TE
619 .ne 1.5i
620 .TS
621 l l l
622 lfC lfC l.
623         New in \*(4B    Comments
624 _       _       _
625         /etc/aliases.db database version of the aliases file
626         /etc/amd-home   location database of home directories
627         /etc/amd-vol    location database of exported filesystems
628         /etc/changelist \f(CW/etc/security\fP files to back up
629         /etc/csh.cshrc  system-wide csh(1) initialization file
630         /etc/csh.login  system-wide csh(1) login file
631         /etc/csh.logout system-wide csh(1) logout file
632         /etc/disklabels directory for saving disklabels
633         /etc/exports    NFS list of export permissions
634         /etc/ftpwelcome message displayed for ftp users; see ftpd(8)
635         /etc/man.conf   lists directories searched by \fIman\fP\|(1)
636         /etc/mtree      directory for local mtree files; see mtree(8)
637         /etc/netgroup   NFS group list used in \f(CW/etc/exports\fP
638         /etc/pwd.db     non-secure hashed user data base file
639         /etc/spwd.db    secure hashed user data base file
640         /etc/security   daily system security checker
641 .TE
642 .PP
643 System security changes require adding several new ``well-known'' groups to
644 .Pn /etc/group .
645 The groups that are needed by the system as distributed are:
646 .TS
647 l n l.
648 name    number  purpose
649 _
650 wheel   0       users allowed superuser privilege
651 daemon  1       processes that need less than wheel privilege
652 kmem    2       read access to kernel memory
653 sys     3       access to kernel sources
654 tty     4       access to terminals
655 operator        5       read access to raw disks
656 bin     7       group for system binaries
657 news    8       group for news
658 wsrc    9       write access to sources
659 games   13      access to games
660 staff   20      system staff
661 guest   31      system guests
662 nobody  39      the least privileged group
663 utmp    45      access to utmp files
664 dialer  117     access to remote ports and dialers
665 .TE
666 Only users in the ``wheel'' group are permitted to
667 .Xr su
668 to ``root''.
669 Most programs that manage directories in
670 .Pn /var/spool
671 now run set-group-id to ``daemon'' so that users cannot
672 directly access the files in the spool directories.
673 The special files that access kernel memory,
674 .Pn /dev/kmem
675 and
676 .Pn /dev/mem ,
677 are made readable only by group ``kmem''.
678 Standard system programs that require this access are
679 made set-group-id to that group.
680 The group ``sys'' is intended to control access to kernel sources,
681 and other sources belong to group ``wsrc.''
682 Rather than make user terminals writable by all users,
683 they are now placed in group ``tty'' and made only group writable.
684 Programs that should legitimately have access to write on user terminals
685 such as
686 .Xr talkd
687 and
688 .Xr write
689 now run set-group-id to ``tty''.
690 The ``operator'' group controls access to disks.
691 By default, disks are readable by group ``operator'',
692 so that programs such as
693 .Xr dump
694 can access the filesystem information without being set-user-id to ``root''.
695 The
696 .Xr shutdown (8)
697 program is executable only by group operator
698 and is setuid to root so that members of group operator may shut down
699 the system without root access.
700 .PP
701 The ownership and modes of some directories have changed.
702 The
703 .Xr at
704 programs now run set-user-id ``root'' instead of ``daemon.''
705 Also, the uucp directory no longer needs to be publicly writable,
706 as
707 .Xr tip
708 reverts to privileged status to remove its lock files.
709 After copying your version of
710 .Pn /var/spool ,
711 you should do:
712 .DS
713 \fB#\fP \fIchown \-R root /var/spool/at\fP
714 \fB#\fP \fIchown \-R uucp:daemon /var/spool/uucp\fP
715 \fB#\fP \fIchmod \-R o\-w /var/spool/uucp\fP
716 .DE
717 .PP
718 The format of the cron table,
719 .Pn /etc/crontab ,
720 has been changed to specify the user-id that should be used to run a process.
721 The userid ``nobody'' is frequently useful for non-privileged programs.
722 Local changes are now put in a separate file,
723 .Pn /etc/crontab.local .
724 .PP
725 Some of the commands previously in
726 .Pn /etc/rc.local
727 have been moved to
728 .Pn /etc/rc ;
729 several new functions are now handled by
730 .Pn /etc/rc ,
731 .Pn /etc/netstart
732 and
733 .Pn /etc/rc.local .
734 You should look closely at the prototype version of these files
735 and read the manual pages for the commands contained in it
736 before trying to merge your local copy.
737 Note in particular that
738 .Xr ifconfig
739 has had many changes,
740 and that host names are now fully specified as domain-style names
741 (e.g., vangogh.CS.Berkeley.EDU) for the benefit of the name server.
742 .PP
743 Some of the commands previously in
744 .Pn /etc/daily
745 have been moved to
746 .Pn /etc/security ,
747 and several new functions have been added to
748 .Pn /etc/security
749 to do nightly security checks on the system.
750 The script
751 .Pn /etc/daily
752 runs
753 .Pn /etc/security
754 each night, and mails the output to the super-user.
755 Some of the checks done by
756 .Pn /etc/security
757 are:
758 .DS
759 \(bu Syntax errors in the password and group files.
760 \(bu Duplicate user and group names and id's.
761 \(bu Dangerous search paths and umask values for the superuser.
762 \(bu Dangerous values in various initialization files.
763 \(bu Dangerous .rhosts files.
764 \(bu Dangerous directory and file ownership or permissions.
765 \(bu Globally exported filesystems.
766 \(bu Dangerous owners or permissions for special devices.
767 .DE
768 In addition, it reports any changes to setuid and setgid files, special
769 devices, or the files in
770 .Pn /etc/changelist
771 since the last run of
772 .Pn /etc/security .
773 Backup copies of the files are saved in
774 .Pn /var/backups .
775 Finally, the system binaries are checksummed and their permissions
776 validated against the
777 .Xr mtree (8)
778 specifications in
779 .Pn /etc/mtree .
780 .PP
781 The C-library and system binaries on the distribution tape
782 are compiled with new versions of
783 .Xr gethostbyname
784 and
785 .Xr gethostbyaddr
786 that use the name server,
787 .Xr named (8).
788 If you have only a small network and are not connected
789 to a large network, you can use the distributed library routines without
790 any problems; they use a linear scan of the host table
791 .Pn /etc/hosts
792 if the name server is not running.
793 If you are on the Internet or have a large local network,
794 it is recommend that you set up
795 and use the name server.
796 For instructions on how to set up the necessary configuration files,
797 refer to ``Name Server Operations Guide for BIND'' (SMM:10).
798 Several programs rely on the host name returned by
799 .Xr gethostname
800 to determine the local domain name.
801 .PP
802 If you are using the name server, your
803 .Xr sendmail
804 configuration file will need some updates to accommodate it.
805 See the ``Sendmail Installation and Operation Guide'' (SMM:8) and
806 the sample
807 .Xr sendmail
808 configuration files in
809 .Pn /usr/src/usr.sbin/sendmail/cf .
810 The aliases file,
811 .Pn /etc/aliases
812 has also been changed to add certain well-known addresses.
813 .Sh 3 "Shadow password files"
814 .PP
815 The password file format adds change and expiration fields
816 and its location has changed to protect
817 the encrypted passwords stored there.
818 The actual password file is now stored in
819 .Pn /etc/master.passwd .
820 The hashed dbm password files do not contain encrypted passwords,
821 but contain the file offset to the entry with the password in
822 .Pn /etc/master.passwd
823 (that is readable only by root).
824 Thus, the
825 .Fn getpwnam
826 and
827 .Fn getpwuid
828 functions will no longer return an encrypted password string to non-root
829 callers.
830 An old-style passwd file is created in
831 .Pn /etc/passwd
832 by the
833 .Xr vipw (8)
834 and
835 .Xr pwd_mkdb (8)
836 programs.
837 See also
838 .Xr passwd (5).
839 .PP
840 Several new users have also been added to the group of ``well-known'' users in
841 .Pn /etc/passwd .
842 The current list is:
843 .DS
844 .TS
845 l c.
846 name    number
847 _
848 root    0
849 daemon  1
850 operator        2
851 bin     3
852 games   7
853 uucp    66
854 nobody  32767
855 .TE
856 .DE
857 The ``daemon'' user is used for daemon processes that
858 do not need root privileges.
859 The ``operator'' user-id is used as an account for dumpers
860 so that they can log in without having the root password.
861 By placing them in the ``operator'' group,
862 they can get read access to the disks.
863 The ``uucp'' login has existed long before \*(4B,
864 and is noted here just to provide a common user-id.
865 The password entry ``nobody'' has been added to specify
866 the user with least privilege.  The ``games'' user is a pseudo-user
867 that controls access to game programs.
868 .PP
869 After installing your updated password file, you must run
870 .Xr pwd_mkdb (8)
871 to create the password database.
872 Note that
873 .Xr pwd_mkdb (8)
874 is run whenever
875 .Xr vipw (8)
876 is run.
877 .Sh 3 "The \f(CW/var\fP filesystem"
878 .PP
879 The spooling directories saved on tape may be restored in their
880 eventual resting places without too much concern.  Be sure to
881 use the `\-p' option to
882 .Xr tar (1)
883 so that files are recreated with the same file modes.
884 The following commands provide a guide for copying spool and log files from
885 an existing system into a new
886 .Pn /var
887 filesystem.
888 At least the following directories should already exist on
889 .Pn /var :
890 .Pn output ,
891 .Pn log ,
892 .Pn backups
893 and
894 .Pn db .
895 .LP
896 .DS
897 .ft CW
898 SRC=/oldroot/usr
899
900 cd $SRC; tar cf - msgs preserve | (cd /var && tar xpf -)
901 .DE
902 .DS
903 .ft CW
904 # copy $SRC/spool to /var
905 cd $SRC/spool
906 tar cf - at mail rwho | (cd /var && tar xpf -)
907 tar cf - ftp mqueue news secretmail uucp uucppublic | \e
908         (cd /var/spool && tar xpf -)
909 .DE
910 .DS
911 .ft CW
912 # everything else in spool is probably a printer area
913 mkdir .save
914 mv at ftp mail mqueue rwho secretmail uucp uucppublic .save
915 tar cf - * | (cd /var/spool/output && tar xpf -)
916 mv .save/* .
917 rmdir .save
918 .DE
919 .DS
920 .ft CW
921 cd /var/spool/mqueue
922 mv syslog.7 /var/log/maillog.7
923 mv syslog.6 /var/log/maillog.6
924 mv syslog.5 /var/log/maillog.5
925 mv syslog.4 /var/log/maillog.4
926 mv syslog.3 /var/log/maillog.3
927 mv syslog.2 /var/log/maillog.2
928 mv syslog.1 /var/log/maillog.1
929 mv syslog.0 /var/log/maillog.0
930 mv syslog /var/log/maillog
931 .DE
932 .DS
933 .ft CW
934 # move $SRC/adm to /var
935 cd $SRC/adm
936 tar cf - . | (cd /var/account && tar  xpf -)
937 cd /var/account
938 rm -f msgbuf
939 mv messages messages.[0-9] ../log
940 mv wtmp wtmp.[0-9] ../log
941 mv lastlog ../log
942 .DE
943 .Sh 2 "Bug fixes and changes between \*(Ps and \*(4B"
944 .PP
945 The major new facilities available in the \*(4B release are
946 a new virtual memory system,
947 the addition of ISO/OSI networking support,
948 a new virtual filesystem interface supporting filesystem stacking,
949 a freely redistributable implementation of NFS,
950 a log-structured filesystem,
951 enhancement of the local filesystems to support
952 files and filesystems that are up to 2^63 bytes in size,
953 enhanced security and system management support,
954 and the conversion to and addition of the IEEE Std1003.1 (``POSIX'')
955 facilities and many of the IEEE Std1003.2 facilities.
956 In addition, many new utilities and additions to the C
957 library are present as well.
958 The kernel sources have been reorganized to collect all machine-dependent
959 files for each architecture under one directory,
960 and most of the machine-independent code is now free of code
961 conditional on specific machines.
962 The user structure and process structure have been reorganized
963 to eliminate the statically-mapped user structure and to make most
964 of the process resources shareable by multiple processes.
965 The system and include files have been converted to be compatible
966 with ANSI C, including function prototypes for most of the exported
967 functions.
968 There are numerous other changes throughout the system.
969 .Sh 3 "Changes to the kernel"
970 .PP
971 This release includes several important structural kernel changes.
972 The kernel uses a new internal system call convention;
973 the use of global (``u-dot'') variables for parameters and error returns
974 has been eliminated,
975 and interrupted system calls no longer abort using non-local goto's (longjmp's).
976 A new sleep interface separates signal handling from scheduling priority,
977 returning characteristic errors to abort or restart the current system call.
978 This sleep call also passes a string describing the process state,
979 that is used by the ps(1) program.
980 The old sleep interface can be used only for non-interruptible sleeps.
981 The sleep interface (\fItsleep\fP) can be used at any priority,
982 but is only interruptible if the PCATCH flag is set.
983 When interrupted, \fItsleep\fP returns EINTR or ERESTART.
984 .PP
985 Many data structures that were previously statically allocated
986 are now allocated dynamically.
987 These structures include mount entries, file entries,
988 user open file descriptors, the process entries, the vnode table,
989 the name cache, and the quota structures.
990 .PP
991 To protect against indiscriminate reading or writing of kernel
992 memory, all writing and most reading of kernel data structures
993 must be done using a new ``sysctl'' interface.
994 The information to be accessed is described through an extensible
995 ``Management Information Base'' (MIB) style name,
996 described as a dotted set of components.
997 A new utility,
998 .Xr sysctl (8),
999 retrieves kernel state and allows processes with appropriate
1000 privilege to set kernel state.
1001 .Sh 3 "Security"
1002 .PP
1003 The kernel runs with four different levels of security.
1004 Any superuser process can raise the security level, but only
1005 .Fn init (8)
1006 can lower it.
1007 Security levels are defined as follows:
1008 .IP \-1
1009 Permanently insecure mode \- always run system in level 0 mode.
1010 .IP "  0"
1011 Insecure mode \- immutable and append-only flags may be turned off.
1012 All devices may be read or written subject to their permissions.
1013 .IP "  1"
1014 Secure mode \- immutable and append-only flags may not be cleared;
1015 disks for mounted filesystems,
1016 .Pn /dev/mem ,
1017 and
1018 .Pn /dev/kmem
1019 are read-only.
1020 .IP "  2"
1021 Highly secure mode \- same as secure mode, plus disks are always
1022 read-only whether mounted or not.
1023 This level precludes tampering with filesystems by unmounting them,
1024 but also inhibits running
1025 .Xr newfs (8)
1026 while the system is multi-user.
1027 See
1028 .Xr chflags (1)
1029 and the \-\fBo\fP option to
1030 .Xr ls (1)
1031 for information on setting and displaying the immutable and append-only
1032 flags.
1033 .PP
1034 Normally, the system runs in level 0 mode while single user
1035 and in level 1 mode while multiuser.
1036 If the level 2 mode is desired while running multiuser,
1037 it can be set in the startup script
1038 .Pn /etc/rc
1039 using
1040 .Xr sysctl (1).
1041 If it is desired to run the system in level 0 mode while multiuser,
1042 the administrator must build a kernel with the variable
1043 .Li securelevel
1044 in the kernel source file
1045 .Pn /sys/kern/kern_sysctl.c
1046 initialized to \-1.
1047 .Sh 4 "Virtual memory changes"
1048 .PP
1049 The new virtual memory implementation is derived from the Mach
1050 operating system developed at Carnegie-Mellon,
1051 and was ported to the BSD kernel at the University of Utah.
1052 It is based on the 2.0 release of Mach
1053 (with some bug fixes from the 2.5 and 3.0 releases)
1054 and retains many of its essential features such as
1055 the separation of the machine dependent and independent layers
1056 (the ``pmap'' interface),
1057 efficient memory utilization using copy-on-write
1058 and other lazy-evaluation techniques,
1059 and support for large, sparse address spaces.
1060 It does not include the ``external pager'' interface instead using
1061 a primitive internal pager interface.
1062 The Mach virtual memory system call interface has been replaced with the
1063 ``mmap''-based interface described in the ``Berkeley Software
1064 Architecture Manual'' (see UNIX Programmer's Manual,
1065 Supplementary Documents, PSD:5).
1066 The interface is similar to the interfaces shipped
1067 by several commercial vendors such as Sun, USL, and Convex Computer Corp.
1068 The integration of the new virtual memory is functionally complete,
1069 but still has serious performance problems under heavy memory load.
1070 The internal kernel interfaces have not yet been completed
1071 and the memory pool and buffer cache have not been merged.
1072 Some additional caveats:
1073 .IP \(bu
1074 Since the code is based on the 2.0 release of Mach,
1075 bugs and misfeatures of the BSD version should not be considered
1076 short-comings of the current Mach virtual memory system.
1077 .IP \(bu
1078 Because of the disjoint virtual memory (page) and IO (buffer) caches,
1079 it is possible to see inconsistencies if using both the mmap and
1080 read/write interfaces on the same file simultaneously.
1081 .IP \(bu
1082 Swap space is allocated on-demand rather than up front and no
1083 allocation checks are performed so it is possible to over-commit
1084 memory and eventually deadlock.
1085 .IP \(bu
1086 The semantics of the
1087 .Xr vfork (2)
1088 system call are slightly different.
1089 The synchronization between parent and child is preserved,
1090 but the memory sharing aspect is not.
1091 In practice this has been enough for backward compatibility,
1092 but newer code should just use
1093 .Xr fork (2).
1094 .Sh 4 "Networking additions and changes"
1095 .PP
1096 The ISO/OSI Networking consists of a kernel implementation of
1097 transport class 4 (TP-4),
1098 connectionless networking protocol (CLNP),
1099 and 802.3-based link-level support (hardware-compatible with Ethernet\**).
1100 .FS
1101 Ethernet is a trademark of the Xerox Corporation.
1102 .FE
1103 We also include support for ISO Connection-Oriented Network Service,
1104 X.25, TP-0.
1105 The session and presentation layers are provided outside
1106 the kernel using the ISO Development Environment by Marshall Rose,
1107 that is available via anonymous FTP
1108 (but is not included on the distribution tape).
1109 Included in this development environment are file
1110 transfer and management (FTAM), virtual terminals (VT),
1111 a directory services implementation (X.500),
1112 and miscellaneous other utilities.
1113 .PP
1114 Kernel support for the ISO OSI protocols is enabled with the ISO option
1115 in the kernel configuration file.
1116 The
1117 .Xr iso (4)
1118 manual page describes the protocols and addressing;
1119 see also
1120 .Xr clnp (4),
1121 .Xr tp (4)
1122 and
1123 .Xr cltp (4).
1124 The OSI equivalent to ARP is ESIS (End System to Intermediate System Routing
1125 Protocol); running this protocol is mandatory, however one can manually add
1126 translations for machines that do not participate by use of the
1127 .Xr route (8)
1128 command.
1129 Additional information is provided in the manual page describing
1130 .Xr esis (4).
1131 .PP
1132 The command
1133 .Xr route (8)
1134 has a new syntax and several new capabilities:
1135 it can install routes with a specified destination and mask,
1136 and can change route characteristics such as hop count, packet size
1137 and window size.
1138 .PP
1139 Several important enhancements have been added to the TCP/IP
1140 protocols including TCP header prediction and
1141 serial line IP (SLIP) with header compression.
1142 The routing implementation has been completely rewritten
1143 to use a hierarchical routing tree with a mask per route
1144 to support the arbitrary levels of routing found in the ISO protocols.
1145 The routing table also stores and caches route characteristics
1146 to speed the adaptation of the throughput and congestion avoidance
1147 algorithms.
1148 .PP
1149 The format of the
1150 .I sockaddr
1151 structure (the structure used to describe a generic network address with an
1152 address family and family-specific data)
1153 has changed from previous releases,
1154 as have the address family-specific versions of this structure.
1155 The
1156 .I sa_family
1157 family field has been split into a length,
1158 .Pn sa_len ,
1159 and a family,
1160 .Pn sa_family .
1161 System calls that pass a
1162 .I sockaddr
1163 structure into the kernel (e.g.
1164 .Fn sendto
1165 and
1166 .Fn connect )
1167 have a separate parameter that specifies the
1168 .I sockaddr
1169 length, and thus it is not necessary to fill in the
1170 .I sa_len
1171 field for those system calls.
1172 System calls that pass a
1173 .I sockaddr
1174 structure back from the kernel (e.g.
1175 .Fn recvfrom
1176 and
1177 .Fn accept )
1178 receive a completely filled-in
1179 .I sockaddr
1180 structure, thus the length field is valid.
1181 Because this would not work for old binaries,
1182 the new library uses a different system call number.
1183 Thus, most networking programs compiled under \*(4B are incompatible
1184 with older systems.
1185 .PP
1186 Although this change is mostly source and binary compatible
1187 with old programs, there are three exceptions.
1188 Programs with statically initialized
1189 .I sockaddr
1190 structures
1191 (usually the Internet form, a
1192 .I sockaddr_in )
1193 are not compatible.
1194 Generally, such programs should be changed to fill in the structure
1195 at run time, as C allows no way to initialize a structure without
1196 assuming the order and number of fields.
1197 Also, programs with use structures to describe a network packet format
1198 that contain embedded
1199 .I sockaddr
1200 structures also require change; a definition of an
1201 .I osockaddr
1202 structure is provided for this purpose.
1203 Finally, programs that use the
1204 .Sm SIOCGIFCONF
1205 ioctl to get a complete list of interface addresses
1206 need to check the
1207 .I sa_len
1208 field when iterating through the array of addresses returned,
1209 as not all the structures returned have the same length
1210 (this variance in length is nearly guaranteed by the presence of link-layer
1211 address structures).
1212 .Sh 4 "Additions and changes to filesystems"
1213 .PP
1214 The \*(4B distribution contains most of the interfaces
1215 specified in the IEEE Std1003.1 system interface standard.
1216 Filesystem additions include IEEE Std1003.1 FIFOs,
1217 byte-range file locking, and saved user and group identifiers.
1218 .PP
1219 A new virtual filesystem interface has been added to the
1220 kernel to support multiple filesystems.
1221 In comparison with other interfaces,
1222 the Berkeley interface has been structured for more efficient support
1223 of filesystems that maintain state (such as the local filesystem).
1224 The interface has been extended with support for stackable
1225 filesystems done at UCLA.
1226 These extensions allow for filesystems to be layered on top of each
1227 other and allow new vnode operations to be added without requiring
1228 changes to existing filesystem implementations.
1229 For example,
1230 the umap filesystem (see
1231 .Xr mount_umap (8))
1232 is used to mount a sub-tree of an existing filesystem
1233 that uses a different set of uids and gids than the local system.
1234 Such a filesystem could be mounted from a remote site via NFS or it
1235 could be a filesystem on removable media brought from some foreign
1236 location that uses a different password file.
1237 .PP
1238 Other new filesystems that may be stacked include the loopback filesystem
1239 .Xr mount_lofs (8),
1240 and the kernel filesystem
1241 .Xr mount_kernfs (8).
1242 .PP
1243 The buffer cache in the kernel is now organized as a file block cache
1244 rather than a device block cache.
1245 As a consequence, cached blocks from a file
1246 and from the corresponding block device would no longer be kept consistent.
1247 The block device thus has little remaining value.
1248 Three changes have been made for these reasons:
1249 .IP 1)
1250 block devices may not be opened while they are mounted,
1251 and may not be mounted while open, so that the two versions of cached
1252 file blocks cannot be created,
1253 .IP 2)
1254 filesystem checks of the root now use the raw device
1255 to access the root filesystem, and
1256 .IP 3)
1257 the root filesystem is initially mounted read-only
1258 so that nothing can be written back to disk during or after change to
1259 the raw filesystem by
1260 .Xr fsck .
1261 .LP
1262 The root filesystem may be made writable while in single-user mode
1263 with the command:
1264 .DS
1265 .ft CW
1266 mount \-uw /
1267 .DE
1268 The mount command has an option to update the flags on a mounted filesystem,
1269 including the ability to upgrade a filesystem from read-only to read-write
1270 or downgrade it from read-write to read-only.
1271 .PP
1272 In addition to the local ``fast filesystem'',
1273 we have added an implementation of the network filesystem (NFS)
1274 that fully interoperates with the NFS shipped by Sun and its licensees.
1275 Because our NFS implementation was implemented
1276 by Rick Macklem of the University of Guelph
1277 using only the publicly available NFS specification,
1278 it does not require a license from Sun to use in source or binary form.
1279 By default it runs over UDP to be compatible with Sun's implementation.
1280 However, it can be configured on a per-mount basis to run over TCP.
1281 Using TCP allows it to be used quickly and efficiently through
1282 gateways and over long-haul networks.
1283 Using an extended protocol, it supports Leases to allow a limited
1284 callback mechanism that greatly reduces the network traffic necessary
1285 to maintain cache consistency between the server and its clients.
1286 Its use will be familiar to users of other implementations of NFS.
1287 See the manual pages
1288 .Xr mount (8),
1289 .Xr mountd (8),
1290 .Xr fstab (5),
1291 .Xr exports (5),
1292 .Xr netgroup (5),
1293 .Xr nfsd (8),
1294 .Xr nfsiod (8),
1295 and
1296 .Xr nfssvc (8).
1297 and the document ``The 4.4BSD NFS Implementation'' (SMM:6)
1298 for further information.
1299 The format of
1300 .Pn /etc/fstab
1301 has changed from previous \*(Bs releases
1302 to a blank-separated format to allow colons in pathnames.
1303 .PP
1304 A new local filesystem, the log-structured filesystem (LFS),
1305 has been added to the system.
1306 It provides near disk-speed output and fast crash recovery.
1307 This work is based, in part, on the LFS filesystem created
1308 for the Sprite operating system at Berkeley.
1309 While the kernel implementation is almost complete,
1310 only some of the utilities to support the
1311 filesystem have been written,
1312 so we do not recommend it for production use.
1313 See
1314 .Xr newlfs (8),
1315 .Xr mount_lfs (8)
1316 and
1317 .Xr lfs_cleanerd (8)
1318 for more information.
1319 For an in-depth description of the implementation and performance
1320 characteristics of log-structured filesystems in general,
1321 and this one in particular, see Dr. Margo Seltzer's doctoral thesis,
1322 available from the University of California Computer Science Department.
1323 .PP
1324 We have also added a memory-based filesystem that runs in
1325 pageable memory, allowing large temporary filesystems without
1326 requiring dedicated physical memory.
1327 .PP
1328 The local ``fast filesystem'' has been enhanced to do
1329 clustering that allows large pieces of files to be
1330 allocated contiguously resulting in near doubling
1331 of filesystem throughput.
1332 The filesystem interface has been extended to allow
1333 files and filesystems to grow to 2^63 bytes in size.
1334 The quota system has been rewritten to support both
1335 user and group quotas (simultaneously if desired).
1336 Quota expiration is based on time rather than
1337 the previous metric of number of logins over quota.
1338 This change makes quotas more useful on fileservers
1339 onto which users seldom login.
1340 .PP
1341 The system security has been greatly enhanced by the
1342 addition of additional file flags that permit a file to be
1343 marked as immutable or append only.
1344 Once set, these flags can only be cleared by the super-user
1345 when the system is running in insecure mode (normally, single-user).
1346 In addition to the immutable and append-only flags,
1347 the filesystem supports a new user-settable flag ``nodump''.
1348 (File flags are set using the
1349 .Xr chflags (1)
1350 utility.)
1351 When set on a file,
1352 .Xr dump (8)
1353 will omit the file from incremental backups
1354 but retain them on full backups.
1355 See the ``-h'' flag to
1356 .Xr dump (8)
1357 for details on how to change this default.
1358 The ``nodump'' flag is usually set on core dumps,
1359 system crash dumps, and object files generated by the compiler.
1360 Note that the flag is not preserved when files are copied
1361 so that installing an object file will cause it to be preserved.
1362 .PP
1363 The filesystem format used in \*(4B has several additions.
1364 Directory entries have an additional field,
1365 .Pn d_type ,
1366 that identifies the type of the entry
1367 (normally found in the
1368 .Pn st_mode
1369 field of the
1370 .Pn stat
1371 structure).
1372 This field is particularly useful for identifying
1373 directories without the need to use
1374 .Xr stat (2).
1375 .PP
1376 Short (less than sixty byte) symbolic links are now stored
1377 in the inode itself rather than in a separate data block.
1378 This saves disk space and makes access of symbolic links faster.
1379 Short symbolic links are not given a special type,
1380 so a user-level application is unaware of their special treatment.
1381 Unlike pre-\*(4B systems, symbolic links do
1382 not have an owner, group, access mode, times, etc.
1383 Instead, these attributes are taken from the directory that contains the link.
1384 The only attributes returned from an
1385 .Xr lstat (2)
1386 that refer to the symbolic link itself are the file type (S_IFLNK),
1387 size, blocks, and link count (always 1).
1388 .PP
1389 An implementation of an auto-mounter daemon,
1390 .Xr amd ,
1391 was contributed by Jan-Simon Pendry of the
1392 Imperial College of Science, Technology & Medicine.
1393 See the document ``AMD \- The 4.4BSD Automounter'' (SMM:13)
1394 for further information.
1395 .PP
1396 The directory
1397 .Pn /dev/fd
1398 contains special files
1399 .Pn 0
1400 through
1401 .Pn 63
1402 that, when opened, duplicate the corresponding file descriptor.
1403 The names
1404 .Pn /dev/stdin ,
1405 .Pn /dev/stdout
1406 and
1407 .Pn /dev/stderr
1408 refer to file descriptors 0, 1 and 2.
1409 See
1410 .Xr fd (4)
1411 and
1412 .Xr mount_fdesc (8)
1413 for more information.
1414 .Sh 4 "POSIX terminal driver changes"
1415 .PP
1416 The \*(4B system uses the IEEE P1003.1 (POSIX.1) terminal interface
1417 rather than the previous \*(Bs terminal interface.
1418 The terminal driver is similar to the System V terminal driver
1419 with the addition of the necessary extensions to get the
1420 functionality previously available in the \*(Ps terminal driver.
1421 Both the old
1422 .Xr ioctl
1423 calls and old options to
1424 .Xr stty (1)
1425 are emulated.
1426 This emulation is expected to be unavailable in many vendors releases,
1427 so conversion to the new interface is encouraged.
1428 .PP
1429 \*(4B also adds the IEEE Std1003.1 job control interface,
1430 that is similar to the \*(Ps job control interface,
1431 but adds a security model that was missing in the
1432 \*(Ps job control implementation.
1433 A new system call,
1434 .Fn setsid ,
1435 creates a job-control session consisting of a single process
1436 group with one member, the caller, that becomes a session leader.
1437 Only a session leader may acquire a controlling terminal.
1438 This is done explicitly via a
1439 .Sm TIOCSCTTY
1440 .Fn ioctl
1441 call, not implicitly by an
1442 .Fn open
1443 call.
1444 The call fails if the terminal is in use.
1445 Programs that allocate controlling terminals (or pseudo-terminals)
1446 require change to work in this environment.
1447 The versions of
1448 .Xr xterm
1449 provided in the X11R5 release includes the necessary changes.
1450 New library routines are available for allocating and initializing
1451 pseudo-terminals and other terminals as controlling terminal; see
1452 .Pn /usr/src/lib/libutil/pty.c
1453 and
1454 .Pn /usr/src/lib/libutil/login_tty.c .
1455 .PP
1456 The POSIX job control model formalizes the previous conventions
1457 used in setting up a process group.
1458 Unfortunately, this requires that changes be made in a defined order
1459 and with some synchronization that were not necessary in the past.
1460 Older job control shells (csh, ksh) will generally not operate correctly
1461 with the new system.
1462 .PP
1463 Most of the other kernel interfaces have been changed to correspond
1464 with the POSIX.1 interface, although that work is not complete.
1465 See the relevant manual pages and the IEEE POSIX standard.
1466 .Sh 4 "Native operating system compatibility"
1467 .PP
1468 Both the HP300 and SPARC ports feature the ability to run binaries
1469 built for the native operating system (HP-UX or SunOS) by emulating
1470 their system calls.
1471 Building an HP300 kernel with the HPUXCOMPAT and COMPAT_OHPUX options
1472 or a SPARC kernel with the COMPAT_SUNOS option will enable this feature
1473 (on by default in the generic kernel provided in the root filesystem image).
1474 Though this native operating system compatibility was provided by the
1475 developers as needed for their purposes and is by no means complete,
1476 it is complete enough to run several non-trivial applications including
1477 those that require HP-UX or SunOS shared libraries.
1478 For example, the vendor supplied X11 server and windowing environment
1479 can be used on both the HP300 and SPARC.
1480 .PP
1481 It is important to remember that merely copying over a native binary
1482 and executing it (or executing it directly across NFS) does not imply
1483 that it will run.
1484 All but the most trivial of applications are likely to require access
1485 to auxiliary files that do not exist under \*(4B (e.g.
1486 .Pn /etc/ld.so.cache )
1487 or have a slightly different format (e.g.
1488 .Pn /etc/passwd ).
1489 However, by using system call tracing and
1490 through creative use of symlinks,
1491 many problems can be tracked down and corrected.
1492 .PP
1493 The DECstation port also has code for ULTRIX emulation
1494 (kernel option ULTRIXCOMPAT, not compiled into the generic kernel)
1495 but it was used primarily for initially bootstrapping the port and
1496 has not been used since.
1497 Hence, some work may be required to make it generally useful.
1498 .Sh 3 "Changes to the utilities"
1499 .PP
1500 We have been tracking the IEEE Std1003.2 shell and utility work
1501 and have included prototypes of many of the proposed utilities
1502 based on draft 12 of the POSIX.2 Shell and Utilities document.
1503 Because most of the traditional utilities have been replaced
1504 with implementations conformant to the POSIX standards,
1505 you should realize that the utility software may not be as stable,
1506 reliable or well documented as in traditional Berkeley releases.
1507 In particular, almost the entire manual suite has been rewritten to
1508 reflect the POSIX defined interfaces, and in some instances
1509 it does not correctly reflect the current state of the software.
1510 It is also worth noting that, in rewriting this software, we have generally
1511 been rewarded with significant performance improvements.
1512 Most of the libraries and header files have been converted
1513 to be compliant with ANSI C.
1514 The shipped compiler (gcc) is a superset of ANSI C,
1515 but supports traditional C as a command-line option.
1516 The system libraries and utilities all compile
1517 with either ANSI or traditional C.
1518 .Sh 4 "Make and Makefiles"
1519 .PP
1520 This release uses a completely new version of the
1521 .Xr make
1522 program derived from the
1523 .Xr pmake
1524 program developed by the Sprite project at Berkeley.
1525 It supports existing makefiles, although certain incorrect makefiles
1526 may fail.
1527 The makefiles for the \*(4B sources make extensive use of the new
1528 facilities, especially conditionals and file inclusion, and are thus
1529 completely incompatible with older versions of
1530 .Xr make
1531 (but nearly all the makefiles are now trivial!).
1532 The standard include files for
1533 .Xr make
1534 are in
1535 .Pn /usr/share/mk .
1536 There is a
1537 .Pn bsd.README
1538 file in
1539 .Pn /usr/src/share/mk .
1540 .PP
1541 Another global change supported by the new
1542 .Xr make
1543 is designed to allow multiple architectures to share a copy of the sources.
1544 If a subdirectory named
1545 .Pn obj
1546 is present in the current directory,
1547 .Xr make
1548 descends into that directory and creates all object and other files there.
1549 We use this by building a directory hierarchy in
1550 .Pn /var/obj
1551 that parallels
1552 .Pn /usr/src .
1553 We then create the
1554 .Pn obj
1555 subdirectories in
1556 .Pn /usr/src
1557 as symbolic links to the corresponding directories in
1558 .Pn /var/obj .
1559 (This step is automated.
1560 The command ``make obj'' in
1561 .Pn /usr/src
1562 builds both the local symlink and the shadow directory,
1563 using
1564 .Pn /usr/obj ,
1565 that may be a symbolic link, as the root of the shadow tree.
1566 The use of
1567 .Pn /usr/obj
1568 is for historic reasons only, and the system make configuration files in
1569 .Pn /usr/share/mk
1570 can trivially be modified to use
1571 .Pn /var/obj
1572 instead.)
1573 We have one
1574 .Pn /var/obj
1575 hierarchy on the local system, and another on each
1576 system that shares the source filesystem.
1577 All the sources in
1578 .Pn /usr/src
1579 except for
1580 .Pn /usr/src/contrib
1581 and portions of
1582 .Pn /usr/src/old
1583 have been converted to use the new make and
1584 .Pn obj
1585 subdirectories;
1586 this change allows compilation for multiple
1587 architectures from the same source tree
1588 (that may be mounted read-only).
1589 .Sh 4 "Kerberos"
1590 .PP
1591 The Kerberos authentication system designed by MIT (version 5)
1592 is included in this release.
1593 See
1594 .Xr kerberos (8)
1595 for a general introduction.
1596 Pluggable Authentication Modules (PAM) can use Kerberos
1597 at the system administrator's discretion.
1598 If it is configured,
1599 apps such as 
1600 .Xr login (1),
1601 .Xr passwd (1),
1602 .Xr ftp (1)
1603 and
1604 .Xr ssh (1)
1605 can use it automatically.
1606 The file
1607 Each system needs the file
1608 .Pn /etc/krb5.conf
1609 to set its realm and local servers,
1610 and a private key stored in
1611 .Pn /etc/krb5.keytab
1612 (see
1613 .Xr ktutil (8)).
1614 The Kerberos server should be set up on a single,
1615 physically secure,
1616 server machine.
1617 Users and hosts may be added and modified with
1618 .Xr kadmin (8).
1619 .PP
1620 Note that the password-changing program
1621 .Xr passwd (1)
1622 can change the Kerberos password,
1623 if configured by the administrator using PAM.
1624 The
1625 .Li \-l
1626 option to
1627 .Xr passwd (1)
1628 changes the ``local'' password if one exists.
1629 .Sh 4 "Timezone support"
1630 .PP
1631 The timezone conversion code in the C library uses data files installed in
1632 .Pn /usr/share/zoneinfo
1633 to convert from ``GMT'' to various timezones.  The data file for the default
1634 timezone for the system should be copied to
1635 .Pn /etc/localtime .
1636 Other timezones can be selected by setting the TZ environment variable.
1637 .PP
1638 The data files initially installed in
1639 .Pn /usr/share/zoneinfo
1640 include corrections for leap seconds since the beginning of 1970.
1641 Thus, they assume that the
1642 kernel will increment the time at a constant rate during a leap second;
1643 that is, time just keeps on ticking.  The conversion routines will then
1644 name a leap second 23:59:60.  For purists, this effectively means that
1645 the kernel maintains TAI (International Atomic Time) rather than UTC
1646 (Coordinated Universal Time, aka GMT).
1647 .PP
1648 For systems that run current NTP (Network Time Protocol) implementations
1649 or that wish to conform to the letter of the POSIX.1 law, it is possible
1650 to rebuild the timezone data files so that leap seconds are not counted.
1651 (NTP causes the time to jump over a leap second, and POSIX effectively
1652 requires the clock to be reset by hand when a leap second occurs.
1653 In this mode, the kernel effectively runs UTC rather than TAI.)
1654 .PP
1655 The data files without leap second information
1656 are constructed from the source directory,
1657 .Pn /usr/src/share/zoneinfo .
1658 Change the variable REDO in Makefile
1659 from ``right'' to ``posix'', and then do
1660 .DS
1661 make obj        (if necessary)
1662 make
1663 make install
1664 .DE
1665 .PP
1666 You will then need to copy the correct default zone file to
1667 .Pn /etc/localtime ,
1668 as the old one would still have used leap seconds, and because the Makefile
1669 installs a default
1670 .Pn /etc/localtime
1671 each time ``make install'' is done.
1672 .PP
1673 It is possible to install both sets of timezone data files.  This results
1674 in subdirectories
1675 .Pn /usr/share/zoneinfo/right
1676 and
1677 .Pn /usr/share/zoneinfo/posix .
1678 Each contain a complete set of zone files.
1679 See
1680 .Pn /usr/src/share/zoneinfo/Makefile
1681 for details.
1682 .Sh 4 "Additions and changes to the libraries"
1683 .PP
1684 Notable additions to the libraries include functions to traverse a
1685 filesystem hierarchy, database interfaces to btree and hashing functions,
1686 a new, faster implementation of stdio and a radix and merge sort
1687 functions.
1688 .PP
1689 The
1690 .Xr fts (3)
1691 functions will do either physical or logical traversal of
1692 a file hierarchy as well as handle essentially infinite depth
1693 filesystems and filesystems with cycles.
1694 All the utilities in \*(4B which traverse file hierarchies
1695 have been converted to use
1696 .Xr fts (3).
1697 The conversion has always resulted in a significant performance
1698 gain, often of four or five to one in system time.
1699 .PP
1700 The
1701 .Xr dbopen (3)
1702 functions are intended to be a family of database access methods.
1703 Currently, they consist of
1704 .Xr hash (3),
1705 an extensible, dynamic hashing scheme,
1706 .Xr btree (3),
1707 a sorted, balanced tree structure (B+tree's), and
1708 .Xr recno (3),
1709 a flat-file interface for fixed or variable length records
1710 referenced by logical record number.
1711 Each of the access methods stores associated key/data pairs and
1712 uses the same record oriented interface for access.
1713 .PP
1714 The
1715 .Xr qsort (3)
1716 function has been rewritten for additional performance.
1717 In addition, three new types of sorting functions,
1718 .Xr heapsort (3),
1719 .Xr mergesort (3)
1720 and
1721 .Xr radixsort (3)
1722 have been added to the system.
1723 The
1724 .Xr mergesort
1725 function is optimized for data with pre-existing order,
1726 in which case it usually significantly outperforms
1727 .Xr qsort .
1728 The
1729 .Xr radixsort (3)
1730 functions are variants of most-significant-byte radix sorting.
1731 They take time linear to the number of bytes to be
1732 sorted, usually significantly outperforming
1733 .Xr qsort
1734 on data that can be sorted in this fashion.
1735 An implementation of the POSIX 1003.2 standard
1736 .Xr sort (1),
1737 based on
1738 .Xr radixsort ,
1739 is included in
1740 .Pn /usr/src/contrib/sort .
1741 .PP
1742 Some additional comments about the \*(4B C library:
1743 .IP \(bu
1744 The floating point support in the C library has been replaced
1745 and is now accurate.
1746 .IP \(bu
1747 The C functions specified by both ANSI C, POSIX 1003.1 and
1748 1003.2 are now part of the C library.
1749 This includes support for file name matching, shell globbing
1750 and both basic and extended regular expressions.
1751 .IP \(bu
1752 ANSI C multibyte and wide character support has been integrated.
1753 The rune functionality from the Bell Labs' Plan 9 system is provided
1754 as well.
1755 .IP \(bu
1756 The
1757 .Xr termcap (3)
1758 functions have been generalized and replaced with a general
1759 purpose interface named
1760 .Xr getcap (3).
1761 .IP \(bu
1762 The
1763 .Xr stdio (3)
1764 routines have been replaced, and are usually much faster.
1765 In addition, the
1766 .Xr funopen (3)
1767 interface permits applications to provide their own I/O stream
1768 function support.
1769 .PP
1770 The
1771 .Xr curses (3)
1772 library has been largely rewritten.
1773 Important additional features include support for scrolling and
1774 .Xr termios (3).
1775 .PP
1776 An application front-end editing library, named libedit, has been
1777 added to the system.
1778 .PP
1779 A superset implementation of the SunOS kernel memory interface library,
1780 libkvm, has been integrated into the system.
1781 .PP
1782 .Sh 4 "Additions and changes to other utilities"
1783 .PP
1784 There are many new utilities, offering many new capabilities,
1785 in \*(4B.
1786 Skimming through the section 1 and section 8 manual pages is sure
1787 to be useful.
1788 The additions to the utility suite include greatly enhanced versions of
1789 programs that display system status information, implementations of
1790 various traditional tools described in the IEEE Std1003.2 standard,
1791 new tools not previous available on Berkeley UNIX systems,
1792 and many others.
1793 Also, with only a very few exceptions, all the utilities from
1794 \*(Ps that included proprietary source code have been replaced,
1795 and their \*(4B counterparts are freely redistributable.
1796 Normally, this replacement resulted in significant performance
1797 improvements and the increase of the limits imposed on data by
1798 the utility as well.
1799 .PP
1800 A summary of specific additions and changes are as follows:
1801 .TS
1802 lfC l.
1803 amd     An auto-mounter implementation.
1804 ar      Replacement of the historic archive format with a new one.
1805 awk     Replaced by gawk; see /usr/src/old/awk for the historic version.
1806 bdes    Utility implementing DES modes of operation described in FIPS PUB 81.
1807 calendar        Addition of an interface for system calendars.
1808 cap_mkdb        Utility for building hashed versions of termcap style databases.
1809 cc      Replacement of pcc with gcc suite.
1810 chflags A utility for setting the per-file user and system flags.
1811 chfn    An editor based replacement for changing user information.
1812 chpass  An editor based replacement for changing user information.
1813 chsh    An editor based replacement for changing user information.
1814 cksum   The POSIX 1003.2 checksum utility; compatible with sum.
1815 column  A columnar text formatting utility.
1816 cp      POSIX 1003.2 compatible, able to copy special files.
1817 csh     Freely redistributable and 8-bit clean.
1818 date    User specified formats added.
1819 dd      New EBCDIC conversion tables, major performance improvements.
1820 dev_mkdb        Hashed interface to devices.
1821 dm      Dungeon master.
1822 find    Several new options and primaries, major performance improvements.
1823 fstat   Utility displaying information on files open on the system.
1824 ftpd    Connection logging added.
1825 hexdump A binary dump utility, superseding od.
1826 id      The POSIX 1003.2 user identification utility.
1827 inetd   Tcpmux added.
1828 jot     A text formatting utility.
1829 kdump   A system-call tracing facility.
1830 ktrace  A system-call tracing facility.
1831 kvm_mkdb        Hashed interface to the kernel name list.
1832 lam     A text formatting utility.
1833 lex     A new, freely redistributable, significantly faster version.
1834 locate  A database of the system files, by name, constructed weekly.
1835 logname The POSIX 1003.2 user identification utility.
1836 mail.local      New local mail delivery agent, replacing mail.
1837 make    Replaced with a new, more powerful make, supporting include files.
1838 man     Added support for man page location configuration.
1839 mkdep   A new utility for generating make dependency lists.
1840 mkfifo  The POSIX 1003.2 FIFO creation utility.
1841 mtree   A new utility for mapping file hierarchies to a file.
1842 nfsstat An NFS statistics utility.
1843 nvi     A freely redistributable replacement for the ex/vi editors.
1844 pax     The POSIX 1003.2 replacement for cpio and tar.
1845 printf  The POSIX 1003.2 replacement for echo.
1846 roff    Replaced by groff; see /usr/src/old/roff for the historic versions.
1847 rs      New utility for text formatting.
1848 shar    An archive building utility.
1849 sysctl  MIB-style interface to system state.
1850 tcopy   Fast tape-to-tape copying and verification.
1851 touch   Time and file reference specifications.
1852 tput    The POSIX 1003.2 terminal display utility.
1853 tr      Addition of character classes.
1854 uname   The POSIX 1003.2 system identification utility.
1855 vis     A filter for converting and displaying non-printable characters.
1856 xargs   The POSIX 1003.2 argument list constructor utility.
1857 yacc    A new, freely redistributable, significantly faster version.
1858 .TE
1859 .PP
1860 The new versions of
1861 .Xr lex (1)
1862 (``flex'') and
1863 .Xr yacc (1)
1864 (``zoo'') should be installed early on if attempting to
1865 cross-compile \*(4B on another system.
1866 Note that the new
1867 .Xr lex
1868 program is not completely backward compatible with historic versions of
1869 .Xr lex ,
1870 although it is believed that all documented features are supported.
1871 .PP
1872 The
1873 .Xr find
1874 utility has two new options that are important to be aware of if you
1875 intend to use NFS.
1876 The ``fstype'' and ``prune'' options can be used together to prevent
1877 find from crossing NFS mount points.
1878 See
1879 .Pn /etc/daily
1880 for an example of their use.
1881 .Sh 2 "Hints on converting from \*(Ps to \*(4B"
1882 .PP
1883 This section summarizes changes between
1884 \*(Ps and \*(4B that are likely to
1885 cause difficulty in doing the conversion.
1886 It does not include changes in the network;
1887 see section 5 for information on setting up the network.
1888 .PP
1889 Since the stat st_size field is now 64-bits instead of 32,
1890 doing something like:
1891 .DS
1892 .ft CW
1893 foo(st.st_size);
1894 .DE
1895 and then (improperly) defining foo with an ``int'' or ``long'' parameter:
1896 .DS
1897 .ft CW
1898 foo(size)
1899         int size;
1900 {
1901         ...
1902 }
1903 .DE
1904 will fail miserably (well, it might work on a little endian machine).
1905 This problem showed up in
1906 .Xr emacs (1)
1907 as well as several other programs.
1908 A related problem is improperly casting (or failing to cast)
1909 the second argument to
1910 .Xr lseek (2),
1911 .Xr truncate (2),
1912 or
1913 .Xr ftruncate (2)
1914 ala:
1915 .DS
1916 .ft CW
1917 lseek(fd, (long)off, 0);
1918 .DE
1919 or
1920 .DS
1921 .ft CW
1922 lseek(fd, 0, 0);
1923 .DE
1924 The best solution is to include
1925 .Pn <unistd.h>
1926 which has prototypes that catch these types of errors.
1927 .PP
1928 Determining the ``namelen'' parameter for a
1929 .Xr connect (2)
1930 call on a unix domain socket should use the ``SUN_LEN'' macro from
1931 .Pn <sys/un.h> .
1932 One old way that was used:
1933 .DS
1934 .ft CW
1935 addrlen = strlen(unaddr.sun_path) + sizeof(unaddr.sun_family);
1936 .DE
1937 no longer works as there is an additional
1938 .Pn sun_len
1939 field.
1940 .PP
1941 The kernel's limit on the number of open files has been
1942 increased from 20 to 64.
1943 It is now possible to change this limit almost arbitrarily.
1944 The standard I/O library
1945 autoconfigures to the kernel limit.
1946 Note that file (``_iob'') entries may be allocated by
1947 .Xr malloc
1948 from
1949 .Xr fopen ;
1950 this allocation has been known to cause problems with programs
1951 that use their own memory allocators.
1952 Memory allocation does not occur until after 20 files have been opened
1953 by the standard I/O library.
1954 .PP
1955 .Xr Select
1956 can be used with more than 32 descriptors
1957 by using arrays of \fBint\fPs for the bit fields rather than single \fBint\fPs.
1958 Programs that used
1959 .Xr getdtablesize
1960 as their first argument to
1961 .Xr select
1962 will no longer work correctly.
1963 Usually the program can be modified to correctly specify the number
1964 of bits in an \fBint\fP.
1965 Alternatively the program can be modified to use an array of \fBint\fPs.
1966 There are a set of macros available in
1967 .Pn <sys/types.h>
1968 to simplify this.
1969 See
1970 .Xr select (2).
1971 .PP
1972 Old core files will not be intelligible by the current debuggers
1973 because of numerous changes to the user structure
1974 and because the kernel stack has been enlarged.
1975 The
1976 .Xr a.out
1977 header that was in the user structure is no longer present.
1978 Locally-written debuggers that try to check the magic number
1979 will need to be changed.
1980 .PP
1981 Files may not be deleted from directories having the ``sticky'' (ISVTX) bit
1982 set in their modes
1983 except by the owner of the file or of the directory, or by the superuser.
1984 This is primarily to protect users' files in publicly-writable directories
1985 such as
1986 .Pn /tmp
1987 and
1988 .Pn /var/tmp .
1989 All publicly-writable directories should have their ``sticky'' bits set
1990 with ``chmod +t.''
1991 .PP
1992 The following two sections contain additional notes about
1993 changes in \*(4B that affect the installation of local files;
1994 be sure to read them as well.