1.\" Copyright (c) 2000 2.\" Mike W. Meyer 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.\" 13.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND 14.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE 17.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23.\" SUCH DAMAGE. 24.\" 25.\" $FreeBSD$ 26.\" 27.Dd August 16, 2018 28.Dt BUILD 7 29.Os 30.Sh NAME 31.Nm build 32.Nd information on how to build the system 33.Sh DESCRIPTION 34The sources for the 35.Fx 36system and its applications are contained in three different directories, 37normally 38.Pa /usr/src , 39.Pa /usr/doc , 40and 41.Pa /usr/ports . 42These directories may be initially empty or non-existent until updated with 43.Xr svn 1 44or 45.Xr svnlite 1 46or 47.Xr portsnap 8 . 48Directory 49.Pa /usr/src 50contains the 51.Dq "base system" 52sources, which is loosely defined as the things required to rebuild 53the system to a useful state. 54Directory 55.Pa /usr/doc 56contains the source for the system documentation, excluding the manual 57pages. 58Directory 59.Pa /usr/ports 60contains a tree that provides a consistent interface for building and 61installing third party applications. 62For more information about the ports build process, see 63.Xr ports 7 . 64.Pp 65The 66.Xr make 1 67command is used in each of these directories to build and install the 68things in that directory. 69Issuing the 70.Xr make 1 71command in any directory or 72subdirectory of those directories has the same effect as issuing the 73same command in all subdirectories of that directory. 74With no target specified, the things in that directory are just built. 75.Pp 76A source tree is allowed to be read-only. 77As described in 78.Xr make 1 , 79objects are usually built in a separate object directory hierarchy 80specified by the environment variable 81.Va MAKEOBJDIRPREFIX , 82or under 83.Pa /usr/obj 84if variable 85.Va MAKEOBJDIRPREFIX 86is not set. 87The canonical object directory is described in the documentation for the 88.Cm buildworld 89target below. 90.Pp 91The build may be controlled by defining 92.Xr make 1 93variables described in the 94.Sx ENVIRONMENT 95section below, and by the variables documented in 96.Xr make.conf 5 . 97.Pp 98The following list provides the names and actions for the targets 99supported by the build system: 100.Bl -tag -width ".Cm cleandepend" 101.It Cm analyze 102Run Clang static analyzer against all objects and present output on stdout. 103.It Cm check 104Run tests for a given subdirectory. 105The default directory used is 106.Pa ${.OBJDIR} , 107but the check directory can be changed with 108.Pa ${CHECKDIR} . 109.It Cm checkworld 110Run the 111.Fx 112test suite on installed world. 113.It Cm clean 114Remove any files created during the build process. 115.It Cm cleandepend 116Remove the 117.Pa ${.OBJDIR}/${DEPENDFILE}* 118files generated by prior 119.Dq Li "make" 120and 121.Dq Li "make depend" 122steps. 123.It Cm cleandir 124Remove the canonical object directory if it exists, or perform 125actions equivalent to 126.Dq Li "make clean cleandepend" 127if it does not. 128This target will also remove an 129.Pa obj 130link in 131.Pa ${.CURDIR} 132if that exists. 133.Pp 134It is advisable to run 135.Dq Li "make cleandir" 136twice: the first invocation will remove the canonical object directory 137and the second one will clean up 138.Pa ${.CURDIR} . 139.It Cm depend 140Generate a list of build dependencies in file 141.Pa ${.OBJDIR}/${DEPENDFILE} . 142Per-object dependencies are generated at build time and stored in 143.Pa ${.OBJDIR}/${DEPENDFILE}.${OBJ} . 144.It Cm install 145Install the results of the build to the appropriate location in the 146installation directory hierarchy specified in variable 147.Va DESTDIR . 148.It Cm obj 149Create the canonical object directory associated with the current 150directory. 151.It Cm objlink 152Create a symbolic link to the canonical object directory in 153.Pa ${.CURDIR} . 154.It Cm tags 155Generate a tags file using the program specified in the 156.Xr make 1 157variable 158.Va CTAGS . 159The build system supports 160.Xr ctags 1 161and 162.Nm "GNU Global" . 163.El 164.Pp 165The other supported targets under directory 166.Pa /usr/src 167are: 168.Bl -tag -width ".Cm distributeworld" 169.It Cm buildenv 170Spawn an interactive shell with environment variables set up for 171cross-building the system. 172The target architecture needs to be specified with 173.Xr make 1 174variables 175.Va TARGET_ARCH 176and 177.Va TARGET . 178.Pp 179This target is only useful after a complete cross-toolchain including 180the compiler, linker, assembler, headers and libraries has been 181built; see the 182.Cm toolchain 183target below. 184.It Cm buildworld 185Build everything but the kernel, configure files in 186.Pa etc , 187and 188.Pa release . 189The object directory can be changed from the default 190.Pa /usr/obj 191by setting the 192.Pa MAKEOBJDIRPREFIX 193.Xr make 1 194variable. 195The actual build location prefix used 196depends on the 197.Va WITH_UNIFIED_OBJDIR 198option from 199.Xr src.conf 5 . 200If enabled it is 201.Pa ${MAKEOBJDIRPREFIX}${.CURDIR}/${TARGET}.${TARGET_ARCH} 202for all builds. 203If disabled it is 204.Pa ${MAKEOBJDIRPREFIX}${.CURDIR} 205for native builds, and 206.Pa ${MAKEOBJDIRPREFIX}/${TARGET}.${TARGET_ARCH}${.CURDIR} 207for cross builds and native builds with variable 208.Va CROSS_BUILD_TESTING 209set. 210.It Cm cleanworld 211Attempt to clean up targets built by a preceding 212.Cm buildworld , 213or similar step built from this source directory. 214.It Cm cleanuniverse 215When 216.Va WITH_UNIFIED_OBJDIR 217is enabled, attempt to clean up targets built by a preceding 218.Cm buildworld , 219.Cm universe , 220or similar step, for any architecture built from this source directory. 221.It Cm distributeworld 222Distribute everything compiled by a preceding 223.Cm buildworld 224step. 225Files are placed in the directory hierarchy specified by 226.Xr make 1 227variable 228.Va DISTDIR . 229This target is used while building a release; see 230.Xr release 7 . 231.It Cm native-xtools 232This target builds a cross-toolchain for the given 233.Sy TARGET 234and 235.Sy TARGET_ARCH , 236as well as a select list of static userland tools for the host system. 237This is intended to be used in a jail where QEMU is used to improve 238performance by avoiding emulating binaries that do not need to be emulated. 239.Sy TARGET 240and 241.Sy TARGET_ARCH 242should be defined. 243.It Cm native-xtools-install 244Installs the results to 245.Pa ${DESTDIR}/${NXTP} 246where 247.Va NXTP 248defaults to 249.Pa nxb-bin . 250.Sy TARGET 251and 252.Sy TARGET_ARCH 253must be defined. 254.It Cm packageworld 255Archive the results of 256.Cm distributeworld , 257placing the results in 258.Va DISTDIR . 259This target is used while building a release; see 260.Xr release 7 . 261.It Cm installworld 262Install everything built by a preceding 263.Cm buildworld 264step into the directory hierarchy pointed to by 265.Xr make 1 266variable 267.Va DESTDIR . 268.Pp 269If installing onto an NFS file system and running 270.Xr make 1 271with the 272.Fl j 273option, make sure that 274.Xr rpc.lockd 8 275is running on both client and server. 276See 277.Xr rc.conf 5 278on how to make it start at boot time. 279.It Cm toolchain 280Create the build toolchain needed to build the rest of the system. 281For cross-architecture builds, this step creates a cross-toolchain. 282.It Cm universe 283For each architecture, 284execute a 285.Cm buildworld 286followed by a 287.Cm buildkernel 288for all kernels for that architecture, 289including 290.Pa LINT . 291This command takes a long time. 292.It Cm update 293Get updated sources as configured in 294.Xr make.conf 5 . 295.It Cm targets 296Print a list of supported 297.Va TARGET 298/ 299.Va TARGET_ARCH 300pairs for world and kernel targets. 301.It Cm tinderbox 302Execute the same targets as 303.Cm universe . 304In addition print a summary of all failed targets at the end and 305exit with an error if there were any. 306.It Cm toolchains 307Create a build toolchain for each architecture supported by the build system. 308.It Cm xdev 309Builds and installs a cross-toolchain and sysroot for the given 310.Sy TARGET 311and 312.Sy TARGET_ARCH . 313The sysroot contains target library and headers. 314The target is an alias for 315.Cm xdev-build 316and 317.Cm xdev-install . 318The location of the files installed can be controlled with 319.Va DESTDIR . 320The target location in 321.Va DESTDIR 322is 323.Pa ${DESTDIR}/${XDTP} 324where 325.Va XDTP 326defaults to 327.Pa /usr/${XDDIR} 328and 329.Va XDDIR 330defaults to 331.Pa ${TARGET_ARCH}-freebsd . 332.It Cm xdev-build 333Builds for the 334.Cm xdev 335target. 336.It Cm xdev-install 337Installs the files for the 338.Cm xdev 339target. 340.It Cm xdev-links 341Installs autoconf-style symlinks to 342.Pa ${DESTDIR}/usr/bin 343pointing into the xdev toolchain in 344.Pa ${DESTDIR}/${XDTP} . 345.El 346.Pp 347Kernel specific build targets in 348.Pa /usr/src 349are: 350.Bl -tag -width ".Cm distributekernel" 351.It Cm buildkernel 352Rebuild the kernel and the kernel modules. 353The object directory can be changed from the default 354.Pa /usr/obj 355by setting the 356.Pa MAKEOBJDIRPREFIX 357.Xr make 1 358variable. 359.It Cm installkernel 360Install the kernel and the kernel modules to directory 361.Pa ${DESTDIR}/boot/kernel , 362renaming any pre-existing directory with this name to 363.Pa kernel.old 364if it contained the currently running kernel. 365The target directory under 366.Pa ${DESTDIR} 367may be modified using the 368.Va INSTKERNNAME 369and 370.Va KODIR 371.Xr make 1 372variables. 373.It Cm distributekernel 374Install the kernel to the directory 375.Pa ${DISTDIR}/kernel/boot/kernel . 376This target is used while building a release; see 377.Xr release 7 . 378.It Cm packagekernel 379Archive the results of 380.Cm distributekernel , 381placing the results in 382.Va DISTDIR . 383This target is used while building a release; see 384.Xr release 7 . 385.It Cm kernel 386Equivalent to 387.Cm buildkernel 388followed by 389.Cm installkernel 390.It Cm kernel-toolchain 391Rebuild the tools needed for kernel compilation. 392Use this if you did not do a 393.Cm buildworld 394first. 395.It Cm reinstallkernel 396Reinstall the kernel and the kernel modules, overwriting the contents 397of the target directory. 398As with the 399.Cm installkernel 400target, the target directory can be specified using the 401.Xr make 1 402variable 403.Va INSTKERNNAME . 404.El 405.Pp 406Convenience targets for cleaning up the install destination directory 407denoted by variable 408.Va DESTDIR 409include: 410.Bl -tag -width ".Cm delete-old-libs" 411.It Cm check-old 412Print a list of old files and directories in the system. 413.It Cm delete-old 414Delete obsolete base system files and directories interactively. 415When 416.Li -DBATCH_DELETE_OLD_FILES 417is specified at the command line, the delete operation will be 418non-interactive. 419The variables 420.Va DESTDIR , 421.Va TARGET_ARCH 422and 423.Va TARGET 424should be set as with 425.Dq Li "make installworld" . 426.It Cm delete-old-libs 427Delete obsolete base system libraries interactively. 428This target should only be used if no third party software uses these 429libraries. 430When 431.Li -DBATCH_DELETE_OLD_FILES 432is specified at the command line, the delete operation will be 433non-interactive. 434The variables 435.Va DESTDIR , 436.Va TARGET_ARCH 437and 438.Va TARGET 439should be set as with 440.Dq Li "make installworld" . 441.El 442.Sh ENVIRONMENT 443Variables that influence all builds include: 444.Bl -tag -width ".Va MAKEOBJDIRPREFIX" 445.It Va DEBUG_FLAGS 446Defines a set of debugging flags that will be used to build all userland 447binaries under 448.Pa /usr/src . 449When 450.Va DEBUG_FLAGS 451is defined, the 452.Cm install 453and 454.Cm installworld 455targets install binaries from the current 456.Va MAKEOBJDIRPREFIX 457without stripping, 458so that debugging information is retained in the installed binaries. 459.It Va DESTDIR 460The directory hierarchy prefix where built objects will be installed. 461If not set, 462.Va DESTDIR 463defaults to the empty string. 464.It Va MAKEOBJDIRPREFIX 465Defines the prefix for directory names in the tree of built objects. 466Defaults to 467.Pa /usr/obj 468if not defined. 469This variable should only be set in the environment or 470.Pa /etc/src-env.conf 471and not via 472.Pa /etc/make.conf 473or 474.Pa /etc/src.conf 475or the command line. 476.It Va NO_WERROR 477If defined, compiler warnings will not cause the build to halt, 478even if the makefile says otherwise. 479.It Va WITH_CTF 480If defined, the build process will run the DTrace CTF conversion 481tools on built objects. 482.El 483.Pp 484Additionally, builds in 485.Pa /usr/src 486are influenced by the following 487.Xr make 1 488variables: 489.Bl -tag -width ".Va SUBDIR_OVERRIDE" 490.It Va KERNCONF 491Overrides which kernel to build and install for the various kernel 492make targets. 493It defaults to 494.Cm GENERIC . 495.It Va KERNCONFDIR 496Overrides the directory in which 497.Va KERNCONF 498and any files included by 499.Va KERNCONF 500should be found. 501Defaults to 502.Pa sys/${ARCH}/conf . 503.It Va KERNFAST 504If set, the build target 505.Cm buildkernel 506defaults to setting 507.Va NO_KERNELCLEAN , 508.Va NO_KERNELCONFIG , 509and 510.Va NO_KERNELOBJ . 511When set to a value other than 512.Cm 1 513then 514.Va KERNCONF 515is set to the value of 516.Va KERNFAST . 517.It Va LOCAL_DIRS 518If set, this variable supplies a list of additional directories relative to 519the root of the source tree to build as part of the 520.Cm everything 521target. 522The directories are built in parallel with each other, 523and with the base system directories. 524Insert a 525.Va .WAIT 526directive at the beginning of the 527.Va LOCAL_DIRS 528list to ensure all base system directories are built first. 529.Va .WAIT 530may also be used as needed elsewhere within the list. 531.It Va LOCAL_ITOOLS 532If set, this variable supplies a list of additional tools that are used by the 533.Cm installworld 534and 535.Cm distributeworld 536targets. 537.It Va LOCAL_LIB_DIRS 538If set, this variable supplies a list of additional directories relative to 539the root of the source tree to build as part of the 540.Cm libraries 541target. 542The directories are built in parallel with each other, 543and with the base system libraries. 544Insert a 545.Va .WAIT 546directive at the beginning of the 547.Va LOCAL_DIRS 548list to ensure all base system libraries are built first. 549.Va .WAIT 550may also be used as needed elsewhere within the list. 551.It Va LOCAL_MTREE 552If set, this variable supplies a list of additional mtrees relative to the 553root of the source tree to use as part of the 554.Cm hierarchy 555target. 556.It Va LOCAL_TOOL_DIRS 557If set, this variable supplies a list of additional directories relative to 558the root of the source tree to build as part of the 559.Cm build-tools 560target. 561.It Va LOCAL_XTOOL_DIRS 562If set, this variable supplies a list of additional directories relative to 563the root of the source tree to build as part of the 564.Cm cross-tools 565target. 566.It Va PORTS_MODULES 567A list of ports with kernel modules that should be built and installed 568as part of the 569.Cm buildkernel 570and 571.Cm installkernel 572process. 573.Bd -literal -offset indent 574make PORTS_MODULES=emulators/kqemu-kmod kernel 575.Ed 576.It Va STRIPBIN 577Command to use at install time when stripping binaries. 578Be sure to add any additional tools required to run 579.Va STRIPBIN 580to the 581.Va LOCAL_ITOOLS 582.Xr make 1 583variable before running the 584.Cm distributeworld 585or 586.Cm installworld 587targets. 588See 589.Xr install 1 590for more details. 591.It Va SUBDIR_OVERRIDE 592Override the default list of sub-directories and only build the 593sub-directory named in this variable. 594If combined with 595.Cm buildworld 596then all libraries and includes, and some of the build tools will still build 597as well. 598Specifying 599.Cm -DNO_LIBS , 600and 601.Cm -DWORLDFAST 602will only build the specified directory as was done historically. 603When combined with 604.Cm buildworld 605it is necesarry to override 606.Va LOCAL_LIB_DIRS 607with any custom directories containing libraries. 608This allows building a subset of the system in the same way as 609.Cm buildworld 610does using its sysroot handling. 611This variable can also be useful when debugging failed builds. 612.Bd -literal -offset indent 613make some-target SUBDIR_OVERRIDE=foo/bar 614.Ed 615.It Va TARGET 616The target hardware platform. 617This is analogous to the 618.Dq Nm uname Fl m 619output. 620This is necessary to cross-build some target architectures. 621For example, cross-building for ARM64 machines requires 622.Va TARGET_ARCH Ns = Ns Li aarch64 623and 624.Va TARGET Ns = Ns Li arm64 . 625If not set, 626.Va TARGET 627defaults to the current hardware platform, unless 628.Va TARGET_ARCH 629is also set, in which case it defaults to the appropriate 630value for that architecture. 631.It Va TARGET_ARCH 632The target machine processor architecture. 633This is analogous to the 634.Dq Nm uname Fl p 635output. 636Set this to cross-build for a different architecture. 637If not set, 638.Va TARGET_ARCH 639defaults to the current machine architecture, unless 640.Va TARGET 641is also set, in which case it defaults to the appropriate 642value for that platform. 643Typically, one only needs to set 644.Va TARGET . 645.El 646.Pp 647Builds under directory 648.Pa /usr/src 649are also influenced by defining one or more of the following symbols, 650using the 651.Fl D 652option of 653.Xr make 1 : 654.Bl -tag -width ".Va -DNO_KERNELCONFIG" 655.It Va LOADER_DEFAULT_INTERP 656Defines what interpreter the default loader program will have. 657Valid values include 658.Dq 4th , 659.Dq lua , 660and 661.Dq simp . 662This creates the default link for 663.Pa /boot/loader 664to the loader with that interpreter. 665It also determines what interpreter is compiled into 666.Pa userboot . 667.It Va NO_CLEANDIR 668If set, the build targets that clean parts of the object tree use the 669equivalent of 670.Dq make clean 671instead of 672.Dq make cleandir . 673.It Va NO_CLEAN 674If set, no object tree files are cleaned at all. 675This is the default when 676.Va WITH_META_MODE 677is used with 678.Xr filemon 4 679loaded. 680See 681.Xr src.conf 5 682for more details. 683Setting 684.Va NO_CLEAN 685implies 686.Va NO_KERNELCLEAN , 687so when 688.Va NO_CLEAN 689is set no kernel objects are cleaned either. 690.It Va NO_CTF 691If set, the build process does not run the DTrace CTF conversion tools 692on built objects. 693.It Va NO_SHARE 694If set, the build does not descend into the 695.Pa /usr/src/share 696subdirectory (i.e., manual pages, locale data files, timezone data files and 697other 698.Pa /usr/src/share 699files will not be rebuild from their sources). 700.It Va NO_KERNELCLEAN 701If set, the build process does not run 702.Dq make clean 703as part of the 704.Cm buildkernel 705target. 706.It Va NO_KERNELCONFIG 707If set, the build process does not run 708.Xr config 8 709as part of the 710.Cm buildkernel 711target. 712.It Va NO_KERNELOBJ 713If set, the build process does not run 714.Dq make obj 715as part of the 716.Cm buildkernel 717target. 718.It Va NO_DOCUPDATE 719If set, the update process does not update the source of the 720.Fx 721documentation as part of the 722.Dq make update 723target. 724.It Va NO_LIBS 725If set, the libraries phase will be skipped. 726.It Va NO_OBJWALK 727If set, no object directories will be created. 728This should only be used if object directories were created in a 729previous build and no new directories are connected. 730.It Va NO_PORTSUPDATE 731If set, the update process does not update the Ports tree as part of the 732.Dq make update 733target. 734.It Va NO_WWWUPDATE 735If set, the update process does not update the www tree as part of the 736.Dq make update 737target. 738.It Va WORLDFAST 739If set, the build target 740.Cm buildworld 741defaults to setting 742.Va NO_CLEAN , 743.Va NO_OBJWALK , 744and will skip most bootstrap phases. 745It will only bootstrap libraries and build all of userland. 746This option should be used only when it is known that none of the bootstrap 747needs changed and that no new directories have been connected to the build. 748.El 749.Pp 750Builds under directory 751.Pa /usr/doc 752are influenced by the following 753.Xr make 1 754variables: 755.Bl -tag -width ".Va DOC_LANG" 756.It Va DOC_LANG 757If set, restricts the documentation build to the language subdirectories 758specified as its content. 759The default action is to build documentation for all languages. 760.El 761.Pp 762Builds using the 763.Cm universe 764target are influenced by the following 765.Xr make 1 766variables: 767.Bl -tag -width ".Va MAKE_JUST_KERNELS" 768.It Va JFLAG 769Pass the value of this variable to each 770.Xr make 1 771invocation used to build worlds and kernels. 772This can be used to enable multiple jobs within a single architecture's build 773while still building each architecture serially. 774.It Va MAKE_JUST_KERNELS 775Only build kernels for each supported architecture. 776.It Va MAKE_JUST_WORLDS 777Only build worlds for each supported architecture. 778.It Va UNIVERSE_TARGET 779Execute the specified 780.Xr make 1 781target for each supported architecture instead of the default action of 782building a world and one or more kernels. 783.El 784.Sh FILES 785.Bl -tag -width ".Pa /usr/share/examples/etc/make.conf" -compact 786.It Pa /usr/doc/Makefile 787.It Pa /usr/doc/share/mk/doc.project.mk 788.It Pa /usr/ports/Mk/bsd.port.mk 789.It Pa /usr/ports/Mk/bsd.sites.mk 790.It Pa /usr/share/examples/etc/make.conf 791.It Pa /usr/src/Makefile 792.It Pa /usr/src/Makefile.inc1 793.El 794.Sh EXAMPLES 795For an 796.Dq approved 797method of updating your system from the latest sources, please see the 798.Sx COMMON ITEMS 799section in 800.Pa src/UPDATING . 801.Pp 802The following sequence of commands can be used to cross-build the 803system for the armv6 architecture on an amd64 host: 804.Bd -literal -offset indent 805cd /usr/src 806make TARGET_ARCH=armv6 buildworld buildkernel 807make TARGET_ARCH=armv6 DESTDIR=/clients/arm64 installworld installkernel 808.Ed 809.Sh SEE ALSO 810.Xr cc 1 , 811.Xr install 1 , 812.Xr make 1 , 813.Xr svn 1 , 814.Xr svnlite 1 , 815.Xr make.conf 5 , 816.Xr src.conf 5 , 817.Xr arch 7 , 818.Xr ports 7 , 819.Xr release 7 , 820.Xr tests 7 , 821.Xr config 8 , 822.Xr mergemaster 8 , 823.Xr portsnap 8 , 824.Xr reboot 8 , 825.Xr shutdown 8 826.Sh AUTHORS 827.An Mike W. Meyer Aq Mt mwm@mired.org 828