annotate sbin/ftjail @ 658:260a81d769a6

Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update". All checks that "ftjail freebsd-update" does are replicated in "ftjail check-freebsd-update".
author Franz Glasner <fzglas.hg@dom66.de>
date Sat, 28 Sep 2024 19:12:05 +0200
parents db22766df6a4
children 82a98db83a13
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
643
4f2257ea7d0a shellcheck: disable SC2034: VERSION appears unused...
Franz Glasner <fzglas.hg@dom66.de>
parents: 633
diff changeset
18 # shellcheck disable=SC2034 # VERSION appears unused
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
19 VERSION='@@VERSION@@'
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21 USAGE='
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22 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
23
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24 OPTIONS:
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
26 -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
27
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
28 -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
29
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
30 COMMANDS:
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
31
300
901b0e3c0dab All manual pages for ftjail done
Franz Glasner <fzglas.hg@dom66.de>
parents: 297
diff changeset
32 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
33
300
901b0e3c0dab All manual pages for ftjail done
Franz Glasner <fzglas.hg@dom66.de>
parents: 297
diff changeset
34 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
35
243
d3fa59e2c5fe Typo in docs
Franz Glasner <fzglas.hg@dom66.de>
parents: 242
diff changeset
36 umount-tmpl BASE-RO SKELETON-RW
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
37
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
38 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
39
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
40 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
41
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
42 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
43
380
6be930eb7490 Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 379
diff changeset
44 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
45
308
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
46 build-etcupdate-current-tmpl DIRECTORY TARBALL
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
47
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
48 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
49
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
50 ENVIRONMENT:
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
51
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
52 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
53
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
54 DESCRIPTION:
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
55
307
23bcbbbd99ea FIX: Rename "ftjail-populate.rst" to "ftjail-populate-tmpl"
Franz Glasner <fzglas.hg@dom66.de>
parents: 300
diff changeset
56 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
57 filesystem.
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
58 '
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
59
443
071f24359eef Move "_ensure_no_optios()" into common.subr
Franz Glasner <fzglas.hg@dom66.de>
parents: 438
diff changeset
60
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
61 _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
62 [ "${_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
63 . "${_p_datadir}/common.subr"
658
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
64 . "${_p_datadir}/farray.sh"
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
65
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
66
443
071f24359eef Move "_ensure_no_optios()" into common.subr
Franz Glasner <fzglas.hg@dom66.de>
parents: 438
diff changeset
67 # Reset to standard umask
071f24359eef Move "_ensure_no_optios()" into common.subr
Franz Glasner <fzglas.hg@dom66.de>
parents: 438
diff changeset
68 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
69
61861d36758c Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents: 244
diff changeset
70
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
71 #
236
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
72 # 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
73 #
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
74 command_datasets_tmpl_base() {
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
75 local _p_base _name
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 _opt_dry_run
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
78
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
79 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
80
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
81 _opt_dry_run=""
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
82 while getopts "nu" _opt ; do
655
5ba31e3748ca ftjail: quote all option expansions
Franz Glasner <fzglas.hg@dom66.de>
parents: 654
diff changeset
83 case "${_opt}" in
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
84 n|u)
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
85 _opt_dry_run="yes"
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
86 ;;
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 return 2;
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
89 ;;
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
90 esac
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
91 done
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
92 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
93 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
94
236
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
95 _p_base="${1-}"
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
96 _name="${2-}"
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
97
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
98 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
99 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
100 return 2
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
101 fi
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
102 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
103 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
104 return 2
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
105 fi
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
106
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
107 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
108 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
109 return 1
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
110 fi
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
111 _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
112 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
113 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
114 return 1
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
115 fi
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
116
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
117
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
118 [ "${_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
119
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
120 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
121 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
122
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
123 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
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
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 # 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
130 #
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
131 command_datasets_tmpl_skel() {
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
132 local _p_base _name
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
133
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
134 local _opt_dry_run _opt_symlink
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
135
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
136 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
137
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
138 _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
139 _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
140
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 while getopts "LPnu" _opt ; do
655
5ba31e3748ca ftjail: quote all option expansions
Franz Glasner <fzglas.hg@dom66.de>
parents: 654
diff changeset
142 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
143 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
144 _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
145 ;;
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 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
147 _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
148 ;;
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
149 n|u)
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
150 _opt_dry_run="yes"
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
151 ;;
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
152 \?|:)
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
153 return 2;
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
154 ;;
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
155 esac
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
156 done
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
157 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
158 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
159
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
160 [ -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
161
236
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
162 _p_skel="${1-}"
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
163 _name="${2-}"
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
164
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
165 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
166 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
167 return 2
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
168 fi
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
169 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
170 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
171 return 2
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
172 fi
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
173
238
9b0d83703a28 FIX: Bogus keyword shortcut error: wrong copy-paste text in script
Franz Glasner <fzglas.hg@dom66.de>
parents: 237
diff changeset
174 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
175 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
176 return 1
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
177 fi
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
178 _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
179 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
180 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
181 return 1
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
182 fi
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
183
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
184 [ "${_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
185
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
186 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
187 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
188
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
189 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
190 # 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
191 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
192 else
256
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
193 # 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
194 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
195 fi
256
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
196 # "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
197 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
198 #
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
199 # 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
200 # 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
201 # 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
202 #
239
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
203 #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
204 #
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
205 # XXX FIXME: What about home
237
a38906739422 Drop a note about /home in skel-rw
Franz Glasner <hg@dom66.de>
parents: 236
diff changeset
206 #
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
207 # /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
208 #
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
209 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
210 case "${_child}" in
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
211 "tmp"|"var/tmp")
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
212 _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
213 ;;
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
214 "home")
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
215 _child_zfsopts="-o setuid=off"
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
216 ;;
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
217 "usr/ports/distfiles")
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
218 _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
219 ;;
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
220 "var/mail")
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
221 _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
222 ;;
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 _child_zfsopts=""
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
225 ;;
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
226 esac
23f37702a502 Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 238
diff changeset
227 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
228 done
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
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
231
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
232 #
235
85aea8ca1ab8 Some work on datasets-tmpl
Franz Glasner <fzglas.hg@dom66.de>
parents: 234
diff changeset
233 # "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
234 #
234
8682cfa74f6a Minimum work on creating datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 233
diff changeset
235 # PARENT-BASE PARENT-SKELETON NAME
8682cfa74f6a Minimum work on creating datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 233
diff changeset
236 #
235
85aea8ca1ab8 Some work on datasets-tmpl
Franz Glasner <fzglas.hg@dom66.de>
parents: 234
diff changeset
237 command_datasets_tmpl() {
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
238 # parent ZFS dataset -- child ZFS dataset name
234
8682cfa74f6a Minimum work on creating datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 233
diff changeset
239 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
240 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
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 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
243
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 _opt_symlink=""
234
8682cfa74f6a Minimum work on creating datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 233
diff changeset
245
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
246 while getopts "LP" _opt ; do
655
5ba31e3748ca ftjail: quote all option expansions
Franz Glasner <fzglas.hg@dom66.de>
parents: 654
diff changeset
247 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
248 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
249 _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
250 ;;
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 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
252 _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
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
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 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
256 ;;
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 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
258 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
259 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
260 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
261
590007b0e902 Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents: 252
diff changeset
262 [ -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
263
236
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
264 _p_base="${1-}"
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
265 _p_skel="${2-}"
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
266 _name="${3-}"
234
8682cfa74f6a Minimum work on creating datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 233
diff changeset
267
236
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
268 # Check preconditions
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
269 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
270 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
271
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
272 # Really do it
661e35a9d6e5 Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 235
diff changeset
273 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
274 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
275 return 0
233
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
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
278
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 # "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
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 mountpoint basetxz
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
283 #
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
284 command_populate_tmpl() {
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
285 # MOUNTPOINT -- base.txz
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
286 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
287 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
288
249
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
289 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
290
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
291 _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
292 _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
293
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
294 while getopts "LPb" _opt ; do
655
5ba31e3748ca ftjail: quote all option expansions
Franz Glasner <fzglas.hg@dom66.de>
parents: 654
diff changeset
295 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
296 L)
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
297 _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
298 ;;
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
299 P)
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
300 _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
301 ;;
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
302 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
303 _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
304 ;;
249
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 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
307 ;;
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
308 esac
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
309 done
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
310 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
311 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
312
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
313 [ -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
314
242
59e933b81dcf First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents: 241
diff changeset
315 _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
316 _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
317 _kerneltxz="${3-}"
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
318
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
319 if [ -z "${_mp}" ]; then
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
320 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
321 return 2
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
322 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
323 if [ -z "${_basetxz}" ]; then
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
324 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
325 return 2
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
326 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
327 if [ ! -d "${_mp}" ]; then
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
328 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
329 return 1
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
330 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
331 if [ ! -r "${_basetxz}" ]; then
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
332 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
333 return 1
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
334 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
335
249
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
336 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
337 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
338 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
339 # "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
340 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
341 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
342 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
343 done
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
344 # 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
345 (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
346 (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
347 else
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
348 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
349 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
350 # 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
351 (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
352 (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
353 fi
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
354
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
355 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
356 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
357 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
358 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
359 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
360 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
361 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
362 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
363 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
364 fi
233
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
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
367
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
368 #
249
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
369 # _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
370 #
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
371 _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
372 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
373
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
374 local _name _mp _canmount _mounted
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
375 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
376
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
377 _dsname="${1}"
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
378 _mountpoint="${2}"
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
379 _dry_run="${3}"
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
380 _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
381 _childs_only="${5}"
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
382
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
383 if [ -z "${_dsname}" ]; then
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
384 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
385 return 2
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
386 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
387
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
388 _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
389 { 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
390
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
391 if [ -z "${_mountpoint}" ]; then
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
392 if [ "${_mount_natural}" = "yes" ]; then
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
393 _mountpoint="${_rootds_mountpoint}"
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
394 else
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
395 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
396 return 2
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
397 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
398 else
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
399 if [ "${_mount_natural}" = "yes" ]; then
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
400 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
401 return 2
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
402 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
403 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
404
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
405 # Eventually remove a trailing slash
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
406 _mountpoint="${_mountpoint%/}"
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
407 if [ -z "${_mountpoint}" ]; then
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
408 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
409 return 1
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
410 fi
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 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
413 | {
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
414 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
415 # 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
416 [ "${_mounted}" = "yes" ] && continue
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
417 # 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
418 [ "${_canmount}" = "off" ] && continue
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
419 case "${_mp}" in
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
420 "none"|"legacy")
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
421 # 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
422 ;;
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
423 "${_rootds_mountpoint}"|"${_rootds_mountpoint}/"*)
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
424 #
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
425 # 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
426 # the parent datasets mountpoint
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
427 #
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
428
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
429 # 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
430 _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
431 # Eventually remove a trailing slash
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
432 _relative_mp="${_relative_mp%/}"
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
433 # The real effective full mountpoint
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
434 _real_mp="${_mountpoint}${_relative_mp}"
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
435
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
436 #
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
437 # 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
438 # 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
439 # is given.
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
440 #
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
441 if [ "${_mount_natural}" = "yes" ]; then
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
442 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
443 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
444 return 1
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
445 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
446 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
447
249
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
448 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
449 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
450 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
451 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
452 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
453 else
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
454 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
455 { 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
456 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
457 /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
458 fi
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
459 fi
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
460 ;;
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
461 *)
248
0b5dbf394aa2 FIX: echo 2>&1 is not intended: use 1>&2 instead
Franz Glasner <fzglas.hg@dom66.de>
parents: 247
diff changeset
462 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
463 ;;
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
464 esac
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
465 done
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 return 0
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
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
471
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
472 #
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
473 # "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
474 #
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
475 # 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
476 #
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
477 command_mount_tmpl() {
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
478 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
479 local _opt_dry_run _opt_symlink
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
480
246
bdee72ff7dbd Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents: 245
diff changeset
481 local _opt
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
482
244
6e632f459818 Rename "_dry_run" to the more proper "_opt_dry_run"
Franz Glasner <fzglas.hg@dom66.de>
parents: 243
diff changeset
483 _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
484 _opt_symlink=""
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
485
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 while getopts "LPnu" _opt ; do
655
5ba31e3748ca ftjail: quote all option expansions
Franz Glasner <fzglas.hg@dom66.de>
parents: 654
diff changeset
487 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
488 L)
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
489 _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
490 ;;
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
491 P)
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
492 _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
493 ;;
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
494 n|u)
244
6e632f459818 Rename "_dry_run" to the more proper "_opt_dry_run"
Franz Glasner <fzglas.hg@dom66.de>
parents: 243
diff changeset
495 _opt_dry_run="yes"
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
496 ;;
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 return 2;
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
499 ;;
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
500 esac
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
501 done
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
502 shift $((OPTIND-1))
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
503 OPTIND=1
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
504
249
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
505 [ -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
506
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
507 _ds_base="${1-}"
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
508 _ds_skel="${2-}"
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
509 _mountpoint="${3-}"
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
510
249
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
511 _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
512 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
513 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
514 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
515 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
516 fi
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
517 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
518 _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
519 else
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
520 _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
521 fi
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 return 0
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
524 }
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
525
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
526
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
527 #
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
528 # _do_umount dataset
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
529 #
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
530 _do_umount() {
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
531 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
532
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
533 local _name _mp _rest
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
534 local _rootds_mountpoint
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
535
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
536 _dsname="${1}"
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
537 [ -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
538
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
539 # 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
540 _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
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 _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
543 | {
628
17209ce80536 Use the newly implemented "_get_zfs_mounts_for_dataset_tree()" where appropriate.
Franz Glasner <fzglas.hg@dom66.de>
parents: 561
diff changeset
544 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
545 echo "Umounting ${_name} on ${_mp}"
532
c615279bb797 Call mount and umount with absolute paths
Franz Glasner <fzglas.hg@dom66.de>
parents: 469
diff changeset
546 /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
547 done
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
548 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
549 }
233
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
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
552
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
553 #
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
554 # "umount-tmpl" -- umount skeleton and base datasets
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 ds-base ds-skeleton
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
557 #
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
558 command_umount_tmpl() {
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
559 local _ds_base _ds_skel
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
560
245
61861d36758c Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents: 244
diff changeset
561 _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
562
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
563 _ds_base="${1-}"
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
564 _ds_skel="${2-}"
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
565
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
566 [ -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
567 [ -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
568
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
569 _do_umount "${_ds_skel}" || return
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
570 _do_umount "${_ds_base}" || return
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 return 0
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
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
575
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
576 #
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
577 # "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
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 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
580 #
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 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
582 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
583
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
584 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
585
245
61861d36758c Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents: 244
diff changeset
586 _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
587
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
588 _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
589
248
0b5dbf394aa2 FIX: echo 2>&1 is not intended: use 1>&2 instead
Franz Glasner <fzglas.hg@dom66.de>
parents: 247
diff changeset
590 [ -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
591 [ -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
592 [ -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
593
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 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
595 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
596 "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
597 _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
598 _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
599 [ -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
600 ( 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
601 ;;
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 ( 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
604 ;;
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 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
606 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
607 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
608 }
59e933b81dcf First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents: 241
diff changeset
609
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
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 #: 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
612 #:
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 #: 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
614 #: $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
615 #: $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
616 #:
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 _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
618 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
619
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 _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
621 _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
622
254
39268cba8c46 FIX: Error handling
Franz Glasner <fzglas.hg@dom66.de>
parents: 253
diff changeset
623 [ -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
624 [ -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
625
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 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
627 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
628 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
629 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
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 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
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
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 #: 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
637 #:
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 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
639 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
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 _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
642
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 _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
644 _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
645 _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
646
254
39268cba8c46 FIX: Error handling
Franz Glasner <fzglas.hg@dom66.de>
parents: 253
diff changeset
647 # Here extra checks because of better error messages possible
39268cba8c46 FIX: Error handling
Franz Glasner <fzglas.hg@dom66.de>
parents: 253
diff changeset
648 [ -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
649 [ -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
650
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
651 _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
652 _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
653 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
654 }
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
655
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
656
256
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 #: Implementation of "copy-skel"
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
659 #:
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
660 command_copy_skel() {
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
661 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
662 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
663
270
dde5967d1e43 Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents: 256
diff changeset
664 local _opt _name _relative_name _root_canmount
256
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
665
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
666 _opt_symlink=""
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
667 _opt_nomount=""
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
668 _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
669 _opt_mountpoint=""
380
6be930eb7490 Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 379
diff changeset
670 _opt_nodata=""
256
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
671
380
6be930eb7490 Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 379
diff changeset
672 while getopts "ADLM:Pu" _opt ; do
655
5ba31e3748ca ftjail: quote all option expansions
Franz Glasner <fzglas.hg@dom66.de>
parents: 654
diff changeset
673 case "${_opt}" in
256
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
674 A)
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
675 _opt_canmount="-o canmount=noauto"
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
676 ;;
380
6be930eb7490 Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 379
diff changeset
677 D)
6be930eb7490 Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 379
diff changeset
678 _opt_nodata="yes"
6be930eb7490 Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 379
diff changeset
679 ;;
256
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
680 L)
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
681 _opt_symlink="yes"
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
682 ;;
270
dde5967d1e43 Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents: 256
diff changeset
683 M)
dde5967d1e43 Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents: 256
diff changeset
684 _opt_mountpoint="${OPTARG}"
dde5967d1e43 Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents: 256
diff changeset
685 ;;
256
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
686 P)
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
687 _opt_symlink="no"
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
688 ;;
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
689 u)
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
690 _opt_nomount="-u"
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
691 ;;
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 return 2;
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
694 ;;
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
695 esac
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
696 done
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
697 shift $((OPTIND-1))
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
698 OPTIND=1
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
699
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
700 [ -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
701 [ \( "${_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
702
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
703 _ds_source="${1-}"
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
704 _snapshot_name="${2-}"
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
705 _ds_target="${3-}"
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
706
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
707 [ -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
708 [ -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
709 [ -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
710
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
711 zfs list -r -t all -o name "${_ds_source}" \
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
712 | {
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
713 while IFS=$'\t' read -r _name ; do
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
714 if [ "${_name}" = "${_name%@*}@${_snapshot_name}" ]; then
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
715 echo "FOUND: $_name"
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
716 # 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
717 _relative_name="${_name#"${_ds_source}"}"
256
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
718 _relative_name="${_relative_name%@*}"
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
719 echo " -> $_relative_name"
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
720 if [ -z "${_relative_name}" ]; then
292
d40e6e40c315 Comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 278
diff changeset
721 #
d40e6e40c315 Comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 278
diff changeset
722 # Root
d40e6e40c315 Comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 278
diff changeset
723 #
256
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
724 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
725 _root_canmount="${_opt_canmount}"
256
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
726 else
270
dde5967d1e43 Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents: 256
diff changeset
727 _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
728 fi
dde5967d1e43 Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents: 256
diff changeset
729 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
730 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
731 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
732 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
733 fi
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
734 else
292
d40e6e40c315 Comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 278
diff changeset
735 #
d40e6e40c315 Comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 278
diff changeset
736 # Children
d40e6e40c315 Comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 278
diff changeset
737 #
256
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
738 if [ "${_relative_name}" = "/usr" ]; then
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 -o canmount=off -x mountpoint "${_ds_target}${_relative_name}"
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
740 else
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
741 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
742 fi
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
743 fi
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
744 fi
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
745 done
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
746 }
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
747 # Need only the filesystem data (no associated snapshots)
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
748 echo "Destroying unneeded snapshots ..."
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
749 zfs destroy -rv "${_ds_target}@${_snapshot_name}"
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
750 }
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
751
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
752
308
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 #: Implement the "build-etcupdate-current-tmpl" command
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
755 #:
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
756 command_build_etcupdate_current_tmpl() {
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
757 local _directory _tarball
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
758
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
759 _directory="${1-}"
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
760 _tarball="${2-}"
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
761
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
762 [ -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
763 [ -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
764 [ -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
765
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
766 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
767 rm -f "${_tarball}" || true
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
768 return 1
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
769 fi
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
770 }
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
771
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
772
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
773 #:
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
774 #: 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
775 #:
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
776 #: Args:
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
777 #: $1: the dataset
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
778 #:
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
779 #: Output (stdout)
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
780 #: The extra clone arguments
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
781 #:
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
782 #: Exit:
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
783 #: On unexpected source values
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
784 #:
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
785 _get_clone_extra_prop_for_mountpoint() {
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
786 local ds
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 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
789
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
790 ds="${1}"
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 zfs get -H mountpoint "${ds}" \
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
793 | {
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
794 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
795 case "${_mp_source}" in
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
796 local)
630
87d37db3ac06 ftjail: Replace "echo -n" by "printf".
Franz Glasner <fzglas.hg@dom66.de>
parents: 629
diff changeset
797 printf '%s' "-o mountpoint=${_mp_value}"
341
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 default|inherited*)
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
800 ;;
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
801 temporary*|received*|'-'|none)
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
802 # XXX FIXME: Is this relevant on FreeBSD?
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
803 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
804 exit 1
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
805 ;;
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
806 *)
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
807 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
808 exit 1;
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
809 ;;
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
810 esac
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
811 if [ "${_mp_value}" != "${_directory}" ]; then
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
812 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
813 fi
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
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 #: Determine the "canmount" property for a dataset
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
820 #:
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
821 #: Args:
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
822 #: $1: the dataset
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
823 #:
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
824 #: Output (stdout):
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
825 #: 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
826 #:
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
827 #: Exit:
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
828 #: On unexpected source values
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
829 #:
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
830 _get_canmount_setting_for_dataset() {
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
831 local ds
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 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
834
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
835 ds="${1}"
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 zfs get -H canmount "${ds}" \
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
838 | {
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
839 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
840 case "${_cm_source}" in
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
841 local)
630
87d37db3ac06 ftjail: Replace "echo -n" by "printf".
Franz Glasner <fzglas.hg@dom66.de>
parents: 629
diff changeset
842 printf '%s' "canmount=${_cm_value}"
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
843 ;;
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
844 default)
630
87d37db3ac06 ftjail: Replace "echo -n" by "printf".
Franz Glasner <fzglas.hg@dom66.de>
parents: 629
diff changeset
845 printf '%s' "DEFAULT"
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
846 ;;
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
847 inherited|temporary*|received*|'-'|none)
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
848 # XXX FIXME: Is this relevant on FreeBSD?
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
849 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
850 exit 1
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
851 ;;
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
852 *)
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
853 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
854 exit 1;
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 esac
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
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
860
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
861 #:
658
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
862 #: Callback for _print_check_errors
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
863 #:
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
864 _print_check_error() {
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
865 printf '%s CHECK: %s\n' '-' "$3" 1>&2
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
866 return 0
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
867 }
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
868
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
869
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
870 #:
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
871 #: Print all the errors to stderr
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
872 #:
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
873 _print_check_errors() {
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
874 farray_istrue "$1" || return 0
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
875 echo "There are ERRORs to be resolved before \`freebsd-update' can be run:" 1>&2
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
876 farray_for_each "$1" _print_check_error
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
877 }
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
878
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
879
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
880 #:
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
881 #: Callback for _print_check_warnings
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
882 #:
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
883 _print_check_warning() {
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
884 printf '%s WARNING: %s\n' '-' "$3" 1>&2
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
885 return 0
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
886 }
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
887
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
888
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
889 #:
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
890 #: Print all the warnings to stderr
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
891 #:
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
892 _print_check_warnings() {
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
893 farray_istrue "$1" || return 0
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
894 echo "There are WARNINGs to be considered before \`freebsd-update' should be run:" 1>&2
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
895 farray_for_each "$1" _print_check_warning
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
896 }
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
897
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
898
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
899 #:
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
900 #: Implement the "check-freebsd-update" command for a thin jail
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
901 #:
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
902 command_check_freebsd_update() {
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
903 local _directory _new_origin _etcupdate_tarball
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
904 local _opt_keep _opt_old_origin
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
905
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
906 local _errors _warnings _rc
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
907 local _directory _new_origin _etcupdate_tarball
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
908 local _dir_basename _dir_mounts _jailname _tmp _line _log_sock
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
909 local _root_dataset _root_mountpoint _root_type _root_options
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
910 local _mnt_device _mnt_mountpoint _mnt_type _mnt_options
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
911
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
912 _rc=0
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
913
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
914 _warnings=''
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
915 farray_create _warnings XXX
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
916 _errors=''
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
917 farray_create _errors
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
918
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
919 _opt_keep="no"
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
920 _opt_old_origin=""
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
921 while getopts "ko:" _opt ; do
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
922 case "${_opt}" in
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
923 k)
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
924 _opt_keep="yes"
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
925 ;;
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
926 o)
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
927 _opt_old_origin="$OPTARG"
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
928 ;;
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
929 \?|:)
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
930 return 2;
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
931 ;;
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
932 esac
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
933 done
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
934 shift $((OPTIND-1))
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
935 OPTIND=1
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
936
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
937 _directory="${1-}"
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
938 _new_origin="${2-}"
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
939 _etcupdate_tarball="${3-}"
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
940
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
941 if [ -z "${_directory}" ]; then
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
942 farray_append _errors "no directory given"
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
943 else
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
944 [ -d "${_directory}" ] || farray_append _errors "directory \`${_directory}' does not exist"
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
945 fi
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
946 if [ -z "${_new_origin}" ]; then
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
947 farray_append _errors "no new origin given"
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
948 else
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
949 zfs list -H -o name -t snapshot "${_new_origin}" >/dev/null 2>/dev/null || farray_append _errors "ZFS dataset snapshot for the new origin \`${_new_origin}' does not exist"
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
950 fi
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
951 if [ -n "${_etcupdate_tarball}" ]; then
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
952 [ -r "${_etcupdate_tarball}" ] || farray_append _errors "given etcupdate tarball does not exist and/or is not readable"
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
953 fi
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
954
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
955 if [ -n "${_directory}" ]; then
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
956
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
957 _dir_basename="$(basename "${_directory}")"
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
958
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
959 set +e
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
960 _jailname="$(_get_jail_from_path "${_directory}")"
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
961 _tmp=$?
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
962 set -e
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
963 case ${_tmp} in
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
964 0)
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
965 farray_append _errors "Jail \`${_jailname}' is running. Please stop it."
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
966 ;;
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
967 1)
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
968 farray_append _errors "Cannot determine jail name"
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
969 ;;
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
970 3)
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
971 true
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
972 ;;
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
973 2)
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
974 farray_append _errors "Jail \`${_jailname}' is currently yet dying. Please wait."
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
975 ;;
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
976 *)
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
977 farray_append _errors "UNHANDLED RETURN VALUE from _get_jail_from_path()"
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
978 ;;
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
979 esac
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
980
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
981 #
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
982 # Check whether additional log sockets are opened at their default
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
983 # locations. Because they hinder proper unmounting of filesystems.
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
984 #
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
985 for _log_sock in /var/run/log /var/run/logpriv ; do
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
986 if [ -S "${_directory}${_log_sock}" ]; then
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
987 farray_append _errors "log socket is open at \`${_directory}${_log_sock}'"
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
988 fi
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
989 done
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
990
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
991 # Check whether there are any open files or VM mappings within the jail.
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
992 if ! _check_no_open_files_from_all_proc "${_directory}" ; then
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
993 farray_append _errors "There are open files or memory mappings within the jail"
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
994 fi
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
995
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
996 _dir_mounts="$(_get_mounts_at_directory "${_directory}")"
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
997
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
998 #
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
999 # Check preconditions thoroughly!
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1000 #
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1001 # Check that the first item/line is a read-only ZFS mount directly
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1002 # at the given directory. This must also be its configured
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1003 # mountpoint in ZFS.
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1004 # Also check that it is a clone proper.
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1005 #
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1006 IFS=$'\t' read -r _root_dataset _root_mountpoint _root_type _root_options _line <<EOF4tHGCSSf5d7d9cf
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1007 ${_dir_mounts}
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1008 EOF4tHGCSSf5d7d9cf
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1009 [ "${_root_mountpoint}" != "${_directory}" ] && farray_append _errors "found root mountpoint does not match given directory"
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1010 [ "${_root_type}" != "zfs" ] && farray_append _errors "root mountpoint is not from a ZFS dataset"
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1011 _root_readonly="$(zfs get -H -o value readonly "${_root_dataset}")"
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1012 [ "${_root_readonly}" != "on" ] && farray_append _errors "the root dataset is not mounted read-only"
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1013 _root_origin="$(zfs get -H -o value origin "${_root_dataset}")"
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1014 if [ -n "${_opt_old_origin}" ]; then
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1015 [ "${_opt_old_origin}" != "${_root_origin}" ] && farray_append _errors "origin mismatch"
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1016 else
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1017 [ "${_root_origin}" = '-' ] && farray_append _errors "the root dataset is not a ZFS clone"
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1018 fi
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1019 #
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1020 # Check for open files on all the mounted filesystems
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1021 #
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1022 while IFS=$'\t' read -r _mnt_device _mnt_mountpoint _mnt_type _mnt_options _line; do
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1023 if ! _check_no_open_files_on_filesystem "${_mnt_mountpoint}" ; then
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1024 farray_append _errors "There are open files or memory mapping on file system \`${_mnt_mountpoint}'"
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1025 fi
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1026 done <<EOF4tHGCAASL775f9f320205
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1027 ${_dir_mounts}
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1028 EOF4tHGCAASL775f9f320205
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1029 fi
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1030
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1031 if farray_istrue _errors; then
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1032 _print_check_errors _errors
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1033 _rc=1
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1034 fi
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1035 # Warnings do not influence the return code
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1036 _print_check_warnings _warnings
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1037
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1038 farray_destroy _errors
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1039 farray_destroy _warnings
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1040 return ${_rc}
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1041 }
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1042
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1043
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1044 #:
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1045 #: 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
1046 #:
418
30956bb06421 Drop a comment about "certctl rehash" in etcupdate
Franz Glasner <fzglas.hg@dom66.de>
parents: 412
diff changeset
1047 #: .. 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
1048 #: :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
1049 #:
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1050 command_freebsd_update() {
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1051 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
1052 local _opt_keep _opt_old_origin
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1053
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
1054 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
1055 local _dir_basename _dir_fn_tldir
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1056 local _root_dataset _root_mountpoint _root_type _root_options
647
b0e8b5cf5d33 Implement "_check_no_open_files_on_filesystem()" as common function and use it in ftjail.
Franz Glasner <fzglas.hg@dom66.de>
parents: 644
diff changeset
1057 local _mnt_device _mnt_mountpoint _mnt_type _mnt_options
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1058 local _clone_extra_props _canmount_prop
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1059 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
1060 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
1061 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
1062 local _add_log_sock
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1063
339
e1d6807b0c4d Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents: 338
diff changeset
1064 _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
1065 _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
1066 while getopts "ko:" _opt ; do
655
5ba31e3748ca ftjail: quote all option expansions
Franz Glasner <fzglas.hg@dom66.de>
parents: 654
diff changeset
1067 case "${_opt}" in
339
e1d6807b0c4d Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents: 338
diff changeset
1068 k)
e1d6807b0c4d Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents: 338
diff changeset
1069 _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
1070 ;;
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
1071 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
1072 _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
1073 ;;
339
e1d6807b0c4d Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents: 338
diff changeset
1074 \?|:)
e1d6807b0c4d Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents: 338
diff changeset
1075 return 2;
e1d6807b0c4d Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents: 338
diff changeset
1076 ;;
e1d6807b0c4d Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents: 338
diff changeset
1077 esac
e1d6807b0c4d Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents: 338
diff changeset
1078 done
e1d6807b0c4d Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents: 338
diff changeset
1079 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
1080 OPTIND=1
e1d6807b0c4d Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents: 338
diff changeset
1081
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1082 _directory="${1-}"
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1083 _new_origin="${2-}"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1084 _etcupdate_tarball="${3-}"
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1085
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1086 [ -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
1087 [ -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
1088
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1089 [ -z "${_new_origin}" ] && { echo "ERROR: no new origin given" 1>&2; return 2; }
657
db22766df6a4 ftjail: redirect stderr when determining the existence of a ZFS dataset snapshot
Franz Glasner <fzglas.hg@dom66.de>
parents: 656
diff changeset
1090 zfs list -H -o name -t snapshot "${_new_origin}" >/dev/null 2>/dev/null || { echo "ERROR: ZFS dataset snapshot for the new origin \`${_new_origin}' does not exist" 1>&2; return 1; }
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1091 if [ -n "${_etcupdate_tarball}" ]; then
652
39a7594b45f9 ftjail: check that a given argument is readable
Franz Glasner <fzglas.hg@dom66.de>
parents: 650
diff changeset
1092 [ -r "${_etcupdate_tarball}" ] || { echo "ERROR: given etcupdate tarball does not exist and/or is not readable" 1>&2; return 1; }
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1093 fi
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1094
632
3aeb21629c27 ftjail: FIX: quote the argument to "basename"
Franz Glasner <fzglas.hg@dom66.de>
parents: 630
diff changeset
1095 _dir_basename="$(basename "${_directory}")"
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1096
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1097 set +e
650
5a367d44b480 ftjail: Refactor the result checks for _get_jail_from_path
Franz Glasner <fzglas.hg@dom66.de>
parents: 647
diff changeset
1098 _jailname="$(_get_jail_from_path "${_directory}")"
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1099 _res=$?
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1100 set -e
650
5a367d44b480 ftjail: Refactor the result checks for _get_jail_from_path
Franz Glasner <fzglas.hg@dom66.de>
parents: 647
diff changeset
1101 case ${_res} in
5a367d44b480 ftjail: Refactor the result checks for _get_jail_from_path
Franz Glasner <fzglas.hg@dom66.de>
parents: 647
diff changeset
1102 0)
5a367d44b480 ftjail: Refactor the result checks for _get_jail_from_path
Franz Glasner <fzglas.hg@dom66.de>
parents: 647
diff changeset
1103 err "Please stop the \`${_jailname}' jail"
5a367d44b480 ftjail: Refactor the result checks for _get_jail_from_path
Franz Glasner <fzglas.hg@dom66.de>
parents: 647
diff changeset
1104 return 1
5a367d44b480 ftjail: Refactor the result checks for _get_jail_from_path
Franz Glasner <fzglas.hg@dom66.de>
parents: 647
diff changeset
1105 ;;
656
a8052a57a921 ftjail: Use "zfs get" instead of "zfs list" to get just some properties; also explicitly check some return codes for code "1" also
Franz Glasner <fzglas.hg@dom66.de>
parents: 655
diff changeset
1106 1)
a8052a57a921 ftjail: Use "zfs get" instead of "zfs list" to get just some properties; also explicitly check some return codes for code "1" also
Franz Glasner <fzglas.hg@dom66.de>
parents: 655
diff changeset
1107 return 1
a8052a57a921 ftjail: Use "zfs get" instead of "zfs list" to get just some properties; also explicitly check some return codes for code "1" also
Franz Glasner <fzglas.hg@dom66.de>
parents: 655
diff changeset
1108 ;;
650
5a367d44b480 ftjail: Refactor the result checks for _get_jail_from_path
Franz Glasner <fzglas.hg@dom66.de>
parents: 647
diff changeset
1109 2)
5a367d44b480 ftjail: Refactor the result checks for _get_jail_from_path
Franz Glasner <fzglas.hg@dom66.de>
parents: 647
diff changeset
1110 err "Jail \`${_jailname}' is currently yet dying"
5a367d44b480 ftjail: Refactor the result checks for _get_jail_from_path
Franz Glasner <fzglas.hg@dom66.de>
parents: 647
diff changeset
1111 return 1
5a367d44b480 ftjail: Refactor the result checks for _get_jail_from_path
Franz Glasner <fzglas.hg@dom66.de>
parents: 647
diff changeset
1112 ;;
5a367d44b480 ftjail: Refactor the result checks for _get_jail_from_path
Franz Glasner <fzglas.hg@dom66.de>
parents: 647
diff changeset
1113 3)
5a367d44b480 ftjail: Refactor the result checks for _get_jail_from_path
Franz Glasner <fzglas.hg@dom66.de>
parents: 647
diff changeset
1114 true
5a367d44b480 ftjail: Refactor the result checks for _get_jail_from_path
Franz Glasner <fzglas.hg@dom66.de>
parents: 647
diff changeset
1115 ;;
5a367d44b480 ftjail: Refactor the result checks for _get_jail_from_path
Franz Glasner <fzglas.hg@dom66.de>
parents: 647
diff changeset
1116 *)
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1117 return ${_res}
650
5a367d44b480 ftjail: Refactor the result checks for _get_jail_from_path
Franz Glasner <fzglas.hg@dom66.de>
parents: 647
diff changeset
1118 ;;
5a367d44b480 ftjail: Refactor the result checks for _get_jail_from_path
Franz Glasner <fzglas.hg@dom66.de>
parents: 647
diff changeset
1119 esac
656
a8052a57a921 ftjail: Use "zfs get" instead of "zfs list" to get just some properties; also explicitly check some return codes for code "1" also
Franz Glasner <fzglas.hg@dom66.de>
parents: 655
diff changeset
1120
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
1121 #
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
1122 # 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
1123 # 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
1124 #
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
1125 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
1126 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
1127 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
1128 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
1129 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
1130 done
644
0c7917469e04 Put the check for opened files with "procstat" into a subroutine and use it
Franz Glasner <fzglas.hg@dom66.de>
parents: 643
diff changeset
1131 # Check whether there are any open files or VM mappings within the jail.
0c7917469e04 Put the check for opened files with "procstat" into a subroutine and use it
Franz Glasner <fzglas.hg@dom66.de>
parents: 643
diff changeset
1132 if ! _check_no_open_files_from_all_proc "${_directory}" ; then
0c7917469e04 Put the check for opened files with "procstat" into a subroutine and use it
Franz Glasner <fzglas.hg@dom66.de>
parents: 643
diff changeset
1133 err "There are open files or memory mappings within the jail"
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
1134 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
1135 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
1136
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1137 _dir_mounts="$(_get_mounts_at_directory "${_directory}")"
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1138
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1139 #
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1140 # Check preconditions thoroughly!
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1141 #
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1142 # 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
1143 # 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
1144 # mountpoint in ZFS.
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1145 # 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
1146 #
647
b0e8b5cf5d33 Implement "_check_no_open_files_on_filesystem()" as common function and use it in ftjail.
Franz Glasner <fzglas.hg@dom66.de>
parents: 644
diff changeset
1147 IFS=$'\t' read -r _root_dataset _root_mountpoint _root_type _root_options _line <<EOF4tHGCSSf5d7d9cf
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1148 ${_dir_mounts}
647
b0e8b5cf5d33 Implement "_check_no_open_files_on_filesystem()" as common function and use it in ftjail.
Franz Glasner <fzglas.hg@dom66.de>
parents: 644
diff changeset
1149 EOF4tHGCSSf5d7d9cf
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1150 [ "${_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
1151 [ "${_root_type}" != "zfs" ] && { echo "ERROR: root mountpoint is not from a ZFS dataset" 1>&2; return 1; }
656
a8052a57a921 ftjail: Use "zfs get" instead of "zfs list" to get just some properties; also explicitly check some return codes for code "1" also
Franz Glasner <fzglas.hg@dom66.de>
parents: 655
diff changeset
1152 _root_readonly="$(zfs get -H -o value readonly "${_root_dataset}")"
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1153 [ "${_root_readonly}" != "on" ] && { echo "ERROR: the root dataset is not mounted read-only" 1>&2; return 1; }
656
a8052a57a921 ftjail: Use "zfs get" instead of "zfs list" to get just some properties; also explicitly check some return codes for code "1" also
Franz Glasner <fzglas.hg@dom66.de>
parents: 655
diff changeset
1154 _root_origin="$(zfs get -H -o value origin "${_root_dataset}")"
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
1155 if [ -n "${_opt_old_origin}" ]; then
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1156 [ "${_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
1157 else
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1158 [ "${_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
1159 fi
647
b0e8b5cf5d33 Implement "_check_no_open_files_on_filesystem()" as common function and use it in ftjail.
Franz Glasner <fzglas.hg@dom66.de>
parents: 644
diff changeset
1160 #
b0e8b5cf5d33 Implement "_check_no_open_files_on_filesystem()" as common function and use it in ftjail.
Franz Glasner <fzglas.hg@dom66.de>
parents: 644
diff changeset
1161 # Check for open files on all the mounted filesystems
b0e8b5cf5d33 Implement "_check_no_open_files_on_filesystem()" as common function and use it in ftjail.
Franz Glasner <fzglas.hg@dom66.de>
parents: 644
diff changeset
1162 #
b0e8b5cf5d33 Implement "_check_no_open_files_on_filesystem()" as common function and use it in ftjail.
Franz Glasner <fzglas.hg@dom66.de>
parents: 644
diff changeset
1163 while IFS=$'\t' read -r _mnt_device _mnt_mountpoint _mnt_type _mnt_options _line; do
b0e8b5cf5d33 Implement "_check_no_open_files_on_filesystem()" as common function and use it in ftjail.
Franz Glasner <fzglas.hg@dom66.de>
parents: 644
diff changeset
1164 if ! _check_no_open_files_on_filesystem "${_mnt_mountpoint}" ; then
b0e8b5cf5d33 Implement "_check_no_open_files_on_filesystem()" as common function and use it in ftjail.
Franz Glasner <fzglas.hg@dom66.de>
parents: 644
diff changeset
1165 err "There are open files or memory mapping on file system \`${_mnt_mountpoint}'"
b0e8b5cf5d33 Implement "_check_no_open_files_on_filesystem()" as common function and use it in ftjail.
Franz Glasner <fzglas.hg@dom66.de>
parents: 644
diff changeset
1166 return 1
b0e8b5cf5d33 Implement "_check_no_open_files_on_filesystem()" as common function and use it in ftjail.
Franz Glasner <fzglas.hg@dom66.de>
parents: 644
diff changeset
1167 fi
b0e8b5cf5d33 Implement "_check_no_open_files_on_filesystem()" as common function and use it in ftjail.
Franz Glasner <fzglas.hg@dom66.de>
parents: 644
diff changeset
1168 done <<EOF4tHGCAASLfafbf1b5
b0e8b5cf5d33 Implement "_check_no_open_files_on_filesystem()" as common function and use it in ftjail.
Franz Glasner <fzglas.hg@dom66.de>
parents: 644
diff changeset
1169 ${_dir_mounts}
b0e8b5cf5d33 Implement "_check_no_open_files_on_filesystem()" as common function and use it in ftjail.
Franz Glasner <fzglas.hg@dom66.de>
parents: 644
diff changeset
1170 EOF4tHGCAASLfafbf1b5
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1171
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1172 # 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
1173 _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
1174 # 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
1175 _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
1176
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1177 #
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1178 # 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
1179 # 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
1180 # _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
1181
633
edad318c022d ftjail: FIX: also quote the use of "_dir_basename"
Franz Glasner <fzglas.hg@dom66.de>
parents: 632
diff changeset
1182 _u_tmpdir="$(env TMPDIR=/var/tmp mktemp -d -t ftjail_"${_dir_basename}")"
342
89877869a665 Create all temporary files within a unique temporary directory
Franz Glasner <fzglas.hg@dom66.de>
parents: 341
diff changeset
1183 [ -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
1184 # 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
1185 _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
1186 # 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
1187 _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
1188 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
1189 # 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
1190 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
1191 _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
1192 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
1193
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1194 # 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
1195 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
1196 /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
1197
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1198 #
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1199 # 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
1200 # 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
1201 # 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
1202 # 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
1203 #
e1d6807b0c4d Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents: 338
diff changeset
1204
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1205 #
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1206 # 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
1207 # on the given new origin.
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1208 # 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
1209 # 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
1210 # adjusted properly.
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1211 #
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1212 echo "Destroying the cloned root dataset \`${_root_dataset}'"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1213 zfs destroy -v "${_root_dataset}"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1214 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
1215 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
1216 #
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1217 # 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
1218 # mountpoint is not reflected in the "mountpoint"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1219 # 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
1220 # 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
1221 #
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1222 echo "Remounting only the root dataset at \`${_directory}'"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1223 [ ! -d "${_directory}" ] && mkdir "${_directory}"
532
c615279bb797 Call mount and umount with absolute paths
Franz Glasner <fzglas.hg@dom66.de>
parents: 469
diff changeset
1224 /sbin/mount -t zfs "${_root_dataset}" "${_directory}"
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1225 #
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1226 # 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
1227 # 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
1228 # datasets.
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1229 #
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1230 # 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
1231 # 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
1232 # datasets.
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1233 #
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1234 echo "Recreating missing top-level directories"
629
f7eda6256ae8 ftjail: remove useless "cat" and replace by input redirection
Franz Glasner <fzglas.hg@dom66.de>
parents: 628
diff changeset
1235 while IFS='' read -r _line ; do
f7eda6256ae8 ftjail: remove useless "cat" and replace by input redirection
Franz Glasner <fzglas.hg@dom66.de>
parents: 628
diff changeset
1236 if [ ! -d "${_line}" ]; then
f7eda6256ae8 ftjail: remove useless "cat" and replace by input redirection
Franz Glasner <fzglas.hg@dom66.de>
parents: 628
diff changeset
1237 echo "Recreating top-level directory: ${_line}"
f7eda6256ae8 ftjail: remove useless "cat" and replace by input redirection
Franz Glasner <fzglas.hg@dom66.de>
parents: 628
diff changeset
1238 mkdir "${_line}"
f7eda6256ae8 ftjail: remove useless "cat" and replace by input redirection
Franz Glasner <fzglas.hg@dom66.de>
parents: 628
diff changeset
1239 fi
f7eda6256ae8 ftjail: remove useless "cat" and replace by input redirection
Franz Glasner <fzglas.hg@dom66.de>
parents: 628
diff changeset
1240 done < "${_dir_fn_tldir}"
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1241 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
1242 /sbin/umount "${_directory}"
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1243 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
1244 zfs set readonly=on "${_root_dataset}"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1245 #
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1246 # 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
1247 # temporarily.
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1248 #
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1249 if [ -n "${_canmount_prop}" ]; then
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1250 if [ "${_canmount_prop}" = "DEFAULT" ]; then
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1251 #
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1252 # "zfs inherit" is not possible for "canmount".
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1253 # 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
1254 #
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1255 # 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
1256 #
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1257 zfs inherit -S canmount "${_root_dataset}"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1258 else
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1259 zfs set "${_canmount_prop}" "${_root_dataset}"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1260 fi
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1261 fi
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1262
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1263 # Mount again
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1264 echo "Mounting all datasets rooted at \`${_directory}'"
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1265 [ ! -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
1266 /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
1267
367
c5b1647cedb5 Comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 342
diff changeset
1268 # Update and/or merge configs
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1269 if [ -n "${_etcupdate_tarball}" ]; then
653
e878b3a5b0c5 ftjail: comment
Franz Glasner <fzglas.hg@dom66.de>
parents: 652
diff changeset
1270 # Note: Check for readability has been done above
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1271 echo "Calling etcupdate for DESTDIR=${_directory}"
654
7bbb397168b7 ftjail: Call "etcupdate" by its full absolute path
Franz Glasner <fzglas.hg@dom66.de>
parents: 653
diff changeset
1272 /usr/sbin/etcupdate -D "${_directory}" -t "${_etcupdate_tarball}"
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1273 fi
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1274
339
e1d6807b0c4d Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents: 338
diff changeset
1275 if [ "${_opt_keep}" != "yes" ]; then
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1276 echo "Cleaning up..."""
342
89877869a665 Create all temporary files within a unique temporary directory
Franz Glasner <fzglas.hg@dom66.de>
parents: 341
diff changeset
1277 [ -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
1278 fi
341
a204a7415d4a "ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents: 340
diff changeset
1279 echo "Done."
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1280 }
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1281
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1282
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
1283 #
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1284 # Global option handling
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1285 #
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1286 while getopts "Vh" _opt ; do
655
5ba31e3748ca ftjail: quote all option expansions
Franz Glasner <fzglas.hg@dom66.de>
parents: 654
diff changeset
1287 case "${_opt}" in
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1288 V)
386
84d2735fe7f6 Simplified version tagging a lot: it is also faster now.
Franz Glasner <fzglas.hg@dom66.de>
parents: 380
diff changeset
1289 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
1290 exit 0
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1291 ;;
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1292 h)
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1293 echo "${USAGE}"
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1294 exit 0
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1295 ;;
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1296 \?)
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1297 exit 2;
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1298 ;;
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1299 *)
250
c4d835ccb4ae Implement configure for symlinked skeletons.
Franz Glasner <fzglas.hg@dom66.de>
parents: 249
diff changeset
1300 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
1301 exit 2
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1302 ;;
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1303 esac
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1304 done
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1305
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1306 #
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1307 # 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
1308 # command-local options.
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1309 #
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1310 shift $((OPTIND-1))
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1311 OPTIND=1
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1312
250
c4d835ccb4ae Implement configure for symlinked skeletons.
Franz Glasner <fzglas.hg@dom66.de>
parents: 249
diff changeset
1313 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
1314
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1315 command="$1"
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1316 shift
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1317
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1318 case "${command}" in
235
85aea8ca1ab8 Some work on datasets-tmpl
Franz Glasner <fzglas.hg@dom66.de>
parents: 234
diff changeset
1319 datasets-tmpl)
85aea8ca1ab8 Some work on datasets-tmpl
Franz Glasner <fzglas.hg@dom66.de>
parents: 234
diff changeset
1320 command_datasets_tmpl "$@"
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1321 ;;
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
1322 mount-tmpl)
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
1323 command_mount_tmpl "$@"
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
1324 ;;
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
1325 umount-tmpl|unmount-tmpl)
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
1326 command_umount_tmpl "$@"
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
1327 ;;
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
1328 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
1329 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
1330 ;;
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
1331 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
1332 command_populate_tmpl "$@"
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1333 ;;
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
1334 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
1335 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
1336 ;;
256
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
1337 copy-skel)
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
1338 command_copy_skel "$@"
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
1339 ;;
308
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
1340 build-etcupdate-current-tmpl)
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
1341 command_build_etcupdate_current_tmpl "$@"
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
1342 ;;
250
c4d835ccb4ae Implement configure for symlinked skeletons.
Franz Glasner <fzglas.hg@dom66.de>
parents: 249
diff changeset
1343 configure)
c4d835ccb4ae Implement configure for symlinked skeletons.
Franz Glasner <fzglas.hg@dom66.de>
parents: 249
diff changeset
1344 echo "ERROR: use \`fjail configure' instead" 1>&2;
c4d835ccb4ae Implement configure for symlinked skeletons.
Franz Glasner <fzglas.hg@dom66.de>
parents: 249
diff changeset
1345 exit 2
c4d835ccb4ae Implement configure for symlinked skeletons.
Franz Glasner <fzglas.hg@dom66.de>
parents: 249
diff changeset
1346 ;;
658
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1347 check-freebsd-update)
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1348 command_check_freebsd_update "$@"
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1349 ;;
334
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1350 freebsd-update)
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1351 command_freebsd_update "$@"
fdbb78c54ffb Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 330
diff changeset
1352 ;;
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1353 *)
658
260a81d769a6 Implemented "ftjail check-freebsd-update": thorough check for preconditions to a successful run of "ftjail freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents: 657
diff changeset
1354 fatal 2 "unknown command \`${command}'"
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1355 ;;
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1356 esac