Mercurial > hgrepos > FreeBSD > ports > sysutils > local-bsdtools
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 |
