Mercurial > hgrepos > FreeBSD > ports > sysutils > local-bsdtools
annotate sbin/ftjail @ 805:e18cc5fe828c
.shellcheckrc: disable SC2214 because is fires for all long options.
Long options are not understood by shellcheck.
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Mon, 04 Nov 2024 22:45:00 +0100 |
| parents | 8f1583faf9ea |
| children | e2f262ec2bf4 |
| 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 |
|
730
8f1583faf9ea
farray.sh: Rename farray_destroy() to farray_release() and falist_destroy() to falist_release()
Franz Glasner <fzglas.hg@dom66.de>
parents:
689
diff
changeset
|
1127 farray_release _errors |
|
8f1583faf9ea
farray.sh: Rename farray_destroy() to farray_release() and falist_destroy() to falist_release()
Franz Glasner <fzglas.hg@dom66.de>
parents:
689
diff
changeset
|
1128 farray_release _warnings |
|
8f1583faf9ea
farray.sh: Rename farray_destroy() to farray_release() and falist_destroy() to falist_release()
Franz Glasner <fzglas.hg@dom66.de>
parents:
689
diff
changeset
|
1129 falist_release _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 |
|
730
8f1583faf9ea
farray.sh: Rename farray_destroy() to farray_release() and falist_destroy() to falist_release()
Franz Glasner <fzglas.hg@dom66.de>
parents:
689
diff
changeset
|
1431 falist_release _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 |
