summaryrefslogtreecommitdiffstats
path: root/share/build-scripts/debconf.d/0001-preseed-file
blob: 8e90943a585cd82e0912cff711715f34355d431b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
#!/bin/sh

# Copyright (C) 2014-2022 Daniel Baumann <daniel.baumann@open-infrastructure.net>
#
# SPDX-License-Identifier: GPL-3.0+
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <https://www.gnu.org/licenses/>.

set -e

PROJECT="open-infrastructure"
SOFTWARE="compute-tools"
PROGRAM="container"

CONFIG="/etc/${SOFTWARE}/config"
DEBCONF="/etc/${SOFTWARE}/debconf"

DEBCONF_NOWARNINGS="true"
export DEBCONF_NOWARNINGS

. /usr/share/debconf/confmodule

# debconf template hierarchy (first match wins):
#
# 1. user specified a preseed file through commandline options
# 2. /etc/compute-tools/debconf/${NAME}.cfg exists
# 3. /etc/compute-tools/debconf/links/${NAME}.cfg exists
# 4. /etc/compute-tools/debconf/*/${NAME}.cfg exists (only one file!)
# 5. /etc/compute-tools/debconf/default.cfg exists
# 6. user chooses from list of available (if any) *.cfg files
#    (recursively) found in /etc/compute-tools/debconf,
#    /etc/compute-tools/debconf/links is excluded.

if [ -n "${PRESEED_FILE}" ]
then
	# user specified one or more preseed files through commandline option
	db_set container/preseed-file "${PRESEED_FILE}"
	db_fset container/preseed-file seen true
elif [ -e "${DEBCONF}/${NAME}.cfg" ]
then
	# user did not specify a pressed file, but there is a matching one
	# available on the system matching the container name
	db_set container/preseed-file "${DEBCONF}/${NAME}.cfg"
	db_fset container/preseed-file seen true
elif [ -e "${DEBCONF}/links/${NAME}.cfg" ]
then
	# user did not specify a pressed file, but there is a matching one
	# in /etc/${SOFTWARE}/debconf/links directory
	db_set container/preseed-file "${DEBCONF}/${NAME}.cfg"
	db_fset container/preseed-file seen true
elif [ "$(ls ${DEBCONF}/*/${NAME}.cfg 2>/dev/null | wc -l)" -eq 1 ]
then
	# user did not specify a pressed file, but there is 1 (and only 1)
	# matching in a sub-directory of /etc/${SOFTWARE}/debconf

	FILE="$(ls ${DEBCONF}/*/${NAME}.cfg)"

	db_set container/preseed-file "${FILE}"
	db_fset container/preseed-file seen true
elif [ -e "${DEBCONF}/default.cfg" ]
then
	# user did not specify a pressed file, but there is a default one
	db_set container/preseed-file "${DEBCONF}/default.cfg"
	db_fset container/preseed-file seen true
elif ls "${DEBCONF}"/*.cfg > /dev/null 2>&1 || ls "${DEBCONF}"/*/*.cfg > /dev/null 2>&1
then
	# user has not specified preseed files through commandline option,
	# showing debconf selection dialog for global preseed file.

	FILES="$(cd ${DEBCONF} && find . -type f -name '*.cfg' -printf '%P\n' | grep -v '^links\/' | LC_ALL=C sort -V)"
	PRESEED_FILES="$(for FILE in ${FILES}; do echo -n "$(echo ${FILE} | sed -e 's|.cfg$||'), "; done | sed -e 's|, $||')"

	if [ -n "${PRESEED_FILES}" ]
	then
		db_subst container/preseed-files CHOICES "custom, exit, none, , ${PRESEED_FILES}"

		db_settitle container/title
		db_input high container/preseed-files || true
		db_go

		db_get container/preseed-files
		PRESEED_FILE="${RET}" # select

		case "${PRESEED_FILE}" in
			custom|none)
				;;

			exit)
				rm -f "${CONFIG}/${NAME}.conf"
				exit 1
				;;

			*)
				# user specified preseed file through debconf select
				db_set container/preseed-file "${DEBCONF}/${PRESEED_FILE}.cfg"
				db_fset container/preseed-file seen true
				;;
		esac
	fi
fi

case "${PRESEED_FILE}" in
	none)
		;;

	*)
		# ask user for a preseed file
		db_settitle container/title
		db_input high container/preseed-file || true
		db_go

		db_get container/preseed-file
		PRESEED_FILE="${RET}" # string (w/ empty)

		echo "PRESEED_FILE=\"${PRESEED_FILE}\"" >> "${DEBCONF_TMPDIR}/debconf.default"
		export PRESEED_FILE
		;;
esac

db_stop