annotate sbin/ftjail @ 246:bdee72ff7dbd

Some subcommands now support options properly
author Franz Glasner <fzglas.hg@dom66.de>
date Sat, 10 Sep 2022 19:13:41 +0200
parents 61861d36758c
children 5dd38cb3fecf
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
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
41 mount-tmpl [ OPTIONS ] BASE-RO SKELETON-RW MOUNTPOINT
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
42
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
43 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
44 MOUNTPOINT/skeleton
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
45
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
46 -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
47 -u Alias of -n
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
48
243
d3fa59e2c5fe Typo in docs
Franz Glasner <fzglas.hg@dom66.de>
parents: 242
diff changeset
49 umount-tmpl BASE-RO SKELETON-RW
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
50
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
51 Unmount mounted datasets BASE-RO and SKELETON-RW
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
52
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
53 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
54
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
55 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
56 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
57
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
58 populate MOUNTPOINT 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
59
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 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
61
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
62 ENVIRONMENT:
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
63
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
64 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
65
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
66 DESCRIPTION:
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
67
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
68 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
69 filesystem.
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
70 '
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
71
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
72 # Reset to standard umask
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
73 umask 0022
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
74
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
75
245
61861d36758c Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents: 244
diff changeset
76 #
61861d36758c Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents: 244
diff changeset
77 # 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
78 #
61861d36758c Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents: 244
diff changeset
79 _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
80 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
81
61861d36758c Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents: 244
diff changeset
82 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
83 [ "${_opt}" = '?' ] && { echo "ERROR: no option allowed" 1>&2; exit 2; }
61861d36758c Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents: 244
diff changeset
84 done
61861d36758c Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents: 244
diff changeset
85 }
61861d36758c Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents: 244
diff changeset
86
61861d36758c Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents: 244
diff changeset
87
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
88 _get_dataset_for_mountpoint() {
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
89 : '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
90
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 local _mountpoint
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
93
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
94 local _ds _mount _rest
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 _mountpoint="$1"
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
97
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
98 mount -t zfs -p \
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
99 | {
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
100 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
101 if [ "$_mount" = "$_mountpoint" ]; then
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
102 echo "${_ds}"
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
103 return 0
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
104 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
105 done
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
106 return 1
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
107 }
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
108 }
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
109
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
110
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
111 #
236
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
112 # 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
113 #
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
114 command_datasets_tmpl_base() {
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
115 local _p_base _name
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
116
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
117 local _opt_dry_run
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
118
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
119 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
120
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
121 _opt_dry_run=""
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
122 while getopts "nu" _opt ; do
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
123 case ${_opt} in
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
124 n|u)
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
125 _opt_dry_run="yes"
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
126 ;;
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
127 \?|:)
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
128 return 2;
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
129 ;;
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
130 esac
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
131 done
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
132 shift $((OPTIND-1))
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
133 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
134
236
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
135 _p_base="${1-}"
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
136 _name="${2-}"
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
137
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
138 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
139 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
140 return 2
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
141 fi
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
142 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
143 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
144 return 2
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
145 fi
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
146
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
147 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
148 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
149 return 1
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
150 fi
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
151 _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
152 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
153 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
154 return 1
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
155 fi
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
156
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
157
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
158 [ "${_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
159
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
160 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
161 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
162
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
163 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
164
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
165 }
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
166
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 #
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
169 # 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
170 #
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
171 command_datasets_tmpl_skel() {
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
172 local _p_base _name
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
173
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
174 local _opt_dry_run
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
175
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
176 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
177
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
178 _opt_dry_run=""
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
179 while getopts "nu" _opt ; do
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
180 case ${_opt} in
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
181 n|u)
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
182 _opt_dry_run="yes"
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
183 ;;
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
184 \?|:)
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
185 return 2;
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
186 ;;
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
187 esac
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
188 done
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
189 shift $((OPTIND-1))
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
190 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
191
236
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
192 _p_skel="${1-}"
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
193 _name="${2-}"
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
194
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
195 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
196 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
197 return 2
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
198 fi
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
199 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
200 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
201 return 2
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
202 fi
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
203
238
9b0d83703a28 FIX: Bogus keyword shortcut error: wrong copy-paste text in script
Franz Glasner <fzglas.hg@dom66.de>
parents: 237
diff changeset
204 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
205 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
206 return 1
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
207 fi
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
208 _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
209 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
210 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
211 return 1
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
212 fi
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
213
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
214
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
215 [ "${_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
216
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
217 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
218 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
219
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
220 zfs create -u -o canmount=noauto "${_ds_skel}"
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
221 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
222 #
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
223 # 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
224 # 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
225 # 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
226 #
239
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
227 #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
228 #
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
229 # XXX FIXME: What about home
237
a38906739422 Drop a note about /home in skel-rw
Franz Glasner <hg@dom66.de>
parents: 236
diff changeset
230 #
239
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
231 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
232 case "${_child}" in
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
233 "tmp"|"var/tmp")
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
234 _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
235 ;;
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
236 "home")
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
237 _child_zfsopts="-o setuid=off"
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
238 ;;
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
239 "usr/ports/distfiles")
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
240 _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
241 ;;
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
242 "var/mail")
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
243 _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
244 ;;
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
245 *)
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
246 _child_zfsopts=""
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
247 ;;
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
248 esac
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
249 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
250 done
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
251 }
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
252
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
253
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
254 #
235
85aea8ca1ab8 Some work on datasets-tmpl
Franz Glasner <fzglas.hg@dom66.de>
parents: 234
diff changeset
255 # "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
256 #
234
8682cfa74f6a Minimum work on creating datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 233
diff changeset
257 # PARENT-BASE PARENT-SKELETON NAME
8682cfa74f6a Minimum work on creating datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 233
diff changeset
258 #
235
85aea8ca1ab8 Some work on datasets-tmpl
Franz Glasner <fzglas.hg@dom66.de>
parents: 234
diff changeset
259 command_datasets_tmpl() {
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
260 # parent ZFS dataset -- child ZFS dataset name
234
8682cfa74f6a Minimum work on creating datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 233
diff changeset
261 local _p_base _p_skel _name
8682cfa74f6a Minimum work on creating datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 233
diff changeset
262 local _zfsopts
235
85aea8ca1ab8 Some work on datasets-tmpl
Franz Glasner <fzglas.hg@dom66.de>
parents: 234
diff changeset
263 local _ds_base _ds_skel
234
8682cfa74f6a Minimum work on creating datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 233
diff changeset
264
245
61861d36758c Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents: 244
diff changeset
265 _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
266
235
85aea8ca1ab8 Some work on datasets-tmpl
Franz Glasner <fzglas.hg@dom66.de>
parents: 234
diff changeset
267 _zfsopts="-u -o canmount=noauto"
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
268
236
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
269 _p_base="${1-}"
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
270 _p_skel="${2-}"
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
271 _name="${3-}"
234
8682cfa74f6a Minimum work on creating datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 233
diff changeset
272
236
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
273 # Check preconditions
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
274 command_datasets_tmpl_base -n "${_p_base}" "${_name}" || return
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
275 command_datasets_tmpl_skel -n "${_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
276
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
277 # Really do it
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
278 command_datasets_tmpl_base "${_p_base}" "${_name}" || return
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
279 command_datasets_tmpl_skel "${_p_skel}" "${_name}" || return
235
85aea8ca1ab8 Some work on datasets-tmpl
Franz Glasner <fzglas.hg@dom66.de>
parents: 234
diff changeset
280 return 0
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
281 }
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
282
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
283
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
284 #
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
285 # "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
286 #
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
287 # 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
288 #
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
289 command_populate_tmpl() {
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
290 # MOUNTPOINT -- base.txz
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
291 local _mp _basetxz
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
292
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
293 local _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
294
245
61861d36758c Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents: 244
diff changeset
295 _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
296
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
297 _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
298 _basetxz="${2-}"
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
299
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
300 if [ -z "${_mp}" ]; then
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
301 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
302 return 2
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
303 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
304 if [ -z "${_basetxz}" ]; then
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
305 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
306 return 2
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
307 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
308 if [ ! -d "${_mp}" ]; then
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
309 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
310 return 1
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
311 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
312 if [ ! -r "${_basetxz}" ]; then
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
313 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
314 return 1
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
315 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
316
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
317 #
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
318 # Handle /var/empty separately later: could be already there and
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
319 # mounted read-only.
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
320 #
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
321 echo "Extracting RO base ..."
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
322 tar -C "${_mp}" --exclude=./etc --exclude=./root --exclude=./tmp --exclude=./usr/local --exclude=./var --no-safe-writes -xJp -f "${_basetxz}" || 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
323 # "home" is not part of base
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
324 for _dir in etc 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
325 echo "Extracting RW skeleton: ${_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
326 tar -C "${_mp}/skeleton" --include="./${_dir}" --exclude=./root/.cshrc --exclude=./root/.profile -xJp -f "${_basetxz}" || 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
327 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
328 # In the original archive they are archived as hardlinks: make symlinks here
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
329 (cd "${_mp}/skeleton/root" && ln -s ../../.profile .profile) || 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
330 (cd "${_mp}/skeleton/root" && ln -s ../../.cshrc .cshrc) || return
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
331
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
332 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
333 }
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
334
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 #
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
337 # _do_mount dataset mountpoint dry-run mount-natural
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
338 #
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
339 _do_mount() {
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
340 local _dsname _mountpoint _dry_run _mount_natural
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
341
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
342 local _name _mp _canmount _mounted
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
343 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
344
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
345 _dsname="${1}"
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
346 _mountpoint="${2}"
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
347 _dry_run="${3}"
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
348 _mount_natural="${4}"
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
349
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
350 if [ -z "${_dsname}" ]; then
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
351 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
352 return 2
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
353 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
354
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
355 _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
356 { 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
357
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
358 if [ -z "${_mountpoint}" ]; then
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
359 if [ "${_mount_natural}" = "yes" ]; then
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
360 _mountpoint="${_rootds_mountpoint}"
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
361 else
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
362 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
363 return 2
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
364 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
365 else
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
366 if [ "${_mount_natural}" = "yes" ]; then
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
367 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
368 return 2
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
369 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
370 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
371
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
372 # Eventually remove a trailing slash
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
373 _mountpoint="${_mountpoint%/}"
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
374 if [ -z "${_mountpoint}" ]; then
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
375 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
376 return 1
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
377 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
378
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
379 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
380 | {
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
381 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
382 # 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
383 [ "${_mounted}" = "yes" ] && continue
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
384 # 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
385 [ "${_canmount}" = "off" ] && continue
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
386 case "${_mp}" in
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
387 "none"|"legacy")
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
388 # 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
389 ;;
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
390 "${_rootds_mountpoint}"|"${_rootds_mountpoint}/"*)
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
391 #
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
392 # 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
393 # the parent datasets mountpoint
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
394 #
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
395
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
396 # 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
397 _relative_mp="${_mp#${_rootds_mountpoint}}"
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
398 # Eventually remove a trailing slash
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
399 _relative_mp="${_relative_mp%/}"
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
400 # The real effective full mountpoint
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
401 _real_mp="${_mountpoint}${_relative_mp}"
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
402
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
403 #
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
404 # 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
405 # 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
406 # is given.
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
407 #
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
408 if [ "${_mount_natural}" = "yes" ]; then
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
409 if [ "${_real_mp}" != "${_mp}" ]; then
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
410 echo "ERROR: mountpoint mismatch" >&2
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
411 return 1
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
412 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
413 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
414
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
415 if [ "${_dry_run}" = "yes" ]; then
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
416 echo "Would mount ${_name} on ${_real_mp}"
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
417 else
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
418 mkdir -p "${_real_mp}" 1> /dev/null 2> /dev/null || \
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
419 { echo "ERROR: cannot create mountpoint ${_real_mp}" >&2; return 1; }
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
420 echo "Mounting ${_name} on ${_real_mp}"
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
421 mount -t zfs "${_name}" "${_real_mp}" || return 1
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
422 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
423 ;;
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
424 *)
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
425 echo "Skipping ${_name} because its configured ZFS mountpoint is not relative to given root dataset" 2>&1
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
426 ;;
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
427 esac
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
428 done
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
429
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
430 return 0
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
431 }
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
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
434
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
435 #
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
436 # "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
437 #
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
438 # 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
439 #
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
440 command_mount_tmpl() {
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
441 local _ds_base _ds_skel _mountpoint
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
442 local _opt_dry_run
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
443
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
444 local _opt
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
445
244
6e632f459818 Rename "_dry_run" to the more proper "_opt_dry_run"
Franz Glasner <fzglas.hg@dom66.de>
parents: 243
diff changeset
446 _opt_dry_run=""
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
447
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
448 while getopts "nu" _opt ; do
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
449 case ${_opt} in
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
450 n|u)
244
6e632f459818 Rename "_dry_run" to the more proper "_opt_dry_run"
Franz Glasner <fzglas.hg@dom66.de>
parents: 243
diff changeset
451 _opt_dry_run="yes"
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
452 ;;
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
453 \?|:)
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
454 return 2;
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
455 ;;
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
456 esac
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
457 done
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
458 shift $((OPTIND-1))
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
459 OPTIND=1
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
460
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
461 _ds_base="${1-}"
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
462 _ds_skel="${2-}"
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
463 _mountpoint="${3-}"
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
464
244
6e632f459818 Rename "_dry_run" to the more proper "_opt_dry_run"
Franz Glasner <fzglas.hg@dom66.de>
parents: 243
diff changeset
465 _do_mount "${_ds_base}" "${_mountpoint}" "${_opt_dry_run}" "" || return
6e632f459818 Rename "_dry_run" to the more proper "_opt_dry_run"
Franz Glasner <fzglas.hg@dom66.de>
parents: 243
diff changeset
466 if [ "${_opt_dry_run}" != "yes" ]; then
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
467 if [ ! -d "${_mountpoint}/skeleton" ]; then
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
468 mkdir "${_mountpoint}/skeleton" || return
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
469 fi
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
470 fi
244
6e632f459818 Rename "_dry_run" to the more proper "_opt_dry_run"
Franz Glasner <fzglas.hg@dom66.de>
parents: 243
diff changeset
471 _do_mount "${_ds_skel}" "${_mountpoint}/skeleton" "${_opt_dry_run}" "" || return
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
472
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
473 return 0
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
474 }
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
475
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
476
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
477 #
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
478 # _do_umount dataset
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
479 #
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
480 _do_umount() {
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
481 local _dsname
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
482
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
483 local _name _mp _rest
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
484 local _rootds_mountpoint
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
485
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
486 _dsname="${1}"
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
487 [ -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
488
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
489 # 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
490 _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
491 { 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
492
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
493 mount -t zfs -p \
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
494 | grep -E "^${_dsname}(/|\s)" \
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
495 | sort -n -r \
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
496 | {
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
497 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
498 echo "Umounting ${_name} on ${_mp}"
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
499 umount "${_mp}" || return 1
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
500 done
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
501 return 0
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
502 }
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
503 }
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
504
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 #
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
507 # "umount-tmpl" -- umount skeleton and base datasets
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
508 #
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
509 # command_umount_tmpl ds-base ds-skeleton
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
510 #
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
511 command_umount_tmpl() {
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
512 local _ds_base _ds_skel
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
513
245
61861d36758c Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents: 244
diff changeset
514 _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
515
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
516 _ds_base="${1-}"
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
517 _ds_skel="${2-}"
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
518
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
519 [ -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
520 [ -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
521
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
522 _do_umount "${_ds_skel}" || return
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
523 _do_umount "${_ds_base}" || return
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
524
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
525 return 0
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
526 }
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
527
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
528
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
529 #
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
530 # "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
531 #
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
532 # 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
533 #
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
534 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
535 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
536
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
537 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
538
245
61861d36758c Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents: 244
diff changeset
539 _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
540
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
541 _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
542
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
543 [ -z "${_mountpoint}" ] && { echo "ERROR: no mountpoint given" 2>&1; return 2; }
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
544 [ -d "${_mountpoint}" ] || { echo "ERROR: mountpoint \`${_mountpoint}' does not exist" 2>&1; return 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
545 [ -d "${_mountpoint}/skeleton" ] || { echo "WARNING: skeleton is not mounted at \`${_mountpoint}/skeleton'" 2>&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
546
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
547 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
548 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
549 "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
550 _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
551 _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
552 [ -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
553 ( 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
554 ;;
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
555 *)
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
556 ( 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
557 ;;
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
558 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
559 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
560 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
561 }
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
562
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
563
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
564 #
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
565 # Global option handling
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
566 #
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
567 while getopts "Vh" _opt ; do
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
568 case ${_opt} in
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
569 V)
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
570 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
571 exit 0
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
572 ;;
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
573 h)
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
574 echo "${USAGE}"
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
575 exit 0
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
576 ;;
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
577 \?)
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
578 exit 2;
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
579 ;;
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
580 *)
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
581 echo "ERROR: option handling failed" >&2
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
582 exit 2
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 esac
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
585 done
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
586
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
587 #
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
588 # 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
589 # command-local options.
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
590 #
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
591 shift $((OPTIND-1))
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
592 OPTIND=1
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
593
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
594 test $# -gt 0 || { echo "ERROR: no command given" >&2; exit 2; }
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
595
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
596 command="$1"
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
597 shift
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 case "${command}" in
235
85aea8ca1ab8 Some work on datasets-tmpl
Franz Glasner <fzglas.hg@dom66.de>
parents: 234
diff changeset
600 datasets-tmpl)
85aea8ca1ab8 Some work on datasets-tmpl
Franz Glasner <fzglas.hg@dom66.de>
parents: 234
diff changeset
601 command_datasets_tmpl "$@"
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
602 ;;
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
603 mount-tmpl)
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
604 command_mount_tmpl "$@"
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 umount-tmpl|unmount-tmpl)
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
607 command_umount_tmpl "$@"
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
608 ;;
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
609 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
610 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
611 ;;
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
612 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
613 command_populate_tmpl "$@"
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
614 ;;
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
615 *)
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
616 echo "ERROR: unknown command \`${command}'" >&2
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
617 exit 2
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
618 ;;
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
619 esac