# HG changeset patch # User Franz Glasner # Date 1662450005 -7200 # Node ID 8682cfa74f6aad65ddacea394630dfe33e852a84 # Parent f745d3a216a6d82acb1b27582fc1520801ba3009 Minimum work on creating datasets diff -r f745d3a216a6 -r 8682cfa74f6a sbin/ftjail --- a/sbin/ftjail Mon Sep 05 09:45:13 2022 +0200 +++ b/sbin/ftjail Tue Sep 06 09:40:05 2022 +0200 @@ -77,81 +77,32 @@ # # "datasets" -- create the ZFS dataset tree # +# PARENT-BASE PARENT-SKELETON NAME +# command_datasets() { # parent ZFS dataset -- child ZFS dataset name - local _pds _cds - # and its mount point - local _pmp _get - # full name of the dataset - local _ds - # dynamic ZFS options -- create cache for freebsd-update -- use a more tiny layout - local _zfsopts _fbsdupdate _tiny _zfsnoauto _varempty_ro + local _p_base _p_skel _name + local _zfsopts + + _zfsopts="-u" - _zfsopts="" - _fbsdupdate="" - _tiny="no" - _zfsnoauto="" - _varempty_ro="-o readonly=on" - while getopts "oustAT" _opt ; do - case ${_opt} in - A) - # - # set canmount=noauto where otherwise canmount=on would have been set - # or inherited - # - _zfsnoauto="-o canmount=noauto" - ;; - o) - # Clear out the default setting of creating var/empty as read-only dataset - _varempty_ro="" - ;; - t) - # use a more tiny layout - _tiny="yes" - ;; - T) # extra tiny layout - _tiny="extra" - ;; - u) - # do not mount newly created datasets - _zfsopts="${_zfsopts} -u" - ;; - s) - # create also a dataset for freebsd-update data - _fbsdupdate="yes" - ;; - \?|:) - return 2; - ;; - esac - done - shift $((OPTIND-1)) - OPTIND=1 + _p_base="$1" + _p_skel="$2" + _name="$3" - _pds="$1" - if [ -z "${_pds}" ]; then - echo "ERROR: no parent dataset given" >&2 + if [ -z "${_p_base}" ]; then + echo "ERROR: no parent dataset for base given" >&2 return 2 fi - _pmp=$(zfs list -H -o mountpoint -t filesystem "${_pds}" 2>/dev/null) || { echo "ERROR: dataset \`${_pds}' does not exist" >&2; return 1; } - case "${_pmp}" in - none) - echo "ERROR: dataset \`${_pds}' has no mountpoint" >&2 - return 1 - ;; - legacy) - echo "ERROR: dataset \`${_pds}' has a \`${_mp}' mountpoint" >&2 - return 1 - ;; - *) - # VOID - ;; - esac - _cds="$2" - if [ -z "${_cds}" ]; then - echo "ERROR: no child dataset given" >&2 + if [ -z "${_p_skel}" ]; then + echo "ERROR: no parent dataset for skeleton given" >&2 return 2 fi + if [ -z "${_pname}" ]; then + echo "ERROR: no name given" >&2 + return 2 + fi + _ds="${_pds}/${_cds}" echo "Resulting new root dataset is \`${_ds}' at mountpoint \`${_pmp}/${_cds}'" if zfs list -H -o mountpoint -t filesystem "${_ds}" >/dev/null 2>/dev/null; then