Mercurial > hgrepos > FreeBSD > ports > sysutils > local-bsdtools
annotate sbin/ftjail @ 293:73ac6bec36fe
Man page for "ftjail copy-jail"
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Sun, 18 Sep 2022 14:47:41 +0200 |
| parents | d40e6e40c315 |
| children | a452ace0175a |
| rev | line source |
|---|---|
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1 #!/bin/sh |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
2 # -*- indent-tabs-mode: nil; -*- |
|
274
570363928b13
Convert the "module" doc-string to a `#:'-style comment
Franz Glasner <fzglas.hg@dom66.de>
parents:
270
diff
changeset
|
3 #: |
|
570363928b13
Convert the "module" doc-string to a `#:'-style comment
Franz Glasner <fzglas.hg@dom66.de>
parents:
270
diff
changeset
|
4 #: A very minimal BSD Thin Jail management tool. |
|
570363928b13
Convert the "module" doc-string to a `#:'-style comment
Franz Glasner <fzglas.hg@dom66.de>
parents:
270
diff
changeset
|
5 #: |
|
570363928b13
Convert the "module" doc-string to a `#:'-style comment
Franz Glasner <fzglas.hg@dom66.de>
parents:
270
diff
changeset
|
6 #: :Author: Franz Glasner |
|
570363928b13
Convert the "module" doc-string to a `#:'-style comment
Franz Glasner <fzglas.hg@dom66.de>
parents:
270
diff
changeset
|
7 #: :Copyright: (c) 2022 Franz Glasner. |
|
570363928b13
Convert the "module" doc-string to a `#:'-style comment
Franz Glasner <fzglas.hg@dom66.de>
parents:
270
diff
changeset
|
8 #: All rights reserved. |
|
570363928b13
Convert the "module" doc-string to a `#:'-style comment
Franz Glasner <fzglas.hg@dom66.de>
parents:
270
diff
changeset
|
9 #: :License: BSD 3-Clause "New" or "Revised" License. |
|
570363928b13
Convert the "module" doc-string to a `#:'-style comment
Franz Glasner <fzglas.hg@dom66.de>
parents:
270
diff
changeset
|
10 #: See LICENSE for details. |
|
570363928b13
Convert the "module" doc-string to a `#:'-style comment
Franz Glasner <fzglas.hg@dom66.de>
parents:
270
diff
changeset
|
11 #: If you cannot find LICENSE see |
|
570363928b13
Convert the "module" doc-string to a `#:'-style comment
Franz Glasner <fzglas.hg@dom66.de>
parents:
270
diff
changeset
|
12 #: <https://opensource.org/licenses/BSD-3-Clause> |
|
570363928b13
Convert the "module" doc-string to a `#:'-style comment
Franz Glasner <fzglas.hg@dom66.de>
parents:
270
diff
changeset
|
13 #: :ID: @(#)@@PKGORIGIN@@ $HGid$ |
|
570363928b13
Convert the "module" doc-string to a `#:'-style comment
Franz Glasner <fzglas.hg@dom66.de>
parents:
270
diff
changeset
|
14 #: |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
15 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
16 set -eu |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
17 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
18 VERSION="@@VERSION@@" |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
19 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
20 USAGE=' |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
21 USAGE: ftjail [ OPTIONS ] COMMAND [ COMMAND OPTIONS ] [ ARG ... ] |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
22 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
23 OPTIONS: |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
24 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
25 -V Print the program name and version number to stdout and exit |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
26 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
27 -h Print this help message to stdout and exit |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
28 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
29 COMMANDS: |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
30 |
|
235
85aea8ca1ab8
Some work on datasets-tmpl
Franz Glasner <fzglas.hg@dom66.de>
parents:
234
diff
changeset
|
31 datasets-tmpl [OPTIONS] PARENT-BASE PARENT-SKELETON NAME |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
32 |
|
235
85aea8ca1ab8
Some work on datasets-tmpl
Franz Glasner <fzglas.hg@dom66.de>
parents:
234
diff
changeset
|
33 Create the ZFS template datasets, i.e. the ro base and the rw |
|
85aea8ca1ab8
Some work on datasets-tmpl
Franz Glasner <fzglas.hg@dom66.de>
parents:
234
diff
changeset
|
34 skeleton to be used within thin jails jails |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
35 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
36 PARENT-BASE and PARENT-SKELETON must exist already and NAME must |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
37 not exist. |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
38 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
39 The datasets will not be mounted. |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
40 |
|
253
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
41 -L Create dataset properties optimized for employing a |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
42 "skeleton" subdirectory |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
43 -P Create dataset properties optimized for direct mounts |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
44 of skeleton children over an already mounted base |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
45 |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
46 mount-tmpl [ OPTIONS ] BASE-RO SKELETON-RW MOUNTPOINT |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
47 |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
48 Canonically mount the RO base and the RW skeleton into MOUNTPOINT and |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
49 MOUNTPOINT/skeleton |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
50 |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
51 -L Mount the skeleton into a "skeleton" subdirectory |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
52 -P Mount the skeleton directly over the base |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
53 -n Do not really mount but show what would be mounted where |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
54 -u Alias of -n |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
55 |
| 243 | 56 umount-tmpl BASE-RO SKELETON-RW |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
57 |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
58 Unmount mounted datasets BASE-RO and SKELETON-RW |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
59 |
|
242
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
60 interlink-tmpl MOUNTPOINT |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
61 |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
62 Create symbolic links between the RO base and the RW skeleton. |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
63 Base and skeleton must be canonically mounted already. |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
64 |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
65 populate [ OPTIONS ] MOUNTPOINT BASETXZ |
|
242
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
66 |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
67 Populate the directory in MOUNTPOINT with the base system in BASETXZ |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
68 |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
69 -L Populate having a "skeleton" subdirectory within the mountpoint |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
70 -P Populate directly into the mountpoint |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
71 |
|
251
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
72 snapshot-tmpl BASE-RO SKELETON-RW SNAPSHOT-NAME |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
73 |
|
293
73ac6bec36fe
Man page for "ftjail copy-jail"
Franz Glasner <fzglas.hg@dom66.de>
parents:
292
diff
changeset
|
74 copy-skel [-A] [-L] [-M MOUNTPOINT] [-P] [-u] SOURCE-DS SNAPSHOT-NAME TARGET-DS |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
75 |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
76 ENVIRONMENT: |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
77 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
78 All environment variables that affect "zfs" are effective also. |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
79 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
80 DESCRIPTION: |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
81 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
82 All commands with the exception of "populate" require ZFS as |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
83 filesystem. |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
84 ' |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
85 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
86 # Reset to standard umask |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
87 umask 0022 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
88 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
89 |
|
278
a6c9eb25ae81
Convert a function to have comment-form docs
Franz Glasner <fzglas.hg@dom66.de>
parents:
277
diff
changeset
|
90 #: |
|
a6c9eb25ae81
Convert a function to have comment-form docs
Franz Glasner <fzglas.hg@dom66.de>
parents:
277
diff
changeset
|
91 #: Ensure that no command line options are given |
|
a6c9eb25ae81
Convert a function to have comment-form docs
Franz Glasner <fzglas.hg@dom66.de>
parents:
277
diff
changeset
|
92 #: |
|
a6c9eb25ae81
Convert a function to have comment-form docs
Franz Glasner <fzglas.hg@dom66.de>
parents:
277
diff
changeset
|
93 #: Args: |
|
a6c9eb25ae81
Convert a function to have comment-form docs
Franz Glasner <fzglas.hg@dom66.de>
parents:
277
diff
changeset
|
94 #: $@: |
|
a6c9eb25ae81
Convert a function to have comment-form docs
Franz Glasner <fzglas.hg@dom66.de>
parents:
277
diff
changeset
|
95 #: |
|
a6c9eb25ae81
Convert a function to have comment-form docs
Franz Glasner <fzglas.hg@dom66.de>
parents:
277
diff
changeset
|
96 #: Exit: |
|
a6c9eb25ae81
Convert a function to have comment-form docs
Franz Glasner <fzglas.hg@dom66.de>
parents:
277
diff
changeset
|
97 #: 2: If formally `getopts` finds options in "$@" |
|
a6c9eb25ae81
Convert a function to have comment-form docs
Franz Glasner <fzglas.hg@dom66.de>
parents:
277
diff
changeset
|
98 #: |
|
a6c9eb25ae81
Convert a function to have comment-form docs
Franz Glasner <fzglas.hg@dom66.de>
parents:
277
diff
changeset
|
99 #: Return: |
|
a6c9eb25ae81
Convert a function to have comment-form docs
Franz Glasner <fzglas.hg@dom66.de>
parents:
277
diff
changeset
|
100 #: - 0 |
|
a6c9eb25ae81
Convert a function to have comment-form docs
Franz Glasner <fzglas.hg@dom66.de>
parents:
277
diff
changeset
|
101 #: |
|
245
61861d36758c
Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents:
244
diff
changeset
|
102 _ensure_no_options() { |
|
61861d36758c
Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents:
244
diff
changeset
|
103 local _opt |
|
61861d36758c
Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents:
244
diff
changeset
|
104 |
|
61861d36758c
Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents:
244
diff
changeset
|
105 while getopts ":" _opt ; do |
|
61861d36758c
Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents:
244
diff
changeset
|
106 [ "${_opt}" = '?' ] && { echo "ERROR: no option allowed" 1>&2; exit 2; } |
|
248
0b5dbf394aa2
FIX: echo 2>&1 is not intended: use 1>&2 instead
Franz Glasner <fzglas.hg@dom66.de>
parents:
247
diff
changeset
|
107 done |
|
277
0da26750b6fb
FIX: Explicitely return 0 in the non-error case becsue getopts sometime determines the result value instead
Franz Glasner <fzglas.hg@dom66.de>
parents:
274
diff
changeset
|
108 return 0 |
|
245
61861d36758c
Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents:
244
diff
changeset
|
109 } |
|
61861d36758c
Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents:
244
diff
changeset
|
110 |
|
61861d36758c
Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents:
244
diff
changeset
|
111 |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
112 _get_dataset_for_mountpoint() { |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
113 : 'Use `mount -t zfs -p` to determine the ZFS dataset for a given mountpoint. |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
114 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
115 ' |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
116 local _mountpoint |
|
248
0b5dbf394aa2
FIX: echo 2>&1 is not intended: use 1>&2 instead
Franz Glasner <fzglas.hg@dom66.de>
parents:
247
diff
changeset
|
117 |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
118 local _ds _mount _rest |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
119 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
120 _mountpoint="$1" |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
121 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
122 mount -t zfs -p \ |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
123 | { |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
124 while IFS=' '$'\t' read -r _ds _mount _rest ; do |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
125 if [ "$_mount" = "$_mountpoint" ]; then |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
126 echo "${_ds}" |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
127 return 0 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
128 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
129 done |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
130 return 1 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
131 } |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
132 } |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
133 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
134 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
135 # |
|
236
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
136 # PARENT-BASE NAME DRY-RUN |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
137 # |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
138 command_datasets_tmpl_base() { |
|
246
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
139 local _p_base _name |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
140 |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
141 local _opt_dry_run |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
142 |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
143 local _ds_base _opt |
|
236
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
144 |
|
246
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
145 _opt_dry_run="" |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
146 while getopts "nu" _opt ; do |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
147 case ${_opt} in |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
148 n|u) |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
149 _opt_dry_run="yes" |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
150 ;; |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
151 \?|:) |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
152 return 2; |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
153 ;; |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
154 esac |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
155 done |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
156 shift $((OPTIND-1)) |
|
248
0b5dbf394aa2
FIX: echo 2>&1 is not intended: use 1>&2 instead
Franz Glasner <fzglas.hg@dom66.de>
parents:
247
diff
changeset
|
157 OPTIND=1 |
|
245
61861d36758c
Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents:
244
diff
changeset
|
158 |
|
236
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
159 _p_base="${1-}" |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
160 _name="${2-}" |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
161 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
162 if [ -z "${_p_base}" ]; then |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
163 echo "ERROR: no parent dataset for base given" >&2 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
164 return 2 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
165 fi |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
166 if [ -z "${_name}" ]; then |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
167 echo "ERROR: no name given" >&2 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
168 return 2 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
169 fi |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
170 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
171 if ! zfs list -H -o mountpoint -t filesystem "${_p_base}" >/dev/null 2>/dev/null; then |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
172 echo "ERROR: parent dataset \`${_p_base}' does not exist" >&2 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
173 return 1 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
174 fi |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
175 _ds_base="${_p_base}/${_name}" |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
176 if zfs list -H -o mountpoint -t filesystem "${_ds_base}" >/dev/null 2>/dev/null; then |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
177 echo "ERROR: dataset \`${_ds_base}' does already exist" >&2 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
178 return 1 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
179 fi |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
180 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
181 |
|
246
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
182 [ "${_opt_dry_run}" = "yes" ] && return 0 |
|
236
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
183 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
184 echo "Creating RO base datasets in:" |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
185 printf "\\t%s\\n" "${_ds_base}" |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
186 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
187 zfs create -u -o canmount=noauto "${_ds_base}" |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
188 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
189 } |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
190 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
191 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
192 # |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
193 # SKELETON NAME DRY-RUN |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
194 # |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
195 command_datasets_tmpl_skel() { |
|
246
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
196 local _p_base _name |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
197 |
|
253
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
198 local _opt_dry_run _opt_symlink |
|
246
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
199 |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
200 local _ds_skel _child _child_zfsopts _opt |
|
236
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
201 |
|
246
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
202 _opt_dry_run="" |
|
253
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
203 _opt_symlink="" |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
204 |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
205 while getopts "LPnu" _opt ; do |
|
246
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
206 case ${_opt} in |
|
253
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
207 L) |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
208 _opt_symlink="yes" |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
209 ;; |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
210 P) |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
211 _opt_symlink="no" |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
212 ;; |
|
246
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
213 n|u) |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
214 _opt_dry_run="yes" |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
215 ;; |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
216 \?|:) |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
217 return 2; |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
218 ;; |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
219 esac |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
220 done |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
221 shift $((OPTIND-1)) |
|
248
0b5dbf394aa2
FIX: echo 2>&1 is not intended: use 1>&2 instead
Franz Glasner <fzglas.hg@dom66.de>
parents:
247
diff
changeset
|
222 OPTIND=1 |
|
245
61861d36758c
Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents:
244
diff
changeset
|
223 |
|
253
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
224 [ -z "${_opt_symlink}" ] && { echo "ERROR: -L or -P must be given" 1>&2; return 2; } |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
225 |
|
236
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
226 _p_skel="${1-}" |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
227 _name="${2-}" |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
228 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
229 if [ -z "${_p_skel}" ]; then |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
230 echo "ERROR: no parent dataset for skeleton given" >&2 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
231 return 2 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
232 fi |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
233 if [ -z "${_name}" ]; then |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
234 echo "ERROR: no name given" >&2 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
235 return 2 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
236 fi |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
237 |
|
238
9b0d83703a28
FIX: Bogus keyword shortcut error: wrong copy-paste text in script
Franz Glasner <fzglas.hg@dom66.de>
parents:
237
diff
changeset
|
238 if ! zfs list -H -o mountpoint -t filesystem "${_p_skel}" >/dev/null 2>/dev/null; then |
|
236
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
239 echo "ERROR: parent dataset \`${_p_skel}' does not exist" >&2 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
240 return 1 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
241 fi |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
242 _ds_skel="${_p_skel}/${_name}" |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
243 if zfs list -H -o mountpoint -t filesystem "${_ds_skel}" >/dev/null 2>/dev/null; then |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
244 echo "ERROR: dataset \`${_ds_skel}' does already exist" >&2 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
245 return 1 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
246 fi |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
247 |
|
246
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
248 [ "${_opt_dry_run}" = "yes" ] && return 0 |
|
236
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
249 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
250 echo "Creating RW skeleton datasets in:" |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
251 printf "\\t%s\\n" "${_ds_skel}" |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
252 |
|
253
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
253 if [ "${_opt_symlink}" = "yes" ]; then |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
254 # In this case the skeleton root needs to be mounted into a "skeleton" subdir |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
255 zfs create -u -o canmount=noauto "${_ds_skel}" |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
256 else |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
257 # Only children are to be mounted |
|
253
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
258 zfs create -u -o canmount=off "${_ds_skel}" |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
259 fi |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
260 # "usr" is only a container holding "usr/local" |
|
236
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
261 zfs create -u -o canmount=off "${_ds_skel}/usr" |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
262 # |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
263 # XXX FIXME: What about usr/ports/distfiles |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
264 # We typically want to use binary packages. |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
265 # And if we use ports they are not in usr/ports typically. |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
266 # |
|
239
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
267 #zfs create -u -o canmount=off "${_ds_skel}/usr/ports" |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
268 # |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
269 # XXX FIXME: What about home |
|
237
a38906739422
Drop a note about /home in skel-rw
Franz Glasner <hg@dom66.de>
parents:
236
diff
changeset
|
270 # |
|
239
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
271 for _child in etc home root tmp usr/local var ; do |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
272 case "${_child}" in |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
273 "tmp"|"var/tmp") |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
274 _child_zfsopts="-o sync=disabled -o setuid=off" |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
275 ;; |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
276 "home") |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
277 _child_zfsopts="-o setuid=off" |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
278 ;; |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
279 "usr/ports/distfiles") |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
280 _child_zfsopts="-o exec=off -o setuid=off -o compression=off -o primarycache=metadata" |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
281 ;; |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
282 "var/mail") |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
283 _child_zfsopts="-o atime=on -o exec=off -o setuid=off" |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
284 ;; |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
285 *) |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
286 _child_zfsopts="" |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
287 ;; |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
288 esac |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
289 zfs create -u -o canmount=noauto ${_child_zfsopts} "${_ds_skel}/${_child}" |
|
236
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
290 done |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
291 } |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
292 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
293 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
294 # |
|
235
85aea8ca1ab8
Some work on datasets-tmpl
Franz Glasner <fzglas.hg@dom66.de>
parents:
234
diff
changeset
|
295 # "datasets-tmpl" -- create the ZFS dataset tree |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
296 # |
|
234
8682cfa74f6a
Minimum work on creating datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
233
diff
changeset
|
297 # PARENT-BASE PARENT-SKELETON NAME |
|
8682cfa74f6a
Minimum work on creating datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
233
diff
changeset
|
298 # |
|
235
85aea8ca1ab8
Some work on datasets-tmpl
Franz Glasner <fzglas.hg@dom66.de>
parents:
234
diff
changeset
|
299 command_datasets_tmpl() { |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
300 # parent ZFS dataset -- child ZFS dataset name |
|
234
8682cfa74f6a
Minimum work on creating datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
233
diff
changeset
|
301 local _p_base _p_skel _name |
|
253
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
302 local _opt_symlink |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
303 |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
304 local _ds_base _ds_skel _opt |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
305 |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
306 _opt_symlink="" |
|
234
8682cfa74f6a
Minimum work on creating datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
233
diff
changeset
|
307 |
|
253
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
308 while getopts "LP" _opt ; do |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
309 case ${_opt} in |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
310 L) |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
311 _opt_symlink="-L" |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
312 ;; |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
313 P) |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
314 _opt_symlink="-P" |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
315 ;; |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
316 \?) |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
317 return 2; |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
318 ;; |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
319 esac |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
320 done |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
321 shift $((OPTIND-1)) |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
322 OPTIND=1 |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
323 |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
324 [ -z "${_opt_symlink}" ] && { echo "ERROR: -L or -P must be given" 1>&2; return 2; } |
|
245
61861d36758c
Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents:
244
diff
changeset
|
325 |
|
236
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
326 _p_base="${1-}" |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
327 _p_skel="${2-}" |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
328 _name="${3-}" |
|
234
8682cfa74f6a
Minimum work on creating datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
233
diff
changeset
|
329 |
|
236
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
330 # Check preconditions |
|
246
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
331 command_datasets_tmpl_base -n "${_p_base}" "${_name}" || return |
|
253
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
332 command_datasets_tmpl_skel -n ${_opt_symlink} "${_p_skel}" "${_name}" || return |
|
236
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
333 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
334 # Really do it |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
335 command_datasets_tmpl_base "${_p_base}" "${_name}" || return |
|
253
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
336 command_datasets_tmpl_skel ${_opt_symlink} "${_p_skel}" "${_name}" || return |
|
235
85aea8ca1ab8
Some work on datasets-tmpl
Franz Glasner <fzglas.hg@dom66.de>
parents:
234
diff
changeset
|
337 return 0 |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
338 } |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
339 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
340 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
341 # |
|
242
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
342 # "populate-tmpl" -- populate the datasets with content from a FreeBSD base.txz |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
343 # |
|
242
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
344 # command_populate_tmpl mountpoint basetxz |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
345 # |
|
242
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
346 command_populate_tmpl() { |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
347 # MOUNTPOINT -- base.txz |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
348 local _mp _basetxz |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
349 local _opt_symlink |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
350 |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
351 local _opt _dir |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
352 |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
353 _opt_symlink="" |
|
242
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
354 |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
355 while getopts "LP" _opt ; do |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
356 case ${_opt} in |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
357 L) |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
358 _opt_symlink="yes" |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
359 ;; |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
360 P) |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
361 _opt_symlink="no" |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
362 ;; |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
363 \?) |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
364 return 2; |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
365 ;; |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
366 esac |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
367 done |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
368 shift $((OPTIND-1)) |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
369 OPTIND=1 |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
370 |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
371 [ -z "${_opt_symlink}" ] && { echo "ERROR: -L or -P must be given" 1>&2; return 2; } |
|
245
61861d36758c
Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents:
244
diff
changeset
|
372 |
|
242
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
373 _mp="${1-}" |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
374 _basetxz="${2-}" |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
375 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
376 if [ -z "${_mp}" ]; then |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
377 echo "ERROR: no mountpoint given" >&2 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
378 return 2 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
379 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
380 if [ -z "${_basetxz}" ]; then |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
381 echo "ERROR: no base.txz given" >&2 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
382 return 2 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
383 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
384 if [ ! -d "${_mp}" ]; then |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
385 echo "ERROR: mountpoint \`${_mp}' does not exist" >&2 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
386 return 1 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
387 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
388 if [ ! -r "${_basetxz}" ]; then |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
389 echo "ERROR: file \`${_basetxz}' is not readable" >&2 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
390 return 1 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
391 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
392 |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
393 if [ "${_opt_symlink}" = "yes" ]; then |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
394 echo "Extracting RO base ..." |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
395 tar -C "${_mp}" --exclude=./etc --exclude=./root --exclude=./tmp --exclude=./usr/local --exclude=./var --no-safe-writes -xJp -f "${_basetxz}" || return |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
396 # "home" is not part of base |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
397 for _dir in etc root tmp usr/local var ; do |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
398 echo "Extracting RW skeleton: ${_dir} ..." |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
399 tar -C "${_mp}/skeleton" --include="./${_dir}" --exclude=./root/.cshrc --exclude=./root/.profile -xJp -f "${_basetxz}" || return |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
400 done |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
401 # In the original archive they are archived as hardlinks: make proper symlinks here |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
402 (cd "${_mp}/skeleton/root" && ln -s ../../.profile .profile) || return |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
403 (cd "${_mp}/skeleton/root" && ln -s ../../.cshrc .cshrc) || return |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
404 else |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
405 echo "Extracting base ..." |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
406 tar -C "${_mp}" --exclude=./root/.cshrc --exclude=./root/.profile --no-safe-writes -xJp -f "${_basetxz}" || return |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
407 # In the original archive they are archived as hardlinks: make proper symlinks here |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
408 (cd "${_mp}/root" && ln -s ../.profile .profile) || return |
|
251
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
409 (cd "${_mp}/root" && ln -s ../.cshrc .cshrc) || return |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
410 fi |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
411 |
|
242
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
412 find "${_mp}/boot" -type f -delete || true |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
413 } |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
414 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
415 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
416 # |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
417 # _do_mount dataset mountpoint dry-run mount-natural childs-only |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
418 # |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
419 _do_mount() { |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
420 local _dsname _mountpoint _dry_run _mount_natural _childs_only |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
421 |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
422 local _name _mp _canmount _mounted |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
423 local _rootds_mountpoint _relative_mp _real_mp |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
424 |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
425 _dsname="${1}" |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
426 _mountpoint="${2}" |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
427 _dry_run="${3}" |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
428 _mount_natural="${4}" |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
429 _childs_only="${5}" |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
430 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
431 if [ -z "${_dsname}" ]; then |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
432 echo "ERROR: no dataset given" >&2 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
433 return 2 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
434 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
435 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
436 _rootds_mountpoint="$(zfs list -H -o mountpoint -t filesystem "${_dsname}")" || \ |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
437 { echo "ERROR: root dataset \`${_dsname}' does not exist" >&2; return 1; } |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
438 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
439 if [ -z "${_mountpoint}" ]; then |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
440 if [ "${_mount_natural}" = "yes" ]; then |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
441 _mountpoint="${_rootds_mountpoint}" |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
442 else |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
443 echo "ERROR: no mountpoint given" >&2 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
444 return 2 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
445 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
446 else |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
447 if [ "${_mount_natural}" = "yes" ]; then |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
448 echo "ERROR: Cannot have a custom mountpoint when mount-natural is activated" >&2 |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
449 return 2 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
450 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
451 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
452 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
453 # Eventually remove a trailing slash |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
454 _mountpoint="${_mountpoint%/}" |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
455 if [ -z "${_mountpoint}" ]; then |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
456 echo "ERROR: would mount over the root filesystem" >&2 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
457 return 1 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
458 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
459 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
460 zfs list -H -o name,mountpoint,canmount,mounted -s mountpoint -t filesystem -r "${_dsname}" \ |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
461 | { |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
462 while IFS=$'\t' read -r _name _mp _canmount _mounted ; do |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
463 # Skip filesystems that are already mounted |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
464 [ "${_mounted}" = "yes" ] && continue |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
465 # Skip filesystems that must not be mounted |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
466 [ "${_canmount}" = "off" ] && continue |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
467 case "${_mp}" in |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
468 "none"|"legacy") |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
469 # Do nothing for filesystem with unset or legacy mountpoints |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
470 ;; |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
471 "${_rootds_mountpoint}"|"${_rootds_mountpoint}/"*) |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
472 # |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
473 # Handle only mountpoints that have a mountpoint below |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
474 # the parent datasets mountpoint |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
475 # |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
476 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
477 # Determine the mountpoint relative to the parent mountpoint |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
478 _relative_mp="${_mp#${_rootds_mountpoint}}" |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
479 # Eventually remove a trailing slash |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
480 _relative_mp="${_relative_mp%/}" |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
481 # The real effective full mountpoint |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
482 _real_mp="${_mountpoint}${_relative_mp}" |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
483 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
484 # |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
485 # Consistency and sanity check: computed real mountpoint must |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
486 # be equal to the configured mountpoint when no custom mountpoint |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
487 # is given. |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
488 # |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
489 if [ "${_mount_natural}" = "yes" ]; then |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
490 if [ "${_real_mp}" != "${_mp}" ]; then |
|
248
0b5dbf394aa2
FIX: echo 2>&1 is not intended: use 1>&2 instead
Franz Glasner <fzglas.hg@dom66.de>
parents:
247
diff
changeset
|
491 echo "ERROR: mountpoint mismatch" 1>&2 |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
492 return 1 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
493 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
494 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
495 |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
496 if [ \( "${_childs_only}" = "yes" \) -a \( "${_name}" = "${_dsname}" \) ]; then |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
497 echo "Skipping ${_name} because mounting childs only" 1>&2 |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
498 else |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
499 if [ "${_dry_run}" = "yes" ]; then |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
500 echo "Would mount ${_name} on ${_real_mp}" |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
501 else |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
502 mkdir -p "${_real_mp}" 1> /dev/null 2> /dev/null || \ |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
503 { echo "ERROR: cannot create mountpoint ${_real_mp}" 1>&2; return 1; } |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
504 echo "Mounting ${_name} on ${_real_mp}" |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
505 mount -t zfs "${_name}" "${_real_mp}" || return 1 |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
506 fi |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
507 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
508 ;; |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
509 *) |
|
248
0b5dbf394aa2
FIX: echo 2>&1 is not intended: use 1>&2 instead
Franz Glasner <fzglas.hg@dom66.de>
parents:
247
diff
changeset
|
510 echo "Skipping ${_name} because its configured ZFS mountpoint is not relative to given root dataset" 1>&2 |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
511 ;; |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
512 esac |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
513 done |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
514 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
515 return 0 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
516 } |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
517 } |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
518 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
519 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
520 # |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
521 # "mount-tmpl" -- recursively mount a base and skeleton datasets including subordinate datasets |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
522 # |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
523 # command_mount_tmpl base-ro skeleton-rw mountpoint |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
524 # |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
525 command_mount_tmpl() { |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
526 local _ds_base _ds_skel _mountpoint |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
527 local _opt_dry_run _opt_symlink |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
528 |
|
246
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
529 local _opt |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
530 |
|
244
6e632f459818
Rename "_dry_run" to the more proper "_opt_dry_run"
Franz Glasner <fzglas.hg@dom66.de>
parents:
243
diff
changeset
|
531 _opt_dry_run="" |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
532 _opt_symlink="" |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
533 |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
534 while getopts "LPnu" _opt ; do |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
535 case ${_opt} in |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
536 L) |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
537 _opt_symlink="yes" |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
538 ;; |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
539 P) |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
540 _opt_symlink="no" |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
541 ;; |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
542 n|u) |
|
244
6e632f459818
Rename "_dry_run" to the more proper "_opt_dry_run"
Franz Glasner <fzglas.hg@dom66.de>
parents:
243
diff
changeset
|
543 _opt_dry_run="yes" |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
544 ;; |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
545 \?|:) |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
546 return 2; |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
547 ;; |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
548 esac |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
549 done |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
550 shift $((OPTIND-1)) |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
551 OPTIND=1 |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
552 |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
553 [ -z "${_opt_symlink}" ] && { echo "ERROR: -L or -P must be given" 1>&2; return 2; } |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
554 |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
555 _ds_base="${1-}" |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
556 _ds_skel="${2-}" |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
557 _mountpoint="${3-}" |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
558 |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
559 _do_mount "${_ds_base}" "${_mountpoint}" "${_opt_dry_run}" "" "" || return |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
560 if [ "${_opt_symlink}" = "yes" ]; then |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
561 if [ "${_opt_dry_run}" != "yes" ]; then |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
562 if [ ! -d "${_mountpoint}/skeleton" ]; then |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
563 mkdir "${_mountpoint}/skeleton" || return |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
564 fi |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
565 fi |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
566 _do_mount "${_ds_skel}" "${_mountpoint}/skeleton" "${_opt_dry_run}" "" "" || return |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
567 else |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
568 _do_mount "${_ds_skel}" "${_mountpoint}" "${_opt_dry_run}" "" "yes" || return |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
569 fi |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
570 |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
571 return 0 |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
572 } |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
573 |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
574 |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
575 # |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
576 # _do_umount dataset |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
577 # |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
578 _do_umount() { |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
579 local _dsname |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
580 |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
581 local _name _mp _rest |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
582 local _rootds_mountpoint |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
583 |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
584 _dsname="${1}" |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
585 [ -z "${_dsname}" ] && { echo "ERROR: no dataset given" >&2; return 2; } |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
586 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
587 # Just determine whether the given dataset name exists |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
588 _rootds_mountpoint="$(zfs list -H -o mountpoint -t filesystem "${_dsname}")" || \ |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
589 { echo "ERROR: dataset not found" >&2; return 1; } |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
590 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
591 mount -t zfs -p \ |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
592 | grep -E "^${_dsname}(/|\s)" \ |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
593 | sort -n -r \ |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
594 | { |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
595 while IFS=' '$'\t' read -r _name _mp _rest ; do |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
596 echo "Umounting ${_name} on ${_mp}" |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
597 umount "${_mp}" || return 1 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
598 done |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
599 return 0 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
600 } |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
601 } |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
602 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
603 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
604 # |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
605 # "umount-tmpl" -- umount skeleton and base datasets |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
606 # |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
607 # command_umount_tmpl ds-base ds-skeleton |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
608 # |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
609 command_umount_tmpl() { |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
610 local _ds_base _ds_skel |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
611 |
|
245
61861d36758c
Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents:
244
diff
changeset
|
612 _ensure_no_options "$@" |
|
61861d36758c
Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents:
244
diff
changeset
|
613 |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
614 _ds_base="${1-}" |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
615 _ds_skel="${2-}" |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
616 |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
617 [ -z "${_ds_base}" ] && { echo "ERROR: no RO base dataset given" >&2; return 2; } |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
618 [ -z "${_ds_skel}" ] && { echo "ERROR: no RW skeleton dataset given" >&2; return 2; } |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
619 |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
620 _do_umount "${_ds_skel}" || return |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
621 _do_umount "${_ds_base}" || return |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
622 |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
623 return 0 |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
624 } |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
625 |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
626 |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
627 # |
|
242
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
628 # "interlink-tmpl" -- create links from base to skeleton |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
629 # |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
630 # command_interlink_tmpl mountpint |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
631 # |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
632 command_interlink_tmpl() { |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
633 local _mountpoint |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
634 |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
635 local _dir _dirpart _basepart |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
636 |
|
245
61861d36758c
Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents:
244
diff
changeset
|
637 _ensure_no_options "$@" |
|
61861d36758c
Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents:
244
diff
changeset
|
638 |
|
242
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
639 _mountpoint="${1-}" |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
640 |
|
248
0b5dbf394aa2
FIX: echo 2>&1 is not intended: use 1>&2 instead
Franz Glasner <fzglas.hg@dom66.de>
parents:
247
diff
changeset
|
641 [ -z "${_mountpoint}" ] && { echo "ERROR: no mountpoint given" 1>&2; return 2; } |
|
0b5dbf394aa2
FIX: echo 2>&1 is not intended: use 1>&2 instead
Franz Glasner <fzglas.hg@dom66.de>
parents:
247
diff
changeset
|
642 [ -d "${_mountpoint}" ] || { echo "ERROR: mountpoint \`${_mountpoint}' does not exist" 1>&2; return 1; } |
|
0b5dbf394aa2
FIX: echo 2>&1 is not intended: use 1>&2 instead
Franz Glasner <fzglas.hg@dom66.de>
parents:
247
diff
changeset
|
643 [ -d "${_mountpoint}/skeleton" ] || { echo "WARNING: skeleton is not mounted at \`${_mountpoint}/skeleton'" 1>&2; } |
|
242
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
644 |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
645 for _dir in etc home root tmp usr/local var ; do |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
646 case "${_dir}" in |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
647 "usr/local") |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
648 _dirpart="$(dirname "${_dir}")" |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
649 _basepart="$(basename "${_dir}")" |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
650 [ -d "${_mountpoint}/${_dirpart}" ] || mkdir "${_mountpoint}/${_dirpart}" || return |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
651 ( cd "${_mountpoint}/${_dirpart}" && ln -s "../skeleton/${_dir}" "${_basepart}" ) || return |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
652 ;; |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
653 *) |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
654 ( cd "${_mountpoint}" && ln -s "skeleton/${_dir}" "${_dir}" ) || return |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
655 ;; |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
656 esac |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
657 done |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
658 return 0 |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
659 } |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
660 |
|
251
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
661 #: |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
662 #: Create a snapshot for a dataset and all of its children. |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
663 #: |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
664 #: Args: |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
665 #: $1: the datasets |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
666 #: $2: the name of the snapshot |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
667 #: |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
668 _do_snapshot() { |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
669 local _ds _snap_name |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
670 |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
671 _ds="${1}" |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
672 _snap_name="${2}" |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
673 |
| 254 | 674 [ -z "${_ds}" ] && { echo "ERROR: no dataset given" 1>&2; return 2; } |
| 675 [ -z "${_snap_name}" ] && { echo "ERROR: no snapshot name given" 1>&2; return 2; } | |
| 676 | |
|
251
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
677 if ! zfs list -H -o name -t filesystem "${_ds}" 1> /dev/null 2> /dev/null ; then |
| 254 | 678 echo "ERROR: parent dataset \`${_ds}' does not exist or is not available" 1>&2 |
|
251
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
679 return 1 |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
680 fi |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
681 |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
682 zfs snapshot -r "${_ds}@${_snap_name}" || return |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
683 } |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
684 |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
685 |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
686 #: |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
687 #: Implement the "snapshot-tmpl" command |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
688 #: |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
689 command_snapshot_tmpl() { |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
690 local _ds_base _ds_skel _snap_name |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
691 |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
692 _ensure_no_options "$@" |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
693 |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
694 _ds_base="${1-}" |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
695 _ds_skel="${2-}" |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
696 _snap_name="${3-}" |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
697 |
| 254 | 698 # Here extra checks because of better error messages possible |
| 699 [ -z "${_ds_base}" ] && { echo "ERROR: no RO base dataset name given" 1>&2; return 2; } | |
| 700 [ -z "${_ds_skel}" ] && { echo "ERROR: no RW skeleton dataset name given" 1>&2; return 2; } | |
|
251
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
701 |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
702 _do_snapshot "${_ds_base}" "${_snap_name}" || return |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
703 _do_snapshot "${_ds_skel}" "${_snap_name}" || return |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
704 return 0 |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
705 } |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
706 |
|
242
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
707 |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
708 #: |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
709 #: Implementation of "copy-skel" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
710 #: |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
711 command_copy_skel() { |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
712 local _ds_source _snapshot_name _ds_target |
|
270
dde5967d1e43
Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents:
256
diff
changeset
|
713 local _opt_symlink _opt_nomount _opt_canmount _opt_mountpoint |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
714 |
|
270
dde5967d1e43
Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents:
256
diff
changeset
|
715 local _opt _name _relative_name _root_canmount |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
716 |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
717 _opt_symlink="" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
718 _opt_nomount="" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
719 _opt_canmount="-o canmount=on" |
|
270
dde5967d1e43
Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents:
256
diff
changeset
|
720 _opt_mountpoint="" |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
721 |
|
270
dde5967d1e43
Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents:
256
diff
changeset
|
722 while getopts "ALM:Pu" _opt ; do |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
723 case ${_opt} in |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
724 A) |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
725 _opt_canmount="-o canmount=noauto" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
726 ;; |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
727 L) |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
728 _opt_symlink="yes" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
729 ;; |
|
270
dde5967d1e43
Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents:
256
diff
changeset
|
730 M) |
|
dde5967d1e43
Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents:
256
diff
changeset
|
731 _opt_mountpoint="${OPTARG}" |
|
dde5967d1e43
Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents:
256
diff
changeset
|
732 ;; |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
733 P) |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
734 _opt_symlink="no" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
735 ;; |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
736 u) |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
737 _opt_nomount="-u" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
738 ;; |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
739 \?) |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
740 return 2; |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
741 ;; |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
742 esac |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
743 done |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
744 shift $((OPTIND-1)) |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
745 OPTIND=1 |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
746 |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
747 [ -z "${_opt_symlink}" ] && { echo "ERROR: -L or -P must be given" 1>&2; return 2; } |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
748 |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
749 _ds_source="${1-}" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
750 _snapshot_name="${2-}" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
751 _ds_target="${3-}" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
752 |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
753 [ -z "${_ds_source}" ] && { echo "ERROR: no source given" 1>&2; return 2; } |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
754 [ -z "${_snapshot_name}" ] && { echo "ERROR: no snapshot name given" 1>&2; return 2; } |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
755 [ -z "${_ds_target}" ] && { echo "ERROR: no target given" 1>&2; return 2; } |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
756 |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
757 zfs list -r -t all -o name "${_ds_source}" \ |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
758 | { |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
759 while IFS=$'\t' read -r _name ; do |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
760 if [ "${_name}" = "${_name%@*}@${_snapshot_name}" ]; then |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
761 echo "FOUND: $_name" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
762 # Determine the relative name of the dataset |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
763 _relative_name="${_name#${_ds_source}}" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
764 _relative_name="${_relative_name%@*}" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
765 echo " -> $_relative_name" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
766 if [ -z "${_relative_name}" ]; then |
| 292 | 767 # |
| 768 # Root | |
| 769 # | |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
770 if [ "${_opt_symlink}" = "yes" ]; then |
|
270
dde5967d1e43
Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents:
256
diff
changeset
|
771 _root_canmount="${_opt_canmount}" |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
772 else |
|
270
dde5967d1e43
Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents:
256
diff
changeset
|
773 _root_canmount="-o canmount=off" |
|
dde5967d1e43
Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents:
256
diff
changeset
|
774 fi |
|
dde5967d1e43
Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents:
256
diff
changeset
|
775 if [ -n "${_opt_mountpoint}" ]; then |
|
dde5967d1e43
Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents:
256
diff
changeset
|
776 zfs send -Lec -p -v "${_name}" | zfs receive ${_opt_nomount} -v ${_root_canmount} -o "mountpoint=${_opt_mountpoint}" "${_ds_target}${_relative_name}" |
|
dde5967d1e43
Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents:
256
diff
changeset
|
777 else |
|
dde5967d1e43
Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents:
256
diff
changeset
|
778 zfs send -Lec -p -v "${_name}" | zfs receive ${_opt_nomount} -v ${_root_canmount} -x mountpoint "${_ds_target}${_relative_name}" |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
779 fi |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
780 else |
| 292 | 781 # |
| 782 # Children | |
| 783 # | |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
784 if [ "${_relative_name}" = "/usr" ]; then |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
785 zfs send -Lec -p -v "${_name}" | zfs receive ${_opt_nomount} -v -o canmount=off -x mountpoint "${_ds_target}${_relative_name}" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
786 else |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
787 zfs send -Lec -p -v "${_name}" | zfs receive ${_opt_nomount} -v ${_opt_canmount} -x mountpoint "${_ds_target}${_relative_name}" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
788 fi |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
789 fi |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
790 fi |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
791 done |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
792 } |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
793 # Need only the filesystem data (no associated snapshots) |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
794 echo "Destroying unneeded snapshots ..." |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
795 zfs destroy -rv "${_ds_target}@${_snapshot_name}" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
796 } |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
797 |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
798 |
|
242
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
799 # |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
800 # Global option handling |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
801 # |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
802 while getopts "Vh" _opt ; do |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
803 case ${_opt} in |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
804 V) |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
805 printf 'ftjail v%s (rv:%s)\n' "${VERSION}" '@@HGREVISION@@' |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
806 exit 0 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
807 ;; |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
808 h) |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
809 echo "${USAGE}" |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
810 exit 0 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
811 ;; |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
812 \?) |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
813 exit 2; |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
814 ;; |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
815 *) |
|
250
c4d835ccb4ae
Implement configure for symlinked skeletons.
Franz Glasner <fzglas.hg@dom66.de>
parents:
249
diff
changeset
|
816 echo "ERROR: option handling failed" 1>&2 |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
817 exit 2 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
818 ;; |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
819 esac |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
820 done |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
821 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
822 # |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
823 # Reset the Shell's option handling system to prepare for handling |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
824 # command-local options. |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
825 # |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
826 shift $((OPTIND-1)) |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
827 OPTIND=1 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
828 |
|
250
c4d835ccb4ae
Implement configure for symlinked skeletons.
Franz Glasner <fzglas.hg@dom66.de>
parents:
249
diff
changeset
|
829 test $# -gt 0 || { echo "ERROR: no command given" 1>&2; exit 2; } |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
830 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
831 command="$1" |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
832 shift |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
833 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
834 case "${command}" in |
|
235
85aea8ca1ab8
Some work on datasets-tmpl
Franz Glasner <fzglas.hg@dom66.de>
parents:
234
diff
changeset
|
835 datasets-tmpl) |
|
85aea8ca1ab8
Some work on datasets-tmpl
Franz Glasner <fzglas.hg@dom66.de>
parents:
234
diff
changeset
|
836 command_datasets_tmpl "$@" |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
837 ;; |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
838 mount-tmpl) |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
839 command_mount_tmpl "$@" |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
840 ;; |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
841 umount-tmpl|unmount-tmpl) |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
842 command_umount_tmpl "$@" |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
843 ;; |
|
242
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
844 interlink-tmpl) |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
845 command_interlink_tmpl "$@" |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
846 ;; |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
847 populate-tmpl) |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
848 command_populate_tmpl "$@" |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
849 ;; |
|
251
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
850 snapshot-tmpl) |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
851 command_snapshot_tmpl "$@" |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
852 ;; |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
853 copy-skel) |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
854 command_copy_skel "$@" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
855 ;; |
|
250
c4d835ccb4ae
Implement configure for symlinked skeletons.
Franz Glasner <fzglas.hg@dom66.de>
parents:
249
diff
changeset
|
856 configure) |
|
c4d835ccb4ae
Implement configure for symlinked skeletons.
Franz Glasner <fzglas.hg@dom66.de>
parents:
249
diff
changeset
|
857 echo "ERROR: use \`fjail configure' instead" 1>&2; |
|
c4d835ccb4ae
Implement configure for symlinked skeletons.
Franz Glasner <fzglas.hg@dom66.de>
parents:
249
diff
changeset
|
858 exit 2 |
|
c4d835ccb4ae
Implement configure for symlinked skeletons.
Franz Glasner <fzglas.hg@dom66.de>
parents:
249
diff
changeset
|
859 ;; |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
860 *) |
|
250
c4d835ccb4ae
Implement configure for symlinked skeletons.
Franz Glasner <fzglas.hg@dom66.de>
parents:
249
diff
changeset
|
861 echo "ERROR: unknown command \`${command}'" 1>&2 |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
862 exit 2 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
863 ;; |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
864 esac |
