annotate sbin/ftjail @ 628:17209ce80536

Use the newly implemented "_get_zfs_mounts_for_dataset_tree()" where appropriate. It is in sbin/ftjail and sbin/fzfs.
author Franz Glasner <fzglas.hg@dom66.de>
date Tue, 24 Sep 2024 18:46:15 +0200
parents d173161a3a0f
children f7eda6256ae8
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; -*-
274
570363928b13 Convert the "module" doc-string to a `#:'-style comment
Franz Glasner <fzglas.hg@dom66.de>
parents: 270
diff changeset
3 #:
570363928b13 Convert the "module" doc-string to a `#:'-style comment
Franz Glasner <fzglas.hg@dom66.de>
parents: 270
diff changeset
4 #: A very minimal BSD Thin Jail management tool.
570363928b13 Convert the "module" doc-string to a `#:'-style comment
Franz Glasner <fzglas.hg@dom66.de>
parents: 270
diff changeset
5 #:
570363928b13 Convert the "module" doc-string to a `#:'-style comment
Franz Glasner <fzglas.hg@dom66.de>
parents: 270
diff changeset
6 #: :Author: Franz Glasner
438
9c3b1966ba91 Extend copyright to 2024
Franz Glasner <fzglas.hg@dom66.de>
parents: 433
diff changeset
7 #: :Copyright: (c) 2022-2024 Franz Glasner.
274
570363928b13 Convert the "module" doc-string to a `#:'-style comment
Franz Glasner <fzglas.hg@dom66.de>
parents: 270
diff changeset
8 #: All rights reserved.
570363928b13 Convert the "module" doc-string to a `#:'-style comment
Franz Glasner <fzglas.hg@dom66.de>
parents: 270
diff changeset
9 #: :License: BSD 3-Clause "New" or "Revised" License.
570363928b13 Convert the "module" doc-string to a `#:'-style comment
Franz Glasner <fzglas.hg@dom66.de>
parents: 270
diff changeset
10 #: See LICENSE for details.
570363928b13 Convert the "module" doc-string to a `#:'-style comment
Franz Glasner <fzglas.hg@dom66.de>
parents: 270
diff changeset
11 #: If you cannot find LICENSE see
570363928b13 Convert the "module" doc-string to a `#:'-style comment
Franz Glasner <fzglas.hg@dom66.de>
parents: 270
diff changeset
12 #: <https://opensource.org/licenses/BSD-3-Clause>
386
84d2735fe7f6 Simplified version tagging a lot: it is also faster now.
Franz Glasner <fzglas.hg@dom66.de>
parents: 380
diff changeset
13 #: :ID: @(#)@@SIMPLEVERSIONTAG@@
274
570363928b13 Convert the "module" doc-string to a `#:'-style comment
Franz Glasner <fzglas.hg@dom66.de>
parents: 270
diff changeset
14 #:
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16 set -eu
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17
550
847ae246f3cc Make the port really DATADIR and EXAMPLESDIR safe because the user may redefine DATADIR and EXAMPLESDIR.
Franz Glasner <fzglas.hg@dom66.de>
parents: 545
diff changeset
18 VERSION='@@VERSION@@'
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
19
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20 USAGE='
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21 USAGE: ftjail [ OPTIONS ] COMMAND [ COMMAND OPTIONS ] [ ARG ... ]
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23 OPTIONS:
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25 -V Print the program name and version number to stdout and exit
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
26
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
27 -h Print this help message to stdout and exit
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
28
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
29 COMMANDS:
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
30
300
901b0e3c0dab All manual pages for ftjail done
Franz Glasner <fzglas.hg@dom66.de>
parents: 297
diff changeset
31 datasets-tmpl -L|-P PARENT-BASE PARENT-SKELETON NAME
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
32
300
901b0e3c0dab All manual pages for ftjail done
Franz Glasner <fzglas.hg@dom66.de>
parents: 297
diff changeset
33 mount-tmpl -L|-P [-n] [-u] BASE-RO SKELETON-RW MOUNTPOINT
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
34
243
d3fa59e2c5fe Typo in docs
Franz Glasner <fzglas.hg@dom66.de>
parents: 242
diff changeset
35 umount-tmpl BASE-RO SKELETON-RW
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
36
242
59e933b81dcf First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents: 241
diff changeset
37 interlink-tmpl MOUNTPOINT
59e933b81dcf First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents: 241
diff changeset
38
469
aae67d3011b4 Add the "-b" command line switch into the short docu of ftjail also
Franz Glasner <fzglas.hg@dom66.de>
parents: 455
diff changeset
39 populate-tmpl -L|-P [-b] DIRECTORY BASETXZ [KERNELTXZ]
249
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
40
251
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
41 snapshot-tmpl BASE-RO SKELETON-RW SNAPSHOT-NAME
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
42
380
6be930eb7490 Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 379
diff changeset
43 copy-skel [-A] [-D] [-L] [-M MOUNTPOINT] [-P] [-u] SOURCE-DS SNAPSHOT-NAME TARGET-DS
256
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
44
308
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
45 build-etcupdate-current-tmpl DIRECTORY TARBALL
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
46
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
47 freebsd-update [-k] [-o OLD-ORIGIN] DIRECTORY NEW-ORIGIN [ETCUPDATE-TARBALL]
338
a423bc0e2a3f Put the plain "freebsd-update" command into the short usage message
Franz Glasner <fzglas.hg@dom66.de>
parents: 334
diff changeset
48
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
49 ENVIRONMENT:
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
50
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
51 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
52
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
53 DESCRIPTION:
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
54
307
23bcbbbd99ea FIX: Rename "ftjail-populate.rst" to "ftjail-populate-tmpl"
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
55 All commands with the exception of "populate-tmpl" require ZFS as
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
56 filesystem.
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
57 '
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
58
443
071f24359eef Move "_ensure_no_optios()" into common.subr
Franz Glasner <fzglas.hg@dom66.de>
parents: 438
diff changeset
59
550
847ae246f3cc Make the port really DATADIR and EXAMPLESDIR safe because the user may redefine DATADIR and EXAMPLESDIR.
Franz Glasner <fzglas.hg@dom66.de>
parents: 545
diff changeset
60 _p_datadir='@@DATADIR@@'
847ae246f3cc Make the port really DATADIR and EXAMPLESDIR safe because the user may redefine DATADIR and EXAMPLESDIR.
Franz Glasner <fzglas.hg@dom66.de>
parents: 545
diff changeset
61 [ "${_p_datadir#@@DATADIR}" = '@@' ] && _p_datadir="$(dirname "$0")"/../share/local-bsdtools
443
071f24359eef Move "_ensure_no_optios()" into common.subr
Franz Glasner <fzglas.hg@dom66.de>
parents: 438
diff changeset
62 . "${_p_datadir}/common.subr"
233
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
443
071f24359eef Move "_ensure_no_optios()" into common.subr
Franz Glasner <fzglas.hg@dom66.de>
parents: 438
diff changeset
65 # Reset to standard umask
071f24359eef Move "_ensure_no_optios()" into common.subr
Franz Glasner <fzglas.hg@dom66.de>
parents: 438
diff changeset
66 umask 0022
245
61861d36758c Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents: 244
diff changeset
67
61861d36758c Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents: 244
diff changeset
68
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
69 #
236
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
70 # 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
71 #
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
72 command_datasets_tmpl_base() {
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
73 local _p_base _name
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
74
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
75 local _opt_dry_run
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
76
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
77 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
78
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
79 _opt_dry_run=""
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
80 while getopts "nu" _opt ; do
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
81 case ${_opt} in
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
82 n|u)
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
83 _opt_dry_run="yes"
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
84 ;;
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
85 \?|:)
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
86 return 2;
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
87 ;;
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
88 esac
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
89 done
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
90 shift $((OPTIND-1))
248
0b5dbf394aa2 FIX: echo 2>&1 is not intended: use 1>&2 instead
Franz Glasner <fzglas.hg@dom66.de>
parents: 247
diff changeset
91 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
92
236
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
93 _p_base="${1-}"
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
94 _name="${2-}"
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
95
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
96 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
97 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
98 return 2
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
99 fi
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
100 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
101 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
102 return 2
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
103 fi
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
104
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
105 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
106 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
107 return 1
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
108 fi
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
109 _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
110 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
111 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
112 return 1
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
113 fi
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
114
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
115
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
116 [ "${_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
117
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
118 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
119 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
120
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
121 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
122
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
123 }
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
124
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
125
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
126 #
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
127 # 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
128 #
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
129 command_datasets_tmpl_skel() {
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
130 local _p_base _name
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
131
253
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
132 local _opt_dry_run _opt_symlink
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
133
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
134 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
135
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
136 _opt_dry_run=""
253
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
137 _opt_symlink=""
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
138
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
139 while getopts "LPnu" _opt ; do
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
140 case ${_opt} in
253
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
141 L)
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
142 _opt_symlink="yes"
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
143 ;;
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
144 P)
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
145 _opt_symlink="no"
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
146 ;;
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
147 n|u)
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
148 _opt_dry_run="yes"
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
149 ;;
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
150 \?|:)
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
151 return 2;
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
152 ;;
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
153 esac
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
154 done
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
155 shift $((OPTIND-1))
248
0b5dbf394aa2 FIX: echo 2>&1 is not intended: use 1>&2 instead
Franz Glasner <fzglas.hg@dom66.de>
parents: 247
diff changeset
156 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
157
253
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
158 [ -z "${_opt_symlink}" ] && { echo "ERROR: -L or -P must be given" 1>&2; return 2; }
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
159
236
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
160 _p_skel="${1-}"
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
161 _name="${2-}"
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 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
164 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
165 return 2
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
166 fi
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
167 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
168 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
169 return 2
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
170 fi
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
171
238
9b0d83703a28 FIX: Bogus keyword shortcut error: wrong copy-paste text in script
Franz Glasner <fzglas.hg@dom66.de>
parents: 237
diff changeset
172 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
173 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
174 return 1
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
175 fi
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
176 _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
177 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
178 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
179 return 1
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
180 fi
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
181
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
182 [ "${_opt_dry_run}" = "yes" ] && return 0
236
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
183
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
184 echo "Creating 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
185 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
186
253
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
187 if [ "${_opt_symlink}" = "yes" ]; then
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
188 # In this case the skeleton root needs to be mounted into a "skeleton" subdir
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
189 zfs create -u -o canmount=noauto "${_ds_skel}"
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
190 else
256
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
191 # Only children are to be mounted
253
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
192 zfs create -u -o canmount=off "${_ds_skel}"
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
193 fi
256
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
194 # "usr" is only a container holding "usr/local"
236
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
195 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
196 #
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
197 # 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
198 # 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
199 # 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
200 #
239
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
201 #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
202 #
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
203 # XXX FIXME: What about home
237
a38906739422 Drop a note about /home in skel-rw
Franz Glasner <hg@dom66.de>
parents: 236
diff changeset
204 #
379
b4173e88c57c Also create /var/mail within thin jails because it needs a dataset where atime is handled
Franz Glasner <hg@dom66.de>
parents: 367
diff changeset
205 # /var/mail is here because it relies on atime
b4173e88c57c Also create /var/mail within thin jails because it needs a dataset where atime is handled
Franz Glasner <hg@dom66.de>
parents: 367
diff changeset
206 #
b4173e88c57c Also create /var/mail within thin jails because it needs a dataset where atime is handled
Franz Glasner <hg@dom66.de>
parents: 367
diff changeset
207 for _child in etc home root tmp usr/local var var/mail ; do
239
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
208 case "${_child}" in
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
209 "tmp"|"var/tmp")
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
210 _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
211 ;;
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
212 "home")
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
213 _child_zfsopts="-o setuid=off"
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
214 ;;
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
215 "usr/ports/distfiles")
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
216 _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
217 ;;
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
218 "var/mail")
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
219 _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
220 ;;
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
221 *)
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
222 _child_zfsopts=""
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
223 ;;
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
224 esac
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
225 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
226 done
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
227 }
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
228
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
229
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
230 #
235
85aea8ca1ab8 Some work on datasets-tmpl
Franz Glasner <fzglas.hg@dom66.de>
parents: 234
diff changeset
231 # "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
232 #
234
8682cfa74f6a Minimum work on creating datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 233
diff changeset
233 # PARENT-BASE PARENT-SKELETON NAME
8682cfa74f6a Minimum work on creating datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 233
diff changeset
234 #
235
85aea8ca1ab8 Some work on datasets-tmpl
Franz Glasner <fzglas.hg@dom66.de>
parents: 234
diff changeset
235 command_datasets_tmpl() {
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
236 # parent ZFS dataset -- child ZFS dataset name
234
8682cfa74f6a Minimum work on creating datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 233
diff changeset
237 local _p_base _p_skel _name
253
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
238 local _opt_symlink
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
239
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
240 local _ds_base _ds_skel _opt
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
241
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
242 _opt_symlink=""
234
8682cfa74f6a Minimum work on creating datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 233
diff changeset
243
253
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
244 while getopts "LP" _opt ; do
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
245 case ${_opt} in
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
246 L)
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
247 _opt_symlink="-L"
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
248 ;;
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
249 P)
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
250 _opt_symlink="-P"
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
251 ;;
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
252 \?)
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
253 return 2;
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
254 ;;
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
255 esac
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
256 done
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
257 shift $((OPTIND-1))
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
258 OPTIND=1
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
259
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
260 [ -z "${_opt_symlink}" ] && { echo "ERROR: -L or -P must be given" 1>&2; return 2; }
245
61861d36758c Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents: 244
diff changeset
261
236
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
262 _p_base="${1-}"
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
263 _p_skel="${2-}"
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
264 _name="${3-}"
234
8682cfa74f6a Minimum work on creating datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 233
diff changeset
265
236
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
266 # Check preconditions
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
267 command_datasets_tmpl_base -n "${_p_base}" "${_name}" || return
253
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
268 command_datasets_tmpl_skel -n ${_opt_symlink} "${_p_skel}" "${_name}" || return
236
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
269
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
270 # Really do it
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
271 command_datasets_tmpl_base "${_p_base}" "${_name}" || return
253
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
272 command_datasets_tmpl_skel ${_opt_symlink} "${_p_skel}" "${_name}" || return
235
85aea8ca1ab8 Some work on datasets-tmpl
Franz Glasner <fzglas.hg@dom66.de>
parents: 234
diff changeset
273 return 0
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
274 }
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
275
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
276
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
277 #
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
278 # "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
279 #
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
280 # 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
281 #
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
282 command_populate_tmpl() {
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
283 # MOUNTPOINT -- base.txz
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
284 local _mp _basetxz
454
263b4d382155 "ftjail populate-tmpl" got a new "-b" flag and an optional parameter to preserver /boot and extract a kernel image also
Franz Glasner <hg@dom66.de>
parents: 453
diff changeset
285 local _opt_symlink _opt_preserve_boot
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
286
249
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
287 local _opt _dir
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
288
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
289 _opt_symlink=""
454
263b4d382155 "ftjail populate-tmpl" got a new "-b" flag and an optional parameter to preserver /boot and extract a kernel image also
Franz Glasner <hg@dom66.de>
parents: 453
diff changeset
290 _opt_preserve_boot=""
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
291
454
263b4d382155 "ftjail populate-tmpl" got a new "-b" flag and an optional parameter to preserver /boot and extract a kernel image also
Franz Glasner <hg@dom66.de>
parents: 453
diff changeset
292 while getopts "LPb" _opt ; do
249
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
293 case ${_opt} in
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
294 L)
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
295 _opt_symlink="yes"
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
296 ;;
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
297 P)
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
298 _opt_symlink="no"
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
299 ;;
454
263b4d382155 "ftjail populate-tmpl" got a new "-b" flag and an optional parameter to preserver /boot and extract a kernel image also
Franz Glasner <hg@dom66.de>
parents: 453
diff changeset
300 b)
263b4d382155 "ftjail populate-tmpl" got a new "-b" flag and an optional parameter to preserver /boot and extract a kernel image also
Franz Glasner <hg@dom66.de>
parents: 453
diff changeset
301 _opt_preserve_boot="yes"
263b4d382155 "ftjail populate-tmpl" got a new "-b" flag and an optional parameter to preserver /boot and extract a kernel image also
Franz Glasner <hg@dom66.de>
parents: 453
diff changeset
302 ;;
249
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
303 \?)
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
304 return 2;
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
305 ;;
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
306 esac
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
307 done
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
308 shift $((OPTIND-1))
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
309 OPTIND=1
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
310
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
311 [ -z "${_opt_symlink}" ] && { echo "ERROR: -L or -P must be given" 1>&2; return 2; }
245
61861d36758c Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents: 244
diff changeset
312
242
59e933b81dcf First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents: 241
diff changeset
313 _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
314 _basetxz="${2-}"
454
263b4d382155 "ftjail populate-tmpl" got a new "-b" flag and an optional parameter to preserver /boot and extract a kernel image also
Franz Glasner <hg@dom66.de>
parents: 453
diff changeset
315 _kerneltxz="${3-}"
233
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 if [ -z "${_mp}" ]; then
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
318 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
319 return 2
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
320 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
321 if [ -z "${_basetxz}" ]; then
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
322 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
323 return 2
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
324 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
325 if [ ! -d "${_mp}" ]; then
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
326 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
327 return 1
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
328 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
329 if [ ! -r "${_basetxz}" ]; then
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
330 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
331 return 1
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
332 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
333
249
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
334 if [ "${_opt_symlink}" = "yes" ]; then
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
335 echo "Extracting RO base ..."
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
336 tar -C "${_mp}" --exclude=./etc --exclude=./root --exclude=./tmp --exclude=./usr/local --exclude=./var --no-safe-writes -xJp -f "${_basetxz}" || return
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
337 # "home" is not part of base
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
338 for _dir in etc root tmp usr/local var ; do
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
339 echo "Extracting RW skeleton: ${_dir} ..."
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
340 tar -C "${_mp}/skeleton" --include="./${_dir}" --exclude=./root/.cshrc --exclude=./root/.profile -xJp -f "${_basetxz}" || return
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
341 done
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
342 # In the original archive they are archived as hardlinks: make proper symlinks here
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
343 (cd "${_mp}/skeleton/root" && ln -s ../../.profile .profile) || return
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
344 (cd "${_mp}/skeleton/root" && ln -s ../../.cshrc .cshrc) || return
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
345 else
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
346 echo "Extracting base ..."
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
347 tar -C "${_mp}" --exclude=./root/.cshrc --exclude=./root/.profile --no-safe-writes -xJp -f "${_basetxz}" || return
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
348 # In the original archive they are archived as hardlinks: make proper symlinks here
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
349 (cd "${_mp}/root" && ln -s ../.profile .profile) || return
251
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
350 (cd "${_mp}/root" && ln -s ../.cshrc .cshrc) || return
249
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
351 fi
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
352
454
263b4d382155 "ftjail populate-tmpl" got a new "-b" flag and an optional parameter to preserver /boot and extract a kernel image also
Franz Glasner <hg@dom66.de>
parents: 453
diff changeset
353 if [ \( "${_opt_preserve_boot}" = "yes" \) -o \( -n "${_kerneltxz}" \) ]; then
263b4d382155 "ftjail populate-tmpl" got a new "-b" flag and an optional parameter to preserver /boot and extract a kernel image also
Franz Glasner <hg@dom66.de>
parents: 453
diff changeset
354 if [ -n "${_kerneltxz}" ]; then
263b4d382155 "ftjail populate-tmpl" got a new "-b" flag and an optional parameter to preserver /boot and extract a kernel image also
Franz Glasner <hg@dom66.de>
parents: 453
diff changeset
355 echo "Extracting kernel ..."
263b4d382155 "ftjail populate-tmpl" got a new "-b" flag and an optional parameter to preserver /boot and extract a kernel image also
Franz Glasner <hg@dom66.de>
parents: 453
diff changeset
356 tar -C "${_mp}" -xJp -f "${_kerneltxz}" || return
263b4d382155 "ftjail populate-tmpl" got a new "-b" flag and an optional parameter to preserver /boot and extract a kernel image also
Franz Glasner <hg@dom66.de>
parents: 453
diff changeset
357 else
263b4d382155 "ftjail populate-tmpl" got a new "-b" flag and an optional parameter to preserver /boot and extract a kernel image also
Franz Glasner <hg@dom66.de>
parents: 453
diff changeset
358 echo "Preserved \"boot\""
263b4d382155 "ftjail populate-tmpl" got a new "-b" flag and an optional parameter to preserver /boot and extract a kernel image also
Franz Glasner <hg@dom66.de>
parents: 453
diff changeset
359 fi
263b4d382155 "ftjail populate-tmpl" got a new "-b" flag and an optional parameter to preserver /boot and extract a kernel image also
Franz Glasner <hg@dom66.de>
parents: 453
diff changeset
360 else
263b4d382155 "ftjail populate-tmpl" got a new "-b" flag and an optional parameter to preserver /boot and extract a kernel image also
Franz Glasner <hg@dom66.de>
parents: 453
diff changeset
361 find "${_mp}/boot" -type f -delete || true
263b4d382155 "ftjail populate-tmpl" got a new "-b" flag and an optional parameter to preserver /boot and extract a kernel image also
Franz Glasner <hg@dom66.de>
parents: 453
diff changeset
362 fi
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
363 }
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
364
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
365
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
366 #
249
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
367 # _do_mount dataset mountpoint dry-run mount-natural childs-only
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
368 #
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
369 _do_mount() {
249
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
370 local _dsname _mountpoint _dry_run _mount_natural _childs_only
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
371
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
372 local _name _mp _canmount _mounted
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
373 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
374
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
375 _dsname="${1}"
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
376 _mountpoint="${2}"
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
377 _dry_run="${3}"
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
378 _mount_natural="${4}"
249
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
379 _childs_only="${5}"
233
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 if [ -z "${_dsname}" ]; then
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
382 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
383 return 2
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
384 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
385
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
386 _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
387 { 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
388
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
389 if [ -z "${_mountpoint}" ]; then
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
390 if [ "${_mount_natural}" = "yes" ]; then
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
391 _mountpoint="${_rootds_mountpoint}"
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
392 else
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
393 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
394 return 2
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
395 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
396 else
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
397 if [ "${_mount_natural}" = "yes" ]; then
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
398 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
399 return 2
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
400 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
401 fi
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 # Eventually remove a trailing slash
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
404 _mountpoint="${_mountpoint%/}"
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
405 if [ -z "${_mountpoint}" ]; then
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
406 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
407 return 1
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
408 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
409
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
410 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
411 | {
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
412 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
413 # 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
414 [ "${_mounted}" = "yes" ] && continue
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
415 # 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
416 [ "${_canmount}" = "off" ] && continue
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
417 case "${_mp}" in
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
418 "none"|"legacy")
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
419 # 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
420 ;;
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
421 "${_rootds_mountpoint}"|"${_rootds_mountpoint}/"*)
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
422 #
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
423 # 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
424 # the parent datasets mountpoint
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
425 #
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 # Determine the mountpoint relative to the parent mountpoint
561
d173161a3a0f FIX: SC2295: expansions inside ${..} need to be quoted separately, otherwise they will match as a pattern.
Franz Glasner <fzglas.hg@dom66.de>
parents: 557
diff changeset
428 _relative_mp="${_mp#"${_rootds_mountpoint}"}"
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
429 # Eventually remove a trailing slash
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
430 _relative_mp="${_relative_mp%/}"
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
431 # The real effective full mountpoint
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
432 _real_mp="${_mountpoint}${_relative_mp}"
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 # 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
436 # 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
437 # is given.
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
438 #
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
439 if [ "${_mount_natural}" = "yes" ]; then
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
440 if [ "${_real_mp}" != "${_mp}" ]; then
248
0b5dbf394aa2 FIX: echo 2>&1 is not intended: use 1>&2 instead
Franz Glasner <fzglas.hg@dom66.de>
parents: 247
diff changeset
441 echo "ERROR: mountpoint mismatch" 1>&2
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
442 return 1
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
443 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
444 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
445
249
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
446 if [ \( "${_childs_only}" = "yes" \) -a \( "${_name}" = "${_dsname}" \) ]; then
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
447 echo "Skipping ${_name} because mounting childs only" 1>&2
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
448 else
249
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
449 if [ "${_dry_run}" = "yes" ]; then
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
450 echo "Would mount ${_name} on ${_real_mp}"
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
451 else
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
452 mkdir -p "${_real_mp}" 1> /dev/null 2> /dev/null || \
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
453 { echo "ERROR: cannot create mountpoint ${_real_mp}" 1>&2; return 1; }
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
454 echo "Mounting ${_name} on ${_real_mp}"
532
c615279bb797 Call mount and umount with absolute paths
Franz Glasner <fzglas.hg@dom66.de>
parents: 469
diff changeset
455 /sbin/mount -t zfs "${_name}" "${_real_mp}" || return 1
249
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
456 fi
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
457 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
458 ;;
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
459 *)
248
0b5dbf394aa2 FIX: echo 2>&1 is not intended: use 1>&2 instead
Franz Glasner <fzglas.hg@dom66.de>
parents: 247
diff changeset
460 echo "Skipping ${_name} because its configured ZFS mountpoint is not relative to given root dataset" 1>&2
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
461 ;;
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
462 esac
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
463 done
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
464
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
465 return 0
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
466 }
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
467 }
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
468
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
469
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
470 #
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
471 # "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
472 #
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
473 # 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
474 #
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
475 command_mount_tmpl() {
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
476 local _ds_base _ds_skel _mountpoint
249
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
477 local _opt_dry_run _opt_symlink
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
478
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
479 local _opt
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
480
244
6e632f459818 Rename "_dry_run" to the more proper "_opt_dry_run"
Franz Glasner <fzglas.hg@dom66.de>
parents: 243
diff changeset
481 _opt_dry_run=""
249
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
482 _opt_symlink=""
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
483
249
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
484 while getopts "LPnu" _opt ; do
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
485 case ${_opt} in
249
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
486 L)
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
487 _opt_symlink="yes"
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
488 ;;
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
489 P)
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
490 _opt_symlink="no"
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
491 ;;
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
492 n|u)
244
6e632f459818 Rename "_dry_run" to the more proper "_opt_dry_run"
Franz Glasner <fzglas.hg@dom66.de>
parents: 243
diff changeset
493 _opt_dry_run="yes"
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
494 ;;
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
495 \?|:)
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
496 return 2;
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
497 ;;
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
498 esac
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
499 done
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
500 shift $((OPTIND-1))
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
501 OPTIND=1
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
502
249
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
503 [ -z "${_opt_symlink}" ] && { echo "ERROR: -L or -P must be given" 1>&2; return 2; }
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
504
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
505 _ds_base="${1-}"
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
506 _ds_skel="${2-}"
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
507 _mountpoint="${3-}"
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
508
249
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
509 _do_mount "${_ds_base}" "${_mountpoint}" "${_opt_dry_run}" "" "" || return
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
510 if [ "${_opt_symlink}" = "yes" ]; then
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
511 if [ "${_opt_dry_run}" != "yes" ]; then
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
512 if [ ! -d "${_mountpoint}/skeleton" ]; then
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
513 mkdir "${_mountpoint}/skeleton" || return
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
514 fi
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
515 fi
249
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
516 _do_mount "${_ds_skel}" "${_mountpoint}/skeleton" "${_opt_dry_run}" "" "" || return
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
517 else
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
518 _do_mount "${_ds_skel}" "${_mountpoint}" "${_opt_dry_run}" "" "yes" || return
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
519 fi
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
520
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
521 return 0
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
522 }
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
523
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
524
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
525 #
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
526 # _do_umount dataset
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 _do_umount() {
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
529 local _dsname
249
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
530
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
531 local _name _mp _rest
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
532 local _rootds_mountpoint
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
533
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
534 _dsname="${1}"
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
535 [ -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
536
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
537 # Just determine whether the given dataset name exists
628
17209ce80536 Use the newly implemented "_get_zfs_mounts_for_dataset_tree()" where appropriate.
Franz Glasner <fzglas.hg@dom66.de>
parents: 561
diff changeset
538 _rootds_mountpoint="$(zfs list -H -o mountpoint -t filesystem "${_dsname}" 2>/dev/null)" || { err "dataset not found"; return 1; }
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
539
628
17209ce80536 Use the newly implemented "_get_zfs_mounts_for_dataset_tree()" where appropriate.
Franz Glasner <fzglas.hg@dom66.de>
parents: 561
diff changeset
540 _get_zfs_mounts_for_dataset_tree -r "${_dsname}" \
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
541 | {
628
17209ce80536 Use the newly implemented "_get_zfs_mounts_for_dataset_tree()" where appropriate.
Franz Glasner <fzglas.hg@dom66.de>
parents: 561
diff changeset
542 while IFS=$'\t' read -r _name _mp _rest ; do
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
543 echo "Umounting ${_name} on ${_mp}"
532
c615279bb797 Call mount and umount with absolute paths
Franz Glasner <fzglas.hg@dom66.de>
parents: 469
diff changeset
544 /sbin/umount "${_mp}" || return 1
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
545 done
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
546 return 0
545
566ecdd9e73b When analyzing the output of "mount -p" check for proper parsing capability: no improper mixing of tabs and spaces.
Franz Glasner <fzglas.hg@dom66.de>
parents: 537
diff changeset
547 }
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
548 }
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
549
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
550
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
551 #
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
552 # "umount-tmpl" -- umount skeleton and base datasets
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
553 #
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
554 # command_umount_tmpl ds-base ds-skeleton
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
555 #
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
556 command_umount_tmpl() {
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
557 local _ds_base _ds_skel
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
558
245
61861d36758c Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents: 244
diff changeset
559 _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
560
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
561 _ds_base="${1-}"
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
562 _ds_skel="${2-}"
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
563
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
564 [ -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
565 [ -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
566
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
567 _do_umount "${_ds_skel}" || return
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
568 _do_umount "${_ds_base}" || return
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
569
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
570 return 0
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
571 }
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
572
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
573
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
574 #
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
575 # "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
576 #
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
577 # 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
578 #
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
579 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
580 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
581
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
582 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
583
245
61861d36758c Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents: 244
diff changeset
584 _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
585
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
586 _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
587
248
0b5dbf394aa2 FIX: echo 2>&1 is not intended: use 1>&2 instead
Franz Glasner <fzglas.hg@dom66.de>
parents: 247
diff changeset
588 [ -z "${_mountpoint}" ] && { echo "ERROR: no mountpoint given" 1>&2; return 2; }
0b5dbf394aa2 FIX: echo 2>&1 is not intended: use 1>&2 instead
Franz Glasner <fzglas.hg@dom66.de>
parents: 247
diff changeset
589 [ -d "${_mountpoint}" ] || { echo "ERROR: mountpoint \`${_mountpoint}' does not exist" 1>&2; return 1; }
0b5dbf394aa2 FIX: echo 2>&1 is not intended: use 1>&2 instead
Franz Glasner <fzglas.hg@dom66.de>
parents: 247
diff changeset
590 [ -d "${_mountpoint}/skeleton" ] || { echo "WARNING: skeleton is not mounted at \`${_mountpoint}/skeleton'" 1>&2; }
242
59e933b81dcf First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents: 241
diff changeset
591
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
592 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
593 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
594 "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
595 _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
596 _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
597 [ -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
598 ( 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
599 ;;
59e933b81dcf First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents: 241
diff changeset
600 *)
59e933b81dcf First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents: 241
diff changeset
601 ( 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
602 ;;
59e933b81dcf First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents: 241
diff changeset
603 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
604 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
605 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
606 }
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
607
251
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
608 #:
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
609 #: Create a snapshot for a dataset and all of its children.
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
610 #:
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
611 #: Args:
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
612 #: $1: the datasets
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
613 #: $2: the name of the snapshot
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
614 #:
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
615 _do_snapshot() {
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
616 local _ds _snap_name
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
617
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
618 _ds="${1}"
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
619 _snap_name="${2}"
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
620
254
39268cba8c46 FIX: Error handling
Franz Glasner <fzglas.hg@dom66.de>
parents: 253
diff changeset
621 [ -z "${_ds}" ] && { echo "ERROR: no dataset given" 1>&2; return 2; }
39268cba8c46 FIX: Error handling
Franz Glasner <fzglas.hg@dom66.de>
parents: 253
diff changeset
622 [ -z "${_snap_name}" ] && { echo "ERROR: no snapshot name given" 1>&2; return 2; }
39268cba8c46 FIX: Error handling
Franz Glasner <fzglas.hg@dom66.de>
parents: 253
diff changeset
623
251
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
624 if ! zfs list -H -o name -t filesystem "${_ds}" 1> /dev/null 2> /dev/null ; then
254
39268cba8c46 FIX: Error handling
Franz Glasner <fzglas.hg@dom66.de>
parents: 253
diff changeset
625 echo "ERROR: parent dataset \`${_ds}' does not exist or is not available" 1>&2
251
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
626 return 1
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
627 fi
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
628
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
629 zfs snapshot -r "${_ds}@${_snap_name}" || return
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
630 }
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
631
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
632
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
633 #:
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
634 #: Implement the "snapshot-tmpl" command
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
635 #:
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
636 command_snapshot_tmpl() {
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
637 local _ds_base _ds_skel _snap_name
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
638
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
639 _ensure_no_options "$@"
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
640
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
641 _ds_base="${1-}"
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
642 _ds_skel="${2-}"
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
643 _snap_name="${3-}"
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
644
254
39268cba8c46 FIX: Error handling
Franz Glasner <fzglas.hg@dom66.de>
parents: 253
diff changeset
645 # Here extra checks because of better error messages possible
39268cba8c46 FIX: Error handling
Franz Glasner <fzglas.hg@dom66.de>
parents: 253
diff changeset
646 [ -z "${_ds_base}" ] && { echo "ERROR: no RO base dataset name given" 1>&2; return 2; }
39268cba8c46 FIX: Error handling
Franz Glasner <fzglas.hg@dom66.de>
parents: 253
diff changeset
647 [ -z "${_ds_skel}" ] && { echo "ERROR: no RW skeleton dataset name given" 1>&2; return 2; }
251
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
648
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
649 _do_snapshot "${_ds_base}" "${_snap_name}" || return
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
650 _do_snapshot "${_ds_skel}" "${_snap_name}" || return
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
651 return 0
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
652 }
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
653
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
654
256
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
655 #:
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
656 #: Implementation of "copy-skel"
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
657 #:
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
658 command_copy_skel() {
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
659 local _ds_source _snapshot_name _ds_target
380
6be930eb7490 Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 379
diff changeset
660 local _opt_symlink _opt_nomount _opt_canmount _opt_mountpoint _opt_nodata
256
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
661
270
dde5967d1e43 Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents: 256
diff changeset
662 local _opt _name _relative_name _root_canmount
256
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
663
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
664 _opt_symlink=""
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
665 _opt_nomount=""
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
666 _opt_canmount="-o canmount=on"
270
dde5967d1e43 Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents: 256
diff changeset
667 _opt_mountpoint=""
380
6be930eb7490 Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 379
diff changeset
668 _opt_nodata=""
256
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
669
380
6be930eb7490 Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 379
diff changeset
670 while getopts "ADLM:Pu" _opt ; do
256
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
671 case ${_opt} in
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
672 A)
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
673 _opt_canmount="-o canmount=noauto"
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
674 ;;
380
6be930eb7490 Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 379
diff changeset
675 D)
6be930eb7490 Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 379
diff changeset
676 _opt_nodata="yes"
6be930eb7490 Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 379
diff changeset
677 ;;
256
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
678 L)
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
679 _opt_symlink="yes"
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
680 ;;
270
dde5967d1e43 Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents: 256
diff changeset
681 M)
dde5967d1e43 Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents: 256
diff changeset
682 _opt_mountpoint="${OPTARG}"
dde5967d1e43 Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents: 256
diff changeset
683 ;;
256
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
684 P)
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
685 _opt_symlink="no"
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
686 ;;
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
687 u)
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
688 _opt_nomount="-u"
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
689 ;;
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
690 \?)
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
691 return 2;
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
692 ;;
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
693 esac
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
694 done
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
695 shift $((OPTIND-1))
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
696 OPTIND=1
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
697
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
698 [ -z "${_opt_symlink}" ] && { echo "ERROR: -L or -P must be given" 1>&2; return 2; }
380
6be930eb7490 Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 379
diff changeset
699 [ \( "${_opt_nodata}" = "yes" \) -a \( "${_opt_symlink}" = "yes" \) ] && { echo "ERROR: -L and -D are incompatible" 1>&2; return 2; }
256
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
700
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
701 _ds_source="${1-}"
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
702 _snapshot_name="${2-}"
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
703 _ds_target="${3-}"
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
704
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
705 [ -z "${_ds_source}" ] && { echo "ERROR: no source given" 1>&2; return 2; }
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
706 [ -z "${_snapshot_name}" ] && { echo "ERROR: no snapshot name given" 1>&2; return 2; }
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
707 [ -z "${_ds_target}" ] && { echo "ERROR: no target given" 1>&2; return 2; }
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
708
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
709 zfs list -r -t all -o name "${_ds_source}" \
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
710 | {
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
711 while IFS=$'\t' read -r _name ; do
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
712 if [ "${_name}" = "${_name%@*}@${_snapshot_name}" ]; then
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
713 echo "FOUND: $_name"
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
714 # Determine the relative name of the dataset
561
d173161a3a0f FIX: SC2295: expansions inside ${..} need to be quoted separately, otherwise they will match as a pattern.
Franz Glasner <fzglas.hg@dom66.de>
parents: 557
diff changeset
715 _relative_name="${_name#"${_ds_source}"}"
256
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
716 _relative_name="${_relative_name%@*}"
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
717 echo " -> $_relative_name"
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
718 if [ -z "${_relative_name}" ]; then
292
d40e6e40c315 Comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 278
diff changeset
719 #
d40e6e40c315 Comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 278
diff changeset
720 # Root
d40e6e40c315 Comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 278
diff changeset
721 #
256
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
722 if [ "${_opt_symlink}" = "yes" ]; then
270
dde5967d1e43 Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents: 256
diff changeset
723 _root_canmount="${_opt_canmount}"
256
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
724 else
270
dde5967d1e43 Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents: 256
diff changeset
725 _root_canmount="-o canmount=off"
dde5967d1e43 Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents: 256
diff changeset
726 fi
dde5967d1e43 Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents: 256
diff changeset
727 if [ -n "${_opt_mountpoint}" ]; then
330
8dbd11726ee5 Explicitely set "readonly=off" for the target datasets of a RW skeleton.
Franz Glasner <fzglas.hg@dom66.de>
parents: 308
diff changeset
728 zfs send -Lec -p -v "${_name}" | zfs receive ${_opt_nomount} -v ${_root_canmount} -o "mountpoint=${_opt_mountpoint}" -o readonly=off "${_ds_target}${_relative_name}"
270
dde5967d1e43 Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents: 256
diff changeset
729 else
330
8dbd11726ee5 Explicitely set "readonly=off" for the target datasets of a RW skeleton.
Franz Glasner <fzglas.hg@dom66.de>
parents: 308
diff changeset
730 zfs send -Lec -p -v "${_name}" | zfs receive ${_opt_nomount} -o readonly=off -v ${_root_canmount} -x mountpoint "${_ds_target}${_relative_name}"
256
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
731 fi
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
732 else
292
d40e6e40c315 Comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 278
diff changeset
733 #
d40e6e40c315 Comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 278
diff changeset
734 # Children
d40e6e40c315 Comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 278
diff changeset
735 #
256
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
736 if [ "${_relative_name}" = "/usr" ]; then
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
737 zfs send -Lec -p -v "${_name}" | zfs receive ${_opt_nomount} -v -o canmount=off -x mountpoint "${_ds_target}${_relative_name}"
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
738 else
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
739 zfs send -Lec -p -v "${_name}" | zfs receive ${_opt_nomount} -v ${_opt_canmount} -x mountpoint "${_ds_target}${_relative_name}"
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
740 fi
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
741 fi
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
742 fi
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
743 done
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
744 }
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
745 # Need only the filesystem data (no associated snapshots)
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
746 echo "Destroying unneeded snapshots ..."
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
747 zfs destroy -rv "${_ds_target}@${_snapshot_name}"
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
748 }
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
749
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
750
308
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
751 #:
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
752 #: Implement the "build-etcupdate-current-tmpl" command
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
753 #:
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
754 command_build_etcupdate_current_tmpl() {
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
755 local _directory _tarball
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
756
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
757 _directory="${1-}"
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
758 _tarball="${2-}"
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
759
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
760 [ -z "${_directory}" ] && { echo "ERROR: no directory given" 1>&2; return 2; }
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
761 [ -z "${_tarball}" ] && { echo "ERROR: no directory given" 1>&2; return 2; }
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
762 [ -e "${_tarball}" ] && { echo "ERROR: \`${_tarball}' exists already" 1>&2; return 1; }
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
763
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
764 if ! tar -cjf "${_tarball}" -C "${_directory}/var/db/etcupdate/current" . ; then
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
765 rm -f "${_tarball}" || true
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
766 return 1
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
767 fi
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
768 }
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
769
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
770
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
771 #:
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
772 #: Determine extra clone options with respect to the "mountpoint" property
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
773 #:
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
774 #: Args:
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
775 #: $1: the dataset
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
776 #:
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
777 #: Output (stdout)
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
778 #: The extra clone arguments
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
779 #:
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
780 #: Exit:
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
781 #: On unexpected source values
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
782 #:
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
783 _get_clone_extra_prop_for_mountpoint() {
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
784 local ds
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
785
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
786 local _mp_name _mp_property _mp_value _mp_source
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
787
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
788 ds="${1}"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
789
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
790 zfs get -H mountpoint "${ds}" \
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
791 | {
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
792 IFS=$'\t' read -r _mp_name _mp_property _mp_value _mp_source
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
793 case "${_mp_source}" in
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
794 local)
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
795 echo -n "-o mountpoint=${_mp_value}"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
796 ;;
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
797 default|inherited*)
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
798 ;;
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
799 temporary*|received*|'-'|none)
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
800 # XXX FIXME: Is this relevant on FreeBSD?
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
801 echo "ERROR: Unexpected SOURCE \"${_mp_source}\" for mountpoint at \`${_mp_value}'" 1>&2
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
802 exit 1
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
803 ;;
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
804 *)
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
805 echo "ERROR: Unexpected SOURCE for mountpoint property at \`${_mp_value}'" 1>&2
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
806 exit 1;
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
807 ;;
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
808 esac
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
809 if [ "${_mp_value}" != "${_directory}" ]; then
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
810 echo "WARNING: dataset is not mounted at its configured mountpoint but elsewhere (probably via \"mount -t zfs\")" 1>&2
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
811 fi
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
812 }
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
813 }
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
814
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
815
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
816 #:
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
817 #: Determine the "canmount" property for a dataset
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
818 #:
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
819 #: Args:
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
820 #: $1: the dataset
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
821 #:
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
822 #: Output (stdout):
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
823 #: The local value or "DEFAULT" for the (unset) default
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
824 #:
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
825 #: Exit:
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
826 #: On unexpected source values
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
827 #:
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
828 _get_canmount_setting_for_dataset() {
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
829 local ds
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
830
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
831 local _cm_name _cm_property _cm_value _cm_source
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
832
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
833 ds="${1}"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
834
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
835 zfs get -H canmount "${ds}" \
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
836 | {
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
837 IFS=$'\t' read -r _cm_name _cm_property _cm_value _cm_source
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
838 case "${_cm_source}" in
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
839 local)
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
840 echo -n "canmount=${_cm_value}"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
841 ;;
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
842 default)
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
843 echo -n "DEFAULT"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
844 ;;
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
845 inherited|temporary*|received*|'-'|none)
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
846 # XXX FIXME: Is this relevant on FreeBSD?
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
847 echo "ERROR: Unexpected SOURCE \"${_cm_source}\" for canmount at \`${_cm_name}'" 1>&2
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
848 exit 1
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
849 ;;
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
850 *)
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
851 echo "ERROR: Unexpected SOURCE for canmount property at \`${_cm_name}'" 1>&2
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
852 exit 1;
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
853 ;;
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
854 esac
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
855 }
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
856 }
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
857
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
858
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
859 #:
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
860 #: Implement the "freebsd-update" command for a thin jail
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
861 #:
418
30956bb06421 Drop a comment about "certctl rehash" in etcupdate
Franz Glasner <fzglas.hg@dom66.de>
parents: 412
diff changeset
862 #: .. note:: FreeBSD's :command:`etcupdate` also executes
30956bb06421 Drop a comment about "certctl rehash" in etcupdate
Franz Glasner <fzglas.hg@dom66.de>
parents: 412
diff changeset
863 #: :command:`certctl rehash` if certs are to be added or removed!
30956bb06421 Drop a comment about "certctl rehash" in etcupdate
Franz Glasner <fzglas.hg@dom66.de>
parents: 412
diff changeset
864 #:
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
865 command_freebsd_update() {
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
866 local _directory _new_origin _etcupdate_tarball
340
d3b5fe2712ca Implement "ftjail freebsd-update -o" for a more exhaustige check the clone's origin
Franz Glasner <fzglas.hg@dom66.de>
parents: 339
diff changeset
867 local _opt_keep _opt_old_origin
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
868
557
3afebbaf613b ftjail: mounting and unmounting in freebsd-update now handles spaces in devices/datasets and mountpoints properly.
Franz Glasner <fzglas.hg@dom66.de>
parents: 556
diff changeset
869 local _res _jailname _dir_mounts _dir_fn_fstab _dir_fn_fstab2
3afebbaf613b ftjail: mounting and unmounting in freebsd-update now handles spaces in devices/datasets and mountpoints properly.
Franz Glasner <fzglas.hg@dom66.de>
parents: 556
diff changeset
870 local _dir_basename _dir_fn_tldir
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
871 local _root_dataset _root_mountpoint _root_type _root_options
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
872 local _clone_extra_props _canmount_prop
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
873 local _line _opt
340
d3b5fe2712ca Implement "ftjail freebsd-update -o" for a more exhaustige check the clone's origin
Franz Glasner <fzglas.hg@dom66.de>
parents: 339
diff changeset
874 local _root_readonly _root_origin
342
89877869a665 Create all temporary files within a unique temporary directory
Franz Glasner <fzglas.hg@dom66.de>
parents: 341
diff changeset
875 local _u_tmpdir
432
d46315901037 Before doing a freebsd-update in a thin jail also check for opened additional log sockets.
Franz Glasner <fzglas.hg@dom66.de>
parents: 418
diff changeset
876 local _add_log_sock
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
877
339
e1d6807b0c4d Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents: 338
diff changeset
878 _opt_keep="no"
340
d3b5fe2712ca Implement "ftjail freebsd-update -o" for a more exhaustige check the clone's origin
Franz Glasner <fzglas.hg@dom66.de>
parents: 339
diff changeset
879 _opt_old_origin=""
d3b5fe2712ca Implement "ftjail freebsd-update -o" for a more exhaustige check the clone's origin
Franz Glasner <fzglas.hg@dom66.de>
parents: 339
diff changeset
880 while getopts "ko:" _opt ; do
339
e1d6807b0c4d Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents: 338
diff changeset
881 case ${_opt} in
e1d6807b0c4d Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents: 338
diff changeset
882 k)
e1d6807b0c4d Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents: 338
diff changeset
883 _opt_keep="yes"
e1d6807b0c4d Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents: 338
diff changeset
884 ;;
340
d3b5fe2712ca Implement "ftjail freebsd-update -o" for a more exhaustige check the clone's origin
Franz Glasner <fzglas.hg@dom66.de>
parents: 339
diff changeset
885 o)
d3b5fe2712ca Implement "ftjail freebsd-update -o" for a more exhaustige check the clone's origin
Franz Glasner <fzglas.hg@dom66.de>
parents: 339
diff changeset
886 _opt_old_origin="$OPTARG"
d3b5fe2712ca Implement "ftjail freebsd-update -o" for a more exhaustige check the clone's origin
Franz Glasner <fzglas.hg@dom66.de>
parents: 339
diff changeset
887 ;;
339
e1d6807b0c4d Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents: 338
diff changeset
888 \?|:)
e1d6807b0c4d Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents: 338
diff changeset
889 return 2;
e1d6807b0c4d Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents: 338
diff changeset
890 ;;
e1d6807b0c4d Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents: 338
diff changeset
891 esac
e1d6807b0c4d Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents: 338
diff changeset
892 done
e1d6807b0c4d Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents: 338
diff changeset
893 shift $((OPTIND-1))
e1d6807b0c4d Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents: 338
diff changeset
894 OPTIND=1
e1d6807b0c4d Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents: 338
diff changeset
895
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
896 _directory="${1-}"
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
897 _new_origin="${2-}"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
898 _etcupdate_tarball="${3-}"
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
899
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
900 [ -z "${_directory}" ] && { echo "ERROR: no directory given" 1>&2; return 2; }
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
901 [ -d "${_directory}" ] || { echo "ERROR: directory \`${_directory}' does not exist" 1>&2; return 1; }
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
902
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
903 [ -z "${_new_origin}" ] && { echo "ERROR: no new origin given" 1>&2; return 2; }
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
904 zfs list -H -o name -t snapshot "${_new_origin}" >/dev/null || { echo "ERROR: new origin does not exist" 1>&2; return 1; }
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
905 if [ -n "${_etcupdate_tarball}" ]; then
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
906 [ -f "${_etcupdate_tarball}" ] || { echo "ERROR: given etcupdate tarball does not exist " 1>&2; return 1; }
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
907 fi
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
908
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
909 _dir_basename="$(basename ${_directory})"
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
910
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
911 set +e
449
6127213b2c8f FIX: Remove spurious character
Franz Glasner <fzglas.hg@dom66.de>
parents: 448
diff changeset
912 _jailname=$(_get_jail_from_path "${_directory}")
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
913 _res=$?
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
914 set -e
450
ccd6c36da449 Change return values from _get_jail_from_path(): swap values for "dying" and "not found"
Franz Glasner <fzglas.hg@dom66.de>
parents: 449
diff changeset
915 if [ ${_res} -ne 3 ] ; then
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
916 if [ ${_res} -ne 0 ] ; then
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
917 return ${_res}
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
918 else
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
919 echo "ERROR: Please stop the \`${_jailname}' jail" >&2
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
920 return 1
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
921 fi
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
922 fi
432
d46315901037 Before doing a freebsd-update in a thin jail also check for opened additional log sockets.
Franz Glasner <fzglas.hg@dom66.de>
parents: 418
diff changeset
923 #
d46315901037 Before doing a freebsd-update in a thin jail also check for opened additional log sockets.
Franz Glasner <fzglas.hg@dom66.de>
parents: 418
diff changeset
924 # Check whether additional log sockets are opened at their default
d46315901037 Before doing a freebsd-update in a thin jail also check for opened additional log sockets.
Franz Glasner <fzglas.hg@dom66.de>
parents: 418
diff changeset
925 # locations. Because they hinder proper unmounting of filesystems.
d46315901037 Before doing a freebsd-update in a thin jail also check for opened additional log sockets.
Franz Glasner <fzglas.hg@dom66.de>
parents: 418
diff changeset
926 #
d46315901037 Before doing a freebsd-update in a thin jail also check for opened additional log sockets.
Franz Glasner <fzglas.hg@dom66.de>
parents: 418
diff changeset
927 for _add_log_sock in /var/run/log /var/run/logpriv ; do
d46315901037 Before doing a freebsd-update in a thin jail also check for opened additional log sockets.
Franz Glasner <fzglas.hg@dom66.de>
parents: 418
diff changeset
928 if [ -S "${_directory}${_add_log_sock}" ]; then
d46315901037 Before doing a freebsd-update in a thin jail also check for opened additional log sockets.
Franz Glasner <fzglas.hg@dom66.de>
parents: 418
diff changeset
929 echo "ERROR: additional log socket is open at \`${_directory}${_add_log_sock}'" >&2
d46315901037 Before doing a freebsd-update in a thin jail also check for opened additional log sockets.
Franz Glasner <fzglas.hg@dom66.de>
parents: 418
diff changeset
930 return 1
d46315901037 Before doing a freebsd-update in a thin jail also check for opened additional log sockets.
Franz Glasner <fzglas.hg@dom66.de>
parents: 418
diff changeset
931 fi
d46315901037 Before doing a freebsd-update in a thin jail also check for opened additional log sockets.
Franz Glasner <fzglas.hg@dom66.de>
parents: 418
diff changeset
932 done
433
91b275a3facf Also check for any open files and memory mapping within the jail by using "procstat"
Franz Glasner <fzglas.hg@dom66.de>
parents: 432
diff changeset
933 #
91b275a3facf Also check for any open files and memory mapping within the jail by using "procstat"
Franz Glasner <fzglas.hg@dom66.de>
parents: 432
diff changeset
934 # Check whether there are any open files within the jail.
91b275a3facf Also check for any open files and memory mapping within the jail by using "procstat"
Franz Glasner <fzglas.hg@dom66.de>
parents: 432
diff changeset
935 #
91b275a3facf Also check for any open files and memory mapping within the jail by using "procstat"
Franz Glasner <fzglas.hg@dom66.de>
parents: 432
diff changeset
936 # "procstat file" also lists fifo, socket, message queue, kgueue et al.
91b275a3facf Also check for any open files and memory mapping within the jail by using "procstat"
Franz Glasner <fzglas.hg@dom66.de>
parents: 432
diff changeset
937 # file types.
91b275a3facf Also check for any open files and memory mapping within the jail by using "procstat"
Franz Glasner <fzglas.hg@dom66.de>
parents: 432
diff changeset
938 #
91b275a3facf Also check for any open files and memory mapping within the jail by using "procstat"
Franz Glasner <fzglas.hg@dom66.de>
parents: 432
diff changeset
939 # Note that procstat places extra whitespace at the end of lines sometimes.
91b275a3facf Also check for any open files and memory mapping within the jail by using "procstat"
Franz Glasner <fzglas.hg@dom66.de>
parents: 432
diff changeset
940 #
91b275a3facf Also check for any open files and memory mapping within the jail by using "procstat"
Franz Glasner <fzglas.hg@dom66.de>
parents: 432
diff changeset
941 #
537
62cd970aea9c Replace the use of "deprecated" egrep calls with "grep -E"
Franz Glasner <fzglas.hg@dom66.de>
parents: 532
diff changeset
942 if procstat -a file | /usr/bin/grep -E '['$'\t '']+'"${_directory}"'(/|(['$'\t '']*)$)' ; then
433
91b275a3facf Also check for any open files and memory mapping within the jail by using "procstat"
Franz Glasner <fzglas.hg@dom66.de>
parents: 432
diff changeset
943 echo "ERROR: There are open files within the jail" >&2
91b275a3facf Also check for any open files and memory mapping within the jail by using "procstat"
Franz Glasner <fzglas.hg@dom66.de>
parents: 432
diff changeset
944 return 1
91b275a3facf Also check for any open files and memory mapping within the jail by using "procstat"
Franz Glasner <fzglas.hg@dom66.de>
parents: 432
diff changeset
945 fi
91b275a3facf Also check for any open files and memory mapping within the jail by using "procstat"
Franz Glasner <fzglas.hg@dom66.de>
parents: 432
diff changeset
946 # The same for memory mappings
537
62cd970aea9c Replace the use of "deprecated" egrep calls with "grep -E"
Franz Glasner <fzglas.hg@dom66.de>
parents: 532
diff changeset
947 if procstat -a vm | /usr/bin/grep -E '['$'\t '']+'"${_directory}"'(/|(['$'\t '']*)$)' ; then
433
91b275a3facf Also check for any open files and memory mapping within the jail by using "procstat"
Franz Glasner <fzglas.hg@dom66.de>
parents: 432
diff changeset
948 echo "ERROR: There are open memory mappings within the jail" >&2
91b275a3facf Also check for any open files and memory mapping within the jail by using "procstat"
Franz Glasner <fzglas.hg@dom66.de>
parents: 432
diff changeset
949 return 1
91b275a3facf Also check for any open files and memory mapping within the jail by using "procstat"
Franz Glasner <fzglas.hg@dom66.de>
parents: 432
diff changeset
950 fi
432
d46315901037 Before doing a freebsd-update in a thin jail also check for opened additional log sockets.
Franz Glasner <fzglas.hg@dom66.de>
parents: 418
diff changeset
951
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
952 _dir_mounts="$(_get_mounts_at_directory "${_directory}")"
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
953
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
954 #
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
955 # Check preconditions thoroughly!
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
956 #
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
957 # Check that the first item/line is a read-only ZFS mount directly
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
958 # at the given directory. This must also be its configured
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
959 # mountpoint in ZFS.
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
960 # Also check that it is a clone proper.
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
961 #
555
2fda9ab57359 Normalize the output of _get_mounts_at_directory() to use TABs as field separators only.
Franz Glasner <fzglas.hg@dom66.de>
parents: 550
diff changeset
962 IFS=$'\t' read -r _root_dataset _root_mountpoint _root_type _root_options _line <<EOF4tHGCSS
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
963 ${_dir_mounts}
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
964 EOF4tHGCSS
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
965 [ "${_root_mountpoint}" != "${_directory}" ] && { echo "ERROR: found root mountpoint does not match given directory" 1>&2; return 1; }
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
966 [ "${_root_type}" != "zfs" ] && { echo "ERROR: root mountpoint is not from a ZFS dataset" 1>&2; return 1; }
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
967 _root_readonly="$(zfs list -H -o readonly "${_root_dataset}")"
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
968 [ "${_root_readonly}" != "on" ] && { echo "ERROR: the root dataset is not mounted read-only" 1>&2; return 1; }
340
d3b5fe2712ca Implement "ftjail freebsd-update -o" for a more exhaustige check the clone's origin
Franz Glasner <fzglas.hg@dom66.de>
parents: 339
diff changeset
969 _root_origin="$(zfs list -H -o origin "${_root_dataset}")"
d3b5fe2712ca Implement "ftjail freebsd-update -o" for a more exhaustige check the clone's origin
Franz Glasner <fzglas.hg@dom66.de>
parents: 339
diff changeset
970 if [ -n "${_opt_old_origin}" ]; then
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
971 [ "${_opt_old_origin}" != "${_root_origin}" ] && { echo "ERROR: origin mismatch" 1>&2; return 1; }
340
d3b5fe2712ca Implement "ftjail freebsd-update -o" for a more exhaustige check the clone's origin
Franz Glasner <fzglas.hg@dom66.de>
parents: 339
diff changeset
972 else
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
973 [ "${_root_origin}" = '-' ] && { echo "ERROR: the root dataset is not a ZFS clone" 1>&2; return 1; }
340
d3b5fe2712ca Implement "ftjail freebsd-update -o" for a more exhaustige check the clone's origin
Franz Glasner <fzglas.hg@dom66.de>
parents: 339
diff changeset
974 fi
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
975
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
976 # Determine we need to clone with a custom (non inherited) "mountpoint"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
977 _clone_extra_props="$(_get_clone_extra_prop_for_mountpoint "${_root_dataset}") "
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
978 # Determine we need to clone with a custom (non inherited) "canmount"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
979 _canmount_prop="$(_get_canmount_setting_for_dataset "${_root_dataset}")"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
980
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
981 #
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
982 # XXX FIXME: should we check that _root_options equals "ro" or
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
983 # start with "ro,"
340
d3b5fe2712ca Implement "ftjail freebsd-update -o" for a more exhaustige check the clone's origin
Franz Glasner <fzglas.hg@dom66.de>
parents: 339
diff changeset
984 # _root_origin="$(zfs list -H -o origin "${_root_dataset}")"
d3b5fe2712ca Implement "ftjail freebsd-update -o" for a more exhaustige check the clone's origin
Franz Glasner <fzglas.hg@dom66.de>
parents: 339
diff changeset
985
342
89877869a665 Create all temporary files within a unique temporary directory
Franz Glasner <fzglas.hg@dom66.de>
parents: 341
diff changeset
986 _u_tmpdir="$(env TMPDIR=/var/tmp mktemp -d -t ftjail_${_dir_basename})"
89877869a665 Create all temporary files within a unique temporary directory
Franz Glasner <fzglas.hg@dom66.de>
parents: 341
diff changeset
987 [ -z "${_u_tmpdir}" ] && { echo "ERROR: cannot create unique temp dir" 1>&2; return 1; }
557
3afebbaf613b ftjail: mounting and unmounting in freebsd-update now handles spaces in devices/datasets and mountpoints properly.
Franz Glasner <fzglas.hg@dom66.de>
parents: 556
diff changeset
988 # The fstab that is corrently mounted at relevant locations (normalized)
342
89877869a665 Create all temporary files within a unique temporary directory
Franz Glasner <fzglas.hg@dom66.de>
parents: 341
diff changeset
989 _dir_fn_fstab="${_u_tmpdir}/fstab"
557
3afebbaf613b ftjail: mounting and unmounting in freebsd-update now handles spaces in devices/datasets and mountpoints properly.
Franz Glasner <fzglas.hg@dom66.de>
parents: 556
diff changeset
990 # The very same fstab -- but with spaces replaced by \040
3afebbaf613b ftjail: mounting and unmounting in freebsd-update now handles spaces in devices/datasets and mountpoints properly.
Franz Glasner <fzglas.hg@dom66.de>
parents: 556
diff changeset
991 _dir_fn_fstab2="${_u_tmpdir}/fstab2"
556
a593dce19f54 ftjail: FIX: do not append to a fstab but overwrite completely
Franz Glasner <fzglas.hg@dom66.de>
parents: 555
diff changeset
992 printf '%s' "${_dir_mounts}" >"${_dir_fn_fstab}"
557
3afebbaf613b ftjail: mounting and unmounting in freebsd-update now handles spaces in devices/datasets and mountpoints properly.
Franz Glasner <fzglas.hg@dom66.de>
parents: 556
diff changeset
993 # Replace all spaces with a sequence that is understood by mount
3afebbaf613b ftjail: mounting and unmounting in freebsd-update now handles spaces in devices/datasets and mountpoints properly.
Franz Glasner <fzglas.hg@dom66.de>
parents: 556
diff changeset
994 LC_ALL=C /usr/bin/sed -e 's/ /\\040/g' <"${_dir_fn_fstab}" >"${_dir_fn_fstab2}"
342
89877869a665 Create all temporary files within a unique temporary directory
Franz Glasner <fzglas.hg@dom66.de>
parents: 341
diff changeset
995 _dir_fn_tldir="${_u_tmpdir}/tldirs"
555
2fda9ab57359 Normalize the output of _get_mounts_at_directory() to use TABs as field separators only.
Franz Glasner <fzglas.hg@dom66.de>
parents: 550
diff changeset
996 LC_ALL=C /usr/bin/find "${_directory}" -depth 1 -type d 2>/dev/null | LC_ALL=C /usr/bin/sort >>"${_dir_fn_tldir}"
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
997
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
998 # Unmount in reverse order: unmount can do it for us
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
999 echo "Unmounting all datasets mounted at \`${_directory}'"
557
3afebbaf613b ftjail: mounting and unmounting in freebsd-update now handles spaces in devices/datasets and mountpoints properly.
Franz Glasner <fzglas.hg@dom66.de>
parents: 556
diff changeset
1000 /sbin/umount -a -F "${_dir_fn_fstab2}" -v
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1001
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1002 #
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1003 # XXX TBD: Hooks to create some new top-level dirs (/srv /proc et
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1004 # al.) if needed: clone RW, mount, make the dirs,
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1005 # umount, make the clone RO and continue "normally" by
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1006 # completely mounting the stored fstab.
339
e1d6807b0c4d Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents: 338
diff changeset
1007 #
e1d6807b0c4d Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents: 338
diff changeset
1008
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1009 #
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1010 # Destroy the current read-only root clone and make a new clone based
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1011 # on the given new origin.
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1012 # The new clone temporarily is RW and is not to be mounted automatically.
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1013 # These both properties are set again below after the new base is
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1014 # adjusted properly.
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1015 #
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1016 echo "Destroying the cloned root dataset \`${_root_dataset}'"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1017 zfs destroy -v "${_root_dataset}"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1018 echo "Cloning a new root dataset \`${_root_dataset}' from new origin \`${_new_origin}'"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1019 zfs clone -o readonly=off -o canmount=noauto ${_clone_extra_props} "${_new_origin}" "${_root_dataset}"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1020 #
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1021 # NOTE: Always mount with "mount -t zfs" because a custom
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1022 # mountpoint is not reflected in the "mountpoint"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1023 # property. So in scripts to be sure to unmount and re-mount
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1024 # at the same location always use "mount -t zfs".
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1025 #
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1026 echo "Remounting only the root dataset at \`${_directory}'"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1027 [ ! -d "${_directory}" ] && mkdir "${_directory}"
532
c615279bb797 Call mount and umount with absolute paths
Franz Glasner <fzglas.hg@dom66.de>
parents: 469
diff changeset
1028 /sbin/mount -t zfs "${_root_dataset}" "${_directory}"
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1029 #
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1030 # Re-create all currently missing top-level dirs (aka mountpoint)
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1031 # in the new clone. Most probably they serve as mountpoints for other
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1032 # datasets.
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1033 #
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1034 # XXX FIXME: Re-create the current mode bits and/or ACLs also.
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1035 # But most probably they are set properly in the mounted
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1036 # datasets.
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1037 #
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1038 echo "Recreating missing top-level directories"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1039 cat "${_dir_fn_tldir}" \
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1040 | {
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1041 while IFS='' read -r _line ; do
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1042 if [ ! -d "${_line}" ]; then
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1043 echo "Recreating top-level directory: ${_line}"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1044 mkdir "${_line}"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1045 fi
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1046 done
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1047 }
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1048 echo "Unmounting the new root dataset"
532
c615279bb797 Call mount and umount with absolute paths
Franz Glasner <fzglas.hg@dom66.de>
parents: 469
diff changeset
1049 /sbin/umount "${_directory}"
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1050 echo "Re-setting some ZFS properties on the new cloned dataset"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1051 zfs set readonly=on "${_root_dataset}"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1052 #
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1053 # Copy "canmount" properly last because it has been set to "noauto"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1054 # temporarily.
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1055 #
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1056 if [ -n "${_canmount_prop}" ]; then
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1057 if [ "${_canmount_prop}" = "DEFAULT" ]; then
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1058 #
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1059 # "zfs inherit" is not possible for "canmount".
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1060 # Use "inherit -S" to simulate a reset to "default" somewhat
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1061 #
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1062 # See also: https://github.com/openzfs/zfs/issues/5733
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1063 #
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1064 zfs inherit -S canmount "${_root_dataset}"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1065 else
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1066 zfs set "${_canmount_prop}" "${_root_dataset}"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1067 fi
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1068 fi
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1069
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1070 # Mount again
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1071 echo "Mounting all datasets rooted at \`${_directory}'"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1072 [ ! -d "${_directory}" ] && mkdir "${_directory}"
557
3afebbaf613b ftjail: mounting and unmounting in freebsd-update now handles spaces in devices/datasets and mountpoints properly.
Franz Glasner <fzglas.hg@dom66.de>
parents: 556
diff changeset
1073 /sbin/mount -a -F "${_dir_fn_fstab2}" -v
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1074
367
c5b1647cedb5 Comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 342
diff changeset
1075 # Update and/or merge configs
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1076 if [ -n "${_etcupdate_tarball}" ]; then
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1077 echo "Calling etcupdate for DESTDIR=${_directory}"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1078 etcupdate -D "${_directory}" -t "${_etcupdate_tarball}"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1079 fi
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1080
339
e1d6807b0c4d Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents: 338
diff changeset
1081 if [ "${_opt_keep}" != "yes" ]; then
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1082 echo "Cleaning up..."""
342
89877869a665 Create all temporary files within a unique temporary directory
Franz Glasner <fzglas.hg@dom66.de>
parents: 341
diff changeset
1083 [ -n "${_u_tmpdir}" ] && [ -d "${_u_tmpdir}" ] && rm -rvf "${_u_tmpdir}"
339
e1d6807b0c4d Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents: 338
diff changeset
1084 fi
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1085 echo "Done."
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1086 }
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1087
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1088
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
1089 #
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1090 # Global option handling
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1091 #
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1092 while getopts "Vh" _opt ; do
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1093 case ${_opt} in
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1094 V)
386
84d2735fe7f6 Simplified version tagging a lot: it is also faster now.
Franz Glasner <fzglas.hg@dom66.de>
parents: 380
diff changeset
1095 printf 'ftjail %s\n' '@@SIMPLEVERSIONSTR@@'
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1096 exit 0
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1097 ;;
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1098 h)
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1099 echo "${USAGE}"
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1100 exit 0
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1101 ;;
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1102 \?)
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1103 exit 2;
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1104 ;;
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1105 *)
250
c4d835ccb4ae Implement configure for symlinked skeletons.
Franz Glasner <fzglas.hg@dom66.de>
parents: 249
diff changeset
1106 echo "ERROR: option handling failed" 1>&2
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1107 exit 2
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1108 ;;
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1109 esac
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1110 done
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1111
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1112 #
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1113 # 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
1114 # command-local options.
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1115 #
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1116 shift $((OPTIND-1))
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1117 OPTIND=1
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1118
250
c4d835ccb4ae Implement configure for symlinked skeletons.
Franz Glasner <fzglas.hg@dom66.de>
parents: 249
diff changeset
1119 test $# -gt 0 || { echo "ERROR: no command given" 1>&2; exit 2; }
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1120
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1121 command="$1"
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1122 shift
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1123
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1124 case "${command}" in
235
85aea8ca1ab8 Some work on datasets-tmpl
Franz Glasner <fzglas.hg@dom66.de>
parents: 234
diff changeset
1125 datasets-tmpl)
85aea8ca1ab8 Some work on datasets-tmpl
Franz Glasner <fzglas.hg@dom66.de>
parents: 234
diff changeset
1126 command_datasets_tmpl "$@"
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1127 ;;
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
1128 mount-tmpl)
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
1129 command_mount_tmpl "$@"
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
1130 ;;
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
1131 umount-tmpl|unmount-tmpl)
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
1132 command_umount_tmpl "$@"
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
1133 ;;
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
1134 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
1135 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
1136 ;;
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
1137 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
1138 command_populate_tmpl "$@"
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1139 ;;
251
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
1140 snapshot-tmpl)
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
1141 command_snapshot_tmpl "$@"
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
1142 ;;
256
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
1143 copy-skel)
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
1144 command_copy_skel "$@"
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
1145 ;;
308
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
1146 build-etcupdate-current-tmpl)
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
1147 command_build_etcupdate_current_tmpl "$@"
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
1148 ;;
250
c4d835ccb4ae Implement configure for symlinked skeletons.
Franz Glasner <fzglas.hg@dom66.de>
parents: 249
diff changeset
1149 configure)
c4d835ccb4ae Implement configure for symlinked skeletons.
Franz Glasner <fzglas.hg@dom66.de>
parents: 249
diff changeset
1150 echo "ERROR: use \`fjail configure' instead" 1>&2;
c4d835ccb4ae Implement configure for symlinked skeletons.
Franz Glasner <fzglas.hg@dom66.de>
parents: 249
diff changeset
1151 exit 2
c4d835ccb4ae Implement configure for symlinked skeletons.
Franz Glasner <fzglas.hg@dom66.de>
parents: 249
diff changeset
1152 ;;
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1153 freebsd-update)
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1154 command_freebsd_update "$@"
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1155 ;;
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1156 *)
250
c4d835ccb4ae Implement configure for symlinked skeletons.
Franz Glasner <fzglas.hg@dom66.de>
parents: 249
diff changeset
1157 echo "ERROR: unknown command \`${command}'" 1>&2
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1158 exit 2
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1159 ;;
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1160 esac