1.\"- 2.\" Copyright (c) 2011-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org> 3.\" All rights reserved. 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 October 15, 2013 29.Dt BSDINSTALL 8 30.Os 31.Sh NAME 32.Nm bsdinstall 33.Nd system installer 34.Sh SYNOPSIS 35.Nm 36.Op Ar target 37.Op Ar ... 38.Sh DESCRIPTION 39.Nm 40is used for installation of new systems, both for system setup from 41installation media (e.g. CD-ROMs) and for use on live systems to prepare 42VM images and jails. 43.Pp 44Much like 45.Xr make 1 , Nm 46takes a target and possible parameters of the target as arguments. If 47invoked with no arguments, it will invoke the 48.Cm auto 49target, which provides a standard interactive installation, invoking the 50others in sequence. To perform a scripted installation, these subtargets 51can be invoked separately by an installation script. 52.Sh TARGETS 53Most of the following targets are only useful for scripting the installer. 54For interactive use, most users will be interested only in the 55.Cm auto , 56.Cm jail , 57and 58.Cm script 59targets. 60.Bl -tag -width ".Cm jail Ar destination" 61.It Cm auto 62Run the standard interactive installation, including disk partitioning. 63.It Cm entropy 64Reads a small amount of data from 65.Pa /dev/random 66and stores it in a file in the new system's root directory. 67.It Cm jail Ar destination 68Sets up a new chroot system at 69.Pa destination , 70suitable for use with 71.Xr jail 8 . 72Behavior is generally similar to 73.Cm auto , 74except that disk partitioning and network setup are skipped and a kernel is 75not installed into the new system. 76.It Cm script Ar script 77Runs the installation script at 78.Pa script . 79See 80.Sx SCRIPTING 81for more information on this target. 82.It Cm keymap 83If the current controlling TTY is a 84.Xr syscons 4 85console, asks the user to set the current keymap, and saves the result to the 86new system's 87.Pa rc.conf . 88.It Cm hostname 89Prompts the user for a host name for the new system and saves the result to the 90new system's 91.Pa rc.conf . 92If 93.Ev BSDINSTALL_CONFIGCURRENT 94is set, also sets the host name of the current system. 95.It Cm netconfig 96Interactively configures network interfaces (first invoking 97.Cm wlanconfig 98on wireless interfaces), saving the result to the new system's 99.Pa rc.conf 100and 101.Pa resolv.conf . 102If 103.Ev BSDINSTALL_CONFIGCURRENT 104is set, also configures the network interfaces of the current system to match. 105.It Cm autopart 106Provides the installer's interactive guided disk partitioner for single-disk 107installations. Partitions disks, runs 108.Xr newfs 8 , 109and writes the new system's 110.Pa fstab . 111.It Cm zfsboot 112Provides the installer's 113.Pq experimental 114interactive/scriptable ZFS partitioner for multi-disk installations. 115Creates a single 116.Ic zpool 117with datasets and writes to the new system's 118.Pa rc.conf , 119.Pa loader.conf , 120and 121.Pa fstab . 122Supports 123.Xr geli 8 , 124.Xr gnop 8 , 125and many other features. 126.It Cm partedit 127Provides the installer's interactive manual disk partitioner, with support 128for multi disk setups, non-UFS file systems, and manual selection of 129partition schemes. Partitions disks, runs 130.Xr newfs 8 , 131and writes the new system's 132.Pa fstab . 133.It Cm scriptedpart Ar parameters 134Sets up disks like 135.Cm autopart 136and 137.Cm partedit , 138but non-interactively according to the disk setup specified in 139.Ar parameters . 140Each disk setup is specified by a three-part argument: 141.Pp 142.Ar disk 143.Op Ar scheme 144.Op Ar {partitions} 145.Pp 146Multiple disk setups are separated by semicolons. The 147.Ar disk 148argument specifies the disk on which to operate (which will be erased), 149while the 150.Ar scheme 151argument specifies the 152.Xr gpart 8 153partition scheme to apply to the disk. If 154.Ar scheme 155is unspecified, 156.Cm scriptedpart 157will apply the default bootable scheme on your platform. 158The 159.Ar partitions 160argument is also optional and specifies how to partition 161.Ar disk . 162It consists of a comma-separated list of partitions to create enclosed in 163curly braces. Each partition declaration takes the form 164.Pp 165.Ar size 166.Ar type 167.Op Ar mount point 168.Pp 169.Ar size 170specifies the partition size to create in bytes (K, M, and G suffixes 171can be appended to specify kilobytes, megabytes, and gigabytes respectively), 172while the 173.Em auto 174keyword causes the partition to take all the remaining space on the disk. The 175.Ar type 176option chooses the 177.Xr gpart 8 178filesystem type (e.g. freebsd-ufs or freebsd-swap). 179The optional 180.Ar mount point 181argument sets where the created partition is to be mounted in the installed 182system. As an example, a typical invocation looks like: 183.Pp 184bsdinstall scriptedpart ada0 { 20G freebsd-ufs /, 4G freebsd-swap, 20G freebsd-ufs /var, auto freebsd-ufs /usr } 185.It Cm mount 186Mounts the file systems previously configured by 187.Cm autopart , 188.Cm partedit , 189or 190.Cm scriptedpart 191under 192.Ev BSDINSTALL_CHROOT . 193.It Cm distfetch 194Fetches the distributions in 195.Ev DISTRIBUTIONS 196to 197.Ev BSDINSTALL_DISTDIR 198from 199.Ev BSDINSTALL_DISTSITE . 200.It Cm checksum 201Verifies the checksums of the distributions listed in 202.Ev DISTRIBUTIONS 203against the distribution manifest. 204.It Cm distextract 205Extracts the distributions listed in 206.Ev DISTRIBUTIONS 207into 208.Ev BSDINSTALL_CHROOT . 209.It Cm rootpass 210Interactively invokes 211.Xr passwd 1 212in the new system to set the root user's password. 213.It Cm adduser 214Interactively invokes 215.Xr adduser 8 216in the new system. 217.It Cm time 218Interactively sets the time, date, and time zone of the new system. 219.It Cm services 220Queries the user for the system daemons to begin at system startup, 221writing the result into the new system's 222.Pa rc.conf . 223.It Cm config 224Installs the configuration files destined for the new system (e.g. rc.conf 225fragments generated by 226.Cm netconfig , 227etc.) onto the new system. 228.El 229.Sh ENVIRONMENT VARIABLES 230The following environment variables control various aspects of the installation 231process. Many are used internally during installation and have reasonable 232default values for most installation scenarios. Others are set by various 233interactive user prompts, and can be usefully overridden when making scripted 234or customized installers. 235.Bl -tag -width ".Ev BSDINSTALL_DISTSITE" 236.It Ev DISTRIBUTIONS 237The set of distributions to install (e.g. "base kernel ports"). Default: none 238.It Ev BSDINSTALL_DISTDIR 239The directory in which the distribution files can be found (or to which they 240should be downloaded). Default: 241.Pa /usr/freebsd-dist 242.It Ev BSDINSTALL_DISTSITE 243URL from which the distribution files should be downloaded if they are not 244already present in the directory defined by 245.Ev BSDINSTALL_DISTDIR . 246This should be a full path to the files, including architecture and release 247names. Most targets (e.g. 248.Cm auto 249and 250.Cm jail ) 251that prompt for a 252.Fx 253mirror will skip that step if this variable is already defined in the 254environment. Example: 255.Pa ftp://ftp.freebsd.org/pub/FreeBSD/releases/powerpc/powerpc64/9.1-RELEASE 256.It Ev BSDINSTALL_CHROOT 257The directory into which the distribution files should be unpacked and the 258directory at which the root file system of the new system should be mounted. 259Default: 260.Pa /mnt 261.It Ev BSDINSTALL_LOG 262Path to a log file for the installation. Default: 263.Pa /tmp/bsdinstall_log 264.It Ev BSDINSTALL_TMPETC 265Directory where files destined for the new system's 266.Pa /etc 267will be stored until the 268.Cm config 269target is executed. If this directory does not already exist, it will be 270created. Default: 271.Pa /tmp/bsdinstall_etc 272.It Ev BSDINSTALL_TMPBOOT 273Directory where files destined for the new system's 274.Pa /boot 275will be stored until the 276.Cm config 277target is executed. If this directory does not already exist, it will be 278created. Default: 279.Pa /tmp/bsdinstall_boot 280.El 281.Sh SCRIPTING 282.Nm 283scripts consist of two parts: a 284.Em preamble 285and a 286.Em setup script . 287The preamble sets up the options for the installation (how to partition the 288disk[s], which distributions to install, etc.) and the optional second part is 289a shell script run under 290.Xr chroot 8 291in the newly installed system before 292.Nm 293exits. The two parts are separated by the usual script header (#!), which 294also sets the interpreter for the setup script. 295.Pp 296A typical bsdinstall script looks like this: 297.Bd -literal -offset indent 298PARTITIONS=ada0 299DISTRIBUTIONS="kernel.txz base.txz" 300 301#!/bin/sh 302echo "ifconfig_em0=DHCP" >> /etc/rc.conf 303echo "sshd_enable=YES" >> /etc/rc.conf 304pkg install puppet 305.Ed 306.Pp 307On 308.Fx 309release media, such a script placed at 310.Pa /etc/installerconfig 311will be run at boot time and the system will be rebooted automatically after 312the installation has completed. This can be used for unattended network 313installation of new systems; see 314.Xr diskless 8 315for details. 316.Ss PREAMBLE 317The preamble consists of installer settings. These control global installation 318parameters (see 319.Sx ENVIRONMENT VARIABLES ) 320as well as disk partitioning. The preamble is interpreted as a 321.Xr sh 1 322script run at the very beginning of the install. If more complicated behavior 323than setting these variables is desired, arbitrary commands can be run here 324to extend the installer. In addition to the variables in 325.Sx ENVIRONMENT VARIABLES , 326in particular 327.Ev DISTRIBUTIONS , 328the preamble can contain a variable 329.Ev PARTITIONS 330which is passed to the 331.Cm scriptedpart 332target to control disk setup. 333Alternatively, 334instead of 335.Ev PARTITIONS , 336the preamble can contain the variable 337.Ev ZFSBOOT_DATASETS 338which is parsed by the 339.Pq experimental 340.Cm zfsboot 341target to control ZFS datasets/options of the boot pool setup. 342.Ss SETUP SCRIPT 343Following the preamble is an optional shell script, beginning with a #! 344declaration. This script will be run at the end of the installation process 345inside a 346.Xr chroot 8 347environment in the newly installed system and can be used to set up 348configuration files, install packages, etc. Note that newly configured 349system services (e.g. networking) have not been started in the installed 350system at this time and only installation host services are available. 351.Sh HISTORY 352This version of 353.Nm 354first appeared in 355.Fx 9.0 . 356.Sh AUTHORS 357.An -nosplit 358.An Nathan Whitehorn Aq nwhitehorn@FreeBSD.org 359