Mercurial > hgrepos > FreeBSD > ports > sysutils > local-bsdtools
changeset 340:d3b5fe2712ca
Implement "ftjail freebsd-update -o" for a more exhaustige check the clone's origin
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Sat, 03 Dec 2022 09:46:18 +0100 |
| parents | e1d6807b0c4d |
| children | a204a7415d4a |
| files | docs/man/man8/ftjail-freebsd-update.rst sbin/ftjail |
| diffstat | 2 files changed, 25 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/docs/man/man8/ftjail-freebsd-update.rst Fri Dec 02 22:01:43 2022 +0100 +++ b/docs/man/man8/ftjail-freebsd-update.rst Sat Dec 03 09:46:18 2022 +0100 @@ -6,7 +6,7 @@ Synopsis -------- -**ftjail freebsd-update** `directory` +**ftjail freebsd-update** [**-k**] [**-o** `old-origin`] `directory` Description @@ -26,6 +26,14 @@ .. note:: On unexpected errors temp files are automatically kept. +.. option:: -o old-origin + + In addition to check that `directory` is a ZFS clone also check that + its origin is equal to `old-origin`. + + Note that a check that `directory` is a ZFS clone with some origin + is done by default. + Environment -----------
--- a/sbin/ftjail Fri Dec 02 22:01:43 2022 +0100 +++ b/sbin/ftjail Sat Dec 03 09:46:18 2022 +0100 @@ -44,7 +44,7 @@ build-etcupdate-current-tmpl DIRECTORY TARBALL - freebsd-update -[-k] DIRECTORY + freebsd-update [-k] [-o OLD-ORIGIN] DIRECTORY ENVIRONMENT: @@ -878,19 +878,23 @@ #: command_freebsd_update() { local _directory - local _opt_keep + local _opt_keep _opt_old_origin local _res _jailname _dir_mounts _dir_fn_fstab _dir_basename local _root_dataset _root_mountpoint _root_type _root_options local _dummy _opt - local _root_readonly + local _root_readonly _root_origin _opt_keep="no" - while getopts "k" _opt ; do + _opt_old_origin="" + while getopts "ko:" _opt ; do case ${_opt} in k) _opt_keep="yes" ;; + o) + _opt_old_origin="$OPTARG" + ;; \?|:) return 2; ;; @@ -934,12 +938,17 @@ [ "${_root_type}" != "zfs" ] && { echo "ERROR: root mountpoint is not from a ZFS dataset" 1>&2; exit 1; } _root_readonly="$(zfs list -H -o readonly "${_root_dataset}")" [ "${_root_readonly}" != "on" ] && { echo "ERROR: the root dataset is not mounted read-only" 1>&2; exit 1; } - # XXX TBD: Check that it is a proper clone - + _root_origin="$(zfs list -H -o origin "${_root_dataset}")" + if [ -n "${_opt_old_origin}" ]; then + [ "${_opt_old_origin}" != "${_root_origin}" ] && { echo "ERROR: origin mismatch" 1>&2; exit 1; } + else + [ "${_root_origin}" = '-' ] && { echo "ERROR: the root dataset is not a ZFS clone" 1>&2; exit 1; } + fi # # XXX FIXME: should we check that _root_options equals "ro" or # start with "ro," - # + # _root_origin="$(zfs list -H -o origin "${_root_dataset}")" + _dir_fn_fstab="$(env TMPDIR=/var/tmp mktemp -t ftjail-fstab.${_dir_basename})" echo -n "${_dir_mounts}" >>"${_dir_fn_fstab}"
