xref: /freebsd/usr.sbin/bsdinstall/bsdinstall.8 (revision 44d780e32b9d798a93b758fe0957d770e3190988)
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.\"
5.\" Redistribution and use in source and binary forms, with or without
6.\" modification, are permitted provided that the following conditions
7.\" are met:
8.\" 1. Redistributions of source code must retain the above copyright
9.\"    notice, this list of conditions and the following disclaimer.
10.\" 2. Redistributions in binary form must reproduce the above copyright
11.\"    notice, this list of conditions and the following disclaimer in the
12.\"    documentation and/or other materials provided with the distribution.
13.\"
14.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
15.\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
17.\" DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT,
18.\" INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
19.\" (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
20.\" SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
22.\" STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
23.\" ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24.\" POSSIBILITY OF SUCH DAMAGE.
25.\"
26.\" $FreeBSD$
27.\"
28.Dd November 21, 2019
29.Dt BSDINSTALL 8
30.Os
31.Sh NAME
32.Nm bsdinstall
33.Nd system installer
34.Sh SYNOPSIS
35.Nm
36.Op Ar options
37.Op Ar target
38.Op Ar ...
39.Sh DESCRIPTION
40.Nm
41is used for installation of new systems, both for system setup from
42installation media, e.g., CD-ROMs, and for use on live systems to prepare
43VM images and jails.
44.Pp
45Much like
46.Xr make 1 , Nm
47takes a target and possible parameters of the target as arguments.
48If invoked with no arguments, it will invoke the
49.Cm auto
50target, which provides a standard interactive installation, invoking the
51others in sequence.
52To perform a scripted installation,
53these subtargets can be invoked separately by an installation script.
54.Sh OPTIONS
55.Nm
56supports the following options, global to all targets:
57.Bl -tag -width indent+
58.It Fl D Ar file
59Provide a path for the installation log file
60.Pq overrides Ev BSDINSTALL_LOG .
61See
62.Sx ENVIRONMENT VARIABLES
63for more information on
64.Ev BSDINSTALL_LOG .
65.El
66.Sh TARGETS
67Most of the following targets are only useful for scripting the installer.
68For interactive use, most users will be interested only in the
69.Cm auto ,
70.Cm jail ,
71and
72.Cm script
73targets.
74.Bl -tag -width ".Cm jail Ar destination"
75.It Cm auto
76Run the standard interactive installation, including disk partitioning.
77.It Cm jail Ar destination
78Sets up a new chroot system at
79.Pa destination ,
80suitable for use with
81.Xr jail 8 .
82Behavior is generally similar to
83.Cm auto ,
84except that disk partitioning and network setup are skipped and a kernel is
85not installed into the new system.
86.It Cm script Ar script
87Runs the installation script at
88.Pa script .
89See
90.Sx SCRIPTING
91for more information on this target.
92.It Cm keymap
93If the current controlling TTY is a
94.Xr syscons 4
95or
96.Xr vt 4
97console, asks the user to set the current keymap, and saves the result to the
98new system's
99.Pa rc.conf .
100.It Cm hostname
101Prompts the user for a host name for the new system and saves the result to the
102new system's
103.Pa rc.conf .
104If
105.Ev BSDINSTALL_CONFIGCURRENT
106is set, also sets the host name of the current system.
107.It Cm netconfig
108Interactively configures network interfaces (first invoking
109.Cm wlanconfig
110on wireless interfaces), saving the result to the new system's
111.Pa rc.conf
112and
113.Pa resolv.conf .
114If
115.Ev BSDINSTALL_CONFIGCURRENT
116is set, also configures the network interfaces of the current system to match.
117.It Cm autopart
118Provides the installer's interactive guided disk partitioner for single-disk
119installations.
120Defaults to UFS.
121.It Cm zfsboot
122Provides an alternative ZFS-only automatic interactive disk partitioner.
123Creates a single
124.Ic zpool
125with separate datasets for
126.Pa /tmp ,
127.Pa /usr ,
128.Pa /usr/home ,
129.Pa /usr/ports ,
130.Pa /usr/src ,
131and
132.Pa /var .
133Optionally can set up
134.Xr geli 8
135to encrypt the disk.
136.It Cm partedit
137Provides the installer's interactive manual disk partitioner with an interface
138identical to
139.Xr sade 8 .
140Supports multiple disks as well as UFS, ZFS, and FAT file systems.
141ZFS is set up with one pool and dataset per partition.
142.It Cm scriptedpart Ar parameters
143Sets up disks like
144.Cm autopart
145and
146.Cm partedit ,
147but non-interactively according to the disk setup specified in
148.Ar parameters .
149Each disk setup is specified by a three-part argument:
150.Pp
151.Ar disk
152.Op Ar scheme
153.Op Ar {partitions}
154.Pp
155Multiple disk setups are separated by semicolons.
156The
157.Ar disk
158argument specifies the disk on which to operate (which will be erased),
159while the
160.Ar scheme
161argument specifies the
162.Xr gpart 8
163partition scheme to apply to the disk.
164If
165.Ar scheme
166is unspecified,
167.Cm scriptedpart
168will apply the default bootable scheme on your platform.
169The
170.Ar partitions
171argument is also optional and specifies how to partition
172.Ar disk .
173It consists of a comma-separated list of partitions to create enclosed in
174curly braces.
175Each partition declaration takes the form
176.Pp
177.Ar size
178.Ar type
179.Op Ar mount point
180.Pp
181.Ar size
182specifies the partition size to create in bytes (K, M, and G suffixes
183can be appended to specify kilobytes, megabytes, and gigabytes respectively),
184while the
185.Em auto
186keyword causes the partition to take all the remaining space on the disk.
187The
188.Ar type
189option chooses the
190.Xr gpart 8
191filesystem type, e.g., freebsd-ufs, freebsd-zfs, or freebsd-swap.
192The optional
193.Ar mount point
194argument sets where the created partition is to be mounted in the installed
195system.
196As an example, a typical invocation looks like:
197.Pp
198bsdinstall scriptedpart ada0 { 20G freebsd-ufs /, 4G freebsd-swap, 20G freebsd-ufs /var, auto freebsd-ufs /usr }
199.Pp
200A shorter invocation to use the default partitioning (as
201.Cm autopart
202would have used) on the same disk:
203.Pp
204bsdinstall scriptedpart ada0
205.It Cm mount
206Mounts the file systems previously configured by
207.Cm autopart ,
208.Cm partedit ,
209or
210.Cm scriptedpart
211under
212.Ev BSDINSTALL_CHROOT .
213.It Cm distfetch
214Fetches the distributions in
215.Ev DISTRIBUTIONS
216to
217.Ev BSDINSTALL_DISTDIR
218from
219.Ev BSDINSTALL_DISTSITE .
220.It Cm checksum
221Verifies the checksums of the distributions listed in
222.Ev DISTRIBUTIONS
223against the distribution manifest.
224.It Cm distextract
225Extracts the distributions listed in
226.Ev DISTRIBUTIONS
227into
228.Ev BSDINSTALL_CHROOT .
229.It Cm rootpass
230Interactively invokes
231.Xr passwd 1
232in the new system to set the root user's password.
233.It Cm adduser
234Interactively invokes
235.Xr adduser 8
236in the new system.
237.It Cm time
238Interactively sets the time, date, and time zone of the new system.
239.It Cm services
240Queries the user for the system daemons to begin at system startup,
241writing the result into the new system's
242.Pa rc.conf .
243.It Cm entropy
244Reads a small amount of data from
245.Pa /dev/random
246and stores it in a file in the new system's root directory.
247.It Cm config
248Installs the configuration files destined for the new system, e.g.,
249.Xr rc.conf 5
250fragments generated by
251.Cm netconfig ,
252etc.) onto the new system.
253.El
254.Sh ENVIRONMENT VARIABLES
255The following environment variables control various aspects of the installation
256process.
257Many are used internally during installation and have reasonable default values
258for most installation scenarios.
259Others are set by various interactive user prompts, and can be usefully
260overridden when making scripted or customized installers.
261.Bl -tag -width ".Ev BSDINSTALL_DISTSITE"
262.It Ev DISTRIBUTIONS
263The set of distributions to install, e.g., "base.txz kernel.txz ports.txz".
264Default: unset
265.It Ev BSDINSTALL_DISTDIR
266The directory in which the distribution files can be found (or to which they
267should be downloaded).
268Default:
269.Dq Pa /usr/freebsd-dist
270.It Ev BSDINSTALL_DISTSITE
271URL from which the distribution files should be downloaded if they are not
272already present in the directory defined by
273.Ev BSDINSTALL_DISTDIR .
274This should be a full path to the files, including architecture and release
275names.
276Most targets, e.g.,
277.Cm auto
278and
279.Cm jail ,
280that prompt for a
281.Fx
282mirror will skip that step if this variable is already defined in the
283environment.
284Example:
285.Pa ftp://ftp.freebsd.org/pub/FreeBSD/releases/powerpc/powerpc64/9.1-RELEASE
286.It Ev BSDINSTALL_CHROOT
287The directory into which the distribution files should be unpacked and the
288directory at which the root file system of the new system should be mounted.
289Default:
290.Dq Pa /mnt
291.It Ev BSDINSTALL_LOG
292Path to a log file for the installation.
293Default:
294.Dq Pa /tmp/bsdinstall_log
295.It Ev BSDINSTALL_TMPETC
296Directory where files destined for the new system's
297.Pa /etc
298will be stored until the
299.Cm config
300target is executed.
301If this directory does not already exist, it will be created.
302Default:
303.Dq Pa /tmp/bsdinstall_etc
304.It Ev BSDINSTALL_TMPBOOT
305Directory where files destined for the new system's
306.Pa /boot
307will be stored until the
308.Cm config
309target is executed.
310If this directory does not already exist, it will be created.
311Default:
312.Dq Pa /tmp/bsdinstall_boot
313.It Ev ZFSBOOT_POOL_NAME
314Name for the pool containing the base system.
315Default:
316.Dq zroot
317.It Ev ZFSBOOT_POOL_CREATE_OPTIONS
318Options to be used when creating the base system's pool.
319Each option must be followed by the -O flag to be taken into consideration
320or the pool will not be created due to errors using the command
321.Cm zpool .
322Default:
323.Dq Li "-O compress=lz4 -O atime=off"
324.It Ev ZFSBOOT_BEROOT_NAME
325Name for the boot environment parent dataset.
326This is a non-mountable dataset meant to be a parent dataset where different
327boot environment are going to be created.
328Default:
329.Dq ROOT
330.It Ev ZFSBOOT_BOOTFS_NAME
331Name for the primary boot environment, which will be the default boot
332environment for the system.
333Default:
334.Dq default
335.It Ev ZFSBOOT_VDEV_TYPE
336The type of pool to be created for the base system.
337This variable can take one of this values: stripe (No redundacy),
338mirror (n-Way mirroring), raid10 (RAID 1+0 - n x 2-Way Mirrors),
339raidz1 (RAID-Z1 - Single Redundacy RAID), raidz2 (RAID-Z2 - Double Redundacy RAID)
340or raidz3 (RAID-Z3 Triple Redundacy RAID).
341Default:
342.Dq stripe
343.It Ev ZFSBOOT_FORCE_4K_SECTORS
344Indicates either the pool will use 4K or 512 sectors.
345If this variable is not empty, 4K sectors will be used.
346Default:
347.Dq 1
348.It Ev ZFSBOOT_GELI_ENCRYPTION
349If this variable is not empty, it will use
350.Xr geli 8
351to encrypt the root pool, enabling automatically the
352.Ev ZFSBOOT_BOOT_POOL
353variable.
354Default:
355.Dq ""
356.It Ev ZFSBOOT_GELI_KEY_FILE
357Path to the
358.Xr geli 8
359keyfile used to encrypt the pool where the base system is stored.
360Default:
361.Dq Pa /boot/encryption.key
362.It Ev ZFSBOOT_BOOT_POOL
363If set a separated boot pool will be created for the kernel of the
364system and
365.Xr loader 8 .
366Default: unset
367.It Ev ZFSBOOT_BOOT_POOL_CREATE_OPTIONS
368Options to use when creating the boot pool, when enabled (See
369.Ev ZFSBOOT_BOOT_POOL ).
370Default: unset
371.It Ev ZFSBOOT_BOOT_POOL_NAME
372Name for the optional boot pool when it is enabled, (See
373.Ev ZFSBOOT_BOOT_POOL ).
374Default:
375.Dq bootpool
376.It Ev ZFSBOOT_BOOT_POOL_SIZE
377Size of the boot pool when it is enabled (See
378.Ev ZFSBOOT_BOOT_POOL ).
379Default:
380.Dq 2g
381.It Ev ZFSBOOT_DISKS
382Disks to be used for the base system, including the boot pool.
383This variable must only be used on a scripted installation.
384See
385.Sx SCRIPTING
386for more information.
387Default: unset
388.It Ev ZFSBOOT_SWAP_SIZE
389Size of the swap partition on each block device.
390This variable will be passed to
391.Xr gpart 8 ;
392which supports SI unit suffixes.
393Default:
394.Dq 2g
395.It Ev ZFSBOOT_SWAP_ENCRYPTION
396If set, enables the encryption of the swap partition using
397.Xr geli 8 .
398Default: ""
399.It Ev ZFSBOOT_SWAP_MIRROR
400If set, enables a swap mirroring using
401.Xr gmirror 8 .
402Default:
403unset
404.It Ev ZFSBOOT_DATASETS
405ZFS datasets to be created on the root zpool, it requires the
406following datasets:
407.Pa /tmp ,
408.Pa /var/tmp ,
409.Pa /$ZFSBOOT_BEROOT_NAME/$ZFSBOOT_BOOTFS_NAME .
410See
411.Sx ZFS DATASETS
412for more information about who to write this variable and to
413take a look into the default value of it.
414.It Ev ZFSBOOT_CONFIRM_LAYOUT
415If set and the installation is interactive, allow the user to confirm
416the layout before continuing with the installation.
417Default:
418.Dq 1
419.El
420.Sh SCRIPTING
421.Nm
422scripts consist of two parts: a
423.Em preamble
424and a
425.Em setup script .
426The preamble sets up the options for the installation (how to partition the
427disk[s], which distributions to install, etc.) and the optional second part is
428a shell script run under
429.Xr chroot 8
430in the newly installed system before
431.Nm
432exits.
433The two parts are separated by the usual script header (#!), which also sets
434the interpreter for the setup script.
435.Pp
436A typical bsdinstall script looks like this:
437.Bd -literal -offset indent
438PARTITIONS=ada0
439DISTRIBUTIONS="kernel.txz base.txz"
440
441#!/bin/sh
442sysrc ifconfig_em0=DHCP
443sysrc sshd_enable=YES
444pkg install puppet
445.Ed
446.Pp
447For a ZFS scripted installation, the script looks like this:
448.Bd -literal -offset indent
449DISTRIBUTIONS="kernel.txz base.txz"
450export ZFSBOOT_VDEV_TYPE=stripe
451export ZFSBOOT_DISKS=ada0
452export nonInteractive="YES"
453
454#!/bin/sh
455echo "ifconfig_em0=DHCP" >> /etc/rc.conf
456echo "sshd_enable=YES" >> /etc/rc.conf
457pkg install puppet
458.Ed
459.Pp
460On
461.Fx
462release media, such a script placed at
463.Pa /etc/installerconfig
464will be run at boot time and the system will be rebooted automatically after
465the installation has completed.
466This can be used for unattended network installation of new systems; see
467.Xr diskless 8
468for details.
469.Ss PREAMBLE
470The preamble consists of installer settings.
471These control global installation parameters (see
472.Sx ENVIRONMENT VARIABLES )
473as well as disk partitioning.
474The preamble is interpreted as a
475.Xr sh 1
476script run at the very beginning of the install.
477If more complicated behavior than setting these variables is desired,
478arbitrary commands can be run here to extend the installer.
479In addition to the variables in
480.Sx ENVIRONMENT VARIABLES ,
481in particular
482.Ev DISTRIBUTIONS ,
483the preamble can contain a variable
484.Ev PARTITIONS
485which is passed to the
486.Cm scriptedpart
487target to control disk setup.
488Alternatively,
489to use
490.Cm zfsboot
491instead of
492.Cm partedit ,
493the preamble can contain the variable
494.Ev ZFSBOOT_DATASETS
495instead of
496.Ev PARTITIONS ,
497and setting the variables
498.Ev ZFSBOOT_DISKS
499and
500.Ev ZFSBOOT_VDEV_TYPE
501to create the pool of disks for the base system.
502Usually, for a mirrored booting disk, this two variables looks like this:
503.Bd -literal -offset indent
504ZFSBOOT_DISKS="ada0 ada1"
505ZFSBOOT_VDEV_TYPE=mirror
506.Ed
507.Pp
508Remenber to export all the variables for the
509.Cm zfsboot
510command, otherwise it will not get set.
511.Ss SETUP SCRIPT
512Following the preamble is an optional shell script, beginning with a #!
513declaration.
514This script will be run at the end of the installation process inside a
515.Xr chroot 8
516environment in the newly installed system and can be used to set up
517configuration files, install packages, etc.
518Note that newly configured system services, e.g., networking have not
519been started in the installed system at this time and only installation
520host services are available.
521.Ss ZFS DATASETS
522The
523.Cm zfsboot
524partitioning takes the
525.Ev ZFSBOOT_DATASETS
526variable to create the datasets on the base system.
527This variable can get pretty huge if the pool contains a lot of datasets.
528The default value of the
529.Ev ZFSBOOT_DATASETS
530looks like this:
531.Bd -literal -offset indent
532# DATASET	OPTIONS (comma or space separated; or both)
533
534# Boot Environment [BE] root and default boot dataset
535/$ZFSBOOT_BEROOT_NAME				mountpoint=none
536/$ZFSBOOT_BEROOT_NAME/$ZFSBOOT_BOOTFS_NAME	mountpoint=/
537
538# Compress /tmp, allow exec but not setuid
539/tmp		mountpoint=/tmp,exec=on,setuid=off
540
541# Do not mount /usr so that 'base' files go to the BEROOT
542/usr		mountpoint=/usr,canmount=off
543
544# Home directories separated so they are common to all BEs
545/usr/home	# NB: /home is a symlink to /usr/home
546
547# Ports tree
548/usr/ports	setuid=off
549
550# Source tree (compressed)
551/usr/src
552
553# Create /var and friends
554/var		mountpoint=/var,canmount=off
555/var/audit	exec=off,setuid=off
556/var/crash	exec=off,setuid=off
557/var/log	exec=off,setuid=off
558/var/mail	atime=on
559/var/tmp	setuid=off
560.Ed
561.Pp
562The first column if the dataset to be created on the top of the
563.Ev ZFSBOOT_POOL_NAME
564and the rest of the columns are the options to be set on each dataset.
565The options must be written on a coma or space separated list, or both.
566And everything behind a pound/hash character is ignored as a comment.
567.Sh HISTORY
568This version of
569.Nm
570first appeared in
571.Fx 9.0 .
572.Sh AUTHORS
573.An Nathan Whitehorn Aq Mt nwhitehorn@FreeBSD.org
574