annotate sbin/ftjail @ 257:71fcef7b8e65

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