Date: Fri, 16 Jul 2021 04:07:28 GMT From: Kyle Evans <kevans@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: f28f13890541 - main - freebsd-update: create a ZFS boot environment on install Message-ID: <202107160407.16G47SO1089378@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch main has been updated by kevans: URL: https://cgit.FreeBSD.org/src/commit/?id=f28f138905416c45ebaa6429f44a0b88a72f54b1 commit f28f138905416c45ebaa6429f44a0b88a72f54b1 Author: Dave Fullard <dave@fullard.ca> AuthorDate: 2021-07-16 04:02:48 +0000 Commit: Kyle Evans <kevans@FreeBSD.org> CommitDate: 2021-07-16 04:07:00 +0000 freebsd-update: create a ZFS boot environment on install Updated freebsd-update to allow it to create boot environments using bectl should the system support it. The bectl utility was updated in r352211 (490e13c1403f) to support a 'check' to determine if the system supports boot environments. If UFS is used, the bectl check will fail then no attempt will be made to create the boot environment. If freebsd-update is run inside a jail, no attempt will be made to create a boot environment. The boot environment function will create a new environment using the format: current FreeBSD kernel version and date/timestamp, example: 12.0-RELEASE-p10_2019-10-03_185233 This functionality can be disabled by setting 'CreateBootEnv' in freebsd-update.conf to 'no'. Discussed with: allanjude MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D21892 --- usr.sbin/freebsd-update/freebsd-update.conf | 3 ++ usr.sbin/freebsd-update/freebsd-update.sh | 57 +++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/usr.sbin/freebsd-update/freebsd-update.conf b/usr.sbin/freebsd-update/freebsd-update.conf index 7f0917053750..62e6acf96cc8 100644 --- a/usr.sbin/freebsd-update/freebsd-update.conf +++ b/usr.sbin/freebsd-update/freebsd-update.conf @@ -74,3 +74,6 @@ MergeChanges /etc/ /boot/device.hints # When backing up a kernel also back up debug symbol files? # BackupKernelSymbolFiles no + +# Create a new boot environment when installing patches +# CreateBootEnv yes diff --git a/usr.sbin/freebsd-update/freebsd-update.sh b/usr.sbin/freebsd-update/freebsd-update.sh index f82ec7d7730c..4fbac58cb562 100644 --- a/usr.sbin/freebsd-update/freebsd-update.sh +++ b/usr.sbin/freebsd-update/freebsd-update.sh @@ -410,6 +410,23 @@ config_BackupKernelSymbolFiles () { fi } +config_CreateBootEnv () { + if [ -z ${BOOTENV} ]; then + case $1 in + [Yy][Ee][Ss]) + BOOTENV=yes + ;; + [Nn][Oo]) + BOOTENV=no + ;; + *) + return 1 + ;; + esac + else + return 1 + fi +} # Handle one line of configuration configline () { if [ $# -eq 0 ]; then @@ -586,6 +603,7 @@ default_params () { config_BackupKernel yes config_BackupKernelDir /boot/kernel.old config_BackupKernelSymbolFiles no + config_CreateBootEnv yes # Merge these defaults into the earlier-configured settings mergeconfig @@ -850,6 +868,44 @@ install_check_params () { fi } +# Creates a new boot environment +install_create_be () { + # Figure out if we're running in a jail and return if we are + if [ `sysctl -n security.jail.jailed` = 1 ]; then + return 1 + fi + # Create a boot environment if enabled + if [ ${BOOTENV} = yes ]; then + bectl check 2>/dev/null + case $? in + 0) + # Boot environment are supported + CREATEBE=yes + ;; + 255) + # Boot environments are not supported + CREATEBE=no + ;; + *) + # If bectl returns an unexpected exit code, don't create a BE + CREATEBE=no + ;; + esac + if [ ${CREATEBE} = yes ]; then + echo -n "Creating snapshot of existing boot environment... " + VERSION=`freebsd-version -k` + TIMESTAMP=`date +"%Y-%m-%d_%H%M%S"` + bectl create ${VERSION}_${TIMESTAMP} + if [ $? -eq 0 ]; then + echo "done."; + else + echo "failed." + exit 1 + fi + fi + fi +} + # Perform sanity checks and set some final parameters in # preparation for UNinstalling updates. rollback_check_params () { @@ -3366,6 +3422,7 @@ cmd_updatesready () { cmd_install () { finalize_components_config ${COMPONENTS} install_check_params + install_create_be install_run || exit 1 }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202107160407.16G47SO1089378>