Mercurial > hgrepos > FreeBSD > ports > sysutils > local-bsdtools
annotate sbin/ftjail @ 307:23bcbbbd99ea
FIX: Rename "ftjail-populate.rst" to "ftjail-populate-tmpl"
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Tue, 20 Sep 2022 09:16:13 +0200 |
| parents | 901b0e3c0dab |
| children | 2102b46566f0 |
| 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 |
|
300
901b0e3c0dab
All manual pages for ftjail done
Franz Glasner <fzglas.hg@dom66.de>
parents:
297
diff
changeset
|
31 datasets-tmpl -L|-P 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 |
|
300
901b0e3c0dab
All manual pages for ftjail done
Franz Glasner <fzglas.hg@dom66.de>
parents:
297
diff
changeset
|
33 mount-tmpl -L|-P [-n] [-u] BASE-RO SKELETON-RW MOUNTPOINT |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
34 |
| 243 | 35 umount-tmpl BASE-RO SKELETON-RW |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
36 |
|
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
|
37 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
|
38 |
|
307
23bcbbbd99ea
FIX: Rename "ftjail-populate.rst" to "ftjail-populate-tmpl"
Franz Glasner <fzglas.hg@dom66.de>
parents:
300
diff
changeset
|
39 populate-tmpl -L|-P DIRECTORY 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
|
40 |
|
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
|
41 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
|
42 |
|
293
73ac6bec36fe
Man page for "ftjail copy-jail"
Franz Glasner <fzglas.hg@dom66.de>
parents:
292
diff
changeset
|
43 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
|
44 |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
45 ENVIRONMENT: |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
46 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
47 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
|
48 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
49 DESCRIPTION: |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
50 |
|
307
23bcbbbd99ea
FIX: Rename "ftjail-populate.rst" to "ftjail-populate-tmpl"
Franz Glasner <fzglas.hg@dom66.de>
parents:
300
diff
changeset
|
51 All commands with the exception of "populate-tmpl" require ZFS as |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
52 filesystem. |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
53 ' |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
54 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
55 # Reset to standard umask |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
56 umask 0022 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
57 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
58 |
|
278
a6c9eb25ae81
Convert a function to have comment-form docs
Franz Glasner <fzglas.hg@dom66.de>
parents:
277
diff
changeset
|
59 #: |
|
a6c9eb25ae81
Convert a function to have comment-form docs
Franz Glasner <fzglas.hg@dom66.de>
parents:
277
diff
changeset
|
60 #: 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
|
61 #: |
|
a6c9eb25ae81
Convert a function to have comment-form docs
Franz Glasner <fzglas.hg@dom66.de>
parents:
277
diff
changeset
|
62 #: Args: |
|
a6c9eb25ae81
Convert a function to have comment-form docs
Franz Glasner <fzglas.hg@dom66.de>
parents:
277
diff
changeset
|
63 #: $@: |
|
a6c9eb25ae81
Convert a function to have comment-form docs
Franz Glasner <fzglas.hg@dom66.de>
parents:
277
diff
changeset
|
64 #: |
|
a6c9eb25ae81
Convert a function to have comment-form docs
Franz Glasner <fzglas.hg@dom66.de>
parents:
277
diff
changeset
|
65 #: Exit: |
|
a6c9eb25ae81
Convert a function to have comment-form docs
Franz Glasner <fzglas.hg@dom66.de>
parents:
277
diff
changeset
|
66 #: 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
|
67 #: |
|
a6c9eb25ae81
Convert a function to have comment-form docs
Franz Glasner <fzglas.hg@dom66.de>
parents:
277
diff
changeset
|
68 #: Return: |
|
a6c9eb25ae81
Convert a function to have comment-form docs
Franz Glasner <fzglas.hg@dom66.de>
parents:
277
diff
changeset
|
69 #: - 0 |
|
a6c9eb25ae81
Convert a function to have comment-form docs
Franz Glasner <fzglas.hg@dom66.de>
parents:
277
diff
changeset
|
70 #: |
|
245
61861d36758c
Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents:
244
diff
changeset
|
71 _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
|
72 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
|
73 |
|
61861d36758c
Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents:
244
diff
changeset
|
74 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
|
75 [ "${_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
|
76 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
|
77 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
|
78 } |
|
61861d36758c
Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents:
244
diff
changeset
|
79 |
|
61861d36758c
Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents:
244
diff
changeset
|
80 |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
81 _get_dataset_for_mountpoint() { |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
82 : '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
|
83 |
|
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 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
|
86 |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
87 local _ds _mount _rest |
|
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 _mountpoint="$1" |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
90 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
91 mount -t zfs -p \ |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
92 | { |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
93 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
|
94 if [ "$_mount" = "$_mountpoint" ]; then |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
95 echo "${_ds}" |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
96 return 0 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
97 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
98 done |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
99 return 1 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
100 } |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
101 } |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
102 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
103 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
104 # |
|
236
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
105 # 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
|
106 # |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
107 command_datasets_tmpl_base() { |
|
246
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
108 local _p_base _name |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
109 |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
110 local _opt_dry_run |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
111 |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
112 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
|
113 |
|
246
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
114 _opt_dry_run="" |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
115 while getopts "nu" _opt ; do |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
116 case ${_opt} in |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
117 n|u) |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
118 _opt_dry_run="yes" |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
119 ;; |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
120 \?|:) |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
121 return 2; |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
122 ;; |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
123 esac |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
124 done |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
125 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
|
126 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
|
127 |
|
236
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
128 _p_base="${1-}" |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
129 _name="${2-}" |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
130 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
131 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
|
132 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
|
133 return 2 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
134 fi |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
135 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
|
136 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
|
137 return 2 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
138 fi |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
139 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
140 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
|
141 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
|
142 return 1 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
143 fi |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
144 _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
|
145 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
|
146 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
|
147 return 1 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
148 fi |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
149 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
150 |
|
246
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
151 [ "${_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
|
152 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
153 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
|
154 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
|
155 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
156 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
|
157 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
158 } |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
159 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
160 |
|
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 # 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
|
163 # |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
164 command_datasets_tmpl_skel() { |
|
246
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
165 local _p_base _name |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
166 |
|
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
|
167 local _opt_dry_run _opt_symlink |
|
246
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
168 |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
169 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
|
170 |
|
246
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
171 _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
|
172 _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
|
173 |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
174 while getopts "LPnu" _opt ; do |
|
246
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
175 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
|
176 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
|
177 _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
|
178 ;; |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
179 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
|
180 _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
|
181 ;; |
|
246
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
182 n|u) |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
183 _opt_dry_run="yes" |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
184 ;; |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
185 \?|:) |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
186 return 2; |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
187 ;; |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
188 esac |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
189 done |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
190 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
|
191 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
|
192 |
|
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
|
193 [ -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
|
194 |
|
236
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
195 _p_skel="${1-}" |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
196 _name="${2-}" |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
197 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
198 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
|
199 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
|
200 return 2 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
201 fi |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
202 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
|
203 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
|
204 return 2 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
205 fi |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
206 |
|
238
9b0d83703a28
FIX: Bogus keyword shortcut error: wrong copy-paste text in script
Franz Glasner <fzglas.hg@dom66.de>
parents:
237
diff
changeset
|
207 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
|
208 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
|
209 return 1 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
210 fi |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
211 _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
|
212 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
|
213 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
|
214 return 1 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
215 fi |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
216 |
|
246
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
217 [ "${_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
|
218 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
219 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
|
220 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
|
221 |
|
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
|
222 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
|
223 # 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
|
224 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
|
225 else |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
226 # 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
|
227 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
|
228 fi |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
229 # "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
|
230 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
|
231 # |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
232 # 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
|
233 # 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
|
234 # 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
|
235 # |
|
239
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
236 #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
|
237 # |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
238 # XXX FIXME: What about home |
|
237
a38906739422
Drop a note about /home in skel-rw
Franz Glasner <hg@dom66.de>
parents:
236
diff
changeset
|
239 # |
|
239
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
240 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
|
241 case "${_child}" in |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
242 "tmp"|"var/tmp") |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
243 _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
|
244 ;; |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
245 "home") |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
246 _child_zfsopts="-o setuid=off" |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
247 ;; |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
248 "usr/ports/distfiles") |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
249 _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
|
250 ;; |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
251 "var/mail") |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
252 _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
|
253 ;; |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
254 *) |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
255 _child_zfsopts="" |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
256 ;; |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
257 esac |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
258 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
|
259 done |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
260 } |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
261 |
|
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 # |
|
235
85aea8ca1ab8
Some work on datasets-tmpl
Franz Glasner <fzglas.hg@dom66.de>
parents:
234
diff
changeset
|
264 # "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
|
265 # |
|
234
8682cfa74f6a
Minimum work on creating datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
233
diff
changeset
|
266 # PARENT-BASE PARENT-SKELETON NAME |
|
8682cfa74f6a
Minimum work on creating datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
233
diff
changeset
|
267 # |
|
235
85aea8ca1ab8
Some work on datasets-tmpl
Franz Glasner <fzglas.hg@dom66.de>
parents:
234
diff
changeset
|
268 command_datasets_tmpl() { |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
269 # parent ZFS dataset -- child ZFS dataset name |
|
234
8682cfa74f6a
Minimum work on creating datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
233
diff
changeset
|
270 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
|
271 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
|
272 |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
273 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
|
274 |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
275 _opt_symlink="" |
|
234
8682cfa74f6a
Minimum work on creating datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
233
diff
changeset
|
276 |
|
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
|
277 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
|
278 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
|
279 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
|
280 _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
|
281 ;; |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
282 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
|
283 _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
|
284 ;; |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
285 \?) |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
286 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
|
287 ;; |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
288 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
|
289 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
|
290 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
|
291 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
|
292 |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
293 [ -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
|
294 |
|
236
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
295 _p_base="${1-}" |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
296 _p_skel="${2-}" |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
297 _name="${3-}" |
|
234
8682cfa74f6a
Minimum work on creating datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
233
diff
changeset
|
298 |
|
236
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
299 # Check preconditions |
|
246
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
300 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
|
301 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
|
302 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
303 # Really do it |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
304 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
|
305 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
|
306 return 0 |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
307 } |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
308 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
309 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
310 # |
|
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
|
311 # "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
|
312 # |
|
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
|
313 # 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
|
314 # |
|
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
|
315 command_populate_tmpl() { |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
316 # MOUNTPOINT -- base.txz |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
317 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
|
318 local _opt_symlink |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
319 |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
320 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
|
321 |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
322 _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
|
323 |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
324 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
|
325 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
|
326 L) |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
327 _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
|
328 ;; |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
329 P) |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
330 _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
|
331 ;; |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
332 \?) |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
333 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
|
334 ;; |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
335 esac |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
336 done |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
337 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
|
338 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
|
339 |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
340 [ -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
|
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 _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
|
343 _basetxz="${2-}" |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
344 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
345 if [ -z "${_mp}" ]; then |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
346 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
|
347 return 2 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
348 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
349 if [ -z "${_basetxz}" ]; then |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
350 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
|
351 return 2 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
352 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
353 if [ ! -d "${_mp}" ]; then |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
354 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
|
355 return 1 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
356 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
357 if [ ! -r "${_basetxz}" ]; then |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
358 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
|
359 return 1 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
360 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
361 |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
362 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
|
363 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
|
364 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
|
365 # "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
|
366 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
|
367 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
|
368 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
|
369 done |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
370 # 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
|
371 (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
|
372 (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
|
373 else |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
374 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
|
375 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
|
376 # 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
|
377 (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
|
378 (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
|
379 fi |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
380 |
|
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
|
381 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
|
382 } |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
383 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
384 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
385 # |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
386 # _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
|
387 # |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
388 _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
|
389 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
|
390 |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
391 local _name _mp _canmount _mounted |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
392 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
|
393 |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
394 _dsname="${1}" |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
395 _mountpoint="${2}" |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
396 _dry_run="${3}" |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
397 _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
|
398 _childs_only="${5}" |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
399 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
400 if [ -z "${_dsname}" ]; then |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
401 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
|
402 return 2 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
403 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
404 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
405 _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
|
406 { 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
|
407 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
408 if [ -z "${_mountpoint}" ]; then |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
409 if [ "${_mount_natural}" = "yes" ]; then |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
410 _mountpoint="${_rootds_mountpoint}" |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
411 else |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
412 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
|
413 return 2 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
414 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
415 else |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
416 if [ "${_mount_natural}" = "yes" ]; then |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
417 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
|
418 return 2 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
419 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
420 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
421 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
422 # Eventually remove a trailing slash |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
423 _mountpoint="${_mountpoint%/}" |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
424 if [ -z "${_mountpoint}" ]; then |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
425 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
|
426 return 1 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
427 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
428 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
429 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
|
430 | { |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
431 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
|
432 # 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
|
433 [ "${_mounted}" = "yes" ] && continue |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
434 # 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
|
435 [ "${_canmount}" = "off" ] && continue |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
436 case "${_mp}" in |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
437 "none"|"legacy") |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
438 # 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
|
439 ;; |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
440 "${_rootds_mountpoint}"|"${_rootds_mountpoint}/"*) |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
441 # |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
442 # 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
|
443 # the parent datasets mountpoint |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
444 # |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
445 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
446 # 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
|
447 _relative_mp="${_mp#${_rootds_mountpoint}}" |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
448 # Eventually remove a trailing slash |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
449 _relative_mp="${_relative_mp%/}" |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
450 # The real effective full mountpoint |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
451 _real_mp="${_mountpoint}${_relative_mp}" |
|
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 # |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
454 # 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
|
455 # 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
|
456 # is given. |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
457 # |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
458 if [ "${_mount_natural}" = "yes" ]; then |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
459 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
|
460 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
|
461 return 1 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
462 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
463 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
464 |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
465 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
|
466 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
|
467 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
|
468 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
|
469 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
|
470 else |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
471 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
|
472 { 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
|
473 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
|
474 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
|
475 fi |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
476 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
477 ;; |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
478 *) |
|
248
0b5dbf394aa2
FIX: echo 2>&1 is not intended: use 1>&2 instead
Franz Glasner <fzglas.hg@dom66.de>
parents:
247
diff
changeset
|
479 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
|
480 ;; |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
481 esac |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
482 done |
|
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 return 0 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
485 } |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
486 } |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
487 |
|
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 # |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
490 # "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
|
491 # |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
492 # 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
|
493 # |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
494 command_mount_tmpl() { |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
495 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
|
496 local _opt_dry_run _opt_symlink |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
497 |
|
246
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
498 local _opt |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
499 |
|
244
6e632f459818
Rename "_dry_run" to the more proper "_opt_dry_run"
Franz Glasner <fzglas.hg@dom66.de>
parents:
243
diff
changeset
|
500 _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
|
501 _opt_symlink="" |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
502 |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
503 while getopts "LPnu" _opt ; do |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
504 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
|
505 L) |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
506 _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
|
507 ;; |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
508 P) |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
509 _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
|
510 ;; |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
511 n|u) |
|
244
6e632f459818
Rename "_dry_run" to the more proper "_opt_dry_run"
Franz Glasner <fzglas.hg@dom66.de>
parents:
243
diff
changeset
|
512 _opt_dry_run="yes" |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
513 ;; |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
514 \?|:) |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
515 return 2; |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
516 ;; |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
517 esac |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
518 done |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
519 shift $((OPTIND-1)) |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
520 OPTIND=1 |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
521 |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
522 [ -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
|
523 |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
524 _ds_base="${1-}" |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
525 _ds_skel="${2-}" |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
526 _mountpoint="${3-}" |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
527 |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
528 _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
|
529 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
|
530 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
|
531 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
|
532 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
|
533 fi |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
534 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
|
535 _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
|
536 else |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
537 _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
|
538 fi |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
539 |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
540 return 0 |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
541 } |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
542 |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
543 |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
544 # |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
545 # _do_umount dataset |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
546 # |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
547 _do_umount() { |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
548 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
|
549 |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
550 local _name _mp _rest |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
551 local _rootds_mountpoint |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
552 |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
553 _dsname="${1}" |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
554 [ -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
|
555 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
556 # 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
|
557 _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
|
558 { 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
|
559 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
560 mount -t zfs -p \ |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
561 | grep -E "^${_dsname}(/|\s)" \ |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
562 | sort -n -r \ |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
563 | { |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
564 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
|
565 echo "Umounting ${_name} on ${_mp}" |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
566 umount "${_mp}" || return 1 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
567 done |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
568 return 0 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
569 } |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
570 } |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
571 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
572 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
573 # |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
574 # "umount-tmpl" -- umount skeleton and base datasets |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
575 # |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
576 # command_umount_tmpl ds-base ds-skeleton |
|
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 command_umount_tmpl() { |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
579 local _ds_base _ds_skel |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
580 |
|
245
61861d36758c
Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents:
244
diff
changeset
|
581 _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
|
582 |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
583 _ds_base="${1-}" |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
584 _ds_skel="${2-}" |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
585 |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
586 [ -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
|
587 [ -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
|
588 |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
589 _do_umount "${_ds_skel}" || return |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
590 _do_umount "${_ds_base}" || return |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
591 |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
592 return 0 |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
593 } |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
594 |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
595 |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
596 # |
|
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
|
597 # "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
|
598 # |
|
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
|
599 # 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
|
600 # |
|
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
|
601 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
|
602 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
|
603 |
|
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
|
604 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
|
605 |
|
245
61861d36758c
Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents:
244
diff
changeset
|
606 _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
|
607 |
|
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
|
608 _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
|
609 |
|
248
0b5dbf394aa2
FIX: echo 2>&1 is not intended: use 1>&2 instead
Franz Glasner <fzglas.hg@dom66.de>
parents:
247
diff
changeset
|
610 [ -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
|
611 [ -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
|
612 [ -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
|
613 |
|
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
|
614 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
|
615 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
|
616 "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
|
617 _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
|
618 _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
|
619 [ -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
|
620 ( 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
|
621 ;; |
|
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
|
622 *) |
|
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
|
623 ( 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
|
624 ;; |
|
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
|
625 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
|
626 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
|
627 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
|
628 } |
|
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 |
|
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
|
630 #: |
|
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
|
631 #: 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
|
632 #: |
|
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
|
633 #: 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
|
634 #: $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
|
635 #: $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
|
636 #: |
|
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
|
637 _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
|
638 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
|
639 |
|
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
|
640 _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
|
641 _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
|
642 |
| 254 | 643 [ -z "${_ds}" ] && { echo "ERROR: no dataset given" 1>&2; return 2; } |
| 644 [ -z "${_snap_name}" ] && { echo "ERROR: no snapshot name given" 1>&2; return 2; } | |
| 645 | |
|
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
|
646 if ! zfs list -H -o name -t filesystem "${_ds}" 1> /dev/null 2> /dev/null ; then |
| 254 | 647 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
|
648 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
|
649 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
|
650 |
|
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
|
651 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
|
652 } |
|
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
|
653 |
|
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
|
654 |
|
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
|
655 #: |
|
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
|
656 #: 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
|
657 #: |
|
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
|
658 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
|
659 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
|
660 |
|
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 _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
|
662 |
|
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 _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
|
664 _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
|
665 _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
|
666 |
| 254 | 667 # Here extra checks because of better error messages possible |
| 668 [ -z "${_ds_base}" ] && { echo "ERROR: no RO base dataset name given" 1>&2; return 2; } | |
| 669 [ -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
|
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 _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
|
672 _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
|
673 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
|
674 } |
|
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
|
675 |
|
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
|
676 |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
677 #: |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
678 #: Implementation of "copy-skel" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
679 #: |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
680 command_copy_skel() { |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
681 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
|
682 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
|
683 |
|
270
dde5967d1e43
Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents:
256
diff
changeset
|
684 local _opt _name _relative_name _root_canmount |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
685 |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
686 _opt_symlink="" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
687 _opt_nomount="" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
688 _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
|
689 _opt_mountpoint="" |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
690 |
|
270
dde5967d1e43
Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents:
256
diff
changeset
|
691 while getopts "ALM:Pu" _opt ; do |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
692 case ${_opt} in |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
693 A) |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
694 _opt_canmount="-o canmount=noauto" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
695 ;; |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
696 L) |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
697 _opt_symlink="yes" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
698 ;; |
|
270
dde5967d1e43
Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents:
256
diff
changeset
|
699 M) |
|
dde5967d1e43
Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents:
256
diff
changeset
|
700 _opt_mountpoint="${OPTARG}" |
|
dde5967d1e43
Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents:
256
diff
changeset
|
701 ;; |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
702 P) |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
703 _opt_symlink="no" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
704 ;; |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
705 u) |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
706 _opt_nomount="-u" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
707 ;; |
|
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 return 2; |
|
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 esac |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
712 done |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
713 shift $((OPTIND-1)) |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
714 OPTIND=1 |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
715 |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
716 [ -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
|
717 |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
718 _ds_source="${1-}" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
719 _snapshot_name="${2-}" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
720 _ds_target="${3-}" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
721 |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
722 [ -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
|
723 [ -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
|
724 [ -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
|
725 |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
726 zfs list -r -t all -o name "${_ds_source}" \ |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
727 | { |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
728 while IFS=$'\t' read -r _name ; do |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
729 if [ "${_name}" = "${_name%@*}@${_snapshot_name}" ]; then |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
730 echo "FOUND: $_name" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
731 # Determine the relative name of the dataset |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
732 _relative_name="${_name#${_ds_source}}" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
733 _relative_name="${_relative_name%@*}" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
734 echo " -> $_relative_name" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
735 if [ -z "${_relative_name}" ]; then |
| 292 | 736 # |
| 737 # Root | |
| 738 # | |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
739 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
|
740 _root_canmount="${_opt_canmount}" |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
741 else |
|
270
dde5967d1e43
Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents:
256
diff
changeset
|
742 _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
|
743 fi |
|
dde5967d1e43
Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents:
256
diff
changeset
|
744 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
|
745 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
|
746 else |
|
dde5967d1e43
Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents:
256
diff
changeset
|
747 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
|
748 fi |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
749 else |
| 292 | 750 # |
| 751 # Children | |
| 752 # | |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
753 if [ "${_relative_name}" = "/usr" ]; then |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
754 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
|
755 else |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
756 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
|
757 fi |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
758 fi |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
759 fi |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
760 done |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
761 } |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
762 # Need only the filesystem data (no associated snapshots) |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
763 echo "Destroying unneeded snapshots ..." |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
764 zfs destroy -rv "${_ds_target}@${_snapshot_name}" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
765 } |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
766 |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
767 |
|
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
|
768 # |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
769 # Global option handling |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
770 # |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
771 while getopts "Vh" _opt ; do |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
772 case ${_opt} in |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
773 V) |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
774 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
|
775 exit 0 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
776 ;; |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
777 h) |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
778 echo "${USAGE}" |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
779 exit 0 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
780 ;; |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
781 \?) |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
782 exit 2; |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
783 ;; |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
784 *) |
|
250
c4d835ccb4ae
Implement configure for symlinked skeletons.
Franz Glasner <fzglas.hg@dom66.de>
parents:
249
diff
changeset
|
785 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
|
786 exit 2 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
787 ;; |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
788 esac |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
789 done |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
790 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
791 # |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
792 # 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
|
793 # command-local options. |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
794 # |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
795 shift $((OPTIND-1)) |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
796 OPTIND=1 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
797 |
|
250
c4d835ccb4ae
Implement configure for symlinked skeletons.
Franz Glasner <fzglas.hg@dom66.de>
parents:
249
diff
changeset
|
798 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
|
799 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
800 command="$1" |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
801 shift |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
802 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
803 case "${command}" in |
|
235
85aea8ca1ab8
Some work on datasets-tmpl
Franz Glasner <fzglas.hg@dom66.de>
parents:
234
diff
changeset
|
804 datasets-tmpl) |
|
85aea8ca1ab8
Some work on datasets-tmpl
Franz Glasner <fzglas.hg@dom66.de>
parents:
234
diff
changeset
|
805 command_datasets_tmpl "$@" |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
806 ;; |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
807 mount-tmpl) |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
808 command_mount_tmpl "$@" |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
809 ;; |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
810 umount-tmpl|unmount-tmpl) |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
811 command_umount_tmpl "$@" |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
812 ;; |
|
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
|
813 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
|
814 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
|
815 ;; |
|
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
|
816 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
|
817 command_populate_tmpl "$@" |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
818 ;; |
|
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
|
819 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
|
820 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
|
821 ;; |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
822 copy-skel) |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
823 command_copy_skel "$@" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
824 ;; |
|
250
c4d835ccb4ae
Implement configure for symlinked skeletons.
Franz Glasner <fzglas.hg@dom66.de>
parents:
249
diff
changeset
|
825 configure) |
|
c4d835ccb4ae
Implement configure for symlinked skeletons.
Franz Glasner <fzglas.hg@dom66.de>
parents:
249
diff
changeset
|
826 echo "ERROR: use \`fjail configure' instead" 1>&2; |
|
c4d835ccb4ae
Implement configure for symlinked skeletons.
Franz Glasner <fzglas.hg@dom66.de>
parents:
249
diff
changeset
|
827 exit 2 |
|
c4d835ccb4ae
Implement configure for symlinked skeletons.
Franz Glasner <fzglas.hg@dom66.de>
parents:
249
diff
changeset
|
828 ;; |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
829 *) |
|
250
c4d835ccb4ae
Implement configure for symlinked skeletons.
Franz Glasner <fzglas.hg@dom66.de>
parents:
249
diff
changeset
|
830 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
|
831 exit 2 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
832 ;; |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
833 esac |
