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