Mercurial > hgrepos > FreeBSD > ports > sysutils > local-bsdtools
annotate sbin/ftjail @ 723:a97ec3f07bdb
farray.sh: REFACTOR: More flexible metadata retrieval.
Using an array or alist variable name or token value (with prefix) is now
supported in every function.
This is possible because the value prefixes contain questin marks (?) which
are not allowed in shell variable names.
This again is a major precondition for recursive data structures
(arrays/alists in arrays/alists).
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Sat, 05 Oct 2024 21:55:55 +0200 |
| parents | 425b1ae264a9 |
| children | 8f1583faf9ea |
| 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 | 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 |
|
660
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
48 check-freebsd-update [-k] [-o OLD-ORIGIN] [-R SNAPSHOT] DIRECTORY NEW-ORIGIN [ETCUPDATE-TARBALL] |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
49 |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
50 freebsd-update [-k] [-o OLD-ORIGIN] [-R SNAPSHOT] 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
|
51 |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
52 ENVIRONMENT: |
|
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 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
|
55 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
56 DESCRIPTION: |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
57 |
|
307
23bcbbbd99ea
FIX: Rename "ftjail-populate.rst" to "ftjail-populate-tmpl"
Franz Glasner <fzglas.hg@dom66.de>
parents:
300
diff
changeset
|
58 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
|
59 filesystem. |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
60 ' |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
61 |
|
443
071f24359eef
Move "_ensure_no_optios()" into common.subr
Franz Glasner <fzglas.hg@dom66.de>
parents:
438
diff
changeset
|
62 |
|
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
|
63 _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
|
64 [ "${_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
|
65 . "${_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
|
66 . "${_p_datadir}/farray.sh" |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
67 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
68 |
|
443
071f24359eef
Move "_ensure_no_optios()" into common.subr
Franz Glasner <fzglas.hg@dom66.de>
parents:
438
diff
changeset
|
69 # Reset to standard umask |
|
071f24359eef
Move "_ensure_no_optios()" into common.subr
Franz Glasner <fzglas.hg@dom66.de>
parents:
438
diff
changeset
|
70 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
|
71 |
|
61861d36758c
Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents:
244
diff
changeset
|
72 |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
73 # |
|
236
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
74 # 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
|
75 # |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
76 command_datasets_tmpl_base() { |
|
246
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
77 local _p_base _name |
|
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 _opt_dry_run |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
80 |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
81 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
|
82 |
|
246
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
83 _opt_dry_run="" |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
84 while getopts "nu" _opt ; do |
|
655
5ba31e3748ca
ftjail: quote all option expansions
Franz Glasner <fzglas.hg@dom66.de>
parents:
654
diff
changeset
|
85 case "${_opt}" in |
|
246
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
86 n|u) |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
87 _opt_dry_run="yes" |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
88 ;; |
|
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 return 2; |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
91 ;; |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
92 esac |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
93 done |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
94 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
|
95 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
|
96 |
|
236
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
97 _p_base="${1-}" |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
98 _name="${2-}" |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
99 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
100 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
|
101 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
|
102 return 2 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
103 fi |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
104 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
|
105 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
|
106 return 2 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
107 fi |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
108 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
109 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
|
110 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
|
111 return 1 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
112 fi |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
113 _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
|
114 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
|
115 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
|
116 return 1 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
117 fi |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
118 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
119 |
|
246
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
120 [ "${_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
|
121 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
122 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
|
123 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
|
124 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
125 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
|
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 |
|
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 # 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
|
132 # |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
133 command_datasets_tmpl_skel() { |
|
246
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
134 local _p_base _name |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
135 |
|
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
|
136 local _opt_dry_run _opt_symlink |
|
246
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
137 |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
138 local _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
|
139 |
|
246
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
140 _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
|
141 _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
|
142 |
|
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 while getopts "LPnu" _opt ; do |
|
655
5ba31e3748ca
ftjail: quote all option expansions
Franz Glasner <fzglas.hg@dom66.de>
parents:
654
diff
changeset
|
144 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
|
145 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
|
146 _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
|
147 ;; |
|
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 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
|
149 _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
|
150 ;; |
|
246
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
151 n|u) |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
152 _opt_dry_run="yes" |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
153 ;; |
|
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 return 2; |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
156 ;; |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
157 esac |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
158 done |
|
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
159 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
|
160 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
|
161 |
|
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
|
162 [ -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
|
163 |
|
236
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
164 _p_skel="${1-}" |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
165 _name="${2-}" |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
166 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
167 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
|
168 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
|
169 return 2 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
170 fi |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
171 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
|
172 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
|
173 return 2 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
174 fi |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
175 |
|
238
9b0d83703a28
FIX: Bogus keyword shortcut error: wrong copy-paste text in script
Franz Glasner <fzglas.hg@dom66.de>
parents:
237
diff
changeset
|
176 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
|
177 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
|
178 return 1 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
179 fi |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
180 _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
|
181 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
|
182 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
|
183 return 1 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
184 fi |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
185 |
|
246
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
186 [ "${_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
|
187 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
188 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
|
189 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
|
190 |
|
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
|
191 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
|
192 # 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
|
193 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
|
194 else |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
195 # 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
|
196 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
|
197 fi |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
198 # "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
|
199 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
|
200 # |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
201 # 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
|
202 # 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
|
203 # 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
|
204 # |
|
239
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
205 #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
|
206 # |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
207 # XXX FIXME: What about home |
|
237
a38906739422
Drop a note about /home in skel-rw
Franz Glasner <hg@dom66.de>
parents:
236
diff
changeset
|
208 # |
|
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
|
209 # /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
|
210 # |
|
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
|
211 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
|
212 case "${_child}" in |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
213 "tmp"|"var/tmp") |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
214 _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
|
215 ;; |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
216 "home") |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
217 _child_zfsopts="-o setuid=off" |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
218 ;; |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
219 "usr/ports/distfiles") |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
220 _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
|
221 ;; |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
222 "var/mail") |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
223 _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
|
224 ;; |
|
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 _child_zfsopts="" |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
227 ;; |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
228 esac |
|
23f37702a502
Creating datasets for base and skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
238
diff
changeset
|
229 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
|
230 done |
|
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 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
233 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
234 # |
|
235
85aea8ca1ab8
Some work on datasets-tmpl
Franz Glasner <fzglas.hg@dom66.de>
parents:
234
diff
changeset
|
235 # "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
|
236 # |
|
234
8682cfa74f6a
Minimum work on creating datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
233
diff
changeset
|
237 # PARENT-BASE PARENT-SKELETON NAME |
|
8682cfa74f6a
Minimum work on creating datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
233
diff
changeset
|
238 # |
|
235
85aea8ca1ab8
Some work on datasets-tmpl
Franz Glasner <fzglas.hg@dom66.de>
parents:
234
diff
changeset
|
239 command_datasets_tmpl() { |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
240 # parent ZFS dataset -- child ZFS dataset name |
|
234
8682cfa74f6a
Minimum work on creating datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
233
diff
changeset
|
241 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
|
242 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
|
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 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
|
245 |
|
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 _opt_symlink="" |
|
234
8682cfa74f6a
Minimum work on creating datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
233
diff
changeset
|
247 |
|
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 while getopts "LP" _opt ; do |
|
655
5ba31e3748ca
ftjail: quote all option expansions
Franz Glasner <fzglas.hg@dom66.de>
parents:
654
diff
changeset
|
249 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
|
250 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
|
251 _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
|
252 ;; |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
253 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
|
254 _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
|
255 ;; |
|
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 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
|
258 ;; |
|
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 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
|
260 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
|
261 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
|
262 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
|
263 |
|
590007b0e902
Implement "-L" and "-P" for "datasets-tmpl" to allow for different ZFS props
Franz Glasner <fzglas.hg@dom66.de>
parents:
252
diff
changeset
|
264 [ -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
|
265 |
|
236
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
266 _p_base="${1-}" |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
267 _p_skel="${2-}" |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
268 _name="${3-}" |
|
234
8682cfa74f6a
Minimum work on creating datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
233
diff
changeset
|
269 |
|
236
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
270 # Check preconditions |
|
246
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
271 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
|
272 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
|
273 |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
274 # Really do it |
|
661e35a9d6e5
Some work on ftjail: creating the very basic ZFS datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
235
diff
changeset
|
275 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
|
276 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
|
277 return 0 |
|
233
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 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
280 |
|
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 # "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
|
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 mountpoint basetxz |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
285 # |
|
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
|
286 command_populate_tmpl() { |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
287 # MOUNTPOINT -- base.txz |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
288 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
|
289 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
|
290 |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
291 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
|
292 |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
293 _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
|
294 _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
|
295 |
|
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
|
296 while getopts "LPb" _opt ; do |
|
655
5ba31e3748ca
ftjail: quote all option expansions
Franz Glasner <fzglas.hg@dom66.de>
parents:
654
diff
changeset
|
297 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
|
298 L) |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
299 _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
|
300 ;; |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
301 P) |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
302 _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
|
303 ;; |
|
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
|
304 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
|
305 _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
|
306 ;; |
|
249
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 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
|
309 ;; |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
310 esac |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
311 done |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
312 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
|
313 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
|
314 |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
315 [ -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
|
316 |
|
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
|
317 _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
|
318 _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
|
319 _kerneltxz="${3-}" |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
320 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
321 if [ -z "${_mp}" ]; then |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
322 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
|
323 return 2 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
324 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
325 if [ -z "${_basetxz}" ]; then |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
326 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
|
327 return 2 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
328 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
329 if [ ! -d "${_mp}" ]; then |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
330 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
|
331 return 1 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
332 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
333 if [ ! -r "${_basetxz}" ]; then |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
334 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
|
335 return 1 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
336 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
337 |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
338 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
|
339 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
|
340 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
|
341 # "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
|
342 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
|
343 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
|
344 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
|
345 done |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
346 # 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
|
347 (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
|
348 (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
|
349 else |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
350 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
|
351 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
|
352 # 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
|
353 (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
|
354 (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
|
355 fi |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
356 |
|
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
|
357 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
|
358 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
|
359 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
|
360 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
|
361 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
|
362 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
|
363 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
|
364 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
|
365 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
|
366 fi |
|
233
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 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
369 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
370 # |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
371 # _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
|
372 # |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
373 _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
|
374 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
|
375 |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
376 local _name _mp _canmount _mounted |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
377 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
|
378 |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
379 _dsname="${1}" |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
380 _mountpoint="${2}" |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
381 _dry_run="${3}" |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
382 _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
|
383 _childs_only="${5}" |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
384 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
385 if [ -z "${_dsname}" ]; then |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
386 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
|
387 return 2 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
388 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
389 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
390 _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
|
391 { 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
|
392 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
393 if [ -z "${_mountpoint}" ]; then |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
394 if [ "${_mount_natural}" = "yes" ]; then |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
395 _mountpoint="${_rootds_mountpoint}" |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
396 else |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
397 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
|
398 return 2 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
399 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
400 else |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
401 if [ "${_mount_natural}" = "yes" ]; then |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
402 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
|
403 return 2 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
404 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
405 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
406 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
407 # Eventually remove a trailing slash |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
408 _mountpoint="${_mountpoint%/}" |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
409 if [ -z "${_mountpoint}" ]; then |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
410 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
|
411 return 1 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
412 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
413 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
414 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
|
415 | { |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
416 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
|
417 # 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
|
418 [ "${_mounted}" = "yes" ] && continue |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
419 # 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
|
420 [ "${_canmount}" = "off" ] && continue |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
421 case "${_mp}" in |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
422 "none"|"legacy") |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
423 # 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
|
424 ;; |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
425 "${_rootds_mountpoint}"|"${_rootds_mountpoint}/"*) |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
426 # |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
427 # 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
|
428 # the parent datasets mountpoint |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
429 # |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
430 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
431 # 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
|
432 _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
|
433 # Eventually remove a trailing slash |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
434 _relative_mp="${_relative_mp%/}" |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
435 # The real effective full mountpoint |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
436 _real_mp="${_mountpoint}${_relative_mp}" |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
437 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
438 # |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
439 # 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
|
440 # 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
|
441 # is given. |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
442 # |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
443 if [ "${_mount_natural}" = "yes" ]; then |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
444 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
|
445 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
|
446 return 1 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
447 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
448 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
449 |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
450 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
|
451 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
|
452 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
|
453 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
|
454 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
|
455 else |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
456 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
|
457 { 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
|
458 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
|
459 /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
|
460 fi |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
461 fi |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
462 ;; |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
463 *) |
|
248
0b5dbf394aa2
FIX: echo 2>&1 is not intended: use 1>&2 instead
Franz Glasner <fzglas.hg@dom66.de>
parents:
247
diff
changeset
|
464 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
|
465 ;; |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
466 esac |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
467 done |
|
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 return 0 |
|
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 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
473 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
474 # |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
475 # "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
|
476 # |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
477 # 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
|
478 # |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
479 command_mount_tmpl() { |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
480 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
|
481 local _opt_dry_run _opt_symlink |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
482 |
|
246
bdee72ff7dbd
Some subcommands now support options properly
Franz Glasner <fzglas.hg@dom66.de>
parents:
245
diff
changeset
|
483 local _opt |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
484 |
|
244
6e632f459818
Rename "_dry_run" to the more proper "_opt_dry_run"
Franz Glasner <fzglas.hg@dom66.de>
parents:
243
diff
changeset
|
485 _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
|
486 _opt_symlink="" |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
487 |
|
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 while getopts "LPnu" _opt ; do |
|
655
5ba31e3748ca
ftjail: quote all option expansions
Franz Glasner <fzglas.hg@dom66.de>
parents:
654
diff
changeset
|
489 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
|
490 L) |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
491 _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
|
492 ;; |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
493 P) |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
494 _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
|
495 ;; |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
496 n|u) |
|
244
6e632f459818
Rename "_dry_run" to the more proper "_opt_dry_run"
Franz Glasner <fzglas.hg@dom66.de>
parents:
243
diff
changeset
|
497 _opt_dry_run="yes" |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
498 ;; |
|
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 return 2; |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
501 ;; |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
502 esac |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
503 done |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
504 shift $((OPTIND-1)) |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
505 OPTIND=1 |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
506 |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
507 [ -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
|
508 |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
509 _ds_base="${1-}" |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
510 _ds_skel="${2-}" |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
511 _mountpoint="${3-}" |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
512 |
|
249
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
513 _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
|
514 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
|
515 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
|
516 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
|
517 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
|
518 fi |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
519 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
|
520 _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
|
521 else |
|
a91e1c5173cc
Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents:
248
diff
changeset
|
522 _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
|
523 fi |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
524 |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
525 return 0 |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
526 } |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
527 |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
528 |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
529 # |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
530 # _do_umount dataset |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
531 # |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
532 _do_umount() { |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
533 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
|
534 |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
535 local _name _mp _rest |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
536 local _rootds_mountpoint |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
537 |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
538 _dsname="${1}" |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
539 [ -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
|
540 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
541 # 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
|
542 _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
|
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 _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
|
545 | { |
|
628
17209ce80536
Use the newly implemented "_get_zfs_mounts_for_dataset_tree()" where appropriate.
Franz Glasner <fzglas.hg@dom66.de>
parents:
561
diff
changeset
|
546 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
|
547 echo "Umounting ${_name} on ${_mp}" |
|
532
c615279bb797
Call mount and umount with absolute paths
Franz Glasner <fzglas.hg@dom66.de>
parents:
469
diff
changeset
|
548 /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
|
549 done |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
550 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
|
551 } |
|
233
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 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
554 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
555 # |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
556 # "umount-tmpl" -- umount skeleton and base datasets |
|
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 ds-base ds-skeleton |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
559 # |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
560 command_umount_tmpl() { |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
561 local _ds_base _ds_skel |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
562 |
|
245
61861d36758c
Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents:
244
diff
changeset
|
563 _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
|
564 |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
565 _ds_base="${1-}" |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
566 _ds_skel="${2-}" |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
567 |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
568 [ -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
|
569 [ -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
|
570 |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
571 _do_umount "${_ds_skel}" || return |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
572 _do_umount "${_ds_base}" || return |
|
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 return 0 |
|
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 |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
577 |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
578 # |
|
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
|
579 # "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
|
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 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
|
582 # |
|
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 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
|
584 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
|
585 |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
586 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
|
587 |
|
245
61861d36758c
Ensure that no options are really given when no options are allowed
Franz Glasner <fzglas.hg@dom66.de>
parents:
244
diff
changeset
|
588 _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
|
589 |
|
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
|
590 _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
|
591 |
|
248
0b5dbf394aa2
FIX: echo 2>&1 is not intended: use 1>&2 instead
Franz Glasner <fzglas.hg@dom66.de>
parents:
247
diff
changeset
|
592 [ -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
|
593 [ -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
|
594 [ -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
|
595 |
|
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 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
|
597 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
|
598 "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
|
599 _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
|
600 _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
|
601 [ -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
|
602 ( 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
|
603 ;; |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
604 *) |
|
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 ( 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
|
606 ;; |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
607 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
|
608 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
|
609 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
|
610 } |
|
59e933b81dcf
First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents:
241
diff
changeset
|
611 |
|
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
|
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 #: 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
|
614 #: |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
615 #: 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
|
616 #: $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
|
617 #: $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
|
618 #: |
|
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 _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
|
620 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
|
621 |
|
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 _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
|
623 _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
|
624 |
| 254 | 625 [ -z "${_ds}" ] && { echo "ERROR: no dataset given" 1>&2; return 2; } |
| 626 [ -z "${_snap_name}" ] && { echo "ERROR: no snapshot name given" 1>&2; return 2; } | |
| 627 | |
|
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 if ! zfs list -H -o name -t filesystem "${_ds}" 1> /dev/null 2> /dev/null ; then |
| 254 | 629 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
|
630 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
|
631 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
|
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 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
|
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 |
|
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 #: 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
|
639 #: |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
640 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
|
641 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
|
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 _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
|
644 |
|
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 _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
|
646 _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
|
647 _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
|
648 |
| 254 | 649 # Here extra checks because of better error messages possible |
| 650 [ -z "${_ds_base}" ] && { echo "ERROR: no RO base dataset name given" 1>&2; return 2; } | |
| 651 [ -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
|
652 |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
653 _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
|
654 _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
|
655 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
|
656 } |
|
7a6c03445ba1
Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents:
250
diff
changeset
|
657 |
|
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
|
658 |
|
256
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 #: Implementation of "copy-skel" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
661 #: |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
662 command_copy_skel() { |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
663 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
|
664 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
|
665 |
|
270
dde5967d1e43
Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents:
256
diff
changeset
|
666 local _opt _name _relative_name _root_canmount |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
667 |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
668 _opt_symlink="" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
669 _opt_nomount="" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
670 _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
|
671 _opt_mountpoint="" |
|
380
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
379
diff
changeset
|
672 _opt_nodata="" |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
673 |
|
380
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
379
diff
changeset
|
674 while getopts "ADLM:Pu" _opt ; do |
|
655
5ba31e3748ca
ftjail: quote all option expansions
Franz Glasner <fzglas.hg@dom66.de>
parents:
654
diff
changeset
|
675 case "${_opt}" in |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
676 A) |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
677 _opt_canmount="-o canmount=noauto" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
678 ;; |
|
380
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
379
diff
changeset
|
679 D) |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
379
diff
changeset
|
680 _opt_nodata="yes" |
|
6be930eb7490
Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
379
diff
changeset
|
681 ;; |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
682 L) |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
683 _opt_symlink="yes" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
684 ;; |
|
270
dde5967d1e43
Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents:
256
diff
changeset
|
685 M) |
|
dde5967d1e43
Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents:
256
diff
changeset
|
686 _opt_mountpoint="${OPTARG}" |
|
dde5967d1e43
Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents:
256
diff
changeset
|
687 ;; |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
688 P) |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
689 _opt_symlink="no" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
690 ;; |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
691 u) |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
692 _opt_nomount="-u" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
693 ;; |
|
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 return 2; |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
696 ;; |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
697 esac |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
698 done |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
699 shift $((OPTIND-1)) |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
700 OPTIND=1 |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
701 |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
702 [ -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
|
703 [ \( "${_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
|
704 |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
705 _ds_source="${1-}" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
706 _snapshot_name="${2-}" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
707 _ds_target="${3-}" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
708 |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
709 [ -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
|
710 [ -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
|
711 [ -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
|
712 |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
713 zfs list -r -t all -o name "${_ds_source}" \ |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
714 | { |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
715 while IFS=$'\t' read -r _name ; do |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
716 if [ "${_name}" = "${_name%@*}@${_snapshot_name}" ]; then |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
717 echo "FOUND: $_name" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
718 # 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
|
719 _relative_name="${_name#"${_ds_source}"}" |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
720 _relative_name="${_relative_name%@*}" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
721 echo " -> $_relative_name" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
722 if [ -z "${_relative_name}" ]; then |
| 292 | 723 # |
| 724 # Root | |
| 725 # | |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
726 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
|
727 _root_canmount="${_opt_canmount}" |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
728 else |
|
270
dde5967d1e43
Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents:
256
diff
changeset
|
729 _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
|
730 fi |
|
dde5967d1e43
Implement the "-M" (custom mountpoint) option for "copy-skel"
Franz Glasner <fzglas.hg@dom66.de>
parents:
256
diff
changeset
|
731 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
|
732 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
|
733 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
|
734 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
|
735 fi |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
736 else |
| 292 | 737 # |
| 738 # Children | |
| 739 # | |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
740 if [ "${_relative_name}" = "/usr" ]; then |
|
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 -o canmount=off -x mountpoint "${_ds_target}${_relative_name}" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
742 else |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
743 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
|
744 fi |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
745 fi |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
746 fi |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
747 done |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
748 } |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
749 # Need only the filesystem data (no associated snapshots) |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
750 echo "Destroying unneeded snapshots ..." |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
751 zfs destroy -rv "${_ds_target}@${_snapshot_name}" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
752 } |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
753 |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
754 |
|
308
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 #: Implement the "build-etcupdate-current-tmpl" command |
|
2102b46566f0
Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents:
307
diff
changeset
|
757 #: |
|
2102b46566f0
Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents:
307
diff
changeset
|
758 command_build_etcupdate_current_tmpl() { |
|
2102b46566f0
Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents:
307
diff
changeset
|
759 local _directory _tarball |
|
2102b46566f0
Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents:
307
diff
changeset
|
760 |
|
2102b46566f0
Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents:
307
diff
changeset
|
761 _directory="${1-}" |
|
2102b46566f0
Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents:
307
diff
changeset
|
762 _tarball="${2-}" |
|
2102b46566f0
Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents:
307
diff
changeset
|
763 |
|
2102b46566f0
Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents:
307
diff
changeset
|
764 [ -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
|
765 [ -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
|
766 [ -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
|
767 |
|
2102b46566f0
Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents:
307
diff
changeset
|
768 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
|
769 rm -f "${_tarball}" || true |
|
2102b46566f0
Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents:
307
diff
changeset
|
770 return 1 |
|
2102b46566f0
Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents:
307
diff
changeset
|
771 fi |
|
2102b46566f0
Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents:
307
diff
changeset
|
772 } |
|
2102b46566f0
Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents:
307
diff
changeset
|
773 |
|
2102b46566f0
Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents:
307
diff
changeset
|
774 |
|
334
fdbb78c54ffb
Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
330
diff
changeset
|
775 #: |
|
341
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
776 #: 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
|
777 #: |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
778 #: Args: |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
779 #: $1: the dataset |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
780 #: |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
781 #: Output (stdout) |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
782 #: The extra clone arguments |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
783 #: |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
784 #: Exit: |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
785 #: On unexpected source values |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
786 #: |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
787 _get_clone_extra_prop_for_mountpoint() { |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
788 local ds |
|
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 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
|
791 |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
792 ds="${1}" |
|
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 zfs get -H mountpoint "${ds}" \ |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
795 | { |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
796 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
|
797 case "${_mp_source}" in |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
798 local) |
|
630
87d37db3ac06
ftjail: Replace "echo -n" by "printf".
Franz Glasner <fzglas.hg@dom66.de>
parents:
629
diff
changeset
|
799 printf '%s' "-o mountpoint=${_mp_value}" |
|
341
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 default|inherited*) |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
802 ;; |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
803 temporary*|received*|'-'|none) |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
804 # XXX FIXME: Is this relevant on FreeBSD? |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
805 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
|
806 exit 1 |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
807 ;; |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
808 *) |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
809 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
|
810 exit 1; |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
811 ;; |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
812 esac |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
813 if [ "${_mp_value}" != "${_directory}" ]; then |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
814 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
|
815 fi |
|
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 |
|
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 #: Determine the "canmount" property for a dataset |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
822 #: |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
823 #: Args: |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
824 #: $1: the dataset |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
825 #: |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
826 #: Output (stdout): |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
827 #: 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
|
828 #: |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
829 #: Exit: |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
830 #: On unexpected source values |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
831 #: |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
832 _get_canmount_setting_for_dataset() { |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
833 local ds |
|
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 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
|
836 |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
837 ds="${1}" |
|
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 zfs get -H canmount "${ds}" \ |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
840 | { |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
841 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
|
842 case "${_cm_source}" in |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
843 local) |
|
630
87d37db3ac06
ftjail: Replace "echo -n" by "printf".
Franz Glasner <fzglas.hg@dom66.de>
parents:
629
diff
changeset
|
844 printf '%s' "canmount=${_cm_value}" |
|
341
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
845 ;; |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
846 default) |
|
630
87d37db3ac06
ftjail: Replace "echo -n" by "printf".
Franz Glasner <fzglas.hg@dom66.de>
parents:
629
diff
changeset
|
847 printf '%s' "DEFAULT" |
|
341
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
848 ;; |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
849 inherited|temporary*|received*|'-'|none) |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
850 # XXX FIXME: Is this relevant on FreeBSD? |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
851 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
|
852 exit 1 |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
853 ;; |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
854 *) |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
855 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
|
856 exit 1; |
|
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 esac |
|
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 |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
862 |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
863 #: |
|
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
|
864 #: 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
|
865 #: |
|
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 _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
|
867 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
|
868 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
|
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 |
|
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 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
|
874 #: |
|
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 _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
|
876 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
|
877 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
|
878 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
|
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 |
|
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 #: 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
|
884 #: |
|
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 _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
|
886 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
|
887 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
|
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 |
|
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 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
|
893 #: |
|
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 _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
|
895 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
|
896 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
|
897 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
|
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 |
|
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 #: 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
|
903 #: |
|
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 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
|
905 local _directory _new_origin _etcupdate_tarball |
|
660
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
906 local _opt_keep _opt_old_origin _opt_snapshots |
|
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
|
907 |
|
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 _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
|
909 local _directory _new_origin _etcupdate_tarball |
|
668
e8fc5856a9af
ftjail: call "etcupdate status" in check-freebsd-update to check for unresolved conflicts from previous updates
Franz Glasner <fzglas.hg@dom66.de>
parents:
663
diff
changeset
|
910 local _dir_basename _dir_mounts _jailname _running_jailname |
|
e8fc5856a9af
ftjail: call "etcupdate status" in check-freebsd-update to check for unresolved conflicts from previous updates
Franz Glasner <fzglas.hg@dom66.de>
parents:
663
diff
changeset
|
911 local _tmp _line _log_sock |
|
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
|
912 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
|
913 local _mnt_device _mnt_mountpoint _mnt_type _mnt_options |
|
660
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
914 local _idx _sn_ds _sn_name _sn_ds_related |
|
668
e8fc5856a9af
ftjail: call "etcupdate status" in check-freebsd-update to check for unresolved conflicts from previous updates
Franz Glasner <fzglas.hg@dom66.de>
parents:
663
diff
changeset
|
915 local _etcupdate_status |
|
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
|
916 |
|
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 _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
|
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 _warnings='' |
|
660
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
920 farray_create _warnings |
|
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
|
921 _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
|
922 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
|
923 |
|
660
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
924 _opt_snapshots='' |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
925 falist_create _opt_snapshots |
|
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
|
926 _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
|
927 _opt_old_origin="" |
|
660
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
928 while getopts "R:ko:" _opt ; do |
|
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
|
929 case "${_opt}" in |
|
660
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
930 R) |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
931 case "${OPTARG}" in |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
932 *?\@?*) |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
933 # |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
934 # Split in two parts: dataset hierarchy and the name of the |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
935 # snapshot |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
936 # |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
937 falist_set _opt_snapshots "${OPTARG%%@*}" "${OPTARG#*@}" |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
938 ;; |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
939 *) |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
940 farray_append _errors "argument \`${OPTARG}' is not a snapshot name" |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
941 ;; |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
942 esac |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
943 ;; |
|
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
|
944 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
|
945 _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
|
946 ;; |
|
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 o) |
|
660
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
948 _opt_old_origin="${OPTARG}" |
|
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
|
949 ;; |
|
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 \?|:) |
|
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 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
|
952 ;; |
|
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 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
|
954 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
|
955 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
|
956 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
|
957 |
|
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 _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
|
959 _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
|
960 _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
|
961 |
|
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 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
|
963 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
|
964 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
|
965 [ -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
|
966 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
|
967 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
|
968 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
|
969 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
|
970 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
|
971 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
|
972 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
|
973 [ -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
|
974 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
|
975 |
|
660
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
976 # Check snapshotting |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
977 _idx=1 |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
978 while falist_tryget_item_at_index _sn_ds _sn_name _opt_snapshots ${_idx}; do |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
979 if zfs get -H -o value name "${_sn_ds}" >/dev/null 2>/dev/null; then |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
980 # yes dataset exists: check that snapshots do not exist |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
981 while IFS=$'\t' read -r _line; do |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
982 if zfs get -H -o value name "${_line}@${_sn_name}" >/dev/null 2>/dev/null; then |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
983 farray_append _errors "snapshot \`${_line}@${_sn_name}' already exists" |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
984 fi |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
985 done <<EOF2988ee715b2d93fd93bdce23 |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
986 $(zfs list -H -r -o name "${_sn_ds}") |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
987 EOF2988ee715b2d93fd93bdce23 |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
988 else |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
989 farray_append _errors "dataset for snapshots \`${_sn_ds}' does not exist" |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
990 fi |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
991 _idx=$((_idx + 1)) |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
992 done |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
993 |
|
668
e8fc5856a9af
ftjail: call "etcupdate status" in check-freebsd-update to check for unresolved conflicts from previous updates
Franz Glasner <fzglas.hg@dom66.de>
parents:
663
diff
changeset
|
994 _jailname='' |
|
e8fc5856a9af
ftjail: call "etcupdate status" in check-freebsd-update to check for unresolved conflicts from previous updates
Franz Glasner <fzglas.hg@dom66.de>
parents:
663
diff
changeset
|
995 _running_jailname='' |
|
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
|
996 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
|
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 _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
|
999 |
|
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 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
|
1001 _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
|
1002 _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
|
1003 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
|
1004 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
|
1005 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
|
1006 farray_append _errors "Jail \`${_jailname}' is running. Please stop it." |
|
668
e8fc5856a9af
ftjail: call "etcupdate status" in check-freebsd-update to check for unresolved conflicts from previous updates
Franz Glasner <fzglas.hg@dom66.de>
parents:
663
diff
changeset
|
1007 _running_jailname="${_jailname}" |
|
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
|
1008 ;; |
|
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 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
|
1010 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
|
1011 ;; |
|
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 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
|
1013 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
|
1014 ;; |
|
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 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
|
1016 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
|
1017 ;; |
|
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 *) |
|
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 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
|
1020 ;; |
|
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 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
|
1022 |
|
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 # |
|
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 # 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
|
1025 # 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
|
1026 # |
|
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 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
|
1028 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
|
1029 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
|
1030 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
|
1031 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
|
1032 |
|
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 # 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
|
1034 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
|
1035 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
|
1036 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
|
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 _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
|
1039 |
|
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 # |
|
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 # 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
|
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 # 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
|
1044 # 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
|
1045 # 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
|
1046 # 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
|
1047 # |
|
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
|
1048 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
|
1049 ${_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
|
1050 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
|
1051 [ "${_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
|
1052 [ "${_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
|
1053 _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
|
1054 [ "${_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
|
1055 _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
|
1056 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
|
1057 [ "${_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
|
1058 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
|
1059 [ "${_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
|
1060 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
|
1061 # |
|
663
83ec66c64f47
ftjail: Also check in {check-}freebsd-update that no "unionfs" type filesystems are mounted.
Franz Glasner <fzglas.hg@dom66.de>
parents:
660
diff
changeset
|
1062 # 1. Check for open files on all the mounted filesystems. |
|
83ec66c64f47
ftjail: Also check in {check-}freebsd-update that no "unionfs" type filesystems are mounted.
Franz Glasner <fzglas.hg@dom66.de>
parents:
660
diff
changeset
|
1063 # 2. Check for mounted filesystems that cannot re-mounted successfuly |
|
83ec66c64f47
ftjail: Also check in {check-}freebsd-update that no "unionfs" type filesystems are mounted.
Franz Glasner <fzglas.hg@dom66.de>
parents:
660
diff
changeset
|
1064 # because the fstab does not contain all the needed informations |
|
83ec66c64f47
ftjail: Also check in {check-}freebsd-update that no "unionfs" type filesystems are mounted.
Franz Glasner <fzglas.hg@dom66.de>
parents:
660
diff
changeset
|
1065 # (e.g. unionfs). |
|
83ec66c64f47
ftjail: Also check in {check-}freebsd-update that no "unionfs" type filesystems are mounted.
Franz Glasner <fzglas.hg@dom66.de>
parents:
660
diff
changeset
|
1066 # 3. If snapshots are requested check that they are related somehow to |
|
83ec66c64f47
ftjail: Also check in {check-}freebsd-update that no "unionfs" type filesystems are mounted.
Franz Glasner <fzglas.hg@dom66.de>
parents:
660
diff
changeset
|
1067 # mounted filesystems. |
|
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
|
1068 # |
|
660
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1069 _sn_ds_related='' |
|
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
|
1070 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
|
1071 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
|
1072 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
|
1073 fi |
|
663
83ec66c64f47
ftjail: Also check in {check-}freebsd-update that no "unionfs" type filesystems are mounted.
Franz Glasner <fzglas.hg@dom66.de>
parents:
660
diff
changeset
|
1074 case "${_mnt_type}" in |
|
83ec66c64f47
ftjail: Also check in {check-}freebsd-update that no "unionfs" type filesystems are mounted.
Franz Glasner <fzglas.hg@dom66.de>
parents:
660
diff
changeset
|
1075 unionfs) |
|
83ec66c64f47
ftjail: Also check in {check-}freebsd-update that no "unionfs" type filesystems are mounted.
Franz Glasner <fzglas.hg@dom66.de>
parents:
660
diff
changeset
|
1076 farray_append _errors "A \`${_mnt_type}' filesystem is mounted at \`${_mnt_mountpoint}' which cannot re-mounted properly" |
|
83ec66c64f47
ftjail: Also check in {check-}freebsd-update that no "unionfs" type filesystems are mounted.
Franz Glasner <fzglas.hg@dom66.de>
parents:
660
diff
changeset
|
1077 ;; |
|
83ec66c64f47
ftjail: Also check in {check-}freebsd-update that no "unionfs" type filesystems are mounted.
Franz Glasner <fzglas.hg@dom66.de>
parents:
660
diff
changeset
|
1078 *) |
|
83ec66c64f47
ftjail: Also check in {check-}freebsd-update that no "unionfs" type filesystems are mounted.
Franz Glasner <fzglas.hg@dom66.de>
parents:
660
diff
changeset
|
1079 true |
|
83ec66c64f47
ftjail: Also check in {check-}freebsd-update that no "unionfs" type filesystems are mounted.
Franz Glasner <fzglas.hg@dom66.de>
parents:
660
diff
changeset
|
1080 ;; |
|
83ec66c64f47
ftjail: Also check in {check-}freebsd-update that no "unionfs" type filesystems are mounted.
Franz Glasner <fzglas.hg@dom66.de>
parents:
660
diff
changeset
|
1081 esac |
|
660
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1082 _idx=1 |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1083 while falist_tryget_key_at_index _sn_ds _opt_snapshots ${_idx}; do |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1084 case "${_mnt_device}" in |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1085 "${_sn_ds}") |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1086 _sn_ds_related="yes" |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1087 ;; |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1088 "${_sn_ds}"/*) |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1089 _sn_ds_related="yes" |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1090 ;; |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1091 *) |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1092 ;; |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1093 esac |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1094 _idx=$((_idx + 1)) |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1095 done |
|
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
|
1096 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
|
1097 ${_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
|
1098 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
|
1099 fi |
|
660
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1100 if falist_istrue _opt_snapshots; then |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1101 if ! checkyes _sn_ds_related; then |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1102 farray_append _warnings "snapshot datasets and mounted datasets are not related" |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1103 fi |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1104 fi |
|
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
|
1105 |
|
668
e8fc5856a9af
ftjail: call "etcupdate status" in check-freebsd-update to check for unresolved conflicts from previous updates
Franz Glasner <fzglas.hg@dom66.de>
parents:
663
diff
changeset
|
1106 # |
|
e8fc5856a9af
ftjail: call "etcupdate status" in check-freebsd-update to check for unresolved conflicts from previous updates
Franz Glasner <fzglas.hg@dom66.de>
parents:
663
diff
changeset
|
1107 # Check whether conflicts remain from previous update, aborting. |
|
e8fc5856a9af
ftjail: call "etcupdate status" in check-freebsd-update to check for unresolved conflicts from previous updates
Franz Glasner <fzglas.hg@dom66.de>
parents:
663
diff
changeset
|
1108 # This would result in errors when running etcupdate. |
|
e8fc5856a9af
ftjail: call "etcupdate status" in check-freebsd-update to check for unresolved conflicts from previous updates
Franz Glasner <fzglas.hg@dom66.de>
parents:
663
diff
changeset
|
1109 # |
|
e8fc5856a9af
ftjail: call "etcupdate status" in check-freebsd-update to check for unresolved conflicts from previous updates
Franz Glasner <fzglas.hg@dom66.de>
parents:
663
diff
changeset
|
1110 if [ -n "${_directory}" ]; then |
|
e8fc5856a9af
ftjail: call "etcupdate status" in check-freebsd-update to check for unresolved conflicts from previous updates
Franz Glasner <fzglas.hg@dom66.de>
parents:
663
diff
changeset
|
1111 _etcupdate_status='' |
|
e8fc5856a9af
ftjail: call "etcupdate status" in check-freebsd-update to check for unresolved conflicts from previous updates
Franz Glasner <fzglas.hg@dom66.de>
parents:
663
diff
changeset
|
1112 if [ -n "${_running_jailname}" ]; then |
|
689
425b1ae264a9
ftjail: FIX: call jexec command params after "--"
Franz Glasner <fzglas.hg@dom66.de>
parents:
687
diff
changeset
|
1113 _etcupdate_status="$(/usr/sbin/jexec -l -U root -- "${_running_jailname}" /usr/sbin/etcupdate status 2>&1 || true)" |
|
668
e8fc5856a9af
ftjail: call "etcupdate status" in check-freebsd-update to check for unresolved conflicts from previous updates
Franz Glasner <fzglas.hg@dom66.de>
parents:
663
diff
changeset
|
1114 elif [ -d "${_directory}" ]; then |
|
687
5156eaa27ac9
ftjail: call "etcupdate" with LC_ALL=C.UTF_8 set
Franz Glasner <fzglas.hg@dom66.de>
parents:
679
diff
changeset
|
1115 _etcupdate_status="$(LC_ALL=C.UTF-8 /usr/sbin/etcupdate status -D "${_directory}" 2>&1 || true)" |
|
668
e8fc5856a9af
ftjail: call "etcupdate status" in check-freebsd-update to check for unresolved conflicts from previous updates
Franz Glasner <fzglas.hg@dom66.de>
parents:
663
diff
changeset
|
1116 fi |
|
e8fc5856a9af
ftjail: call "etcupdate status" in check-freebsd-update to check for unresolved conflicts from previous updates
Franz Glasner <fzglas.hg@dom66.de>
parents:
663
diff
changeset
|
1117 [ -n "${_etcupdate_status}" ] && farray_append _errors "Unresolved conflicts from last update. Please run \"etcupdate resolve\" first." |
|
e8fc5856a9af
ftjail: call "etcupdate status" in check-freebsd-update to check for unresolved conflicts from previous updates
Franz Glasner <fzglas.hg@dom66.de>
parents:
663
diff
changeset
|
1118 fi |
|
e8fc5856a9af
ftjail: call "etcupdate status" in check-freebsd-update to check for unresolved conflicts from previous updates
Franz Glasner <fzglas.hg@dom66.de>
parents:
663
diff
changeset
|
1119 |
|
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
|
1120 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
|
1121 _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
|
1122 _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
|
1123 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
|
1124 # 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
|
1125 _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
|
1126 |
|
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
|
1127 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
|
1128 farray_destroy _warnings |
|
660
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1129 falist_destroy _opt_snapshots |
|
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
|
1130 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
|
1131 } |
|
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
|
1132 |
|
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
|
1133 |
|
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
|
1134 #: |
|
334
fdbb78c54ffb
Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
330
diff
changeset
|
1135 #: 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
|
1136 #: |
|
418
30956bb06421
Drop a comment about "certctl rehash" in etcupdate
Franz Glasner <fzglas.hg@dom66.de>
parents:
412
diff
changeset
|
1137 #: .. 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
|
1138 #: :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
|
1139 #: |
|
334
fdbb78c54ffb
Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
330
diff
changeset
|
1140 command_freebsd_update() { |
|
341
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1141 local _directory _new_origin _etcupdate_tarball |
|
660
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1142 local _opt_keep _opt_old_origin _opt_snapshots |
|
334
fdbb78c54ffb
Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
330
diff
changeset
|
1143 |
|
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
|
1144 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
|
1145 local _dir_basename _dir_fn_tldir |
|
334
fdbb78c54ffb
Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
330
diff
changeset
|
1146 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
|
1147 local _mnt_device _mnt_mountpoint _mnt_type _mnt_options |
|
660
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1148 local _idx _sn_ds _sn_name |
|
341
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1149 local _clone_extra_props _canmount_prop |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1150 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
|
1151 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
|
1152 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
|
1153 local _add_log_sock |
|
334
fdbb78c54ffb
Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
330
diff
changeset
|
1154 |
|
660
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1155 _opt_snapshots='' |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1156 falist_create _opt_snapshots |
|
339
e1d6807b0c4d
Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents:
338
diff
changeset
|
1157 _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
|
1158 _opt_old_origin="" |
|
660
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1159 while getopts "R:ko:" _opt ; do |
|
655
5ba31e3748ca
ftjail: quote all option expansions
Franz Glasner <fzglas.hg@dom66.de>
parents:
654
diff
changeset
|
1160 case "${_opt}" in |
|
660
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1161 R) |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1162 case "${OPTARG}" in |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1163 *?\@?*) |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1164 # |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1165 # Split in two parts: dataset hierarchy and the name of the |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1166 # snapshot |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1167 # |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1168 falist_set _opt_snapshots "${OPTARG%%@*}" "${OPTARG#*@}" |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1169 ;; |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1170 *) |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1171 err "argument \`${OPTARG}' is not a snapshot name" |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1172 return 1 |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1173 ;; |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1174 esac |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1175 ;; |
|
339
e1d6807b0c4d
Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents:
338
diff
changeset
|
1176 k) |
|
e1d6807b0c4d
Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents:
338
diff
changeset
|
1177 _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
|
1178 ;; |
|
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
|
1179 o) |
|
660
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1180 _opt_old_origin="${OPTARG}" |
|
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
|
1181 ;; |
|
339
e1d6807b0c4d
Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents:
338
diff
changeset
|
1182 \?|:) |
|
e1d6807b0c4d
Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents:
338
diff
changeset
|
1183 return 2; |
|
e1d6807b0c4d
Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents:
338
diff
changeset
|
1184 ;; |
|
e1d6807b0c4d
Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents:
338
diff
changeset
|
1185 esac |
|
e1d6807b0c4d
Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents:
338
diff
changeset
|
1186 done |
|
e1d6807b0c4d
Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents:
338
diff
changeset
|
1187 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
|
1188 OPTIND=1 |
|
e1d6807b0c4d
Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents:
338
diff
changeset
|
1189 |
|
334
fdbb78c54ffb
Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
330
diff
changeset
|
1190 _directory="${1-}" |
|
341
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1191 _new_origin="${2-}" |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1192 _etcupdate_tarball="${3-}" |
|
334
fdbb78c54ffb
Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
330
diff
changeset
|
1193 |
|
fdbb78c54ffb
Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
330
diff
changeset
|
1194 [ -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
|
1195 [ -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
|
1196 |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1197 [ -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
|
1198 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
|
1199 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
|
1200 [ -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
|
1201 fi |
|
334
fdbb78c54ffb
Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
330
diff
changeset
|
1202 |
|
660
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1203 # Check snapshotting |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1204 _idx=1 |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1205 while falist_tryget_item_at_index _sn_ds _sn_name _opt_snapshots ${_idx}; do |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1206 if zfs get -H -o value name "${_sn_ds}" >/dev/null 2>/dev/null; then |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1207 # yes dataset exists: check that snapshots do not exist |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1208 while IFS=$'\t' read -r _line; do |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1209 if zfs get -H -o value name "${_line}@${_sn_name}" >/dev/null 2>/dev/null; then |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1210 err "snapshot \`${_line}@${_sn_name}' already exists" |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1211 return 1 |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1212 fi |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1213 done <<EOF2988ee715b2d93fd93bdce23 |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1214 $(zfs list -H -r -o name "${_sn_ds}") |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1215 EOF2988ee715b2d93fd93bdce23 |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1216 else |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1217 err "dataset for snapshots \`${_sn_ds}' does not exist" |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1218 return 1 |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1219 fi |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1220 _idx=$((_idx + 1)) |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1221 done |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1222 |
|
632
3aeb21629c27
ftjail: FIX: quote the argument to "basename"
Franz Glasner <fzglas.hg@dom66.de>
parents:
630
diff
changeset
|
1223 _dir_basename="$(basename "${_directory}")" |
|
334
fdbb78c54ffb
Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
330
diff
changeset
|
1224 |
|
fdbb78c54ffb
Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
330
diff
changeset
|
1225 set +e |
|
650
5a367d44b480
ftjail: Refactor the result checks for _get_jail_from_path
Franz Glasner <fzglas.hg@dom66.de>
parents:
647
diff
changeset
|
1226 _jailname="$(_get_jail_from_path "${_directory}")" |
|
334
fdbb78c54ffb
Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
330
diff
changeset
|
1227 _res=$? |
|
fdbb78c54ffb
Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
330
diff
changeset
|
1228 set -e |
|
650
5a367d44b480
ftjail: Refactor the result checks for _get_jail_from_path
Franz Glasner <fzglas.hg@dom66.de>
parents:
647
diff
changeset
|
1229 case ${_res} in |
|
5a367d44b480
ftjail: Refactor the result checks for _get_jail_from_path
Franz Glasner <fzglas.hg@dom66.de>
parents:
647
diff
changeset
|
1230 0) |
|
5a367d44b480
ftjail: Refactor the result checks for _get_jail_from_path
Franz Glasner <fzglas.hg@dom66.de>
parents:
647
diff
changeset
|
1231 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
|
1232 return 1 |
|
5a367d44b480
ftjail: Refactor the result checks for _get_jail_from_path
Franz Glasner <fzglas.hg@dom66.de>
parents:
647
diff
changeset
|
1233 ;; |
|
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
|
1234 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
|
1235 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
|
1236 ;; |
|
650
5a367d44b480
ftjail: Refactor the result checks for _get_jail_from_path
Franz Glasner <fzglas.hg@dom66.de>
parents:
647
diff
changeset
|
1237 2) |
|
5a367d44b480
ftjail: Refactor the result checks for _get_jail_from_path
Franz Glasner <fzglas.hg@dom66.de>
parents:
647
diff
changeset
|
1238 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
|
1239 return 1 |
|
5a367d44b480
ftjail: Refactor the result checks for _get_jail_from_path
Franz Glasner <fzglas.hg@dom66.de>
parents:
647
diff
changeset
|
1240 ;; |
|
5a367d44b480
ftjail: Refactor the result checks for _get_jail_from_path
Franz Glasner <fzglas.hg@dom66.de>
parents:
647
diff
changeset
|
1241 3) |
|
5a367d44b480
ftjail: Refactor the result checks for _get_jail_from_path
Franz Glasner <fzglas.hg@dom66.de>
parents:
647
diff
changeset
|
1242 true |
|
5a367d44b480
ftjail: Refactor the result checks for _get_jail_from_path
Franz Glasner <fzglas.hg@dom66.de>
parents:
647
diff
changeset
|
1243 ;; |
|
5a367d44b480
ftjail: Refactor the result checks for _get_jail_from_path
Franz Glasner <fzglas.hg@dom66.de>
parents:
647
diff
changeset
|
1244 *) |
|
341
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1245 return ${_res} |
|
650
5a367d44b480
ftjail: Refactor the result checks for _get_jail_from_path
Franz Glasner <fzglas.hg@dom66.de>
parents:
647
diff
changeset
|
1246 ;; |
|
5a367d44b480
ftjail: Refactor the result checks for _get_jail_from_path
Franz Glasner <fzglas.hg@dom66.de>
parents:
647
diff
changeset
|
1247 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
|
1248 |
|
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
|
1249 # |
|
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
|
1250 # 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
|
1251 # 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
|
1252 # |
|
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
|
1253 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
|
1254 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
|
1255 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
|
1256 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
|
1257 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
|
1258 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
|
1259 # 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
|
1260 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
|
1261 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
|
1262 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
|
1263 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
|
1264 |
|
334
fdbb78c54ffb
Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
330
diff
changeset
|
1265 _dir_mounts="$(_get_mounts_at_directory "${_directory}")" |
|
fdbb78c54ffb
Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
330
diff
changeset
|
1266 |
|
fdbb78c54ffb
Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
330
diff
changeset
|
1267 # |
|
fdbb78c54ffb
Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
330
diff
changeset
|
1268 # Check preconditions thoroughly! |
|
fdbb78c54ffb
Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
330
diff
changeset
|
1269 # |
|
fdbb78c54ffb
Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
330
diff
changeset
|
1270 # 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
|
1271 # 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
|
1272 # mountpoint in ZFS. |
|
334
fdbb78c54ffb
Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
330
diff
changeset
|
1273 # 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
|
1274 # |
|
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
|
1275 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
|
1276 ${_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
|
1277 EOF4tHGCSSf5d7d9cf |
|
341
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1278 [ "${_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
|
1279 [ "${_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
|
1280 _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
|
1281 [ "${_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
|
1282 _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
|
1283 if [ -n "${_opt_old_origin}" ]; then |
|
341
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1284 [ "${_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
|
1285 else |
|
341
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1286 [ "${_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
|
1287 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
|
1288 # |
|
663
83ec66c64f47
ftjail: Also check in {check-}freebsd-update that no "unionfs" type filesystems are mounted.
Franz Glasner <fzglas.hg@dom66.de>
parents:
660
diff
changeset
|
1289 # 1. Check for open files on all the mounted filesystems. |
|
83ec66c64f47
ftjail: Also check in {check-}freebsd-update that no "unionfs" type filesystems are mounted.
Franz Glasner <fzglas.hg@dom66.de>
parents:
660
diff
changeset
|
1290 # 2. Check for mounted filesystems that cannot re-mounted successfuly |
|
83ec66c64f47
ftjail: Also check in {check-}freebsd-update that no "unionfs" type filesystems are mounted.
Franz Glasner <fzglas.hg@dom66.de>
parents:
660
diff
changeset
|
1291 # because the fstab does not contain all the needed informations |
|
83ec66c64f47
ftjail: Also check in {check-}freebsd-update that no "unionfs" type filesystems are mounted.
Franz Glasner <fzglas.hg@dom66.de>
parents:
660
diff
changeset
|
1292 # (e.g. unionfs). |
|
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
|
1293 # |
|
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
|
1294 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
|
1295 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
|
1296 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
|
1297 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
|
1298 fi |
|
663
83ec66c64f47
ftjail: Also check in {check-}freebsd-update that no "unionfs" type filesystems are mounted.
Franz Glasner <fzglas.hg@dom66.de>
parents:
660
diff
changeset
|
1299 case "${_mnt_type}" in |
|
83ec66c64f47
ftjail: Also check in {check-}freebsd-update that no "unionfs" type filesystems are mounted.
Franz Glasner <fzglas.hg@dom66.de>
parents:
660
diff
changeset
|
1300 unionfs) |
|
83ec66c64f47
ftjail: Also check in {check-}freebsd-update that no "unionfs" type filesystems are mounted.
Franz Glasner <fzglas.hg@dom66.de>
parents:
660
diff
changeset
|
1301 err "A \`${_mnt_type}' filesystem is mounted at \`${_mnt_mountpoint}' which cannot re-mounted properly" |
|
83ec66c64f47
ftjail: Also check in {check-}freebsd-update that no "unionfs" type filesystems are mounted.
Franz Glasner <fzglas.hg@dom66.de>
parents:
660
diff
changeset
|
1302 return 1 |
|
83ec66c64f47
ftjail: Also check in {check-}freebsd-update that no "unionfs" type filesystems are mounted.
Franz Glasner <fzglas.hg@dom66.de>
parents:
660
diff
changeset
|
1303 ;; |
|
83ec66c64f47
ftjail: Also check in {check-}freebsd-update that no "unionfs" type filesystems are mounted.
Franz Glasner <fzglas.hg@dom66.de>
parents:
660
diff
changeset
|
1304 *) |
|
83ec66c64f47
ftjail: Also check in {check-}freebsd-update that no "unionfs" type filesystems are mounted.
Franz Glasner <fzglas.hg@dom66.de>
parents:
660
diff
changeset
|
1305 true |
|
83ec66c64f47
ftjail: Also check in {check-}freebsd-update that no "unionfs" type filesystems are mounted.
Franz Glasner <fzglas.hg@dom66.de>
parents:
660
diff
changeset
|
1306 ;; |
|
83ec66c64f47
ftjail: Also check in {check-}freebsd-update that no "unionfs" type filesystems are mounted.
Franz Glasner <fzglas.hg@dom66.de>
parents:
660
diff
changeset
|
1307 esac |
|
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
|
1308 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
|
1309 ${_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
|
1310 EOF4tHGCAASLfafbf1b5 |
|
341
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1311 |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1312 # 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
|
1313 _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
|
1314 # 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
|
1315 _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
|
1316 |
|
334
fdbb78c54ffb
Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
330
diff
changeset
|
1317 # |
|
fdbb78c54ffb
Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
330
diff
changeset
|
1318 # 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
|
1319 # 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
|
1320 # _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
|
1321 |
|
633
edad318c022d
ftjail: FIX: also quote the use of "_dir_basename"
Franz Glasner <fzglas.hg@dom66.de>
parents:
632
diff
changeset
|
1322 _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
|
1323 [ -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
|
1324 # 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
|
1325 _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
|
1326 # 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
|
1327 _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
|
1328 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
|
1329 # 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
|
1330 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
|
1331 _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
|
1332 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
|
1333 |
|
660
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1334 _idx=1 |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1335 while falist_tryget_item_at_index _sn_ds _sn_name _opt_snapshots ${_idx}; do |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1336 echo "Creating snapshot \`${_sn_ds}@${_sn_name}'" |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1337 zfs snapshot -r "${_sn_ds}@${_sn_name}" || { err "cannot snapshot \`${_sn_ds}@${_sn_name}'"; return 1; } |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1338 _idx=$((_idx + 1)) |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1339 done |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1340 |
|
334
fdbb78c54ffb
Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
330
diff
changeset
|
1341 # 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
|
1342 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
|
1343 /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
|
1344 |
|
fdbb78c54ffb
Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
330
diff
changeset
|
1345 # |
|
fdbb78c54ffb
Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
330
diff
changeset
|
1346 # 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
|
1347 # 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
|
1348 # 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
|
1349 # 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
|
1350 # |
|
e1d6807b0c4d
Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents:
338
diff
changeset
|
1351 |
|
341
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1352 # |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1353 # 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
|
1354 # on the given new origin. |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1355 # 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
|
1356 # 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
|
1357 # adjusted properly. |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1358 # |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1359 echo "Destroying the cloned root dataset \`${_root_dataset}'" |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1360 zfs destroy -v "${_root_dataset}" |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1361 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
|
1362 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
|
1363 # |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1364 # 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
|
1365 # mountpoint is not reflected in the "mountpoint" |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1366 # 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
|
1367 # 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
|
1368 # |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1369 echo "Remounting only the root dataset at \`${_directory}'" |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1370 [ ! -d "${_directory}" ] && mkdir "${_directory}" |
|
532
c615279bb797
Call mount and umount with absolute paths
Franz Glasner <fzglas.hg@dom66.de>
parents:
469
diff
changeset
|
1371 /sbin/mount -t zfs "${_root_dataset}" "${_directory}" |
|
341
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1372 # |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1373 # 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
|
1374 # 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
|
1375 # datasets. |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1376 # |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1377 # 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
|
1378 # 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
|
1379 # datasets. |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1380 # |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1381 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
|
1382 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
|
1383 if [ ! -d "${_line}" ]; then |
|
f7eda6256ae8
ftjail: remove useless "cat" and replace by input redirection
Franz Glasner <fzglas.hg@dom66.de>
parents:
628
diff
changeset
|
1384 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
|
1385 mkdir "${_line}" |
|
f7eda6256ae8
ftjail: remove useless "cat" and replace by input redirection
Franz Glasner <fzglas.hg@dom66.de>
parents:
628
diff
changeset
|
1386 fi |
|
f7eda6256ae8
ftjail: remove useless "cat" and replace by input redirection
Franz Glasner <fzglas.hg@dom66.de>
parents:
628
diff
changeset
|
1387 done < "${_dir_fn_tldir}" |
|
341
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1388 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
|
1389 /sbin/umount "${_directory}" |
|
341
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1390 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
|
1391 zfs set readonly=on "${_root_dataset}" |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1392 # |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1393 # 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
|
1394 # temporarily. |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1395 # |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1396 if [ -n "${_canmount_prop}" ]; then |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1397 if [ "${_canmount_prop}" = "DEFAULT" ]; then |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1398 # |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1399 # "zfs inherit" is not possible for "canmount". |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1400 # 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
|
1401 # |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1402 # 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
|
1403 # |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1404 zfs inherit -S canmount "${_root_dataset}" |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1405 else |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1406 zfs set "${_canmount_prop}" "${_root_dataset}" |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1407 fi |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1408 fi |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1409 |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1410 # Mount again |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1411 echo "Mounting all datasets rooted at \`${_directory}'" |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1412 [ ! -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
|
1413 /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
|
1414 |
| 367 | 1415 # Update and/or merge configs |
|
341
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1416 if [ -n "${_etcupdate_tarball}" ]; then |
| 653 | 1417 # 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
|
1418 echo "Calling etcupdate for DESTDIR=${_directory}" |
|
687
5156eaa27ac9
ftjail: call "etcupdate" with LC_ALL=C.UTF_8 set
Franz Glasner <fzglas.hg@dom66.de>
parents:
679
diff
changeset
|
1419 LC_ALL=C.UTF-8 /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
|
1420 fi |
|
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1421 |
|
679
e4e7a33c8b75
ftjail: after doing a freebsd-update and etcupdate also call "etcupdate status" to show the status after updating
Franz Glasner <fzglas.hg@dom66.de>
parents:
668
diff
changeset
|
1422 echo "Checking status of etcupdate at DESTDIR=${_directory}" |
|
687
5156eaa27ac9
ftjail: call "etcupdate" with LC_ALL=C.UTF_8 set
Franz Glasner <fzglas.hg@dom66.de>
parents:
679
diff
changeset
|
1423 LC_ALL=C.UTF-8 /usr/sbin/etcupdate status -D "${_directory}" || true |
|
679
e4e7a33c8b75
ftjail: after doing a freebsd-update and etcupdate also call "etcupdate status" to show the status after updating
Franz Glasner <fzglas.hg@dom66.de>
parents:
668
diff
changeset
|
1424 |
|
339
e1d6807b0c4d
Implement option handling for ftjail freebsd-update and the "-k" option
Franz Glasner <fzglas.hg@dom66.de>
parents:
338
diff
changeset
|
1425 if [ "${_opt_keep}" != "yes" ]; then |
|
341
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1426 echo "Cleaning up...""" |
|
342
89877869a665
Create all temporary files within a unique temporary directory
Franz Glasner <fzglas.hg@dom66.de>
parents:
341
diff
changeset
|
1427 [ -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
|
1428 fi |
|
341
a204a7415d4a
"ftjail freebsd-update" is implemented.
Franz Glasner <fzglas.hg@dom66.de>
parents:
340
diff
changeset
|
1429 echo "Done." |
|
660
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1430 |
|
82a98db83a13
ftjail: Implement a "-R" option for "ftjail freebsd-update" and "ftjail check-freebsd-update".
Franz Glasner <fzglas.hg@dom66.de>
parents:
658
diff
changeset
|
1431 falist_destroy _opt_snapshots |
|
334
fdbb78c54ffb
Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
330
diff
changeset
|
1432 } |
|
fdbb78c54ffb
Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
330
diff
changeset
|
1433 |
|
fdbb78c54ffb
Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
330
diff
changeset
|
1434 |
|
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
|
1435 # |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1436 # Global option handling |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1437 # |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1438 while getopts "Vh" _opt ; do |
|
655
5ba31e3748ca
ftjail: quote all option expansions
Franz Glasner <fzglas.hg@dom66.de>
parents:
654
diff
changeset
|
1439 case "${_opt}" in |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1440 V) |
|
386
84d2735fe7f6
Simplified version tagging a lot: it is also faster now.
Franz Glasner <fzglas.hg@dom66.de>
parents:
380
diff
changeset
|
1441 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
|
1442 exit 0 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1443 ;; |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1444 h) |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1445 echo "${USAGE}" |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1446 exit 0 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1447 ;; |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1448 \?) |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1449 exit 2; |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1450 ;; |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1451 *) |
|
250
c4d835ccb4ae
Implement configure for symlinked skeletons.
Franz Glasner <fzglas.hg@dom66.de>
parents:
249
diff
changeset
|
1452 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
|
1453 exit 2 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1454 ;; |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1455 esac |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1456 done |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1457 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1458 # |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1459 # 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
|
1460 # command-local options. |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1461 # |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1462 shift $((OPTIND-1)) |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1463 OPTIND=1 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1464 |
|
250
c4d835ccb4ae
Implement configure for symlinked skeletons.
Franz Glasner <fzglas.hg@dom66.de>
parents:
249
diff
changeset
|
1465 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
|
1466 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1467 command="$1" |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1468 shift |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1469 |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1470 case "${command}" in |
|
235
85aea8ca1ab8
Some work on datasets-tmpl
Franz Glasner <fzglas.hg@dom66.de>
parents:
234
diff
changeset
|
1471 datasets-tmpl) |
|
85aea8ca1ab8
Some work on datasets-tmpl
Franz Glasner <fzglas.hg@dom66.de>
parents:
234
diff
changeset
|
1472 command_datasets_tmpl "$@" |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1473 ;; |
|
241
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
1474 mount-tmpl) |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
1475 command_mount_tmpl "$@" |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
1476 ;; |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
1477 umount-tmpl|unmount-tmpl) |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
1478 command_umount_tmpl "$@" |
|
acf16a85900f
Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents:
240
diff
changeset
|
1479 ;; |
|
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
|
1480 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
|
1481 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
|
1482 ;; |
|
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
|
1483 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
|
1484 command_populate_tmpl "$@" |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1485 ;; |
|
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
|
1486 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
|
1487 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
|
1488 ;; |
|
256
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
1489 copy-skel) |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
1490 command_copy_skel "$@" |
|
68f091c9524a
Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents:
254
diff
changeset
|
1491 ;; |
|
308
2102b46566f0
Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents:
307
diff
changeset
|
1492 build-etcupdate-current-tmpl) |
|
2102b46566f0
Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents:
307
diff
changeset
|
1493 command_build_etcupdate_current_tmpl "$@" |
|
2102b46566f0
Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents:
307
diff
changeset
|
1494 ;; |
|
250
c4d835ccb4ae
Implement configure for symlinked skeletons.
Franz Glasner <fzglas.hg@dom66.de>
parents:
249
diff
changeset
|
1495 configure) |
|
c4d835ccb4ae
Implement configure for symlinked skeletons.
Franz Glasner <fzglas.hg@dom66.de>
parents:
249
diff
changeset
|
1496 echo "ERROR: use \`fjail configure' instead" 1>&2; |
|
c4d835ccb4ae
Implement configure for symlinked skeletons.
Franz Glasner <fzglas.hg@dom66.de>
parents:
249
diff
changeset
|
1497 exit 2 |
|
c4d835ccb4ae
Implement configure for symlinked skeletons.
Franz Glasner <fzglas.hg@dom66.de>
parents:
249
diff
changeset
|
1498 ;; |
|
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
|
1499 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
|
1500 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
|
1501 ;; |
|
334
fdbb78c54ffb
Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
330
diff
changeset
|
1502 freebsd-update) |
|
fdbb78c54ffb
Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
330
diff
changeset
|
1503 command_freebsd_update "$@" |
|
fdbb78c54ffb
Begin the "ftjail freebsd-update" command
Franz Glasner <fzglas.hg@dom66.de>
parents:
330
diff
changeset
|
1504 ;; |
|
233
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1505 *) |
|
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
|
1506 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
|
1507 ;; |
|
f745d3a216a6
Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff
changeset
|
1508 esac |
