annotate sbin/ftjail @ 784:b5b19c62da24

fports: FIX: man page: Synopsis should document the "deptree" subcommand
author Franz Glasner <fzglas.hg@dom66.de>
date Sat, 26 Oct 2024 22:42:01 +0200
parents 8f1583faf9ea
children e2f262ec2bf4
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
1 #!/bin/sh
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
2 # -*- indent-tabs-mode: nil; -*-
274
570363928b13 Convert the "module" doc-string to a `#:'-style comment
Franz Glasner <fzglas.hg@dom66.de>
parents: 270
diff changeset
3 #:
570363928b13 Convert the "module" doc-string to a `#:'-style comment
Franz Glasner <fzglas.hg@dom66.de>
parents: 270
diff changeset
4 #: A very minimal BSD Thin Jail management tool.
570363928b13 Convert the "module" doc-string to a `#:'-style comment
Franz Glasner <fzglas.hg@dom66.de>
parents: 270
diff changeset
5 #:
570363928b13 Convert the "module" doc-string to a `#:'-style comment
Franz Glasner <fzglas.hg@dom66.de>
parents: 270
diff changeset
6 #: :Author: Franz Glasner
438
9c3b1966ba91 Extend copyright to 2024
Franz Glasner <fzglas.hg@dom66.de>
parents: 433
diff changeset
7 #: :Copyright: (c) 2022-2024 Franz Glasner.
274
570363928b13 Convert the "module" doc-string to a `#:'-style comment
Franz Glasner <fzglas.hg@dom66.de>
parents: 270
diff changeset
8 #: All rights reserved.
570363928b13 Convert the "module" doc-string to a `#:'-style comment
Franz Glasner <fzglas.hg@dom66.de>
parents: 270
diff changeset
9 #: :License: BSD 3-Clause "New" or "Revised" License.
570363928b13 Convert the "module" doc-string to a `#:'-style comment
Franz Glasner <fzglas.hg@dom66.de>
parents: 270
diff changeset
10 #: See LICENSE for details.
570363928b13 Convert the "module" doc-string to a `#:'-style comment
Franz Glasner <fzglas.hg@dom66.de>
parents: 270
diff changeset
11 #: If you cannot find LICENSE see
570363928b13 Convert the "module" doc-string to a `#:'-style comment
Franz Glasner <fzglas.hg@dom66.de>
parents: 270
diff changeset
12 #: <https://opensource.org/licenses/BSD-3-Clause>
386
84d2735fe7f6 Simplified version tagging a lot: it is also faster now.
Franz Glasner <fzglas.hg@dom66.de>
parents: 380
diff changeset
13 #: :ID: @(#)@@SIMPLEVERSIONTAG@@
274
570363928b13 Convert the "module" doc-string to a `#:'-style comment
Franz Glasner <fzglas.hg@dom66.de>
parents: 270
diff changeset
14 #:
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
15
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
16 set -eu
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
17
643
4f2257ea7d0a shellcheck: disable SC2034: VERSION appears unused...
Franz Glasner <fzglas.hg@dom66.de>
parents: 633
diff changeset
18 # shellcheck disable=SC2034 # VERSION appears unused
550
847ae246f3cc Make the port really DATADIR and EXAMPLESDIR safe because the user may redefine DATADIR and EXAMPLESDIR.
Franz Glasner <fzglas.hg@dom66.de>
parents: 545
diff changeset
19 VERSION='@@VERSION@@'
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
20
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
21 USAGE='
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
22 USAGE: ftjail [ OPTIONS ] COMMAND [ COMMAND OPTIONS ] [ ARG ... ]
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
23
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
24 OPTIONS:
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
25
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
26 -V Print the program name and version number to stdout and exit
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
27
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
28 -h Print this help message to stdout and exit
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
29
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
30 COMMANDS:
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
31
300
901b0e3c0dab All manual pages for ftjail done
Franz Glasner <fzglas.hg@dom66.de>
parents: 297
diff changeset
32 datasets-tmpl -L|-P PARENT-BASE PARENT-SKELETON NAME
233
f745d3a216a6 Erste Basis für "ftjail": Management von Thin Jails
Franz Glasner <fzglas.hg@dom66.de>
parents:
diff changeset
33
300
901b0e3c0dab All manual pages for ftjail done
Franz Glasner <fzglas.hg@dom66.de>
parents: 297
diff changeset
34 mount-tmpl -L|-P [-n] [-u] BASE-RO SKELETON-RW MOUNTPOINT
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
35
243
d3fa59e2c5fe Typo in docs
Franz Glasner <fzglas.hg@dom66.de>
parents: 242
diff changeset
36 umount-tmpl BASE-RO SKELETON-RW
241
acf16a85900f Mount and unmount template datasets
Franz Glasner <fzglas.hg@dom66.de>
parents: 240
diff changeset
37
242
59e933b81dcf First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents: 241
diff changeset
38 interlink-tmpl MOUNTPOINT
59e933b81dcf First attemt to populate base and skeleton using the "skeleton" subdir and symliks from base to RW skeleton subdirs
Franz Glasner <fzglas.hg@dom66.de>
parents: 241
diff changeset
39
469
aae67d3011b4 Add the "-b" command line switch into the short docu of ftjail also
Franz Glasner <fzglas.hg@dom66.de>
parents: 455
diff changeset
40 populate-tmpl -L|-P [-b] DIRECTORY BASETXZ [KERNELTXZ]
249
a91e1c5173cc Also support direct mounting of the RW skeleton subdirs at a mountpoint
Franz Glasner <fzglas.hg@dom66.de>
parents: 248
diff changeset
41
251
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
42 snapshot-tmpl BASE-RO SKELETON-RW SNAPSHOT-NAME
7a6c03445ba1 Implement a "snapshot-tmpl" command: create ZFS snapshots for the RO base and the RW skeleton
Franz Glasner <fzglas.hg@dom66.de>
parents: 250
diff changeset
43
380
6be930eb7490 Implement the "fzfs create-tree" command
Franz Glasner <fzglas.hg@dom66.de>
parents: 379
diff changeset
44 copy-skel [-A] [-D] [-L] [-M MOUNTPOINT] [-P] [-u] SOURCE-DS SNAPSHOT-NAME TARGET-DS
256
68f091c9524a Command "copy-skel" implemented
Franz Glasner <fzglas.hg@dom66.de>
parents: 254
diff changeset
45
308
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
46 build-etcupdate-current-tmpl DIRECTORY TARBALL
2102b46566f0 Implement "ftjail build-etcupdate-curent-tmpl".
Franz Glasner <fzglas.hg@dom66.de>
parents: 307
diff changeset
47
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
39268cba8c46 FIX: Error handling
Franz Glasner <fzglas.hg@dom66.de>
parents: 253
diff changeset
625 [ -z "${_ds}" ] && { echo "ERROR: no dataset given" 1>&2; return 2; }
39268cba8c46 FIX: Error handling
Franz Glasner <fzglas.hg@dom66.de>
parents: 253
diff changeset
626 [ -z "${_snap_name}" ] && { echo "ERROR: no snapshot name given" 1>&2; return 2; }
39268cba8c46 FIX: Error handling
Franz Glasner <fzglas.hg@dom66.de>
parents: 253
diff changeset
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
39268cba8c46 FIX: Error handling
Franz Glasner <fzglas.hg@dom66.de>
parents: 253
diff changeset
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
39268cba8c46 FIX: Error handling
Franz Glasner <fzglas.hg@dom66.de>
parents: 253
diff changeset
649 # Here extra checks because of better error messages possible
39268cba8c46 FIX: Error handling
Franz Glasner <fzglas.hg@dom66.de>
parents: 253
diff changeset
650 [ -z "${_ds_base}" ] && { echo "ERROR: no RO base dataset name given" 1>&2; return 2; }
39268cba8c46 FIX: Error handling
Franz Glasner <fzglas.hg@dom66.de>
parents: 253
diff changeset
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
d40e6e40c315 Comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 278
diff changeset
723 #
d40e6e40c315 Comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 278
diff changeset
724 # Root
d40e6e40c315 Comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 278
diff changeset
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
d40e6e40c315 Comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 278
diff changeset
737 #
d40e6e40c315 Comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 278
diff changeset
738 # Children
d40e6e40c315 Comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 278
diff changeset
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
c5b1647cedb5 Comments
Franz Glasner <fzglas.hg@dom66.de>
parents: 342
diff changeset
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
e878b3a5b0c5 ftjail: comment
Franz Glasner <fzglas.hg@dom66.de>
parents: 652
diff changeset
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