Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages

  
 
  

home | help
BSDINSTALL(8)		     System Manager's Manual		   BSDINSTALL(8)

NAME
     bsdinstall -- system installer

SYNOPSIS
     bsdinstall [options] [target] [...]

DESCRIPTION
     bsdinstall  is  used for installation of new systems, both for system setup
     from installation media, such as discs, USBs, or network boot environments,
     and for use on live systems to prepare jails and virtual machine images.

     Much like make(1), bsdinstall takes a target and possible parameters of the
     target as arguments.  If invoked with no arguments, it will invoke the auto
     target, which provides a standard interactive  installation,  invoking  the
     others  in  sequence.  To perform a scripted installation, these subtargets
     can be invoked separately by an installation script.

OPTIONS
     bsdinstall supports the following options, global to all targets:

     -D file  Provide  a  path	for  the  installation	 log   file   (overrides
	      BSDINSTALL_LOG).	See "ENVIRONMENT VARIABLES" for more information
	      on BSDINSTALL_LOG.

TARGETS
     Most  of the following targets are only useful for scripting the installer.
     For interactive use, most users will be interested only in the auto,  jail,
     and script targets.

     auto     Run  the	standard interactive installation, including disk parti-
	      tioning.

	      The  DISTRIBUTIONS  environment  variable  is  set  to   "base.txz
	      kernel.txz" by default for this target.

     jail destination
	      Sets  up a new chroot system at destination, suitable for use with
	      jail(8).	Behavior is generally similar to auto, except that  disk
	      partitioning and network setup are skipped and a kernel is not in-
	      stalled into the new system.

	      The DISTRIBUTIONS environment variable is set to "base.txz" by de-
	      fault for this target.

     script script
	      Runs  the installation script at script.	See "SCRIPTING" for more
	      information on this target.

	      The DISTRIBUTIONS environment variable is  unset	by  default  for
	      this  target.  Instead, the COMPONENTS environment variable is ef-
	      fectively set to "base kernel kernel-dbg" for this target.

     keymap   If the current controlling TTY is a syscons(4) or  vt(4)	console,
	      asks  the  user to set the current keymap, and saves the result to
	      the new system's rc.conf.

     hostname
	      Prompts the user for a host name for the new system and saves  the
	      result  to  the new system's rc.conf.  If BSDINSTALL_CONFIGCURRENT
	      is set, also sets the host name of the current system.

     netconfig
	      Interactively  configures  network  interfaces   (first	invoking
	      wlanconfig  on  wireless interfaces), saving the result to the new
	      system's rc.conf and resolv.conf.  If BSDINSTALL_CONFIGCURRENT  is
	      set,  also configures the network interfaces of the current system
	      to match.

     autopart
	      Provides the installer's interactive guided disk	partitioner  for
	      single-disk installations.  Defaults to UFS.

     bootconfig
	      Detects  an  appropriate	partition  and installs UEFI boot loader
	      files.

     zfsboot  Provides a ZFS-only automatic interactive disk partitioner.   Cre-
	      ates  a single zpool with separate datasets for /home, /tmp, /usr,
	      /usr/ports, /usr/src, and /var.  Optionally can set up geli(8)  to
	      encrypt the disk.

     partedit
	      Provides	the installer's interactive manual disk partitioner with
	      an interface identical to sade(8).   Supports  multiple  disks  as
	      well  as	UFS,  ZFS, and FAT file systems.  ZFS is set up with one
	      pool and dataset per partition.

     scriptedpart parameters
	      Sets up disks like autopart and  partedit,  but  non-interactively
	      according  to  the  disk setup specified in parameters.  Each disk
	      setup is specified by a three-part argument:

	      disk [scheme] [{partitions}]

	      Multiple disk setups are separated by semicolons.  The disk  argu-
	      ment  specifies  the  disk  on  which  to  operate  (which will be
	      erased), or the special value DEFAULT, which will result in either
	      a selection window (as in autopart) for the destination  disk  or,
	      if  there is only one possible disk, will automatically select it.
	      The scheme argument specifies the gpart(8) partition scheme to ap-
	      ply to the disk.	If scheme is unspecified, scriptedpart will  ap-
	      ply  the default bootable scheme on your platform.  The partitions
	      argument is also optional and specifies how to partition disk.  It
	      consists of a comma-separated list of  partitions  to  create  en-
	      closed in curly braces.  Each partition declaration takes the form

	      size type [mount point]

	      size  specifies the partition size to create in bytes (K, M, and G
	      suffixes can be appended to specify kilobytes, megabytes, and  gi-
	      gabytes respectively), while the auto keyword causes the partition
	      to  take	all  the  remaining  space on the disk.  The type option
	      chooses the gpart(8) filesystem type, e.g., freebsd-ufs,	freebsd-
	      zfs,  or	freebsd-swap.	The  optional  mount point argument sets
	      where the created partition is to be mounted in the installed sys-
	      tem.  As an example, a typical invocation looks like:

	      bsdinstall scriptedpart ada0 { 20G freebsd-ufs /, 4G freebsd-swap,
	      20G freebsd-ufs /var, auto freebsd-ufs /usr }

	      Note that the list of partitions should not  include  boot  parti-
	      tions (e.g. EFI system partitions), which will be created automat-
	      ically on whatever disk includes /.

	      A  shorter invocation to use the default partitioning (as autopart
	      would have used) on the same disk:

	      bsdinstall scriptedpart ada0

	      or, even shorter:

	      bsdinstall scriptedpart DEFAULT

     mount    Mounts  the  file  systems  previously  configured  by   autopart,
	      partedit, or scriptedpart under BSDINSTALL_CHROOT.

     distfetch
	      Fetches  the  distributions in DISTRIBUTIONS to BSDINSTALL_DISTDIR
	      from BSDINSTALL_DISTSITE.

     checksum
	      Verifies	the   checksums   of   the   distributions   listed   in
	      DISTRIBUTIONS against the distribution manifest.

     distextract
	      Extracts	 the   distributions   listed	in   DISTRIBUTIONS  into
	      BSDINSTALL_CHROOT.

     pkgbase [--jail]
	      Fetch and  install  base	system	packages  to  BSDINSTALL_CHROOT.
	      Packages	are  fetched  according  to  repository configuration in
	      BSDINSTALL_PKG_REPOS_DIR if set, or pkg.freebsd.org otherwise.  If
	      the --jail option is passed,  no	kernel	is  installed,	and  the
	      "jail" variant of each package set will be selected where applica-
	      ble.

     firmware
	      executes	fwget(8)  inside  the  BSDINSTALL_CHROOT  to install any
	      needed and available firmware for the new system.

     rootpass
	      Interactively invokes passwd(1) in the new system to set the  root
	      user's password.

     adduser  Interactively invokes adduser(8) in the new system.

     time     Interactively  sets  the time, date, and time zone of the new sys-
	      tem.

     services
	      Queries the user	for  the  system  daemons  to  begin  at  system
	      startup, writing the result into the new system's rc.conf.

     entropy  Reads  a	small amount of data from /dev/random and stores it in a
	      file in the new system's root directory.

     config   Installs the configuration files	destined  for  the  new  system,
	      e.g.,  rc.conf(5) fragments generated by netconfig, etc.) onto the
	      new system.

