bsdinstall(8): Document ZFS installation scripting.
- Extend the bsdinstall(8) man page with ZFS installation scripting details. [1] - Extend the bsdinstall(8) man page with the description of all the ZFS variables involved in a scripted installation of ZFS-based systems. [1] - Extend the SCRIPTING section with an example for a ZFS-based scripted installation. [1] - Create a new section explaining how ZFS datasets must be written into a variable to get them set on the final system. [1] While here: - Add Roberto to the copyrights for recognition as changes to the manual page are huge. - Use "Dq" for default values. - Use sysrc(8) instead of echo in examples. Submitted by: Roberto Fernandez Cueto <roberfern@gmail.com> [1] Reviewed by: dteske Approved by: re (gjb), krion (mentor, implicit), mat (mentor, implicit) Differential Revision: https://reviews.freebsd.org/D14169
This commit is contained in:
parent
da8348df52
commit
911e0929e5
@ -1,6 +1,6 @@
|
|||||||
.\"-
|
.\"-
|
||||||
.\" Copyright (c) 2011-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org>
|
.\" Copyright (c) 2011-2013 Nathan Whitehorn <nwhitehorn@FreeBSD.org> All rights reserved.
|
||||||
.\" All rights reserved.
|
.\" Copyright (c) 2018 Roberto Fernandez Cueto <roberfern@gmail.com>
|
||||||
.\"
|
.\"
|
||||||
.\" Redistribution and use in source and binary forms, with or without
|
.\" Redistribution and use in source and binary forms, with or without
|
||||||
.\" modification, are permitted provided that the following conditions
|
.\" modification, are permitted provided that the following conditions
|
||||||
@ -25,7 +25,7 @@
|
|||||||
.\"
|
.\"
|
||||||
.\" $FreeBSD$
|
.\" $FreeBSD$
|
||||||
.\"
|
.\"
|
||||||
.Dd May 23, 2017
|
.Dd October 4, 2018
|
||||||
.Dt BSDINSTALL 8
|
.Dt BSDINSTALL 8
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@ -261,12 +261,12 @@ overridden when making scripted or customized installers.
|
|||||||
.Bl -tag -width ".Ev BSDINSTALL_DISTSITE"
|
.Bl -tag -width ".Ev BSDINSTALL_DISTSITE"
|
||||||
.It Ev DISTRIBUTIONS
|
.It Ev DISTRIBUTIONS
|
||||||
The set of distributions to install, e.g., "base kernel ports".
|
The set of distributions to install, e.g., "base kernel ports".
|
||||||
Default: none
|
Default: unset
|
||||||
.It Ev BSDINSTALL_DISTDIR
|
.It Ev BSDINSTALL_DISTDIR
|
||||||
The directory in which the distribution files can be found (or to which they
|
The directory in which the distribution files can be found (or to which they
|
||||||
should be downloaded).
|
should be downloaded).
|
||||||
Default:
|
Default:
|
||||||
.Pa /usr/freebsd-dist
|
.Dq Pa /usr/freebsd-dist
|
||||||
.It Ev BSDINSTALL_DISTSITE
|
.It Ev BSDINSTALL_DISTSITE
|
||||||
URL from which the distribution files should be downloaded if they are not
|
URL from which the distribution files should be downloaded if they are not
|
||||||
already present in the directory defined by
|
already present in the directory defined by
|
||||||
@ -287,11 +287,11 @@ Example:
|
|||||||
The directory into which the distribution files should be unpacked and the
|
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.
|
directory at which the root file system of the new system should be mounted.
|
||||||
Default:
|
Default:
|
||||||
.Pa /mnt
|
.Dq Pa /mnt
|
||||||
.It Ev BSDINSTALL_LOG
|
.It Ev BSDINSTALL_LOG
|
||||||
Path to a log file for the installation.
|
Path to a log file for the installation.
|
||||||
Default:
|
Default:
|
||||||
.Pa /tmp/bsdinstall_log
|
.Dq Pa /tmp/bsdinstall_log
|
||||||
.It Ev BSDINSTALL_TMPETC
|
.It Ev BSDINSTALL_TMPETC
|
||||||
Directory where files destined for the new system's
|
Directory where files destined for the new system's
|
||||||
.Pa /etc
|
.Pa /etc
|
||||||
@ -300,7 +300,7 @@ will be stored until the
|
|||||||
target is executed.
|
target is executed.
|
||||||
If this directory does not already exist, it will be created.
|
If this directory does not already exist, it will be created.
|
||||||
Default:
|
Default:
|
||||||
.Pa /tmp/bsdinstall_etc
|
.Dq Pa /tmp/bsdinstall_etc
|
||||||
.It Ev BSDINSTALL_TMPBOOT
|
.It Ev BSDINSTALL_TMPBOOT
|
||||||
Directory where files destined for the new system's
|
Directory where files destined for the new system's
|
||||||
.Pa /boot
|
.Pa /boot
|
||||||
@ -309,7 +309,113 @@ will be stored until the
|
|||||||
target is executed.
|
target is executed.
|
||||||
If this directory does not already exist, it will be created.
|
If this directory does not already exist, it will be created.
|
||||||
Default:
|
Default:
|
||||||
.Pa /tmp/bsdinstall_boot
|
.Dq Pa /tmp/bsdinstall_boot
|
||||||
|
.It Ev ZFSBOOT_POOL_NAME
|
||||||
|
Name for the pool containing the base system.
|
||||||
|
Default:
|
||||||
|
.Dq zroot
|
||||||
|
.It Ev ZFSBOOT_POOL_CREATE_OPTIONS
|
||||||
|
Options to be used when creating the base system's pool.
|
||||||
|
Each option must be followed by the -O flag to be taken into consideration
|
||||||
|
or the pool will not be created due to errors using the command
|
||||||
|
.Cm zpool .
|
||||||
|
Default:
|
||||||
|
.Dq Li "-O compress=lz4 -O atime=off"
|
||||||
|
.It Ev 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:
|
||||||
|
.Dq ROOT
|
||||||
|
.It Ev ZFSBOOT_BOOTFS_NAME
|
||||||
|
Name for the primary boot environment, which will be the default boot
|
||||||
|
environment for the system.
|
||||||
|
Default:
|
||||||
|
.Dq default
|
||||||
|
.It Ev ZFSBOOT_VDEV_TYPE
|
||||||
|
The type of pool to be created for the base system.
|
||||||
|
This variable can take one of this values: stripe (No redundacy),
|
||||||
|
mirror (n-Way mirroring), raid10 (RAID 1+0 - n x 2-Way Mirrors),
|
||||||
|
raidz1 (RAID-Z1 - Single Redundacy RAID), raidz2 (RAID-Z2 - Double Redundacy RAID)
|
||||||
|
or raidz3 (RAID-Z3 Triple Redundacy RAID).
|
||||||
|
Default:
|
||||||
|
.Dq stripe
|
||||||
|
.It Ev ZFSBOOT_FORCE_4K_SECTORS
|
||||||
|
Indicates either the pool will use 4K or 512 sectors.
|
||||||
|
If this variable is not empty, 4K sectors will be used.
|
||||||
|
Default:
|
||||||
|
.Dq 1
|
||||||
|
.It Ev ZFSBOOT_GELI_ENCRYPTION
|
||||||
|
If this variable is not empty, it will use
|
||||||
|
.Xr geli 8
|
||||||
|
to encrypt the root pool, enabling automatically the
|
||||||
|
.Ev ZFSBOOT_BOOT_POOL
|
||||||
|
variable.
|
||||||
|
Default:
|
||||||
|
.Dq ""
|
||||||
|
.It Ev ZFSBOOT_GELI_KEY_FILE
|
||||||
|
Path to the
|
||||||
|
.Xr geli 8
|
||||||
|
keyfile used to encrypt the pool where the base system is stored.
|
||||||
|
Default:
|
||||||
|
.Dq Pa /boot/encryption.key
|
||||||
|
.It Ev ZFSBOOT_BOOT_POOL
|
||||||
|
If set a separated boot pool will be created for the kernel of the
|
||||||
|
system and
|
||||||
|
.Xr loader 8 .
|
||||||
|
Default: unset
|
||||||
|
.It Ev ZFSBOOT_BOOT_POOL_CREATE_OPTIONS
|
||||||
|
Options to use when creating the boot pool, when enabled (See
|
||||||
|
.Ev ZFSBOOT_BOOT_POOL ).
|
||||||
|
Default: unset
|
||||||
|
.It Ev ZFSBOOT_BOOT_POOL_NAME
|
||||||
|
Name for the optional boot pool when it is enabled, (See
|
||||||
|
.Ev ZFSBOOT_BOOT_POOL ).
|
||||||
|
Default:
|
||||||
|
.Dq bootpool
|
||||||
|
.It Ev ZFSBOOT_BOOT_POOL_SIZE
|
||||||
|
Size of the boot pool when it is enabled (See
|
||||||
|
.Ev ZFSBOOT_BOOT_POOL ).
|
||||||
|
Default:
|
||||||
|
.Dq 2g
|
||||||
|
.It Ev 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
|
||||||
|
.Sx SCRIPTING
|
||||||
|
for more information.
|
||||||
|
Default: unset
|
||||||
|
.It Ev ZFSBOOT_SWAP_SIZE
|
||||||
|
Size of the swap partition on each block device.
|
||||||
|
This variable will be passed to
|
||||||
|
.Xr gpart 8 ;
|
||||||
|
which supports SI unit suffixes.
|
||||||
|
Default:
|
||||||
|
.Dq 2g
|
||||||
|
.It Ev ZFSBOOT_SWAP_ENCRYPTION
|
||||||
|
If set, enables the encryption of the swap partition using
|
||||||
|
.Xr geli 8 .
|
||||||
|
Defaulf: ""
|
||||||
|
.It Ev ZFSBOOT_SWAP_MIRROR
|
||||||
|
If set, enables a swap mirroring using
|
||||||
|
.Xr gmirror 8 .
|
||||||
|
Default:
|
||||||
|
unset
|
||||||
|
.It Ev ZFSBOOT_DATASETS
|
||||||
|
ZFS datasets to be created on the root zpool, it requires the
|
||||||
|
following datasets:
|
||||||
|
.Pa /tmp ,
|
||||||
|
.Pa /var/tmp ,
|
||||||
|
.Pa /$ZFSBOOT_BEROOT_NAME/$ZFSBOOT_BOOTFS_NAME .
|
||||||
|
See
|
||||||
|
.Sx ZFS DATASETS
|
||||||
|
for more information about who to write this variable and to
|
||||||
|
take a look into the default value of it.
|
||||||
|
.It Ev ZFSBOOT_CONFIRM_LAYOUT
|
||||||
|
If set and the installation is interactive, allow the user to confirm
|
||||||
|
the layout before continuing with the installation.
|
||||||
|
Default:
|
||||||
|
.Dq 1
|
||||||
.El
|
.El
|
||||||
.Sh SCRIPTING
|
.Sh SCRIPTING
|
||||||
.Nm
|
.Nm
|
||||||
@ -338,6 +444,19 @@ sysrc sshd_enable=YES
|
|||||||
pkg install puppet
|
pkg install puppet
|
||||||
.Ed
|
.Ed
|
||||||
.Pp
|
.Pp
|
||||||
|
For a ZFS scripted installation, the script looks like this:
|
||||||
|
.Bd -literal -offset indent
|
||||||
|
DISTRIBUTIONS="kernel.txz base.txz"
|
||||||
|
export ZFSBOOT_VDEV_TYPE=stripe
|
||||||
|
export ZFSBOOT_DISKS=ada0
|
||||||
|
export nonInteractive="YES"
|
||||||
|
|
||||||
|
#!/bin/sh
|
||||||
|
echo "ifconfig_em0=DHCP" >> /etc/rc.conf
|
||||||
|
echo "sshd_enable=YES" >> /etc/rc.conf
|
||||||
|
pkg install puppet
|
||||||
|
.Ed
|
||||||
|
.Pp
|
||||||
On
|
On
|
||||||
.Fx
|
.Fx
|
||||||
release media, such a script placed at
|
release media, such a script placed at
|
||||||
@ -374,7 +493,21 @@ instead of
|
|||||||
the preamble can contain the variable
|
the preamble can contain the variable
|
||||||
.Ev ZFSBOOT_DATASETS
|
.Ev ZFSBOOT_DATASETS
|
||||||
instead of
|
instead of
|
||||||
.Ev PARTITIONS .
|
.Ev PARTITIONS ,
|
||||||
|
and setting the variables
|
||||||
|
.Ev ZFSBOOT_DISKS
|
||||||
|
and
|
||||||
|
.Ev ZFSBOOT_VDEV_TYPE
|
||||||
|
to create the pool of disks for the base system.
|
||||||
|
Usually, for a mirrored booting disk, this two variables looks like this:
|
||||||
|
.Bd -literal -offset indent
|
||||||
|
ZFSBOOT_DISKS="ada0 ada1"
|
||||||
|
ZFSBOOT_VDEV_TYPE=mirror
|
||||||
|
.Ed
|
||||||
|
.Pp
|
||||||
|
Remenber to export all the variables for the
|
||||||
|
.Cm zfsboot
|
||||||
|
command, otherwise it will not get set.
|
||||||
.Ss SETUP SCRIPT
|
.Ss SETUP SCRIPT
|
||||||
Following the preamble is an optional shell script, beginning with a #!
|
Following the preamble is an optional shell script, beginning with a #!
|
||||||
declaration.
|
declaration.
|
||||||
@ -385,6 +518,52 @@ configuration files, install packages, etc.
|
|||||||
Note that newly configured system services, e.g., networking have not
|
Note that newly configured system services, e.g., networking have not
|
||||||
been started in the installed system at this time and only installation
|
been started in the installed system at this time and only installation
|
||||||
host services are available.
|
host services are available.
|
||||||
|
.Ss ZFS DATASETS
|
||||||
|
The
|
||||||
|
.Cm zfsboot
|
||||||
|
partitioning takes the
|
||||||
|
.Ev ZFSBOOT_DATASETS
|
||||||
|
variable to create the datasets on the base system.
|
||||||
|
This variable can get pretty huge if the pool contains a lot of datasets.
|
||||||
|
The default value of the
|
||||||
|
.Ev ZFSBOOT_DATASETS
|
||||||
|
looks like this:
|
||||||
|
.Bd -literal -offset indent
|
||||||
|
# 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=/
|
||||||
|
|
||||||
|
# Compress /tmp, 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
|
||||||
|
|
||||||
|
# Home directories separated so they are common to all BEs
|
||||||
|
/usr/home # NB: /home is a symlink to /usr/home
|
||||||
|
|
||||||
|
# Ports tree
|
||||||
|
/usr/ports setuid=off
|
||||||
|
|
||||||
|
# Source tree (compressed)
|
||||||
|
/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
|
||||||
|
.Ed
|
||||||
|
.Pp
|
||||||
|
The first column if the dataset to be created on the top of the
|
||||||
|
.Ev ZFSBOOT_POOL_NAME
|
||||||
|
and the rest of the columns are the options to be set on each dataset.
|
||||||
|
The options must be written on a coma or space separated list, or both.
|
||||||
|
And everything behind a pound/hash character is ignored as a comment.
|
||||||
.Sh HISTORY
|
.Sh HISTORY
|
||||||
This version of
|
This version of
|
||||||
.Nm
|
.Nm
|
||||||
|
Loading…
x
Reference in New Issue
Block a user