comparison sbin/ftjail @ 234:8682cfa74f6a

Minimum work on creating datasets
author Franz Glasner <fzglas.hg@dom66.de>
date Tue, 06 Sep 2022 09:40:05 +0200
parents f745d3a216a6
children 85aea8ca1ab8
comparison
equal deleted inserted replaced
233:f745d3a216a6 234:8682cfa74f6a
75 75
76 76
77 # 77 #
78 # "datasets" -- create the ZFS dataset tree 78 # "datasets" -- create the ZFS dataset tree
79 # 79 #
80 # PARENT-BASE PARENT-SKELETON NAME
81 #
80 command_datasets() { 82 command_datasets() {
81 # parent ZFS dataset -- child ZFS dataset name 83 # parent ZFS dataset -- child ZFS dataset name
82 local _pds _cds 84 local _p_base _p_skel _name
83 # and its mount point 85 local _zfsopts
84 local _pmp _get 86
85 # full name of the dataset 87 _zfsopts="-u"
86 local _ds 88
87 # dynamic ZFS options -- create cache for freebsd-update -- use a more tiny layout 89 _p_base="$1"
88 local _zfsopts _fbsdupdate _tiny _zfsnoauto _varempty_ro 90 _p_skel="$2"
89 91 _name="$3"
90 _zfsopts="" 92
91 _fbsdupdate="" 93 if [ -z "${_p_base}" ]; then
92 _tiny="no" 94 echo "ERROR: no parent dataset for base given" >&2
93 _zfsnoauto="" 95 return 2
94 _varempty_ro="-o readonly=on" 96 fi
95 while getopts "oustAT" _opt ; do 97 if [ -z "${_p_skel}" ]; then
96 case ${_opt} in 98 echo "ERROR: no parent dataset for skeleton given" >&2
97 A) 99 return 2
98 # 100 fi
99 # set canmount=noauto where otherwise canmount=on would have been set 101 if [ -z "${_pname}" ]; then
100 # or inherited 102 echo "ERROR: no name given" >&2
101 # 103 return 2
102 _zfsnoauto="-o canmount=noauto" 104 fi
103 ;; 105
104 o)
105 # Clear out the default setting of creating var/empty as read-only dataset
106 _varempty_ro=""
107 ;;
108 t)
109 # use a more tiny layout
110 _tiny="yes"
111 ;;
112 T) # extra tiny layout
113 _tiny="extra"
114 ;;
115 u)
116 # do not mount newly created datasets
117 _zfsopts="${_zfsopts} -u"
118 ;;
119 s)
120 # create also a dataset for freebsd-update data
121 _fbsdupdate="yes"
122 ;;
123 \?|:)
124 return 2;
125 ;;
126 esac
127 done
128 shift $((OPTIND-1))
129 OPTIND=1
130
131 _pds="$1"
132 if [ -z "${_pds}" ]; then
133 echo "ERROR: no parent dataset given" >&2
134 return 2
135 fi
136 _pmp=$(zfs list -H -o mountpoint -t filesystem "${_pds}" 2>/dev/null) || { echo "ERROR: dataset \`${_pds}' does not exist" >&2; return 1; }
137 case "${_pmp}" in
138 none)
139 echo "ERROR: dataset \`${_pds}' has no mountpoint" >&2
140 return 1
141 ;;
142 legacy)
143 echo "ERROR: dataset \`${_pds}' has a \`${_mp}' mountpoint" >&2
144 return 1
145 ;;
146 *)
147 # VOID
148 ;;
149 esac
150 _cds="$2"
151 if [ -z "${_cds}" ]; then
152 echo "ERROR: no child dataset given" >&2
153 return 2
154 fi
155 _ds="${_pds}/${_cds}" 106 _ds="${_pds}/${_cds}"
156 echo "Resulting new root dataset is \`${_ds}' at mountpoint \`${_pmp}/${_cds}'" 107 echo "Resulting new root dataset is \`${_ds}' at mountpoint \`${_pmp}/${_cds}'"
157 if zfs list -H -o mountpoint -t filesystem "${_ds}" >/dev/null 2>/dev/null; then 108 if zfs list -H -o mountpoint -t filesystem "${_ds}" >/dev/null 2>/dev/null; then
158 echo "ERROR: dataset \`${_ds}' does already exist" >&2 109 echo "ERROR: dataset \`${_ds}' does already exist" >&2
159 return 1 110 return 1