ENVIRONMENT VARIABLES
     The following environment variables control various aspects of the  instal-
     lation process.  Many are used internally during installation and have rea-
     sonable  default values for most installation scenarios.  Others are set by
     various interactive user prompts, and can be usefully overridden when  mak-
     ing scripted or customized installers.

     TMPDIR   The directory to use for temporary files.  Default: "/tmp"

     COMPONENTS
	      The  set of components to install for scripted installations using
	      base system packages, e.g., "base lib32  kernel-dbg  tests".   De-
	      fault: "base kernel-dbg"

     DISTRIBUTIONS
	      The set of distributions to install for traditional installations,
	      e.g.,  "base.txz kernel.txz ports.txz".  If unset, then bsdinstall
	      will install using base system packages.	 Default:  unset  unless
	      noted otherwise in the "TARGETS" section.

     PARTITIONS
	      The  partitioning  of  the disk onto which the system is being in-
	      stalled.	See scriptedpart of the "TARGETS" section for format de-
	      tails. If this variable is unset, the installer will use	the  de-
	      fault partitioning as in autopart.  Default: unset

     BSDINSTALL_DISTDIR
	      The  directory in which the distribution files can be found (or to
	      which they should be downloaded).  Default: "/usr/freebsd-dist"

     BSDINSTALL_DISTSITE
	      URL from which the distribution files should be downloaded if they
	      are  not	 already   present   in   the	directory   defined   by
	      BSDINSTALL_DISTDIR.   This should be a full path to the files, in-
	      cluding architecture and release names.  Most targets, e.g.,  auto
	      and  jail, that prompt for a FreeBSD mirror will skip that step if
	      this variable is already defined	in  the  environment.	Example:
	      https://download.freebsd.org/ftp/releases/powerpc/powerpc64/13.1-RELEASE/
	      or
	      http://ftp-archive.freebsd.org/pub/FreeBSD-Archive/old-releases/amd64/12.2-RELEASE/.

     BSDINSTALL_PKG_REPOS_DIR
	      Directory containing pkg(8) repository configuration files used by
	      the   pkgbase   target.	 See   "REPOSITORY   CONFIGURATION"   in
	      pkg.conf(5).  Default: unset

     BSDINSTALL_CHROOT
	      The directory into which the distribution files should be unpacked
	      and the directory at which the root file system of the new  system
	      should be mounted.  Default: "/mnt"

     BSDINSTALL_LOG
	      Path   to   a   log   file   for	 the   installation.	Default:
	      "$TMPDIR/bsdinstall_log"

     BSDINSTALL_SKIP_FIRMWARE
	      If not empty, the auto target will not invoke the firmware target.

     BSDINSTALL_SKIP_HARDENING
	      If not empty, the auto target will not invoke the  hardening  tar-
	      get.

     BSDINSTALL_SKIP_HOSTNAME
	      If not empty, the auto target will not invoke the hostname target.

     BSDINSTALL_SKIP_KEYMAP
	      If not empty, the auto target will not invoke the keymap target.

     BSDINSTALL_SKIP_MANUAL
	      If  not  empty,  the auto target will not offer to open a shell in
	      the new system for final manual modifications.

     BSDINSTALL_SKIP_SERVICES
	      If not empty, the auto target will not invoke the services target.

     BSDINSTALL_SKIP_TIME
	      If not empty, the auto target will not invoke the time target.

     BSDINSTALL_SKIP_USERS
	      If not empty, the auto target will not invoke the adduser target.

     BSDINSTALL_SKIP_FINALCONFIG
	      If not empty, the auto target will not show the  final  configura-
	      tion dialog, where earlier configuration choices can be revisited.

     BSDINSTALL_TMPETC
	      Directory  where	files destined for the new system's /etc will be
	      stored until the config target is  executed.   If  this  directory
	      does   not   already   exist,   it   will  be  created.	Default:
	      "$TMPDIR/bsdinstall_etc"

     BSDINSTALL_TMPBOOT
	      Directory where files destined for the new system's /boot will  be
	      stored  until  the  config  target is executed.  If this directory
	      does  not  already  exist,   it	will   be   created.	Default:
	      "$TMPDIR/bsdinstall_boot"

     ROOTPASS_ENC
	      Encrypted  string  to  set  the root password to in the format ex-
	      pected by pw(8) -H  0.   This  option  is  used  if  both  it  and
	      ROOTPASS_PLAIN are set.

     ROOTPASS_PLAIN
	      Plain text string to set the root password to.

     ZFSBOOT_POOL_NAME
	      Name for the pool containing the base system.  Default: "zroot"

     ZFSBOOT_POOL_CREATE_OPTIONS
	      Options to be used when creating the base system's pool.	Each op-
	      tion  must  be preceded by the -O flag to be taken into considera-
	      tion or the pool will not be created due to errors using the  com-
	      mand zpool.  Default: "-O compression=on -O atime=off"

     ZFSBOOT_BEROOT_NAME
	      Name  for  the  boot  environment  parent dataset.  This is a non-
	      mountable dataset meant to be a  parent  dataset	where  different
	      boot environment are going to be created.  Default: "ROOT"

     ZFSBOOT_BOOTFS_NAME
	      Name  for  the primary boot environment, which will be the default
	      boot environment for the system.	Default: "default"

     ZFSBOOT_VDEV_TYPE
	      The type of pool to be created for the base system.  This variable
	      can take one of this values: stripe (No redundancy), mirror (n-Way
	      mirroring), raid10 (RAID 1+0 - n x 2-Way Mirrors), raidz1 (RAID-Z1
	      - Single Redundancy RAID), raidz2  (RAID-Z2  -  Double  Redundancy
	      RAID)  or  raidz3  (RAID-Z3  Triple  Redundancy  RAID).	Default:
	      "stripe"

     ZFSBOOT_FORCE_4K_SECTORS
	      Controls the minimum sector size of the pool.  If this variable is
	      not empty, the minimum sector size is 4K.   If  this  variable  is
	      empty,  the minimum sector size is 512.  Note that the sector size
	      of the pool will always be at least the sector size of the backing
	      disks.  Default: "1"

     ZFSBOOT_GELI_ENCRYPTION
	      If this variable is not empty, it will use geli(8) to encrypt  the
	      root  pool, enabling automatically the ZFSBOOT_BOOT_POOL variable.
	      Default: ""

     ZFSBOOT_GELI_KEY_FILE
	      Path to the geli(8) keyfile used to encrypt  the	pool  where  the
	      base system is stored.  Default: "/boot/encryption.key"

     ZFSBOOT_BOOT_POOL
	      If  set,	a  separated boot pool will be created for the kernel of
	      the system and loader(8).  Default: unset

     ZFSBOOT_BOOT_POOL_CREATE_OPTIONS
	      Options to use when creating the	boot  pool,  when  enabled  (See
	      ZFSBOOT_BOOT_POOL ). Default: unset

     ZFSBOOT_BOOT_POOL_NAME
	      Name  for  the  optional	boot  pool  when  it  is  enabled,  (See
	      ZFSBOOT_BOOT_POOL ). Default: "bootpool"

     ZFSBOOT_BOOT_POOL_SIZE
	      Size of the boot pool when it is enabled (See ZFSBOOT_BOOT_POOL ).
	      Default: "2g"

     ZFSBOOT_DISKS
	      Disks to be used for the base system,  including	the  boot  pool.
	      This  variable  must only be used on a scripted installation.  See
	      "SCRIPTING" for more information.  Default: unset

     ZFSBOOT_SWAP_SIZE
	      Size of the swap partition on each block	device.   This	variable
	      will  be passed to gpart(8); which supports SI unit suffixes.  De-
	      fault: "2g"

     ZFSBOOT_SWAP_ENCRYPTION
	      If set,  enables	the  encryption  of  the  swap	partition  using
	      geli(8).	Default: ""

     ZFSBOOT_SWAP_MIRROR
	      If set, enables a swap mirroring using gmirror(8).  Default: unset

     ZFSBOOT_DATASETS
	      ZFS datasets to be created on the root zpool, it requires the fol-
	      lowing		 datasets:	      /tmp,	       /var/tmp,
	      /$ZFSBOOT_BEROOT_NAME/$ZFSBOOT_BOOTFS_NAME.   See  "ZFS  DATASETS"
	      for  more  information about how to populate this variable and its
	      default value.

     ZFSBOOT_CONFIRM_LAYOUT
	      If set and the installation is interactive, allow the user to con-
	      firm the layout before continuing with the installation.	Default:
	      "1"

