Mercurial > hgrepos > FreeBSD > ports > sysutils > local-bsdtools
annotate sbin/fjail @ 211:ee9b32ab0e9a
Implement the "-o" option for "datasets" to create var/empty with the default "readonly" setting instead of "readonly=on"
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Sun, 21 Aug 2022 17:12:37 +0200 |
| parents | 4d7e00b500a1 |
| children | 39b736a91d0d |
| rev | line source |
|---|---|
|
72
929051be7845
Begin a simple (ZFS-related) jail setup tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1 #!/bin/sh |
|
929051be7845
Begin a simple (ZFS-related) jail setup tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
2 # -*- indent-tabs-mode: nil; -*- |
|
86
a3b9d4fe560e
Provide "module" doc-strings
Franz Glasner <fzglas.hg@dom66.de>
parents:
85
diff
changeset
|
3 : 'A very minimal BSD Jail management tool. |
|
a3b9d4fe560e
Provide "module" doc-strings
Franz Glasner <fzglas.hg@dom66.de>
parents:
85
diff
changeset
|
4 |
|
a3b9d4fe560e
Provide "module" doc-strings
Franz Glasner <fzglas.hg@dom66.de>
parents:
85
diff
changeset
|
5 :Author: Franz Glasner |
| 193 | 6 :Copyright: (c) 2019-2022 Franz Glasner. |
|
86
a3b9d4fe560e
Provide "module" doc-strings
Franz Glasner <fzglas.hg@dom66.de>
parents:
85
diff
changeset
|
7 All rights reserved. |
|
104
6f6058939e48
Use the "Full name" in the license section for "fjail" also
Franz Glasner <fzglas.hg@dom66.de>
parents:
93
diff
changeset
|
8 :License: BSD 3-Clause "New" or "Revised" License. |
|
86
a3b9d4fe560e
Provide "module" doc-strings
Franz Glasner <fzglas.hg@dom66.de>
parents:
85
diff
changeset
|
9 See LICENSE for details. |
|
a3b9d4fe560e
Provide "module" doc-strings
Franz Glasner <fzglas.hg@dom66.de>
parents:
85
diff
changeset
|
10 If you cannot find LICENSE see |
|
a3b9d4fe560e
Provide "module" doc-strings
Franz Glasner <fzglas.hg@dom66.de>
parents:
85
diff
changeset
|
11 <https://opensource.org/licenses/BSD-3-Clause> |
| 93 | 12 :ID: @(#)@@PKGORIGIN@@ $HGid$ |
|
86
a3b9d4fe560e
Provide "module" doc-strings
Franz Glasner <fzglas.hg@dom66.de>
parents:
85
diff
changeset
|
13 |
|
a3b9d4fe560e
Provide "module" doc-strings
Franz Glasner <fzglas.hg@dom66.de>
parents:
85
diff
changeset
|
14 ' |
|
72
929051be7845
Begin a simple (ZFS-related) jail setup tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
15 |
|
77
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
16 set -eu |
| 73 | 17 |
| 18 VERSION="@@VERSION@@" | |
| 19 | |
|
105
52523a19797e
Docu: Enhance the docu of fjail
Franz Glasner <fzglas.hg@dom66.de>
parents:
104
diff
changeset
|
20 USAGE=' |
| 75 | 21 USAGE: fjail [ OPTIONS ] COMMAND [ COMMAND OPTIONS ] [ ARG ... ] |
| 22 | |
| 23 OPTIONS: | |
| 24 | |
|
81
124faa20ae80
Implemented a "-V" global option to print the program's name and version number to stdout
Franz Glasner <fzglas.hg@dom66.de>
parents:
80
diff
changeset
|
25 -V Print the program name and version number to stdout and exit |
|
124faa20ae80
Implemented a "-V" global option to print the program's name and version number to stdout
Franz Glasner <fzglas.hg@dom66.de>
parents:
80
diff
changeset
|
26 |
| 75 | 27 -h Print this help message to stdout and exit |
| 28 | |
| 29 COMMANDS: | |
| 30 | |
|
205
fcfa674c8444
FIX: in the help message: improve documentation of OPTIONS
Franz Glasner <fzglas.hg@dom66.de>
parents:
204
diff
changeset
|
31 datasets [OPTIONS] PARENT CHILD |
| 75 | 32 |
| 33 Create ZFS datasets to be used within a jail | |
| 34 | |
| 35 PARENT must exist already and CHILD must not exist. | |
| 36 | |
|
204
ef397b84b047
Implement a "-A" flat for dataset creation: set canmount=noauto
Franz Glasner <fzglas.hg@dom66.de>
parents:
203
diff
changeset
|
37 -A Set "canmount=auto" for datasets |
|
211
ee9b32ab0e9a
Implement the "-o" option for "datasets" to create var/empty with the default "readonly" setting instead of "readonly=on"
Franz Glasner <fzglas.hg@dom66.de>
parents:
210
diff
changeset
|
38 -o Do not create var/empty as read-only dataset but with normal settings |
|
177
9ffbe53dbc35
Flag for creating a separatate dataset for freebsd-update data.
Franz Glasner <hg@dom66.de>
parents:
176
diff
changeset
|
39 -s Also create a dataset for freebsd-update data files |
|
181
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
40 -t Create a more tiny set of datasets |
|
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
41 -T Create only an extra tiny set of datasets |
| 75 | 42 -u Do not automatically mount newly created datasets |
| 43 | |
|
207
a19acddb4662
Implement a "-N" flag for mounting: mount at "natural" configured ZFS mountpoints.
Franz Glasner <fzglas.hg@dom66.de>
parents:
206
diff
changeset
|
44 mount [-O] [-u] [-n] DATASET [MOUNTPOINT] |
|
194
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
45 |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
46 Mount the ZFS dataset DATASET and all its children to mountpoint |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
47 MOUNTPOINT |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
48 |
|
207
a19acddb4662
Implement a "-N" flag for mounting: mount at "natural" configured ZFS mountpoints.
Franz Glasner <fzglas.hg@dom66.de>
parents:
206
diff
changeset
|
49 -O Also mount datasets at mountpoints outside of their "natural" |
|
206
92e5db34eb2b
Implent a "-O" flag for mounts that allows to mount also datasets with configured mountpoints outside their "natural" mountpoints within the dataset hierarchy
Franz Glasner <fzglas.hg@dom66.de>
parents:
205
diff
changeset
|
50 and inherited mountpoints |
|
207
a19acddb4662
Implement a "-N" flag for mounting: mount at "natural" configured ZFS mountpoints.
Franz Glasner <fzglas.hg@dom66.de>
parents:
206
diff
changeset
|
51 -N Mount at their "natural" configured ZFS mountpoints (MOUNTPOINT is not required) |
|
194
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
52 -n Do not really mount but show what would be mounted where |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
53 -u Alias of -n |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
54 |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
55 umount DATASET |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
56 |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
57 Unmount the mounted DATASET and all its children |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
58 |
| 75 | 59 privs MOUNTPOINT |
| 60 | |
| 61 Adjust some Unix privileges to mounted jail datasets | |
|
76
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
62 |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
63 populate MOUNTPOINT BASETXZ |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
64 |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
65 Populate the jail directory in MOUNTPOINT with the base system in BASETXZ |
|
77
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
66 |
|
205
fcfa674c8444
FIX: in the help message: improve documentation of OPTIONS
Franz Glasner <fzglas.hg@dom66.de>
parents:
204
diff
changeset
|
67 copy [OPTIONS] SOURCE-DATASET DEST-DATASET |
|
77
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
68 |
|
105
52523a19797e
Docu: Enhance the docu of fjail
Franz Glasner <fzglas.hg@dom66.de>
parents:
104
diff
changeset
|
69 Copy a tree of ZFS datasets with "zfs send -R" and "zfs receive". |
|
77
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
70 Note that the destination dataset must not exist already. |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
71 |
|
178
00fbf2b4b44f
Allow to copy ZFS datasets in "raw" mode (with "-Lec" set)
Franz Glasner <hg@dom66.de>
parents:
177
diff
changeset
|
72 -r Copy the datasets with the -Lec options (aka "raw") |
|
77
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
73 -u Do not automatically mount received datasets |
|
105
52523a19797e
Docu: Enhance the docu of fjail
Franz Glasner <fzglas.hg@dom66.de>
parents:
104
diff
changeset
|
74 |
|
52523a19797e
Docu: Enhance the docu of fjail
Franz Glasner <fzglas.hg@dom66.de>
parents:
104
diff
changeset
|
75 ENVIRONMENT: |
|
52523a19797e
Docu: Enhance the docu of fjail
Franz Glasner <fzglas.hg@dom66.de>
parents:
104
diff
changeset
|
76 |
|
52523a19797e
Docu: Enhance the docu of fjail
Franz Glasner <fzglas.hg@dom66.de>
parents:
104
diff
changeset
|
77 All environment variables that affect "zfs" are effective also. |
|
52523a19797e
Docu: Enhance the docu of fjail
Franz Glasner <fzglas.hg@dom66.de>
parents:
104
diff
changeset
|
78 |
|
52523a19797e
Docu: Enhance the docu of fjail
Franz Glasner <fzglas.hg@dom66.de>
parents:
104
diff
changeset
|
79 DESCRIPTION: |
|
52523a19797e
Docu: Enhance the docu of fjail
Franz Glasner <fzglas.hg@dom66.de>
parents:
104
diff
changeset
|
80 |
|
52523a19797e
Docu: Enhance the docu of fjail
Franz Glasner <fzglas.hg@dom66.de>
parents:
104
diff
changeset
|
81 All commands with the exception of "populate" require ZFS as |
|
52523a19797e
Docu: Enhance the docu of fjail
Franz Glasner <fzglas.hg@dom66.de>
parents:
104
diff
changeset
|
82 filesystem. |
|
52523a19797e
Docu: Enhance the docu of fjail
Franz Glasner <fzglas.hg@dom66.de>
parents:
104
diff
changeset
|
83 ' |
| 75 | 84 |
| 85 | |
| 73 | 86 # Reset to standard umask |
| 87 umask 0022 | |
| 88 | |
|
74
247d35f910ca
fjail datasets now recognized a "-u" command option to not automatically mount created datasets
Franz Glasner <hg@dom66.de>
parents:
73
diff
changeset
|
89 |
|
161
57b9b899bf77
Provide functions that will be the base for "/var/empty" handling (manipulate the "readonly" property when doing some special operations)
Franz Glasner <fzglas.hg@dom66.de>
parents:
157
diff
changeset
|
90 _get_dataset_for_mountpoint() { |
|
196
a4fd3bcbbf1c
Use "mount -p" instead of "zfs mount" when determining devices for the real mountpoints
Franz Glasner <fzglas.hg@dom66.de>
parents:
195
diff
changeset
|
91 : 'Use `mount -t zfs -p` to determine the ZFS dataset for a given mountpoint. |
|
161
57b9b899bf77
Provide functions that will be the base for "/var/empty" handling (manipulate the "readonly" property when doing some special operations)
Franz Glasner <fzglas.hg@dom66.de>
parents:
157
diff
changeset
|
92 |
|
57b9b899bf77
Provide functions that will be the base for "/var/empty" handling (manipulate the "readonly" property when doing some special operations)
Franz Glasner <fzglas.hg@dom66.de>
parents:
157
diff
changeset
|
93 ' |
|
57b9b899bf77
Provide functions that will be the base for "/var/empty" handling (manipulate the "readonly" property when doing some special operations)
Franz Glasner <fzglas.hg@dom66.de>
parents:
157
diff
changeset
|
94 local _mountpoint |
|
196
a4fd3bcbbf1c
Use "mount -p" instead of "zfs mount" when determining devices for the real mountpoints
Franz Glasner <fzglas.hg@dom66.de>
parents:
195
diff
changeset
|
95 local _ds _mount _rest |
|
161
57b9b899bf77
Provide functions that will be the base for "/var/empty" handling (manipulate the "readonly" property when doing some special operations)
Franz Glasner <fzglas.hg@dom66.de>
parents:
157
diff
changeset
|
96 |
|
57b9b899bf77
Provide functions that will be the base for "/var/empty" handling (manipulate the "readonly" property when doing some special operations)
Franz Glasner <fzglas.hg@dom66.de>
parents:
157
diff
changeset
|
97 _mountpoint="$1" |
|
57b9b899bf77
Provide functions that will be the base for "/var/empty" handling (manipulate the "readonly" property when doing some special operations)
Franz Glasner <fzglas.hg@dom66.de>
parents:
157
diff
changeset
|
98 |
|
197
3181a6b5758e
FIX: Using a pipeline within a function correctly with regard to return values:
Franz Glasner <fzglas.hg@dom66.de>
parents:
196
diff
changeset
|
99 mount -t zfs -p \ |
|
3181a6b5758e
FIX: Using a pipeline within a function correctly with regard to return values:
Franz Glasner <fzglas.hg@dom66.de>
parents:
196
diff
changeset
|
100 | { |
|
3181a6b5758e
FIX: Using a pipeline within a function correctly with regard to return values:
Franz Glasner <fzglas.hg@dom66.de>
parents:
196
diff
changeset
|
101 while IFS=' '$'\t' read -r _ds _mount _rest ; do |
|
3181a6b5758e
FIX: Using a pipeline within a function correctly with regard to return values:
Franz Glasner <fzglas.hg@dom66.de>
parents:
196
diff
changeset
|
102 if [ "$_mount" = "$_mountpoint" ]; then |
|
3181a6b5758e
FIX: Using a pipeline within a function correctly with regard to return values:
Franz Glasner <fzglas.hg@dom66.de>
parents:
196
diff
changeset
|
103 echo "${_ds}" |
|
3181a6b5758e
FIX: Using a pipeline within a function correctly with regard to return values:
Franz Glasner <fzglas.hg@dom66.de>
parents:
196
diff
changeset
|
104 return 0 |
|
3181a6b5758e
FIX: Using a pipeline within a function correctly with regard to return values:
Franz Glasner <fzglas.hg@dom66.de>
parents:
196
diff
changeset
|
105 fi |
|
3181a6b5758e
FIX: Using a pipeline within a function correctly with regard to return values:
Franz Glasner <fzglas.hg@dom66.de>
parents:
196
diff
changeset
|
106 done |
|
3181a6b5758e
FIX: Using a pipeline within a function correctly with regard to return values:
Franz Glasner <fzglas.hg@dom66.de>
parents:
196
diff
changeset
|
107 return 1 |
|
3181a6b5758e
FIX: Using a pipeline within a function correctly with regard to return values:
Franz Glasner <fzglas.hg@dom66.de>
parents:
196
diff
changeset
|
108 } |
|
161
57b9b899bf77
Provide functions that will be the base for "/var/empty" handling (manipulate the "readonly" property when doing some special operations)
Franz Glasner <fzglas.hg@dom66.de>
parents:
157
diff
changeset
|
109 } |
|
57b9b899bf77
Provide functions that will be the base for "/var/empty" handling (manipulate the "readonly" property when doing some special operations)
Franz Glasner <fzglas.hg@dom66.de>
parents:
157
diff
changeset
|
110 |
|
57b9b899bf77
Provide functions that will be the base for "/var/empty" handling (manipulate the "readonly" property when doing some special operations)
Franz Glasner <fzglas.hg@dom66.de>
parents:
157
diff
changeset
|
111 |
|
57b9b899bf77
Provide functions that will be the base for "/var/empty" handling (manipulate the "readonly" property when doing some special operations)
Franz Glasner <fzglas.hg@dom66.de>
parents:
157
diff
changeset
|
112 _get_dataset_for_varempty() { |
|
57b9b899bf77
Provide functions that will be the base for "/var/empty" handling (manipulate the "readonly" property when doing some special operations)
Franz Glasner <fzglas.hg@dom66.de>
parents:
157
diff
changeset
|
113 : 'Allow special handling for <mountpoint>/var/empty which may be |
|
57b9b899bf77
Provide functions that will be the base for "/var/empty" handling (manipulate the "readonly" property when doing some special operations)
Franz Glasner <fzglas.hg@dom66.de>
parents:
157
diff
changeset
|
114 mounted read-only. |
|
57b9b899bf77
Provide functions that will be the base for "/var/empty" handling (manipulate the "readonly" property when doing some special operations)
Franz Glasner <fzglas.hg@dom66.de>
parents:
157
diff
changeset
|
115 |
|
57b9b899bf77
Provide functions that will be the base for "/var/empty" handling (manipulate the "readonly" property when doing some special operations)
Franz Glasner <fzglas.hg@dom66.de>
parents:
157
diff
changeset
|
116 ' |
|
57b9b899bf77
Provide functions that will be the base for "/var/empty" handling (manipulate the "readonly" property when doing some special operations)
Franz Glasner <fzglas.hg@dom66.de>
parents:
157
diff
changeset
|
117 local _mountpoint |
|
57b9b899bf77
Provide functions that will be the base for "/var/empty" handling (manipulate the "readonly" property when doing some special operations)
Franz Glasner <fzglas.hg@dom66.de>
parents:
157
diff
changeset
|
118 local _ve_mount |
|
57b9b899bf77
Provide functions that will be the base for "/var/empty" handling (manipulate the "readonly" property when doing some special operations)
Franz Glasner <fzglas.hg@dom66.de>
parents:
157
diff
changeset
|
119 |
|
57b9b899bf77
Provide functions that will be the base for "/var/empty" handling (manipulate the "readonly" property when doing some special operations)
Franz Glasner <fzglas.hg@dom66.de>
parents:
157
diff
changeset
|
120 _mountpoint="$1" |
|
57b9b899bf77
Provide functions that will be the base for "/var/empty" handling (manipulate the "readonly" property when doing some special operations)
Franz Glasner <fzglas.hg@dom66.de>
parents:
157
diff
changeset
|
121 |
|
57b9b899bf77
Provide functions that will be the base for "/var/empty" handling (manipulate the "readonly" property when doing some special operations)
Franz Glasner <fzglas.hg@dom66.de>
parents:
157
diff
changeset
|
122 if [ "$_mountpoint" = '/' ]; then |
|
57b9b899bf77
Provide functions that will be the base for "/var/empty" handling (manipulate the "readonly" property when doing some special operations)
Franz Glasner <fzglas.hg@dom66.de>
parents:
157
diff
changeset
|
123 _ve_mount='/var/empty' |
|
57b9b899bf77
Provide functions that will be the base for "/var/empty" handling (manipulate the "readonly" property when doing some special operations)
Franz Glasner <fzglas.hg@dom66.de>
parents:
157
diff
changeset
|
124 else |
|
57b9b899bf77
Provide functions that will be the base for "/var/empty" handling (manipulate the "readonly" property when doing some special operations)
Franz Glasner <fzglas.hg@dom66.de>
parents:
157
diff
changeset
|
125 _ve_mount="${_mountpoint}/var/empty" |
|
57b9b899bf77
Provide functions that will be the base for "/var/empty" handling (manipulate the "readonly" property when doing some special operations)
Franz Glasner <fzglas.hg@dom66.de>
parents:
157
diff
changeset
|
126 fi |
|
57b9b899bf77
Provide functions that will be the base for "/var/empty" handling (manipulate the "readonly" property when doing some special operations)
Franz Glasner <fzglas.hg@dom66.de>
parents:
157
diff
changeset
|
127 |
|
57b9b899bf77
Provide functions that will be the base for "/var/empty" handling (manipulate the "readonly" property when doing some special operations)
Franz Glasner <fzglas.hg@dom66.de>
parents:
157
diff
changeset
|
128 _get_dataset_for_mountpoint "${_ve_mount}" |
|
57b9b899bf77
Provide functions that will be the base for "/var/empty" handling (manipulate the "readonly" property when doing some special operations)
Franz Glasner <fzglas.hg@dom66.de>
parents:
157
diff
changeset
|
129 } |
|
57b9b899bf77
Provide functions that will be the base for "/var/empty" handling (manipulate the "readonly" property when doing some special operations)
Franz Glasner <fzglas.hg@dom66.de>
parents:
157
diff
changeset
|
130 |
|
57b9b899bf77
Provide functions that will be the base for "/var/empty" handling (manipulate the "readonly" property when doing some special operations)
Franz Glasner <fzglas.hg@dom66.de>
parents:
157
diff
changeset
|
131 |
| 73 | 132 # |
| 133 # "datasets" -- create the ZFS dataset tree | |
| 134 # | |
|
74
247d35f910ca
fjail datasets now recognized a "-u" command option to not automatically mount created datasets
Franz Glasner <hg@dom66.de>
parents:
73
diff
changeset
|
135 # command_datasets [ -u ] parent-dataset child-dataset |
|
247d35f910ca
fjail datasets now recognized a "-u" command option to not automatically mount created datasets
Franz Glasner <hg@dom66.de>
parents:
73
diff
changeset
|
136 # |
|
247d35f910ca
fjail datasets now recognized a "-u" command option to not automatically mount created datasets
Franz Glasner <hg@dom66.de>
parents:
73
diff
changeset
|
137 # -u do not automatically mount newly created datasets |
| 73 | 138 # |
| 139 command_datasets() { | |
| 140 # parent ZFS dataset -- child ZFS dataset name | |
| 141 local _pds _cds | |
| 142 # and its mount point | |
|
202
6b7a084ddf1d
Replace all calls to "zfs get" to "zfs list -o".
Franz Glasner <fzglas.hg@dom66.de>
parents:
201
diff
changeset
|
143 local _pmp _get |
| 73 | 144 # full name of the dataset |
| 145 local _ds | |
|
181
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
146 # dynamic ZFS options -- create cache for freebsd-update -- use a more tiny layout |
|
211
ee9b32ab0e9a
Implement the "-o" option for "datasets" to create var/empty with the default "readonly" setting instead of "readonly=on"
Franz Glasner <fzglas.hg@dom66.de>
parents:
210
diff
changeset
|
147 local _zfsopts _fbsdupdate _tiny _zfsnoauto _varempty_ro |
|
74
247d35f910ca
fjail datasets now recognized a "-u" command option to not automatically mount created datasets
Franz Glasner <hg@dom66.de>
parents:
73
diff
changeset
|
148 |
|
247d35f910ca
fjail datasets now recognized a "-u" command option to not automatically mount created datasets
Franz Glasner <hg@dom66.de>
parents:
73
diff
changeset
|
149 _zfsopts="" |
|
177
9ffbe53dbc35
Flag for creating a separatate dataset for freebsd-update data.
Franz Glasner <hg@dom66.de>
parents:
176
diff
changeset
|
150 _fbsdupdate="" |
|
181
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
151 _tiny="no" |
|
204
ef397b84b047
Implement a "-A" flat for dataset creation: set canmount=noauto
Franz Glasner <fzglas.hg@dom66.de>
parents:
203
diff
changeset
|
152 _zfsnoauto="" |
|
211
ee9b32ab0e9a
Implement the "-o" option for "datasets" to create var/empty with the default "readonly" setting instead of "readonly=on"
Franz Glasner <fzglas.hg@dom66.de>
parents:
210
diff
changeset
|
153 _varempty_ro="-o readonly=on" |
|
ee9b32ab0e9a
Implement the "-o" option for "datasets" to create var/empty with the default "readonly" setting instead of "readonly=on"
Franz Glasner <fzglas.hg@dom66.de>
parents:
210
diff
changeset
|
154 while getopts "oustAT" _opt ; do |
|
74
247d35f910ca
fjail datasets now recognized a "-u" command option to not automatically mount created datasets
Franz Glasner <hg@dom66.de>
parents:
73
diff
changeset
|
155 case ${_opt} in |
|
204
ef397b84b047
Implement a "-A" flat for dataset creation: set canmount=noauto
Franz Glasner <fzglas.hg@dom66.de>
parents:
203
diff
changeset
|
156 A) |
|
ef397b84b047
Implement a "-A" flat for dataset creation: set canmount=noauto
Franz Glasner <fzglas.hg@dom66.de>
parents:
203
diff
changeset
|
157 # |
|
ef397b84b047
Implement a "-A" flat for dataset creation: set canmount=noauto
Franz Glasner <fzglas.hg@dom66.de>
parents:
203
diff
changeset
|
158 # set canmount=noauto where otherwise canmount=on would have been set |
|
ef397b84b047
Implement a "-A" flat for dataset creation: set canmount=noauto
Franz Glasner <fzglas.hg@dom66.de>
parents:
203
diff
changeset
|
159 # or inherited |
|
ef397b84b047
Implement a "-A" flat for dataset creation: set canmount=noauto
Franz Glasner <fzglas.hg@dom66.de>
parents:
203
diff
changeset
|
160 # |
|
ef397b84b047
Implement a "-A" flat for dataset creation: set canmount=noauto
Franz Glasner <fzglas.hg@dom66.de>
parents:
203
diff
changeset
|
161 _zfsnoauto="-o canmount=noauto" |
|
ef397b84b047
Implement a "-A" flat for dataset creation: set canmount=noauto
Franz Glasner <fzglas.hg@dom66.de>
parents:
203
diff
changeset
|
162 ;; |
|
211
ee9b32ab0e9a
Implement the "-o" option for "datasets" to create var/empty with the default "readonly" setting instead of "readonly=on"
Franz Glasner <fzglas.hg@dom66.de>
parents:
210
diff
changeset
|
163 o) |
|
ee9b32ab0e9a
Implement the "-o" option for "datasets" to create var/empty with the default "readonly" setting instead of "readonly=on"
Franz Glasner <fzglas.hg@dom66.de>
parents:
210
diff
changeset
|
164 # Clear out the default setting of creating var/empty as read-only dataset |
|
ee9b32ab0e9a
Implement the "-o" option for "datasets" to create var/empty with the default "readonly" setting instead of "readonly=on"
Franz Glasner <fzglas.hg@dom66.de>
parents:
210
diff
changeset
|
165 _varempty_ro="" |
|
ee9b32ab0e9a
Implement the "-o" option for "datasets" to create var/empty with the default "readonly" setting instead of "readonly=on"
Franz Glasner <fzglas.hg@dom66.de>
parents:
210
diff
changeset
|
166 ;; |
|
181
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
167 t) |
|
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
168 # use a more tiny layout |
|
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
169 _tiny="yes" |
|
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
170 ;; |
|
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
171 T) # extra tiny layout |
|
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
172 _tiny="extra" |
|
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
173 ;; |
|
74
247d35f910ca
fjail datasets now recognized a "-u" command option to not automatically mount created datasets
Franz Glasner <hg@dom66.de>
parents:
73
diff
changeset
|
174 u) |
|
247d35f910ca
fjail datasets now recognized a "-u" command option to not automatically mount created datasets
Franz Glasner <hg@dom66.de>
parents:
73
diff
changeset
|
175 # do not mount newly created datasets |
|
247d35f910ca
fjail datasets now recognized a "-u" command option to not automatically mount created datasets
Franz Glasner <hg@dom66.de>
parents:
73
diff
changeset
|
176 _zfsopts="${_zfsopts} -u" |
|
247d35f910ca
fjail datasets now recognized a "-u" command option to not automatically mount created datasets
Franz Glasner <hg@dom66.de>
parents:
73
diff
changeset
|
177 ;; |
|
177
9ffbe53dbc35
Flag for creating a separatate dataset for freebsd-update data.
Franz Glasner <hg@dom66.de>
parents:
176
diff
changeset
|
178 s) |
|
9ffbe53dbc35
Flag for creating a separatate dataset for freebsd-update data.
Franz Glasner <hg@dom66.de>
parents:
176
diff
changeset
|
179 # create also a dataset for freebsd-update data |
|
9ffbe53dbc35
Flag for creating a separatate dataset for freebsd-update data.
Franz Glasner <hg@dom66.de>
parents:
176
diff
changeset
|
180 _fbsdupdate="yes" |
|
179
6c144aca8ac5
FIX: Proper case-switch termination
Franz Glasner <hg@dom66.de>
parents:
178
diff
changeset
|
181 ;; |
|
74
247d35f910ca
fjail datasets now recognized a "-u" command option to not automatically mount created datasets
Franz Glasner <hg@dom66.de>
parents:
73
diff
changeset
|
182 \?|:) |
|
247d35f910ca
fjail datasets now recognized a "-u" command option to not automatically mount created datasets
Franz Glasner <hg@dom66.de>
parents:
73
diff
changeset
|
183 return 2; |
|
247d35f910ca
fjail datasets now recognized a "-u" command option to not automatically mount created datasets
Franz Glasner <hg@dom66.de>
parents:
73
diff
changeset
|
184 ;; |
|
247d35f910ca
fjail datasets now recognized a "-u" command option to not automatically mount created datasets
Franz Glasner <hg@dom66.de>
parents:
73
diff
changeset
|
185 esac |
|
247d35f910ca
fjail datasets now recognized a "-u" command option to not automatically mount created datasets
Franz Glasner <hg@dom66.de>
parents:
73
diff
changeset
|
186 done |
|
247d35f910ca
fjail datasets now recognized a "-u" command option to not automatically mount created datasets
Franz Glasner <hg@dom66.de>
parents:
73
diff
changeset
|
187 shift $((OPTIND-1)) |
|
247d35f910ca
fjail datasets now recognized a "-u" command option to not automatically mount created datasets
Franz Glasner <hg@dom66.de>
parents:
73
diff
changeset
|
188 OPTIND=1 |
| 73 | 189 |
| 190 _pds="$1" | |
| 191 if [ -z "${_pds}" ]; then | |
| 192 echo "ERROR: no parent dataset given" >&2 | |
| 193 return 2 | |
| 194 fi | |
|
203
eb95c986cc59
Use -t filesystem in all "zfs list" calls
Franz Glasner <fzglas.hg@dom66.de>
parents:
202
diff
changeset
|
195 _pmp=$(zfs list -H -o mountpoint -t filesystem "${_pds}" 2>/dev/null) || { echo "ERROR: dataset \`${_pds}' does not exist" >&2; return 1; } |
| 73 | 196 case "${_pmp}" in |
| 197 none) | |
| 198 echo "ERROR: dataset \`${_pds}' has no mountpoint" >&2 | |
| 199 return 1 | |
| 200 ;; | |
| 201 legacy) | |
| 202 echo "ERROR: dataset \`${_pds}' has a \`${_mp}' mountpoint" >&2 | |
| 203 return 1 | |
| 204 ;; | |
| 205 *) | |
| 206 # VOID | |
| 207 ;; | |
| 208 esac | |
| 209 _cds="$2" | |
| 210 if [ -z "${_cds}" ]; then | |
| 211 echo "ERROR: no child dataset given" >&2 | |
| 212 return 2 | |
| 213 fi | |
| 214 _ds="${_pds}/${_cds}" | |
| 215 echo "Resulting new root dataset is \`${_ds}' at mountpoint \`${_pmp}/${_cds}'" | |
|
203
eb95c986cc59
Use -t filesystem in all "zfs list" calls
Franz Glasner <fzglas.hg@dom66.de>
parents:
202
diff
changeset
|
216 if zfs list -H -o mountpoint -t filesystem "${_ds}" >/dev/null 2>/dev/null; then |
| 73 | 217 echo "ERROR: dataset \`${_ds}' does already exist" >&2 |
| 218 return 1 | |
| 219 fi | |
|
181
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
220 |
|
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
221 # |
|
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
222 # NOTE: For BEs these directory will be *excluded* from the BE |
|
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
223 # |
|
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
224 # /tmp |
|
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
225 # /usr/home |
|
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
226 # /usr/ports |
|
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
227 # /usr/src |
|
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
228 # /var/audit |
|
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
229 # /var/crash |
|
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
230 # /var/log |
|
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
231 # /var/mail |
|
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
232 # /var/tmp |
|
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
233 # |
|
204
ef397b84b047
Implement a "-A" flat for dataset creation: set canmount=noauto
Franz Glasner <fzglas.hg@dom66.de>
parents:
203
diff
changeset
|
234 zfs create ${_zfsopts} ${_zfsnoauto} -o atime=off "${_ds}" |
|
ef397b84b047
Implement a "-A" flat for dataset creation: set canmount=noauto
Franz Glasner <fzglas.hg@dom66.de>
parents:
203
diff
changeset
|
235 zfs create ${_zfsopts} ${_zfsnoauto} -o sync=disabled -o setuid=off "${_ds}/tmp" |
|
182
dbd62c32b3fd
FIX: Do expansion then comparing
Franz Glasner <hg@dom66.de>
parents:
181
diff
changeset
|
236 if [ "${_tiny}" != "extra" ]; then |
|
181
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
237 if [ "${_tiny}" = "yes" ]; then |
|
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
238 zfs create ${_zfsopts} -o canmount=off "${_ds}/usr" |
|
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
239 else |
|
204
ef397b84b047
Implement a "-A" flat for dataset creation: set canmount=noauto
Franz Glasner <fzglas.hg@dom66.de>
parents:
203
diff
changeset
|
240 zfs create ${_zfsopts} ${_zfsnoauto} "${_ds}/usr" |
|
181
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
241 fi |
|
204
ef397b84b047
Implement a "-A" flat for dataset creation: set canmount=noauto
Franz Glasner <fzglas.hg@dom66.de>
parents:
203
diff
changeset
|
242 zfs create ${_zfsopts} ${_zfsnoauto} -o setuid=off "${_ds}/usr/home" |
|
ef397b84b047
Implement a "-A" flat for dataset creation: set canmount=noauto
Franz Glasner <fzglas.hg@dom66.de>
parents:
203
diff
changeset
|
243 zfs create ${_zfsopts} ${_zfsnoauto} "${_ds}/usr/local" |
|
181
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
244 fi |
|
182
dbd62c32b3fd
FIX: Do expansion then comparing
Franz Glasner <hg@dom66.de>
parents:
181
diff
changeset
|
245 if [ \( "${_tiny}" = "yes" \) -o \( "${_tiny}" = "extra" \) ]; then |
|
181
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
246 zfs create ${_zfsopts} -o canmount=off "${_ds}/var" |
|
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
247 else |
|
204
ef397b84b047
Implement a "-A" flat for dataset creation: set canmount=noauto
Franz Glasner <fzglas.hg@dom66.de>
parents:
203
diff
changeset
|
248 zfs create ${_zfsopts} ${_zfsnoauto} "${_ds}/var" |
|
181
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
249 fi |
|
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
250 if [ "${_tiny}" != "extra" ]; then |
|
204
ef397b84b047
Implement a "-A" flat for dataset creation: set canmount=noauto
Franz Glasner <fzglas.hg@dom66.de>
parents:
203
diff
changeset
|
251 zfs create ${_zfsopts} ${_zfsnoauto} -o exec=off -o setuid=off "${_ds}/var/audit" |
|
ef397b84b047
Implement a "-A" flat for dataset creation: set canmount=noauto
Franz Glasner <fzglas.hg@dom66.de>
parents:
203
diff
changeset
|
252 zfs create ${_zfsopts} ${_zfsnoauto} -o exec=off -o setuid=off "${_ds}/var/cache" |
|
ef397b84b047
Implement a "-A" flat for dataset creation: set canmount=noauto
Franz Glasner <fzglas.hg@dom66.de>
parents:
203
diff
changeset
|
253 zfs create ${_zfsopts} ${_zfsnoauto} -o exec=off -o setuid=off -o primarycache=metadata -o compression=off "${_ds}/var/cache/pkg" |
|
ef397b84b047
Implement a "-A" flat for dataset creation: set canmount=noauto
Franz Glasner <fzglas.hg@dom66.de>
parents:
203
diff
changeset
|
254 zfs create ${_zfsopts} ${_zfsnoauto} -o exec=off -o setuid=off -o compression=off "${_ds}/var/crash" |
|
181
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
255 fi |
|
177
9ffbe53dbc35
Flag for creating a separatate dataset for freebsd-update data.
Franz Glasner <hg@dom66.de>
parents:
176
diff
changeset
|
256 if [ "$_fbsdupdate" = "yes" ]; then |
|
182
dbd62c32b3fd
FIX: Do expansion then comparing
Franz Glasner <hg@dom66.de>
parents:
181
diff
changeset
|
257 if [ \( "${_tiny}" = "yes" \) -o \( "${_tiny}" = "extra" \) ]; then |
|
181
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
258 zfs create ${_zfsopts} -o canmount=off -o exec=off -o setuid=off "${_ds}/var/db" |
|
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
259 else |
|
204
ef397b84b047
Implement a "-A" flat for dataset creation: set canmount=noauto
Franz Glasner <fzglas.hg@dom66.de>
parents:
203
diff
changeset
|
260 zfs create ${_zfsopts} ${_zfsnoauto} -o exec=off -o setuid=off "${_ds}/var/db" |
|
181
d30a68e66d60
More dataset creation options: -t (tiny) and -T (extra tiny)
Franz Glasner <hg@dom66.de>
parents:
180
diff
changeset
|
261 fi |
|
204
ef397b84b047
Implement a "-A" flat for dataset creation: set canmount=noauto
Franz Glasner <fzglas.hg@dom66.de>
parents:
203
diff
changeset
|
262 zfs create ${_zfsopts} ${_zfsnoauto} -o exec=off -o setuid=off -o primarycache=metadata -o compression=off "${_ds}/var/db/freebsd-update" |
|
177
9ffbe53dbc35
Flag for creating a separatate dataset for freebsd-update data.
Franz Glasner <hg@dom66.de>
parents:
176
diff
changeset
|
263 fi |
|
211
ee9b32ab0e9a
Implement the "-o" option for "datasets" to create var/empty with the default "readonly" setting instead of "readonly=on"
Franz Glasner <fzglas.hg@dom66.de>
parents:
210
diff
changeset
|
264 zfs create ${_zfsopts} ${_zfsnoauto} ${_varempty_ro} -o exec=off -o setuid=off "${_ds}/var/empty" |
|
204
ef397b84b047
Implement a "-A" flat for dataset creation: set canmount=noauto
Franz Glasner <fzglas.hg@dom66.de>
parents:
203
diff
changeset
|
265 zfs create ${_zfsopts} ${_zfsnoauto} -o exec=off -o setuid=off -o primarycache=metadata "${_ds}/var/log" |
|
ef397b84b047
Implement a "-A" flat for dataset creation: set canmount=noauto
Franz Glasner <fzglas.hg@dom66.de>
parents:
203
diff
changeset
|
266 zfs create ${_zfsopts} ${_zfsnoauto} -o exec=off -o setuid=off -o atime=on "${_ds}/var/mail" |
|
ef397b84b047
Implement a "-A" flat for dataset creation: set canmount=noauto
Franz Glasner <fzglas.hg@dom66.de>
parents:
203
diff
changeset
|
267 zfs create ${_zfsopts} ${_zfsnoauto} -o sync=disabled -o exec=off -o setuid=off -o compression=off -o primarycache=all "${_ds}/var/run" |
|
ef397b84b047
Implement a "-A" flat for dataset creation: set canmount=noauto
Franz Glasner <fzglas.hg@dom66.de>
parents:
203
diff
changeset
|
268 zfs create ${_zfsopts} ${_zfsnoauto} -o sync=disabled -o setuid=off "${_ds}/var/tmp" |
| 73 | 269 } |
| 270 | |
|
74
247d35f910ca
fjail datasets now recognized a "-u" command option to not automatically mount created datasets
Franz Glasner <hg@dom66.de>
parents:
73
diff
changeset
|
271 |
| 73 | 272 # |
|
76
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
273 # "populate" -- populate the datasets with content from a FreeBSD base.txz |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
274 # |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
275 # command_populate mountpoint basetxz |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
276 # |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
277 command_populate() { |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
278 # MOUNTPOINT -- base.txz |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
279 local _mp _basetxz |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
280 |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
281 _mp="$1" |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
282 _basetxz="$2" |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
283 |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
284 if [ -z "${_mp}" ]; then |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
285 echo "ERROR: no mountpoint given" >&2 |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
286 return 2 |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
287 fi |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
288 if [ -z "${_basetxz}" ]; then |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
289 echo "ERROR: no base.txz given" >&2 |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
290 return 2 |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
291 fi |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
292 if [ ! -d "${_mp}" ]; then |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
293 echo "ERROR: mountpoint \`${_mp}' does not exist" >&2 |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
294 return 1 |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
295 fi |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
296 if [ ! -r "${_basetxz}" ]; then |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
297 echo "ERROR: file \`${_basetxz}' is not readable" >&2 |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
298 return 1 |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
299 fi |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
300 |
|
173
6782ac823f86
Handle /var/empty more sanely when populating datasets from a base.txz image
Franz Glasner <fzglas.hg@dom66.de>
parents:
164
diff
changeset
|
301 # |
|
6782ac823f86
Handle /var/empty more sanely when populating datasets from a base.txz image
Franz Glasner <fzglas.hg@dom66.de>
parents:
164
diff
changeset
|
302 # Handle /var/empty separately later: could be already there and |
|
6782ac823f86
Handle /var/empty more sanely when populating datasets from a base.txz image
Franz Glasner <fzglas.hg@dom66.de>
parents:
164
diff
changeset
|
303 # mounted read-only. |
|
6782ac823f86
Handle /var/empty more sanely when populating datasets from a base.txz image
Franz Glasner <fzglas.hg@dom66.de>
parents:
164
diff
changeset
|
304 # |
|
164
b62b8bc6184f
Because of mtree errors in freebsd-update: let the directory tree in /boot stay as expanded but delete all regular files
Franz Glasner <hg@dom66.de>
parents:
163
diff
changeset
|
305 tar -C "${_mp}" --exclude=./var/empty -xJp -f "${_basetxz}" || { echo "ERROR: tar encountered errors" >&2; return 1; } |
|
173
6782ac823f86
Handle /var/empty more sanely when populating datasets from a base.txz image
Franz Glasner <fzglas.hg@dom66.de>
parents:
164
diff
changeset
|
306 if [ -d "${_mp}/var/empty" ]; then |
|
6782ac823f86
Handle /var/empty more sanely when populating datasets from a base.txz image
Franz Glasner <fzglas.hg@dom66.de>
parents:
164
diff
changeset
|
307 # |
|
6782ac823f86
Handle /var/empty more sanely when populating datasets from a base.txz image
Franz Glasner <fzglas.hg@dom66.de>
parents:
164
diff
changeset
|
308 # If /var/empty exists already try to extract with changing the |
|
183
ea491007d7fb
FIX: Because of set -eu: ignore errors from tar explicitely
Franz Glasner <hg@dom66.de>
parents:
182
diff
changeset
|
309 # flags (e.g. `schg'). But be ignore errors here. |
|
173
6782ac823f86
Handle /var/empty more sanely when populating datasets from a base.txz image
Franz Glasner <fzglas.hg@dom66.de>
parents:
164
diff
changeset
|
310 # |
|
184
2e7d0c967c36
Print a message when tar errors regaring ./var/empty are ignored
Franz Glasner <hg@dom66.de>
parents:
183
diff
changeset
|
311 tar -C "${_mp}" -xJp -f "${_basetxz}" ./var/empty || { echo "tar warnings for handling ./var/empty ignored because ./var/empty exists already" >&2; } |
|
173
6782ac823f86
Handle /var/empty more sanely when populating datasets from a base.txz image
Franz Glasner <fzglas.hg@dom66.de>
parents:
164
diff
changeset
|
312 else |
|
6782ac823f86
Handle /var/empty more sanely when populating datasets from a base.txz image
Franz Glasner <fzglas.hg@dom66.de>
parents:
164
diff
changeset
|
313 # Just extract /var/empty normally |
|
6782ac823f86
Handle /var/empty more sanely when populating datasets from a base.txz image
Franz Glasner <fzglas.hg@dom66.de>
parents:
164
diff
changeset
|
314 tar -C "${_mp}" -xJp -f "${_basetxz}" ./var/empty || { echo "ERROR: tar encountered errors" >&2; return 1; } |
|
6782ac823f86
Handle /var/empty more sanely when populating datasets from a base.txz image
Franz Glasner <fzglas.hg@dom66.de>
parents:
164
diff
changeset
|
315 fi |
|
6782ac823f86
Handle /var/empty more sanely when populating datasets from a base.txz image
Franz Glasner <fzglas.hg@dom66.de>
parents:
164
diff
changeset
|
316 |
|
164
b62b8bc6184f
Because of mtree errors in freebsd-update: let the directory tree in /boot stay as expanded but delete all regular files
Franz Glasner <hg@dom66.de>
parents:
163
diff
changeset
|
317 find "${_mp}/boot" -type f -delete |
|
76
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
318 } |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
319 |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
320 |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
321 # |
|
77
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
322 # "copy" -- ZFS copy of datasets |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
323 # |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
324 # command_copy source-dataset destination-dataset |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
325 # |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
326 command_copy() { |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
327 # source dataset -- destination dataset |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
328 local _source _dest |
|
178
00fbf2b4b44f
Allow to copy ZFS datasets in "raw" mode (with "-Lec" set)
Franz Glasner <hg@dom66.de>
parents:
177
diff
changeset
|
329 # dynamic ZFS options -- ZFS copy options |
|
00fbf2b4b44f
Allow to copy ZFS datasets in "raw" mode (with "-Lec" set)
Franz Glasner <hg@dom66.de>
parents:
177
diff
changeset
|
330 local _zfsopts _zfscopyopts |
|
77
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
331 |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
332 _zfsopts="" |
|
178
00fbf2b4b44f
Allow to copy ZFS datasets in "raw" mode (with "-Lec" set)
Franz Glasner <hg@dom66.de>
parents:
177
diff
changeset
|
333 _zfscopyopts="" |
|
00fbf2b4b44f
Allow to copy ZFS datasets in "raw" mode (with "-Lec" set)
Franz Glasner <hg@dom66.de>
parents:
177
diff
changeset
|
334 while getopts "ru" _opt ; do |
|
77
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
335 case ${_opt} in |
|
178
00fbf2b4b44f
Allow to copy ZFS datasets in "raw" mode (with "-Lec" set)
Franz Glasner <hg@dom66.de>
parents:
177
diff
changeset
|
336 r) |
|
00fbf2b4b44f
Allow to copy ZFS datasets in "raw" mode (with "-Lec" set)
Franz Glasner <hg@dom66.de>
parents:
177
diff
changeset
|
337 # Use raw datasets |
|
00fbf2b4b44f
Allow to copy ZFS datasets in "raw" mode (with "-Lec" set)
Franz Glasner <hg@dom66.de>
parents:
177
diff
changeset
|
338 _zfscopyopts="-Lec" |
|
179
6c144aca8ac5
FIX: Proper case-switch termination
Franz Glasner <hg@dom66.de>
parents:
178
diff
changeset
|
339 ;; |
|
77
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
340 u) |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
341 # do not mount newly created datasets |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
342 _zfsopts="${_zfsopts} -u" |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
343 ;; |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
344 \?|:) |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
345 return 2; |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
346 ;; |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
347 esac |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
348 done |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
349 shift $((OPTIND-1)) |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
350 OPTIND=1 |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
351 |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
352 _source="$1" |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
353 if [ -z "${_source}" ]; then |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
354 echo "ERROR: no source dataset given" >&2 |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
355 return 2 |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
356 fi |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
357 _dest="$2" |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
358 if [ -z "${_dest}" ]; then |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
359 echo "ERROR: no source dataset given" >&2 |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
360 return 2 |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
361 fi |
|
178
00fbf2b4b44f
Allow to copy ZFS datasets in "raw" mode (with "-Lec" set)
Franz Glasner <hg@dom66.de>
parents:
177
diff
changeset
|
362 zfs send -R ${_zfscopyopts} -n -v "${_source}" || { echo "ERROR: ZFS operation failed in no-op mode" >&2; return 1; } |
|
00fbf2b4b44f
Allow to copy ZFS datasets in "raw" mode (with "-Lec" set)
Franz Glasner <hg@dom66.de>
parents:
177
diff
changeset
|
363 zfs send -R ${_zfscopyopts} "${_source}" | zfs receive ${_zfsopts} "${_dest}" || { echo "ERROR: ZFS operation failed" >&2; return 1; } |
|
77
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
364 } |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
365 |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
366 |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
367 # |
|
194
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
368 # "mount" -- recursively mount a dataset including subordinate datasets |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
369 # |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
370 # command_mount dataset mountpoint |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
371 # |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
372 command_mount() { |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
373 local _dsname _mountpoint |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
374 local _name _mp _canmount _mounted |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
375 local _rootds_mountpoint _relative_mp _real_mp |
|
207
a19acddb4662
Implement a "-N" flag for mounting: mount at "natural" configured ZFS mountpoints.
Franz Glasner <fzglas.hg@dom66.de>
parents:
206
diff
changeset
|
376 local _dry_run _mount_outside _mount_natural |
|
194
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
377 |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
378 _dry_run="" |
|
206
92e5db34eb2b
Implent a "-O" flag for mounts that allows to mount also datasets with configured mountpoints outside their "natural" mountpoints within the dataset hierarchy
Franz Glasner <fzglas.hg@dom66.de>
parents:
205
diff
changeset
|
379 _mount_outside="" |
|
207
a19acddb4662
Implement a "-N" flag for mounting: mount at "natural" configured ZFS mountpoints.
Franz Glasner <fzglas.hg@dom66.de>
parents:
206
diff
changeset
|
380 _mount_natural="" |
|
a19acddb4662
Implement a "-N" flag for mounting: mount at "natural" configured ZFS mountpoints.
Franz Glasner <fzglas.hg@dom66.de>
parents:
206
diff
changeset
|
381 while getopts "ONnu" _opt ; do |
|
194
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
382 case ${_opt} in |
|
206
92e5db34eb2b
Implent a "-O" flag for mounts that allows to mount also datasets with configured mountpoints outside their "natural" mountpoints within the dataset hierarchy
Franz Glasner <fzglas.hg@dom66.de>
parents:
205
diff
changeset
|
383 O) |
|
92e5db34eb2b
Implent a "-O" flag for mounts that allows to mount also datasets with configured mountpoints outside their "natural" mountpoints within the dataset hierarchy
Franz Glasner <fzglas.hg@dom66.de>
parents:
205
diff
changeset
|
384 _mount_outside="yes" |
|
92e5db34eb2b
Implent a "-O" flag for mounts that allows to mount also datasets with configured mountpoints outside their "natural" mountpoints within the dataset hierarchy
Franz Glasner <fzglas.hg@dom66.de>
parents:
205
diff
changeset
|
385 ;; |
|
207
a19acddb4662
Implement a "-N" flag for mounting: mount at "natural" configured ZFS mountpoints.
Franz Glasner <fzglas.hg@dom66.de>
parents:
206
diff
changeset
|
386 N) |
|
a19acddb4662
Implement a "-N" flag for mounting: mount at "natural" configured ZFS mountpoints.
Franz Glasner <fzglas.hg@dom66.de>
parents:
206
diff
changeset
|
387 _mount_natural="yes" |
|
a19acddb4662
Implement a "-N" flag for mounting: mount at "natural" configured ZFS mountpoints.
Franz Glasner <fzglas.hg@dom66.de>
parents:
206
diff
changeset
|
388 ;; |
|
194
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
389 n|u) |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
390 _dry_run="yes" |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
391 ;; |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
392 \?|:) |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
393 return 2; |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
394 ;; |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
395 esac |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
396 done |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
397 shift $((OPTIND-1)) |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
398 OPTIND=1 |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
399 |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
400 _dsname="${1-}" |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
401 _mountpoint="${2-}" |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
402 |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
403 if [ -z "${_dsname}" ]; then |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
404 echo "ERROR: no dataset given" >&2 |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
405 return 2 |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
406 fi |
|
207
a19acddb4662
Implement a "-N" flag for mounting: mount at "natural" configured ZFS mountpoints.
Franz Glasner <fzglas.hg@dom66.de>
parents:
206
diff
changeset
|
407 |
|
a19acddb4662
Implement a "-N" flag for mounting: mount at "natural" configured ZFS mountpoints.
Franz Glasner <fzglas.hg@dom66.de>
parents:
206
diff
changeset
|
408 _rootds_mountpoint="$(zfs list -H -o mountpoint -t filesystem "${_dsname}")" || \ |
|
a19acddb4662
Implement a "-N" flag for mounting: mount at "natural" configured ZFS mountpoints.
Franz Glasner <fzglas.hg@dom66.de>
parents:
206
diff
changeset
|
409 { echo "ERROR: root dataset does not exist" >&2; return 1; } |
|
a19acddb4662
Implement a "-N" flag for mounting: mount at "natural" configured ZFS mountpoints.
Franz Glasner <fzglas.hg@dom66.de>
parents:
206
diff
changeset
|
410 |
|
194
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
411 if [ -z "${_mountpoint}" ]; then |
|
207
a19acddb4662
Implement a "-N" flag for mounting: mount at "natural" configured ZFS mountpoints.
Franz Glasner <fzglas.hg@dom66.de>
parents:
206
diff
changeset
|
412 if [ "${_mount_natural}" = "yes" ]; then |
|
a19acddb4662
Implement a "-N" flag for mounting: mount at "natural" configured ZFS mountpoints.
Franz Glasner <fzglas.hg@dom66.de>
parents:
206
diff
changeset
|
413 _mountpoint="${_rootds_mountpoint}" |
|
a19acddb4662
Implement a "-N" flag for mounting: mount at "natural" configured ZFS mountpoints.
Franz Glasner <fzglas.hg@dom66.de>
parents:
206
diff
changeset
|
414 else |
|
a19acddb4662
Implement a "-N" flag for mounting: mount at "natural" configured ZFS mountpoints.
Franz Glasner <fzglas.hg@dom66.de>
parents:
206
diff
changeset
|
415 echo "ERROR: no mountpoint given" >&2 |
|
a19acddb4662
Implement a "-N" flag for mounting: mount at "natural" configured ZFS mountpoints.
Franz Glasner <fzglas.hg@dom66.de>
parents:
206
diff
changeset
|
416 return 2 |
|
a19acddb4662
Implement a "-N" flag for mounting: mount at "natural" configured ZFS mountpoints.
Franz Glasner <fzglas.hg@dom66.de>
parents:
206
diff
changeset
|
417 fi |
|
a19acddb4662
Implement a "-N" flag for mounting: mount at "natural" configured ZFS mountpoints.
Franz Glasner <fzglas.hg@dom66.de>
parents:
206
diff
changeset
|
418 else |
|
a19acddb4662
Implement a "-N" flag for mounting: mount at "natural" configured ZFS mountpoints.
Franz Glasner <fzglas.hg@dom66.de>
parents:
206
diff
changeset
|
419 if [ "${_mount_natural}" = "yes" ]; then |
|
a19acddb4662
Implement a "-N" flag for mounting: mount at "natural" configured ZFS mountpoints.
Franz Glasner <fzglas.hg@dom66.de>
parents:
206
diff
changeset
|
420 echo "ERROR: Cannot have a custom mountpoint when \"-O\" is given" >&2 |
|
a19acddb4662
Implement a "-N" flag for mounting: mount at "natural" configured ZFS mountpoints.
Franz Glasner <fzglas.hg@dom66.de>
parents:
206
diff
changeset
|
421 return 2 |
|
a19acddb4662
Implement a "-N" flag for mounting: mount at "natural" configured ZFS mountpoints.
Franz Glasner <fzglas.hg@dom66.de>
parents:
206
diff
changeset
|
422 fi |
|
194
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
423 fi |
|
207
a19acddb4662
Implement a "-N" flag for mounting: mount at "natural" configured ZFS mountpoints.
Franz Glasner <fzglas.hg@dom66.de>
parents:
206
diff
changeset
|
424 |
|
a19acddb4662
Implement a "-N" flag for mounting: mount at "natural" configured ZFS mountpoints.
Franz Glasner <fzglas.hg@dom66.de>
parents:
206
diff
changeset
|
425 # Eventually remove a trailing slash |
|
194
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
426 _mountpoint="${_mountpoint%/}" |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
427 if [ -z "${_mountpoint}" ]; then |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
428 echo "ERROR: would mount over the root filesystem" >&2 |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
429 return 1 |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
430 fi |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
431 |
|
201
687210f46b8f
FIX: In mount and unmount commands handle pipeline return values correctly now
Franz Glasner <fzglas.hg@dom66.de>
parents:
200
diff
changeset
|
432 zfs list -H -o name,mountpoint,canmount,mounted -s mountpoint -t filesystem -r "${_dsname}" \ |
|
687210f46b8f
FIX: In mount and unmount commands handle pipeline return values correctly now
Franz Glasner <fzglas.hg@dom66.de>
parents:
200
diff
changeset
|
433 | { |
|
195
4a0cb73945a8
Use "read -r" for when mounting/unmounting
Franz Glasner <fzglas.hg@dom66.de>
parents:
194
diff
changeset
|
434 while IFS=$'\t' read -r _name _mp _canmount _mounted ; do |
|
194
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
435 # Skip filesystems that are already mounted |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
436 [ "${_mounted}" = "yes" ] && continue |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
437 # Skip filesystems that must not be mounted |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
438 [ "${_canmount}" = "off" ] && continue |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
439 case "${_mp}" in |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
440 "none"|"legacy") |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
441 # Do nothing for filesystem with unset or legacy mountpoints |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
442 ;; |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
443 "${_rootds_mountpoint}"|"${_rootds_mountpoint}/"*) |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
444 # |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
445 # Handle only mountpoints that have a mountpoint below |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
446 # the parent datasets mountpoint |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
447 # |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
448 |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
449 # Determine the mountpoint relative to the parent mountpoint |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
450 _relative_mp="${_mp#${_rootds_mountpoint}}" |
| 209 | 451 # Eventually remove a trailing slash |
|
194
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
452 _relative_mp="${_relative_mp%/}" |
| 209 | 453 # The real effective full mountpoint |
|
194
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
454 _real_mp="${_mountpoint}${_relative_mp}" |
|
210
4d7e00b500a1
Implement a sanity and consistency check when doing "natural" mounts
Franz Glasner <fzglas.hg@dom66.de>
parents:
209
diff
changeset
|
455 |
|
4d7e00b500a1
Implement a sanity and consistency check when doing "natural" mounts
Franz Glasner <fzglas.hg@dom66.de>
parents:
209
diff
changeset
|
456 # |
|
4d7e00b500a1
Implement a sanity and consistency check when doing "natural" mounts
Franz Glasner <fzglas.hg@dom66.de>
parents:
209
diff
changeset
|
457 # Consistency and sanity check: computed real mountpoint must |
|
4d7e00b500a1
Implement a sanity and consistency check when doing "natural" mounts
Franz Glasner <fzglas.hg@dom66.de>
parents:
209
diff
changeset
|
458 # be equal to the configured mountpoint when no custom mountpoint |
|
4d7e00b500a1
Implement a sanity and consistency check when doing "natural" mounts
Franz Glasner <fzglas.hg@dom66.de>
parents:
209
diff
changeset
|
459 # is given. |
|
4d7e00b500a1
Implement a sanity and consistency check when doing "natural" mounts
Franz Glasner <fzglas.hg@dom66.de>
parents:
209
diff
changeset
|
460 # |
|
4d7e00b500a1
Implement a sanity and consistency check when doing "natural" mounts
Franz Glasner <fzglas.hg@dom66.de>
parents:
209
diff
changeset
|
461 if [ "${_mount_natural}" = "yes" ]; then |
|
4d7e00b500a1
Implement a sanity and consistency check when doing "natural" mounts
Franz Glasner <fzglas.hg@dom66.de>
parents:
209
diff
changeset
|
462 if [ "${_real_mp}" != "${_mp}" ]; then |
|
4d7e00b500a1
Implement a sanity and consistency check when doing "natural" mounts
Franz Glasner <fzglas.hg@dom66.de>
parents:
209
diff
changeset
|
463 echo "ERROR: mountpoint mismatch" >&2 |
|
4d7e00b500a1
Implement a sanity and consistency check when doing "natural" mounts
Franz Glasner <fzglas.hg@dom66.de>
parents:
209
diff
changeset
|
464 return 1 |
|
4d7e00b500a1
Implement a sanity and consistency check when doing "natural" mounts
Franz Glasner <fzglas.hg@dom66.de>
parents:
209
diff
changeset
|
465 fi |
|
4d7e00b500a1
Implement a sanity and consistency check when doing "natural" mounts
Franz Glasner <fzglas.hg@dom66.de>
parents:
209
diff
changeset
|
466 fi |
|
4d7e00b500a1
Implement a sanity and consistency check when doing "natural" mounts
Franz Glasner <fzglas.hg@dom66.de>
parents:
209
diff
changeset
|
467 |
|
194
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
468 if [ "${_dry_run}" = "yes" ]; then |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
469 echo "Would mount ${_name} on ${_real_mp}" |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
470 else |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
471 mkdir -p "${_real_mp}" 1> /dev/null 2> /dev/null || \ |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
472 { echo "ERROR: cannot create mountpoint ${_real_mp}" >&2; return 1; } |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
473 echo "Mounting ${_name} on ${_real_mp}" |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
474 mount -t zfs "${_name}" "${_real_mp}" || return 1 |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
475 fi |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
476 ;; |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
477 *) |
|
206
92e5db34eb2b
Implent a "-O" flag for mounts that allows to mount also datasets with configured mountpoints outside their "natural" mountpoints within the dataset hierarchy
Franz Glasner <fzglas.hg@dom66.de>
parents:
205
diff
changeset
|
478 if [ "${_mount_outside}" = "yes" ]; then |
|
92e5db34eb2b
Implent a "-O" flag for mounts that allows to mount also datasets with configured mountpoints outside their "natural" mountpoints within the dataset hierarchy
Franz Glasner <fzglas.hg@dom66.de>
parents:
205
diff
changeset
|
479 if [ "${_dry_run}" = "yes" ]; then |
| 208 | 480 echo "Would mount ${_name} on configured ZFS dataset mountpoint ${_mp}" |
|
206
92e5db34eb2b
Implent a "-O" flag for mounts that allows to mount also datasets with configured mountpoints outside their "natural" mountpoints within the dataset hierarchy
Franz Glasner <fzglas.hg@dom66.de>
parents:
205
diff
changeset
|
481 else |
| 208 | 482 echo "Mounting ${_name} on configured ZFS dataset mountpoint ${_mp}" |
|
206
92e5db34eb2b
Implent a "-O" flag for mounts that allows to mount also datasets with configured mountpoints outside their "natural" mountpoints within the dataset hierarchy
Franz Glasner <fzglas.hg@dom66.de>
parents:
205
diff
changeset
|
483 zfs mount "${_name}" || return 1 |
|
92e5db34eb2b
Implent a "-O" flag for mounts that allows to mount also datasets with configured mountpoints outside their "natural" mountpoints within the dataset hierarchy
Franz Glasner <fzglas.hg@dom66.de>
parents:
205
diff
changeset
|
484 fi |
|
92e5db34eb2b
Implent a "-O" flag for mounts that allows to mount also datasets with configured mountpoints outside their "natural" mountpoints within the dataset hierarchy
Franz Glasner <fzglas.hg@dom66.de>
parents:
205
diff
changeset
|
485 else |
| 208 | 486 echo "Skipping ${_name} because its configured ZFS mountpoint is not relative to given root dataset" 2>&1 |
|
206
92e5db34eb2b
Implent a "-O" flag for mounts that allows to mount also datasets with configured mountpoints outside their "natural" mountpoints within the dataset hierarchy
Franz Glasner <fzglas.hg@dom66.de>
parents:
205
diff
changeset
|
487 fi |
|
194
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
488 ;; |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
489 esac |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
490 done |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
491 |
|
201
687210f46b8f
FIX: In mount and unmount commands handle pipeline return values correctly now
Franz Glasner <fzglas.hg@dom66.de>
parents:
200
diff
changeset
|
492 return 0 |
|
687210f46b8f
FIX: In mount and unmount commands handle pipeline return values correctly now
Franz Glasner <fzglas.hg@dom66.de>
parents:
200
diff
changeset
|
493 } |
|
194
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
494 } |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
495 |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
496 |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
497 # |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
498 # "umount" -- Recursively unmount ZFS datasets |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
499 # |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
500 # command_umount dataset |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
501 # |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
502 command_umount() { |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
503 local _dsname |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
504 local _name _mp _rest |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
505 local _rootds_mountpoint |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
506 |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
507 _dsname="${1-}" |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
508 [ -z "${_dsname}" ] && \ |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
509 { echo "ERROR: no dataset given" >&2; return 2; } |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
510 |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
511 # Just determine whether the given dataset name exists |
|
200
8f739dd15d7f
FIX: Use "||" instead of "|" when handling an error case
Franz Glasner <fzglas.hg@dom66.de>
parents:
199
diff
changeset
|
512 _rootds_mountpoint="$(zfs list -H -o mountpoint -t filesystem "${_dsname}")" || { echo "ERROR: dataset not found" >&2; return 1; } |
|
194
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
513 |
|
201
687210f46b8f
FIX: In mount and unmount commands handle pipeline return values correctly now
Franz Glasner <fzglas.hg@dom66.de>
parents:
200
diff
changeset
|
514 mount -t zfs -p \ |
|
687210f46b8f
FIX: In mount and unmount commands handle pipeline return values correctly now
Franz Glasner <fzglas.hg@dom66.de>
parents:
200
diff
changeset
|
515 | grep -E "^${_dsname}(/|\s)" \ |
|
687210f46b8f
FIX: In mount and unmount commands handle pipeline return values correctly now
Franz Glasner <fzglas.hg@dom66.de>
parents:
200
diff
changeset
|
516 | sort -n -r \ |
|
687210f46b8f
FIX: In mount and unmount commands handle pipeline return values correctly now
Franz Glasner <fzglas.hg@dom66.de>
parents:
200
diff
changeset
|
517 | { |
|
195
4a0cb73945a8
Use "read -r" for when mounting/unmounting
Franz Glasner <fzglas.hg@dom66.de>
parents:
194
diff
changeset
|
518 while IFS=' '$'\t' read -r _name _mp _rest ; do |
|
194
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
519 echo "Umounting ${_name} on ${_mp}" |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
520 umount "${_mp}" || return 1 |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
521 done |
|
201
687210f46b8f
FIX: In mount and unmount commands handle pipeline return values correctly now
Franz Glasner <fzglas.hg@dom66.de>
parents:
200
diff
changeset
|
522 return 0 |
|
687210f46b8f
FIX: In mount and unmount commands handle pipeline return values correctly now
Franz Glasner <fzglas.hg@dom66.de>
parents:
200
diff
changeset
|
523 } |
|
194
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
524 } |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
525 |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
526 |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
527 # |
| 73 | 528 # "privs" -- adjust privileges |
| 529 # | |
| 530 # To be used when all ZFS datasets are mounted. | |
| 531 # | |
| 532 command_privs() { | |
| 533 # mountpoint | |
|
162
9bd38c55a75c
When executing the "privs" command try to make <mountpoint>/var/empty writeable temporarily to set proper permissions and file flags
Franz Glasner <hg@dom66.de>
parents:
161
diff
changeset
|
534 local _mp _d _veds _get _vestatus |
| 73 | 535 |
| 536 _mp="$1" | |
| 537 if [ -z "${_mp}" ]; then | |
| 538 echo "ERROR: no mountpoint given" >&2 | |
| 539 return 2 | |
| 540 fi | |
| 541 if [ ! -d "${_mp}" ]; then | |
| 542 echo "ERROR: directory \`${_mp}' does not exist" >&2 | |
| 543 return 1 | |
| 544 fi | |
| 545 for _d in tmp var/tmp ; do | |
| 546 chmod 01777 "${_mp}/${_d}" | |
| 547 done | |
| 548 chown root:mail "${_mp}/var/mail" | |
| 549 chmod 0775 "${_mp}/var/mail" | |
|
162
9bd38c55a75c
When executing the "privs" command try to make <mountpoint>/var/empty writeable temporarily to set proper permissions and file flags
Franz Glasner <hg@dom66.de>
parents:
161
diff
changeset
|
550 |
|
9bd38c55a75c
When executing the "privs" command try to make <mountpoint>/var/empty writeable temporarily to set proper permissions and file flags
Franz Glasner <hg@dom66.de>
parents:
161
diff
changeset
|
551 # |
|
9bd38c55a75c
When executing the "privs" command try to make <mountpoint>/var/empty writeable temporarily to set proper permissions and file flags
Franz Glasner <hg@dom66.de>
parents:
161
diff
changeset
|
552 # Handle <mountpoint>/var/empty specially: |
|
9bd38c55a75c
When executing the "privs" command try to make <mountpoint>/var/empty writeable temporarily to set proper permissions and file flags
Franz Glasner <hg@dom66.de>
parents:
161
diff
changeset
|
553 # make it writeable temporarily if it is mounted read-only: |
|
9bd38c55a75c
When executing the "privs" command try to make <mountpoint>/var/empty writeable temporarily to set proper permissions and file flags
Franz Glasner <hg@dom66.de>
parents:
161
diff
changeset
|
554 # |
|
9bd38c55a75c
When executing the "privs" command try to make <mountpoint>/var/empty writeable temporarily to set proper permissions and file flags
Franz Glasner <hg@dom66.de>
parents:
161
diff
changeset
|
555 _vestatus="" |
|
196
a4fd3bcbbf1c
Use "mount -p" instead of "zfs mount" when determining devices for the real mountpoints
Franz Glasner <fzglas.hg@dom66.de>
parents:
195
diff
changeset
|
556 _veds="$(_get_dataset_for_varempty "${_mp}")" |
|
162
9bd38c55a75c
When executing the "privs" command try to make <mountpoint>/var/empty writeable temporarily to set proper permissions and file flags
Franz Glasner <hg@dom66.de>
parents:
161
diff
changeset
|
557 if [ $? -eq 0 ]; then |
|
203
eb95c986cc59
Use -t filesystem in all "zfs list" calls
Franz Glasner <fzglas.hg@dom66.de>
parents:
202
diff
changeset
|
558 _vestatus=$(zfs list -H -o readonly -t filesystem ${_veds} 2>/dev/null) || { echo "ERROR: cannot determine readonly status of ${_mp}/var/empty" >&2; return 1; } |
|
162
9bd38c55a75c
When executing the "privs" command try to make <mountpoint>/var/empty writeable temporarily to set proper permissions and file flags
Franz Glasner <hg@dom66.de>
parents:
161
diff
changeset
|
559 if [ "${_vestatus}" = "on" ]; then |
|
199
a8b6584d24ec
FIX: Do not suppress stderr messages from some "zfs set" calls.
Franz Glasner <fzglas.hg@dom66.de>
parents:
198
diff
changeset
|
560 zfs set readonly=off ${_veds} 1> /dev/null || { echo "ERROR: cannot reset readonly-status of ${_mp}/var/empty" >&2; return 1; } |
|
162
9bd38c55a75c
When executing the "privs" command try to make <mountpoint>/var/empty writeable temporarily to set proper permissions and file flags
Franz Glasner <hg@dom66.de>
parents:
161
diff
changeset
|
561 fi |
|
9bd38c55a75c
When executing the "privs" command try to make <mountpoint>/var/empty writeable temporarily to set proper permissions and file flags
Franz Glasner <hg@dom66.de>
parents:
161
diff
changeset
|
562 fi |
|
9bd38c55a75c
When executing the "privs" command try to make <mountpoint>/var/empty writeable temporarily to set proper permissions and file flags
Franz Glasner <hg@dom66.de>
parents:
161
diff
changeset
|
563 # Set the access rights and the file flags as given in mtree |
|
198
dd8a9bbdf8c0
Better error handling when changing privileges and flags of var/empty
Franz Glasner <fzglas.hg@dom66.de>
parents:
197
diff
changeset
|
564 chmod 0555 "${_mp}/var/empty" || { echo "WARNING: Cannot chmod on var/empty" >&2; } |
|
dd8a9bbdf8c0
Better error handling when changing privileges and flags of var/empty
Franz Glasner <fzglas.hg@dom66.de>
parents:
197
diff
changeset
|
565 chflags schg "${_mp}/var/empty" || { echo "WARNING: Cannot chflags on var/empty" >&2; } |
|
162
9bd38c55a75c
When executing the "privs" command try to make <mountpoint>/var/empty writeable temporarily to set proper permissions and file flags
Franz Glasner <hg@dom66.de>
parents:
161
diff
changeset
|
566 # Reset the read-only status of the mountpoint as it was before |
|
9bd38c55a75c
When executing the "privs" command try to make <mountpoint>/var/empty writeable temporarily to set proper permissions and file flags
Franz Glasner <hg@dom66.de>
parents:
161
diff
changeset
|
567 if [ "${_vestatus}" = "on" ]; then |
|
199
a8b6584d24ec
FIX: Do not suppress stderr messages from some "zfs set" calls.
Franz Glasner <fzglas.hg@dom66.de>
parents:
198
diff
changeset
|
568 zfs set readonly=on ${_veds} 1> /dev/null || { echo "ERROR: cannot reactivate readonly-status of ${_mp}/var/empty" >&2; return 1; } |
|
162
9bd38c55a75c
When executing the "privs" command try to make <mountpoint>/var/empty writeable temporarily to set proper permissions and file flags
Franz Glasner <hg@dom66.de>
parents:
161
diff
changeset
|
569 fi |
| 73 | 570 } |
|
72
929051be7845
Begin a simple (ZFS-related) jail setup tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
571 |
|
74
247d35f910ca
fjail datasets now recognized a "-u" command option to not automatically mount created datasets
Franz Glasner <hg@dom66.de>
parents:
73
diff
changeset
|
572 |
|
72
929051be7845
Begin a simple (ZFS-related) jail setup tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
573 # |
|
929051be7845
Begin a simple (ZFS-related) jail setup tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
574 # Global option handling |
|
929051be7845
Begin a simple (ZFS-related) jail setup tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
575 # |
|
81
124faa20ae80
Implemented a "-V" global option to print the program's name and version number to stdout
Franz Glasner <fzglas.hg@dom66.de>
parents:
80
diff
changeset
|
576 while getopts "Vh" _opt ; do |
|
72
929051be7845
Begin a simple (ZFS-related) jail setup tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
577 case ${_opt} in |
|
81
124faa20ae80
Implemented a "-V" global option to print the program's name and version number to stdout
Franz Glasner <fzglas.hg@dom66.de>
parents:
80
diff
changeset
|
578 V) |
|
144
6be3742d21f7
- FIX: Really print the version in check-ports
Franz Glasner <hg@dom66.de>
parents:
128
diff
changeset
|
579 printf 'fjail v%s (rv:%s)\n' "${VERSION}" '@@HGREVISION@@' |
|
81
124faa20ae80
Implemented a "-V" global option to print the program's name and version number to stdout
Franz Glasner <fzglas.hg@dom66.de>
parents:
80
diff
changeset
|
580 exit 0 |
|
124faa20ae80
Implemented a "-V" global option to print the program's name and version number to stdout
Franz Glasner <fzglas.hg@dom66.de>
parents:
80
diff
changeset
|
581 ;; |
|
72
929051be7845
Begin a simple (ZFS-related) jail setup tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
582 h) |
| 75 | 583 echo "${USAGE}" |
|
72
929051be7845
Begin a simple (ZFS-related) jail setup tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
584 exit 0 |
|
929051be7845
Begin a simple (ZFS-related) jail setup tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
585 ;; |
|
80
f5cf08e8d246
Handle the error case when option handling fails because of wrong case labels
Franz Glasner <fzglas.hg@dom66.de>
parents:
77
diff
changeset
|
586 \?) |
|
72
929051be7845
Begin a simple (ZFS-related) jail setup tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
587 exit 2; |
|
929051be7845
Begin a simple (ZFS-related) jail setup tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
588 ;; |
|
80
f5cf08e8d246
Handle the error case when option handling fails because of wrong case labels
Franz Glasner <fzglas.hg@dom66.de>
parents:
77
diff
changeset
|
589 *) |
|
f5cf08e8d246
Handle the error case when option handling fails because of wrong case labels
Franz Glasner <fzglas.hg@dom66.de>
parents:
77
diff
changeset
|
590 echo "ERROR: option handling failed" >&2 |
|
f5cf08e8d246
Handle the error case when option handling fails because of wrong case labels
Franz Glasner <fzglas.hg@dom66.de>
parents:
77
diff
changeset
|
591 exit 2 |
|
f5cf08e8d246
Handle the error case when option handling fails because of wrong case labels
Franz Glasner <fzglas.hg@dom66.de>
parents:
77
diff
changeset
|
592 ;; |
|
72
929051be7845
Begin a simple (ZFS-related) jail setup tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
593 esac |
|
929051be7845
Begin a simple (ZFS-related) jail setup tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
594 done |
|
929051be7845
Begin a simple (ZFS-related) jail setup tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
595 |
|
929051be7845
Begin a simple (ZFS-related) jail setup tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
596 # |
|
929051be7845
Begin a simple (ZFS-related) jail setup tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
597 # Reset the Shell's option handling system to prepare for handling |
|
929051be7845
Begin a simple (ZFS-related) jail setup tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
598 # command-local options. |
|
929051be7845
Begin a simple (ZFS-related) jail setup tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
599 # |
|
929051be7845
Begin a simple (ZFS-related) jail setup tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
600 shift $((OPTIND-1)) |
|
929051be7845
Begin a simple (ZFS-related) jail setup tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
601 OPTIND=1 |
|
929051be7845
Begin a simple (ZFS-related) jail setup tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
602 |
|
92
a8e76893140f
Extra error message if no command is given
Franz Glasner <fzglas.hg@dom66.de>
parents:
86
diff
changeset
|
603 test $# -gt 0 || { echo "ERROR: no command given" >&2; exit 2; } |
|
a8e76893140f
Extra error message if no command is given
Franz Glasner <fzglas.hg@dom66.de>
parents:
86
diff
changeset
|
604 |
|
72
929051be7845
Begin a simple (ZFS-related) jail setup tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
605 command="$1" |
|
929051be7845
Begin a simple (ZFS-related) jail setup tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
606 shift |
|
929051be7845
Begin a simple (ZFS-related) jail setup tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
607 |
|
929051be7845
Begin a simple (ZFS-related) jail setup tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
608 case "${command}" in |
| 73 | 609 datasets) |
| 610 command_datasets "$@" | |
| 611 ;; | |
|
194
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
612 mount) |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
613 command_mount "$@" |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
614 ;; |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
615 umount|unmount) |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
616 command_umount "$@" |
|
379d3178f3ce
mount and umount support for ZFS datasets: recursively mount and unmount
Franz Glasner <fzglas.hg@dom66.de>
parents:
193
diff
changeset
|
617 ;; |
| 73 | 618 privs) |
| 619 command_privs "$@" | |
| 620 ;; | |
|
76
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
621 populate) |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
622 command_populate "$@" |
|
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
623 ;; |
|
77
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
624 copy) |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
625 command_copy "$@" |
|
5aab3a28895f
Implemented a "copy" command to employ zfs send/receive for recursively copying jail datasets
Franz Glasner <hg@dom66.de>
parents:
76
diff
changeset
|
626 ;; |
|
72
929051be7845
Begin a simple (ZFS-related) jail setup tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
627 *) |
|
76
fea2ef3ff89a
Populate an existing directory tree with the contents of base.txz
Franz Glasner <hg@dom66.de>
parents:
75
diff
changeset
|
628 echo "ERROR: unknown command \`${command}'" >&2 |
|
72
929051be7845
Begin a simple (ZFS-related) jail setup tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
629 exit 2 |
|
929051be7845
Begin a simple (ZFS-related) jail setup tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
630 ;; |
|
929051be7845
Begin a simple (ZFS-related) jail setup tool
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
631 esac |
