1.\"- 2.\" Copyright (c) 2011-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org> All rights reserved. 3.\" Copyright (c) 2018 Roberto Fernandez Cueto <roberfern@gmail.com> 4.\" Copyright (c) 2024 The FreeBSD Foundation 5.\" 6.\" Portions of this documentation were written by Björn Zeeb 7.\" under sponsorship from the FreeBSD Foundation. 8.\" 9.\" Redistribution and use in source and binary forms, with or without 10.\" modification, are permitted provided that the following conditions 11.\" are met: 12.\" 1. Redistributions of source code must retain the above copyright 13.\" notice, this list of conditions and the following disclaimer. 14.\" 2. Redistributions in binary form must reproduce the above copyright 15.\" notice, this list of conditions and the following disclaimer in the 16.\" documentation and/or other materials provided with the distribution. 17.\" 18.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 19.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 20.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21.\" DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, 22.\" INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 23.\" (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 24.\" SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 25.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 26.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 27.\" ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 28.\" POSSIBILITY OF SUCH DAMAGE. 29.\" 30.Dd November 4, 2024 31.Dt BSDINSTALL 8 32.Os 33.Sh NAME 34.Nm bsdinstall 35.Nd system installer 36.Sh SYNOPSIS 37.Nm 38.Op Ar options 39.Op Ar target 40.Op Ar ... 41.Sh DESCRIPTION 42.Nm 43is used for installation of new systems, both for system setup from 44installation media, e.g., CD-ROMs, and for use on live systems to prepare 45VM images and jails. 46.Pp 47Much like 48.Xr make 1 , Nm 49takes a target and possible parameters of the target as arguments. 50If invoked with no arguments, it will invoke the 51.Cm auto 52target, which provides a standard interactive installation, invoking the 53others in sequence. 54To perform a scripted installation, 55these subtargets can be invoked separately by an installation script. 56.Sh OPTIONS 57.Nm 58supports the following options, global to all targets: 59.Bl -tag -width indent+ 60.It Fl D Ar file 61Provide a path for the installation log file 62.Pq overrides Ev BSDINSTALL_LOG . 63See 64.Sx ENVIRONMENT VARIABLES 65for more information on 66.Ev BSDINSTALL_LOG . 67.El 68.Sh TARGETS 69Most of the following targets are only useful for scripting the installer. 70For interactive use, most users will be interested only in the 71.Cm auto , 72.Cm jail , 73and 74.Cm script 75targets. 76.Bl -tag -width "jail destination" 77.It Cm auto 78Run the standard interactive installation, including disk partitioning. 79.It Cm jail Ar destination 80Sets up a new chroot system at 81.Pa destination , 82suitable for use with 83.Xr jail 8 . 84Behavior is generally similar to 85.Cm auto , 86except that disk partitioning and network setup are skipped and a kernel is 87not installed into the new system. 88.It Cm script Ar script 89Runs the installation script at 90.Pa script . 91See 92.Sx SCRIPTING 93for more information on this target. 94.It Cm keymap 95If the current controlling TTY is a 96.Xr syscons 4 97or 98.Xr vt 4 99console, asks the user to set the current keymap, and saves the result to the 100new system's 101.Pa rc.conf . 102.It Cm hostname 103Prompts the user for a host name for the new system and saves the result to the 104new system's 105.Pa rc.conf . 106If 107.Ev BSDINSTALL_CONFIGCURRENT 108is set, also sets the host name of the current system. 109.It Cm netconfig 110Interactively configures network interfaces (first invoking 111.Cm wlanconfig 112on wireless interfaces), saving the result to the new system's 113.Pa rc.conf 114and 115.Pa resolv.conf . 116If 117.Ev BSDINSTALL_CONFIGCURRENT 118is set, also configures the network interfaces of the current system to match. 119.It Cm autopart 120Provides the installer's interactive guided disk partitioner for single-disk 121installations. 122Defaults to UFS. 123.It Cm bootconfig 124Detects an appropriate partition and installs UEFI boot loader files. 125.It Cm zfsboot 126Provides a ZFS-only automatic interactive disk partitioner. 127Creates a single 128.Ic zpool 129with separate datasets for 130.Pa /home , 131.Pa /tmp , 132.Pa /usr , 133.Pa /usr/ports , 134.Pa /usr/src , 135and 136.Pa /var . 137Optionally can set up 138.Xr geli 8 139to encrypt the disk. 140.It Cm partedit 141Provides the installer's interactive manual disk partitioner with an interface 142identical to 143.Xr sade 8 . 144Supports multiple disks as well as UFS, ZFS, and FAT file systems. 145ZFS is set up with one pool and dataset per partition. 146.It Cm scriptedpart Ar parameters 147Sets up disks like 148.Cm autopart 149and 150.Cm partedit , 151but non-interactively according to the disk setup specified in 152.Ar parameters . 153Each disk setup is specified by a three-part argument: 154.Pp 155.Ar disk 156.Op Ar scheme 157.Op Ar {partitions} 158.Pp 159Multiple disk setups are separated by semicolons. 160The 161.Ar disk 162argument specifies the disk on which to operate (which will be erased), 163or the special value 164.Em DEFAULT , 165which will result in either a selection window (as in 166.Cm autopart ) 167for the destination disk or, if there is only one possible disk, will 168automatically select it. 169The 170.Ar scheme 171argument specifies the 172.Xr gpart 8 173partition scheme to apply to the disk. 174If 175.Ar scheme 176is unspecified, 177.Cm scriptedpart 178will apply the default bootable scheme on your platform. 179The 180.Ar partitions 181argument is also optional and specifies how to partition 182.Ar disk . 183It consists of a comma-separated list of partitions to create enclosed in 184curly braces. 185Each partition declaration takes the form 186.Pp 187.Ar size 188.Ar type 189.Op Ar mount point 190.Pp 191.Ar size 192specifies the partition size to create in bytes (K, M, and G suffixes 193can be appended to specify kilobytes, megabytes, and gigabytes respectively), 194while the 195.Em auto 196keyword causes the partition to take all the remaining space on the disk. 197The 198.Ar type 199option chooses the 200.Xr gpart 8 201filesystem type, e.g., freebsd-ufs, freebsd-zfs, or freebsd-swap. 202The optional 203.Ar mount point 204argument sets where the created partition is to be mounted in the installed 205system. 206As an example, a typical invocation looks like: 207.Pp 208bsdinstall scriptedpart ada0 { 20G freebsd-ufs /, 4G freebsd-swap, 20G freebsd-ufs /var, auto freebsd-ufs /usr } 209.Pp 210Note that the list of partitions should 211.Em not 212include boot partitions (e.g. EFI system partitions), which will be created automatically on whatever disk includes /. 213.Pp 214A shorter invocation to use the default partitioning (as 215.Cm autopart 216would have used) on the same disk: 217.Pp 218bsdinstall scriptedpart ada0 219.Pp 220or, even shorter: 221.Pp 222bsdinstall scriptedpart DEFAULT 223.It Cm mount 224Mounts the file systems previously configured by 225.Cm autopart , 226.Cm partedit , 227or 228.Cm scriptedpart 229under 230.Ev BSDINSTALL_CHROOT . 231.It Cm distfetch 232Fetches the distributions in 233.Ev DISTRIBUTIONS 234to 235.Ev BSDINSTALL_DISTDIR 236from 237.Ev BSDINSTALL_DISTSITE . 238.It Cm checksum 239Verifies the checksums of the distributions listed in 240.Ev DISTRIBUTIONS 241against the distribution manifest. 242.It Cm distextract 243Extracts the distributions listed in 244.Ev DISTRIBUTIONS 245into 246.Ev BSDINSTALL_CHROOT . 247.It Cm pkgbase Op Fl --jail 248Fetch and install base system packages to 249.Ev BSDINSTALL_CHROOT . 250Packages are fetched according to repository configuration in 251.Ev BSDINSTALL_PKG_REPOS_DIR 252if set, or 253.Lk pkg.freebsd.org 254otherwise. 255If the 256.Fl --jail 257option is passed, no kernel is installed, and the 258.Dq jail 259variant of each package set will be selected where applicable. 260.It Cm firmware 261executes 262.Xr fwget 8 263inside the 264.Ev BSDINSTALL_CHROOT 265to install any needed and available firmware for the new system. 266.It Cm rootpass 267Interactively invokes 268.Xr passwd 1 269in the new system to set the root user's password. 270.It Cm adduser 271Interactively invokes 272.Xr adduser 8 273in the new system. 274.It Cm time 275Interactively sets the time, date, and time zone of the new system. 276.It Cm services 277Queries the user for the system daemons to begin at system startup, 278writing the result into the new system's 279.Pa rc.conf . 280.It Cm entropy 281Reads a small amount of data from 282.Pa /dev/random 283and stores it in a file in the new system's root directory. 284.It Cm config 285Installs the configuration files destined for the new system, e.g., 286.Xr rc.conf 5 287fragments generated by 288.Cm netconfig , 289etc.) onto the new system. 290.El 291.Sh ENVIRONMENT VARIABLES 292The following environment variables control various aspects of the installation 293process. 294Many are used internally during installation and have reasonable default values 295for most installation scenarios. 296Others are set by various interactive user prompts, and can be usefully 297overridden when making scripted or customized installers. 298.Bl -tag -width "BSDINSTALL_DISTSITE" 299.It Ev TMPDIR 300The directory to use for temporary files. 301Default: 302.Dq Pa /tmp 303.It Ev DISTRIBUTIONS 304The set of distributions to install, e.g., "base.txz kernel.txz ports.txz". 305Default: unset 306.It Ev PARTITIONS 307The partitioning of the disk onto which the system is being installed. 308See 309.Cm scriptedpart 310of 311the 312.Sx TARGETS 313section for format details. If this variable is unset, the installer will 314use the default partitioning as in 315.Cm autopart . 316Default: unset 317.It Ev BSDINSTALL_DISTDIR 318The directory in which the distribution files can be found (or to which they 319should be downloaded). 320Default: 321.Dq Pa /usr/freebsd-dist 322.It Ev BSDINSTALL_DISTSITE 323URL from which the distribution files should be downloaded if they are not 324already present in the directory defined by 325.Ev BSDINSTALL_DISTDIR . 326This should be a full path to the files, including architecture and release 327names. 328Most targets, e.g., 329.Cm auto 330and 331.Cm jail , 332that prompt for a 333.Fx 334mirror will skip that step if this variable is already defined in the 335environment. 336Example: 337.Pa https://download.freebsd.org/ftp/releases/powerpc/powerpc64/13.1-RELEASE/ 338or 339.Pa http://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/amd64/12.2-RELEASE/ . 340.It Ev BSDINSTALL_PKG_REPOS_DIR 341Directory containing 342.Xr pkg 8 343repository configuration files used by the 344.Cm pkgbase 345target. 346See 347.Sx REPOSITORY CONFIGURATION 348in 349.Xr pkg.conf 5 . 350Default: unset 351.It Ev BSDINSTALL_CHROOT 352The directory into which the distribution files should be unpacked and the 353directory at which the root file system of the new system should be mounted. 354Default: 355.Dq Pa /mnt 356.It Ev BSDINSTALL_LOG 357Path to a log file for the installation. 358Default: 359.Dq Pa $TMPDIR/bsdinstall_log 360.It Ev BSDINSTALL_SKIP_FIRMWARE 361If not empty, the 362.Cm auto 363target 364will not invoke the 365.Cm firmware 366target. 367.It Ev BSDINSTALL_SKIP_HARDENING 368If not empty, the 369.Cm auto 370target 371will not invoke the 372.Cm hardening 373target. 374.It Ev BSDINSTALL_SKIP_HOSTNAME 375If not empty, the 376.Cm auto 377target 378will not invoke the 379.Cm hostname 380target. 381.It Ev BSDINSTALL_SKIP_KEYMAP 382If not empty, the 383.Cm auto 384target 385will not invoke the 386.Cm keymap 387target. 388.It Ev BSDINSTALL_SKIP_MANUAL 389If not empty, the 390.Cm auto 391target will not offer to open a shell in the new system 392for final manual modifications. 393.It Ev BSDINSTALL_SKIP_SERVICES 394If not empty, the 395.Cm auto 396target 397will not invoke the 398.Cm services 399target. 400.It Ev BSDINSTALL_SKIP_TIME 401If not empty, the 402.Cm auto 403target 404will not invoke the 405.Cm time 406target. 407.It Ev BSDINSTALL_SKIP_USERS 408If not empty, the 409.Cm auto 410target 411will not invoke the 412.Cm adduser 413target. 414.It Ev BSDINSTALL_SKIP_FINALCONFIG 415If not empty, the 416.Cm auto 417target will not show the final configuration dialog, 418where earlier configuration choices can be revisited. 419.It Ev BSDINSTALL_TMPETC 420Directory where files destined for the new system's 421.Pa /etc 422will be stored until the 423.Cm config 424target is executed. 425If this directory does not already exist, it will be created. 426Default: 427.Dq Pa $TMPDIR/bsdinstall_etc 428.It Ev BSDINSTALL_TMPBOOT 429Directory where files destined for the new system's 430.Pa /boot 431will be stored until the 432.Cm config 433target is executed. 434If this directory does not already exist, it will be created. 435Default: 436.Dq Pa $TMPDIR/bsdinstall_boot 437.It Ev ROOTPASS_ENC 438Encrypted string to set the root password to in the format expected by 439.Xr pw 8 440.Fl H Ar 0 . 441This option is used if both it and 442.Ev ROOTPASS_PLAIN 443are set. 444.It Ev ROOTPASS_PLAIN 445Plain text string to set the root password to. 446.It Ev ZFSBOOT_POOL_NAME 447Name for the pool containing the base system. 448Default: 449.Dq zroot 450.It Ev ZFSBOOT_POOL_CREATE_OPTIONS 451Options to be used when creating the base system's pool. 452Each option must be preceded by the -O flag to be taken into consideration 453or the pool will not be created due to errors using the command 454.Cm zpool . 455Default: 456.Dq Li "-O compression=on -O atime=off" 457.It Ev ZFSBOOT_BEROOT_NAME 458Name for the boot environment parent dataset. 459This is a non-mountable dataset meant to be a parent dataset where different 460boot environment are going to be created. 461Default: 462.Dq ROOT 463.It Ev ZFSBOOT_BOOTFS_NAME 464Name for the primary boot environment, which will be the default boot 465environment for the system. 466Default: 467.Dq default 468.It Ev ZFSBOOT_VDEV_TYPE 469The type of pool to be created for the base system. 470This variable can take one of this values: stripe (No redundancy), 471mirror (n-Way mirroring), raid10 (RAID 1+0 - n x 2-Way Mirrors), 472raidz1 (RAID-Z1 - Single Redundancy RAID), raidz2 (RAID-Z2 - Double Redundancy RAID) 473or raidz3 (RAID-Z3 Triple Redundancy RAID). 474Default: 475.Dq stripe 476.It Ev ZFSBOOT_FORCE_4K_SECTORS 477Controls the minimum sector size of the pool. 478If this variable is not empty, the minimum sector size is 4K. 479If this variable is empty, the minimum sector size is 512. 480Note that the sector size of the pool will always be at least 481the sector size of the backing disks. 482Default: 483.Dq 1 484.It Ev ZFSBOOT_GELI_ENCRYPTION 485If this variable is not empty, it will use 486.Xr geli 8 487to encrypt the root pool, enabling automatically the 488.Ev ZFSBOOT_BOOT_POOL 489variable. 490Default: 491.Dq "" 492.It Ev ZFSBOOT_GELI_KEY_FILE 493Path to the 494.Xr geli 8 495keyfile used to encrypt the pool where the base system is stored. 496Default: 497.Dq Pa /boot/encryption.key 498.It Ev ZFSBOOT_BOOT_POOL 499If set, a separated boot pool will be created for the kernel of the 500system and 501.Xr loader 8 . 502Default: unset 503.It Ev ZFSBOOT_BOOT_POOL_CREATE_OPTIONS 504Options to use when creating the boot pool, when enabled (See 505.Ev ZFSBOOT_BOOT_POOL ). 506Default: unset 507.It Ev ZFSBOOT_BOOT_POOL_NAME 508Name for the optional boot pool when it is enabled, (See 509.Ev ZFSBOOT_BOOT_POOL ). 510Default: 511.Dq bootpool 512.It Ev ZFSBOOT_BOOT_POOL_SIZE 513Size of the boot pool when it is enabled (See 514.Ev ZFSBOOT_BOOT_POOL ). 515Default: 516.Dq 2g 517.It Ev ZFSBOOT_DISKS 518Disks to be used for the base system, including the boot pool. 519This variable must only be used on a scripted installation. 520See 521.Sx SCRIPTING 522for more information. 523Default: unset 524.It Ev ZFSBOOT_SWAP_SIZE 525Size of the swap partition on each block device. 526This variable will be passed to 527.Xr gpart 8 ; 528which supports SI unit suffixes. 529Default: 530.Dq 2g 531.It Ev ZFSBOOT_SWAP_ENCRYPTION 532If set, enables the encryption of the swap partition using 533.Xr geli 8 . 534Default: "" 535.It Ev ZFSBOOT_SWAP_MIRROR 536If set, enables a swap mirroring using 537.Xr gmirror 8 . 538Default: 539unset 540.It Ev ZFSBOOT_DATASETS 541ZFS datasets to be created on the root zpool, it requires the 542following datasets: 543.Pa /tmp , 544.Pa /var/tmp , 545.Pa /$ZFSBOOT_BEROOT_NAME/$ZFSBOOT_BOOTFS_NAME . 546See 547.Sx ZFS DATASETS 548for more information about how to populate this variable and 549its default value. 550.It Ev ZFSBOOT_CONFIRM_LAYOUT 551If set and the installation is interactive, allow the user to confirm 552the layout before continuing with the installation. 553Default: 554.Dq 1 555.El 556.Sh SCRIPTING 557.Nm 558supports unattended, or minimally-attended, installations using scripting. 559This can be used with either modified physical installation media or with 560.Xr diskless 8 561installations over the network; information on preparing such media can be 562found in 563.Sx BUILDING AUTOMATIC INSTALL MEDIA 564.Pp 565Scripted installations follow an essentially identical path to interactive 566installations, though with some minor feature differences (for example, 567scripted installations do not support fetching of remote distribution files 568since scripted installations normally install the same files and the distributions 569can be added directly to the installation media). 570.Nm 571scripts consist of two parts: a 572.Em preamble 573and a 574.Em setup script . 575The preamble sets up the options for the installation (how to partition the 576disk[s], which distributions to install, etc.) and the optional second part is 577a shell script run under 578.Xr chroot 8 579in the newly installed system before 580.Nm 581exits. 582The two parts are separated by the usual script header (#!), which also sets 583the interpreter for the setup script. 584.Pp 585A typical bsdinstall script, using the default filesystem layout and the UFS 586filesystem, looks like this: 587.Bd -literal -offset indent 588PARTITIONS=DEFAULT 589DISTRIBUTIONS="kernel.txz base.txz" 590 591#!/bin/sh 592sysrc ifconfig_DEFAULT=DHCP 593sysrc sshd_enable=YES 594pkg install puppet 595.Ed 596.Pp 597For a scripted installation involving a ZFS pool spanning multiple disks, 598the script instead looks like this: 599.Bd -literal -offset indent 600DISTRIBUTIONS="kernel.txz base.txz" 601export ZFSBOOT_VDEV_TYPE=stripe 602export ZFSBOOT_DISKS="ada0 ada1" 603export nonInteractive="YES" 604 605#!/bin/sh 606echo "ifconfig_DEFAULT=DHCP" >> /etc/rc.conf 607echo "sshd_enable=YES" >> /etc/rc.conf 608pkg install puppet 609.Ed 610.Pp 611On 612.Fx 613release media, such a script placed at 614.Pa /etc/installerconfig 615will be run at boot time and the system will be rebooted automatically after 616the installation has completed. 617This can be used for unattended network installation of new systems; see 618.Xr diskless 8 619for details. 620.Ss PREAMBLE 621The preamble consists of installer settings. 622These control global installation parameters (see 623.Sx ENVIRONMENT VARIABLES ) 624as well as disk partitioning. 625The preamble is interpreted as a 626.Xr sh 1 627script run at the very beginning of the install. 628If more complicated behavior than setting these variables is desired, 629arbitrary commands can be run here to extend the installer. 630In addition to the variables in 631.Sx ENVIRONMENT VARIABLES , 632in particular 633.Ev DISTRIBUTIONS , 634the preamble can contain a variable 635.Ev PARTITIONS 636which is passed to the 637.Cm scriptedpart 638target to control disk setup. 639.Pp 640Alternatively, 641to use 642.Cm zfsboot 643instead of 644.Cm partedit , 645the preamble can contain the variable 646.Ev ZFSBOOT_DATASETS 647instead of 648.Ev PARTITIONS 649(see below). 650If using 651.Cm zfsboot , 652the variables 653.Ev ZFSBOOT_DISKS 654and 655.Ev ZFSBOOT_VDEV_TYPE 656must be set to create the pool of disks for the base system. 657Usually, for a mirrored booting disk, these two variables look like this: 658.Bd -literal -offset indent 659ZFSBOOT_DISKS="ada0 ada1" 660ZFSBOOT_VDEV_TYPE=mirror 661.Ed 662.Pp 663Remember to export all the variables for the 664.Cm zfsboot 665command, otherwise installation will fail. 666.Ss SETUP SCRIPT 667Following the preamble is an optional shell script, beginning with a #! 668declaration. 669This script will be run at the end of the installation process inside a 670.Xr chroot 8 671environment in the newly installed system and can be used to set up 672configuration files, install packages, etc. 673Note that newly configured system services, e.g., networking have not 674been started in the installed system at this time and only installation 675host services are available. 676.Ss ZFS DATASETS 677If using 678.Cm zfsboot 679in an installation script, the 680.Cm zfsboot 681partitioning tool takes the 682.Ev ZFSBOOT_DATASETS 683variable to create the ZFS datasets on the base system. 684This variable definition can become large if the pool contains many datasets. 685The default value of 686.Ev ZFSBOOT_DATASETS 687is: 688.Bd -literal -offset indent 689# DATASET OPTIONS (comma or space separated; or both) 690 691# Boot Environment [BE] root and default boot dataset 692/$ZFSBOOT_BEROOT_NAME mountpoint=none 693/$ZFSBOOT_BEROOT_NAME/$ZFSBOOT_BOOTFS_NAME mountpoint=/ 694 695# Home directories separated so they are common to all BEs 696/home mountpoint=/home 697 698# Create /tmp and allow exec but not setuid 699/tmp mountpoint=/tmp,exec=on,setuid=off 700 701# Do not mount /usr so that 'base' files go to the BEROOT 702/usr mountpoint=/usr,canmount=off 703 704# Ports tree 705/usr/ports setuid=off 706 707# Source tree 708/usr/src 709 710# Create /var and friends 711/var mountpoint=/var,canmount=off 712/var/audit exec=off,setuid=off 713/var/crash exec=off,setuid=off 714/var/log exec=off,setuid=off 715/var/mail atime=on 716/var/tmp setuid=off 717.Ed 718.Pp 719The first column is the name of the dataset to be created as part of the 720.Ev ZFSBOOT_POOL_NAME 721pool and the remainder of each line contains the options to be set on each dataset. 722If multiple options are given, they can be separated by either commas or whitespace; 723everything following a pound/hash character is ignored as a comment. 724.Ss BUILDING AUTOMATIC INSTALL MEDIA 725If building automatic install media, use tar to extract a release ISO: 726.Dl mkdir release-media 727.Dl tar -C release-media -xvf FreeBSD-13.0-RELEASE-amd64-disc1.iso 728.Pp 729Then place a script as above in 730.Pa etc/installerconfig 731.Pp 732This directory can then be used directly as an NFS root for 733.Xr diskless 8 734installations or it can be rebuilt into an ISO image using the release scripts in 735.Pa /usr/src/release . 736For example, on amd64: 737.Dl sh /usr/src/release/amd64/mkisoimages.sh -b '13_0_RELEASE_AMD64_CD' output.iso release-media 738.Sh HISTORY 739This version of 740.Nm 741first appeared in 742.Fx 9.0 . 743.Sh AUTHORS 744.An Nathan Whitehorn Aq Mt nwhitehorn@FreeBSD.org 745.An Devin Teske Aq Mt dteske@FreeBSD.org 746.An Allan Jude Aq Mt allanjude@FreeBSD.org 747