comparison sbin/fjail @ 181:d30a68e66d60

More dataset creation options: -t (tiny) and -T (extra tiny)
author Franz Glasner <hg@dom66.de>
date Tue, 16 Aug 2022 12:37:02 +0200
parents 332276cc0bc8
children dbd62c32b3fd
comparison
equal deleted inserted replaced
180:332276cc0bc8 181:d30a68e66d60
33 Create ZFS datasets to be used within a jail 33 Create ZFS datasets to be used within a jail
34 34
35 PARENT must exist already and CHILD must not exist. 35 PARENT must exist already and CHILD must not exist.
36 36
37 -s Also create a dataset for freebsd-update data files 37 -s Also create a dataset for freebsd-update data files
38 -t Create a more tiny set of datasets
39 -T Create only an extra tiny set of datasets
38 -u Do not automatically mount newly created datasets 40 -u Do not automatically mount newly created datasets
39 41
40 privs MOUNTPOINT 42 privs MOUNTPOINT
41 43
42 Adjust some Unix privileges to mounted jail datasets 44 Adjust some Unix privileges to mounted jail datasets
121 local _pds _cds 123 local _pds _cds
122 # and its mount point 124 # and its mount point
123 local _pmp _get _dummy 125 local _pmp _get _dummy
124 # full name of the dataset 126 # full name of the dataset
125 local _ds 127 local _ds
126 # dynamic ZFS options -- create cache for freebsd-update 128 # dynamic ZFS options -- create cache for freebsd-update -- use a more tiny layout
127 local _zfsopts _fbsdupdate 129 local _zfsopts _fbsdupdate _tiny
128 130
129 _zfsopts="" 131 _zfsopts=""
130 _fbsdupdate="" 132 _fbsdupdate=""
131 while getopts "us" _opt ; do 133 _tiny="no"
134 while getopts "ustT" _opt ; do
132 case ${_opt} in 135 case ${_opt} in
136 t)
137 # use a more tiny layout
138 _tiny="yes"
139 ;;
140 T) # extra tiny layout
141 _tiny="extra"
142 ;;
133 u) 143 u)
134 # do not mount newly created datasets 144 # do not mount newly created datasets
135 _zfsopts="${_zfsopts} -u" 145 _zfsopts="${_zfsopts} -u"
136 ;; 146 ;;
137 s) 147 s)
177 echo "Resulting new root dataset is \`${_ds}' at mountpoint \`${_pmp}/${_cds}'" 187 echo "Resulting new root dataset is \`${_ds}' at mountpoint \`${_pmp}/${_cds}'"
178 if zfs get -H mountpoint "${_ds}" >/dev/null 2>/dev/null; then 188 if zfs get -H mountpoint "${_ds}" >/dev/null 2>/dev/null; then
179 echo "ERROR: dataset \`${_ds}' does already exist" >&2 189 echo "ERROR: dataset \`${_ds}' does already exist" >&2
180 return 1 190 return 1
181 fi 191 fi
192
193 #
194 # NOTE: For BEs these directory will be *excluded* from the BE
195 #
196 # /tmp
197 # /usr/home
198 # /usr/ports
199 # /usr/src
200 # /var/audit
201 # /var/crash
202 # /var/log
203 # /var/mail
204 # /var/tmp
205 #
182 zfs create ${_zfsopts} -o atime=off "${_ds}" 206 zfs create ${_zfsopts} -o atime=off "${_ds}"
183 zfs create ${_zfsopts} -o sync=disabled -o setuid=off "${_ds}/tmp" 207 zfs create ${_zfsopts} -o sync=disabled -o setuid=off "${_ds}/tmp"
184 zfs create ${_zfsopts} "${_ds}/usr" 208 if [ "{_tiny}" != "extra" ]; then
185 zfs create ${_zfsopts} -o setuid=off "${_ds}/usr/home" 209 if [ "${_tiny}" = "yes" ]; then
186 zfs create ${_zfsopts} "${_ds}/usr/local" 210 zfs create ${_zfsopts} -o canmount=off "${_ds}/usr"
187 zfs create ${_zfsopts} "${_ds}/var" 211 else
188 zfs create ${_zfsopts} -o exec=off -o setuid=off "${_ds}/var/audit" 212 zfs create ${_zfsopts} "${_ds}/usr"
189 zfs create ${_zfsopts} -o exec=off -o setuid=off "${_ds}/var/cache" 213 fi
190 zfs create ${_zfsopts} -o exec=off -o setuid=off -o primarycache=metadata -o compression=off "${_ds}/var/cache/pkg" 214 zfs create ${_zfsopts} -o setuid=off "${_ds}/usr/home"
191 zfs create ${_zfsopts} -o exec=off -o setuid=off -o compression=off "${_ds}/var/crash" 215 zfs create ${_zfsopts} "${_ds}/usr/local"
216 fi
217 if [ \( "${_tiny}" = "yes" \) -o \( "{_tiny}" = "extra" \) ]; then
218 zfs create ${_zfsopts} -o canmount=off "${_ds}/var"
219 else
220 zfs create ${_zfsopts} "${_ds}/var"
221 fi
222 if [ "${_tiny}" != "extra" ]; then
223 zfs create ${_zfsopts} -o exec=off -o setuid=off "${_ds}/var/audit"
224 zfs create ${_zfsopts} -o exec=off -o setuid=off "${_ds}/var/cache"
225 zfs create ${_zfsopts} -o exec=off -o setuid=off -o primarycache=metadata -o compression=off "${_ds}/var/cache/pkg"
226 zfs create ${_zfsopts} -o exec=off -o setuid=off -o compression=off "${_ds}/var/crash"
227 fi
192 if [ "$_fbsdupdate" = "yes" ]; then 228 if [ "$_fbsdupdate" = "yes" ]; then
193 zfs create ${_zfsopts} -o exec=off -o setuid=off "${_ds}/var/db" 229 if [ \( "${_tiny}" = "yes" \) -o \( "{_tiny}" = "extra" \) ]; then
230 zfs create ${_zfsopts} -o canmount=off -o exec=off -o setuid=off "${_ds}/var/db"
231 else
232 zfs create ${_zfsopts} -o exec=off -o setuid=off "${_ds}/var/db"
233 fi
194 zfs create ${_zfsopts} -o exec=off -o setuid=off -o primarycache=metadata -o compression=off "${_ds}/var/db/freebsd-update" 234 zfs create ${_zfsopts} -o exec=off -o setuid=off -o primarycache=metadata -o compression=off "${_ds}/var/db/freebsd-update"
195 fi 235 fi
196 zfs create ${_zfsopts} -o readonly=on -o exec=off -o setuid=off "${_ds}/var/empty" 236 zfs create ${_zfsopts} -o readonly=on -o exec=off -o setuid=off "${_ds}/var/empty"
197 zfs create ${_zfsopts} -o exec=off -o setuid=off -o primarycache=metadata "${_ds}/var/log" 237 zfs create ${_zfsopts} -o exec=off -o setuid=off -o primarycache=metadata "${_ds}/var/log"
198 zfs create ${_zfsopts} -o exec=off -o setuid=off -o atime=on "${_ds}/var/mail" 238 zfs create ${_zfsopts} -o exec=off -o setuid=off -o atime=on "${_ds}/var/mail"