SCRIPTING
     bsdinstall supports unattended, or minimally-attended, installations  using
     scripting.  This can be used with either modified physical installation me-
     dia  or  with  diskless(8)  installations	over the network; information on
     preparing such media can be found in "BUILDING AUTOMATIC INSTALL MEDIA"

     Scripted installations follow an essentially identical path to  interactive
     installations,  though  with  some  minor feature differences (for example,
     scripted installations do not support fetching of remote distribution files
     since scripted installations normally install the same files and  the  dis-
     tributions  can  be  added directly to the installation media).  bsdinstall
     scripts consist of two parts: a preamble and a setup script.  The	preamble
     sets  up  the  options  for the installation (how to partition the disk[s],
     which distributions to install, etc.) and the optional  second  part  is  a
     shell  script  run  under	chroot(8)  in  the newly installed system before
     bsdinstall exits.	The two parts are separated by the usual  script  header
     (#!), which also sets the interpreter for the setup script.

     A	typical  bsdinstall  script, using the default filesystem layout and the
     UFS filesystem, looks like this:

	   PARTITIONS=DEFAULT
	   COMPONENTS="base debug"

	   #!/bin/sh
	   sysrc ifconfig_DEFAULT=DHCP
	   sysrc sshd_enable=YES
	   pkg install -y puppet

     For a scripted installation involving a ZFS pool spanning	multiple  disks,
     the script instead looks like this:

	   COMPONENTS="base debug"
	   export ZFSBOOT_VDEV_TYPE=stripe
	   export ZFSBOOT_DISKS="ada0 ada1"
	   export nonInteractive="YES"

	   #!/bin/sh
	   echo "ifconfig_DEFAULT=DHCP" >> /etc/rc.conf
	   echo "sshd_enable=YES" >> /etc/rc.conf
	   pkg install -y puppet

     To  install  using  traditional distributions sets instead of packages, set
     DISTRIBUTIONS to the list of distribution sets to install, like this:

	   PARTITIONS=DEFAULT
	   DISTRIBUTIONS="kernel.txz base.txz"

	   #!/bin/sh
	   sysrc ifconfig_DEFAULT=DHCP
	   sysrc sshd_enable=YES
	   pkg install -y puppet

     On FreeBSD release media, such a script placed at /etc/installerconfig will
     be run at boot time and the system will be rebooted automatically after the
     installation has completed.  This can be used for	unattended  network  in-
     stallation of new systems; see diskless(8) for details.

   PREAMBLE
     The  preamble consists of installer settings.  These control global instal-
     lation parameters (see "ENVIRONMENT VARIABLES") as well as disk  partition-
     ing.   The preamble is interpreted as a sh(1) script run at the very begin-
     ning of the install.  If more complicated behavior than setting these vari-
     ables is desired, arbitrary commands can be run  here  to	extend	the  in-
     staller.	In addition to the variables in "ENVIRONMENT VARIABLES", in par-
     ticular COMPONENTS, the preamble can contain a variable PARTITIONS which is
     passed to the scriptedpart target to control disk setup.

     Alternatively, to use zfsboot instead of partedit, the preamble can contain
     the variable ZFSBOOT_DATASETS instead of PARTITIONS (see below).  If  using
     zfsboot,  the  variables ZFSBOOT_DISKS and ZFSBOOT_VDEV_TYPE must be set to
     create the pool of disks for the base  system.   Usually,	for  a	mirrored
     booting disk, these two variables look like this:

	   ZFSBOOT_DISKS="ada0 ada1"
	   ZFSBOOT_VDEV_TYPE=mirror

     Remember to export all the variables for the zfsboot command, otherwise in-
     stallation will fail.

   SETUP SCRIPT
     Following	the  preamble  is  an optional shell script, beginning with a #!
     declaration.  This script will be	run  at  the  end  of  the  installation
     process  inside  a  chroot(8) environment in the newly installed system and
     can be used to set up configuration files,  install  packages,  etc.   Note
     that  newly  configured  system  services,  e.g.,	networking have not been
     started in the installed system at this time  and	only  installation  host
     services are available.

   ZFS DATASETS
     If  using	zfsboot in an installation script, the zfsboot partitioning tool
     takes the ZFSBOOT_DATASETS variable to create the ZFS datasets on the  base
     system.   This  variable  definition  can become large if the pool contains
     many datasets.  The default value of ZFSBOOT_DATASETS is:

	   # DATASET	   OPTIONS (comma or space separated; or both)

	   # Boot Environment [BE] root and default boot dataset
	   /$ZFSBOOT_BEROOT_NAME			   mountpoint=none
	   /$ZFSBOOT_BEROOT_NAME/$ZFSBOOT_BOOTFS_NAME	   mountpoint=/

	   # Home directories separated so they are common to all BEs
	   /home	   mountpoint=/home

	   # Create /tmp and allow exec but not setuid
	   /tmp 	   mountpoint=/tmp,exec=on,setuid=off

	   # Do not mount /usr so that 'base' files go to the BEROOT
	   /usr 	   mountpoint=/usr,canmount=off

	   # Ports tree
	   /usr/ports	   setuid=off

	   # Source tree
	   /usr/src

	   # Create /var and friends
	   /var 	   mountpoint=/var,canmount=off
	   /var/audit	   exec=off,setuid=off
	   /var/crash	   exec=off,setuid=off
	   /var/log	   exec=off,setuid=off
	   /var/mail	   atime=on
	   /var/tmp	   setuid=off

     The first column is the name of the dataset to be created as  part  of  the
     ZFSBOOT_POOL_NAME	pool and the remainder of each line contains the options
     to be set on each dataset.  If multiple options are given, they can be sep-
     arated by either commas or whitespace; everything	following  a  pound/hash
     character is ignored as a comment.

   BUILDING AUTOMATIC INSTALL MEDIA
     If building automatic install media, use tar to extract a release ISO:
	   mkdir release-media
	   tar -C release-media -xvf FreeBSD-13.0-RELEASE-amd64-disc1.iso

     Then place a script as above in etc/installerconfig

     This directory can then be used directly as an NFS root for diskless(8) in-
     stallations  or  it  can  be  rebuilt  into  an ISO image using the release
     scripts in /usr/src/release.  For example, on amd64:
	   sh /usr/src/release/amd64/mkisoimages.sh  -b  '13_0_RELEASE_AMD64_CD'
	   output.iso release-media

HISTORY
     This version of bsdinstall first appeared in FreeBSD 9.0.

AUTHORS
     Nathan Whitehorn <nwhitehorn@FreeBSD.org>
     Devin Teske <dteske@FreeBSD.org>
     Allan Jude <allanjude@FreeBSD.org>

FreeBSD ports 15.quarterly	  May 12, 2026			   BSDINSTALL(8)

Want to link to this manual page? Use this URL:
<https://man.freebsd.org/cgi/man.cgi?query=bsdinstall&sektion=8&manpath=FreeBSD+15.1-RELEASE+and+Ports.quarterly>

home | help