#!/bin/sh # Copyright (C) 2014-2022 Daniel Baumann # # 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 . set -e DEBCONF_NOWARNINGS="true" export DEBCONF_NOWARNINGS . /usr/share/debconf/confmodule Mode () { db_get container/mode MODE="${RET}" # select if [ -z "${MODE}" ] then MODE="$(basename ${SCRIPT})" case "${MODE}" in debconf) MODE="debian" ;; esac fi echo "MODE=\"${MODE}\"" >> "${DEBCONF_TMPDIR}/debconf.default" export MODE } Images () { if db_get container/image && [ "${RET}" ] then db_get container/image IMAGE="${RET}" # string (w/o empty) echo "IMAGE=\"${IMAGE}\"" >> "${DEBCONF_TMPDIR}/debconf.default" fi NUMBER="1" while db_get container/image${NUMBER} && [ "${RET}" ] do if db_get container/image${NUMBER} then eval IMAGE${NUMBER}="\"${RET}\"" # string (w/o empty) fi NUMBER="$((${NUMBER} + 1))" done IMAGE_NUMBER="$((${NUMBER} - 1))" echo "IMAGE_NUMBER=\"${IMAGE_NUMBER}\"" >> "${DEBCONF_TMPDIR}/debconf.default" for NUMBER in $(seq 1 ${IMAGE_NUMBER}) do eval IMAGE="$`echo IMAGE${NUMBER}`" echo "IMAGE${NUMBER}=\"${IMAGE}\"" >> "${DEBCONF_TMPDIR}/debconf.default" done } Distribution () { db_get container/distribution DISTRIBUTION="${RET}" # select if [ -z "${DISTRIBUTION}" ] then case "${MODE}" in debian) db_subst container/distribution CHOICES "Debian GNU/Linux 10 \"buster\", Debian GNU/Linux 11 \"bullseye\", Debian GNU/Linux 12 \"bookworm\", Debian GNU/Linux testing, Debian GNU/Linux unstable/sid" db_subst container/distribution CHOICES_C "buster, bullseye, bookworm, testing, sid" db_set container/distribution bookworm db_fset container/distribution seen false ;; progress-linux) db_subst container/distribution CHOICES "Progress Linux 5 (engywuck), Progress Linux 5.99 (engywuck-backports), Progress Linux 6 (fuchur), Progress Linux 6.99 (fuchur-backports), Progress Linux 7 (graograman), Progress Linux 7.99 (graograman-backports)" db_subst container/distribution CHOICES_C "engywuck, engywuck-backports, fuchur, fuchur-backports, graograman, graograman-backports" db_set container/distribution graograman-backports db_fset container/distribution seen false ;; esac db_settitle container/title db_input high container/distribution || true db_go db_get container/distribution DISTRIBUTION="${RET}" # select fi echo "DISTRIBUTION=\"${DISTRIBUTION}\"" >> "${DEBCONF_TMPDIR}/debconf.default" export DISTRIBUTION } Parent_distribution () { db_get container/parent-distribution PARENT_DISTRIBUTION="${RET}" if [ -z "${PARENT_DISTRIBUTION}" ] then case "${MODE}" in progress-linux) case "${DISTRIBUTION}" in engywuck*) PARENT_DISTRIBUTION="buster" ;; fuchur*) PARENT_DISTRIBUTION="bullseye" ;; graograman*) PARENT_DISTRIBUTION="bookworm" ;; esac ;; *) PARENT_DISTRIBUTION="${DISTRIBUTION}" ;; esac fi echo "PARENT_DISTRIBUTION=\"${PARENT_DISTRIBUTION}\"" >> "${DEBCONF_TMPDIR}/debconf.default" export PARENT_DISTRIBUTION } Architecture () { case "$(dpkg --print-architecture)" in amd64) DEFAULT="amd64" CHOICES="Automatic, 32-bit PC (i386), 64-bit PC (amd64)" CHOICES_C="auto, i386, amd64" ;; arm64) DEFAULT="arm64" CHOICES="Automatic, RaspberryPi 3 and newer (arm64)" CHOICES_C="auto, arm64" ;; i386) case "$(uname -m)" in x86_64) DEFAULT="amd64" CHOICES="Automatic, 32-bit PC (i386), 64-bit PC (amd64)" CHOICES_C="auto, i386, amd64" ;; *) DEFAULT="i386" CHOICES="" CHOICES_C="" ;; esac ;; *) echo "E: Architecture current not yet supported." exit 1 esac db_get container/architecture ARCHITECTURE="${RET}" # select if [ -z "${ARCHITECTURE}" ] && [ -n "${CHOICES}" ] then db_subst container/architecture CHOICES ${CHOICES} db_subst container/architecture CHOICES_C ${CHOICES_C} db_set container/architecture ${DEFAULT} db_fset container/distribution seen false db_settitle container/title db_input high container/architecture || true db_go db_get container/architecture ARCHITECTURE="${RET}" # select fi case "${ARCHITECTURE}" in auto) ARCHITECTURE="${DEFAULT}" ;; esac echo "ARCHITECTURE=\"${ARCHITECTURE}\"" >> "${DEBCONF_TMPDIR}/debconf.default" export ARCHITECTURE } Archives () { db_get container/archives ARCHIVES="${RET}" # multiselect if [ -z "${ARCHIVES}" ] then case "${MODE}" in debian) case "${PARENT_DISTRIBUTION}" in sid) db_subst container/archives CHOICES "sid, experimental" db_set container/archives "sid" db_fset container/archives seen false ;; *) db_subst container/archives CHOICES "${DISTRIBUTION}, ${DISTRIBUTION}-security, ${DISTRIBUTION}-updates, ${DISTRIBUTION}-backports, ${DISTRIBUTION}-proposed-updates" case "${PARENT_DISTRIBUTION}" in sid) db_set container/archives "sid" ;; *) db_set container/archives "${DISTRIBUTION}, ${DISTRIBUTION}-security, ${DISTRIBUTION}-updates" ;; esac db_fset container/archives seen false ;; esac ;; progress-linux) DIST="$(echo ${DISTRIBUTION} | sed -e 's|-backports||')" db_subst container/archives CHOICES "${DIST}, ${DIST}-security, ${DIST}-updates, ${DIST}-extras, ${DIST}-backports, ${DIST}-backports-extras" db_set container/archives "${DIST}, ${DIST}-security, ${DIST}-updates, ${DIST}-extras, ${DIST}-backports, ${DIST}-backports-extras" db_fset container/archives seen false ;; esac db_settitle container/title db_input high container/archives || true db_go db_get container/archives ARCHIVES="${RET}" # multiselect fi ARCHIVES="$(echo ${ARCHIVES} | sed -e 's|, | |g')" echo "ARCHIVES=\"${ARCHIVES}\"" >> "${DEBCONF_TMPDIR}/debconf.default" export ARCHIVES } Parent_archives () { db_get container/parent-archives PARENT_ARCHIVES="${RET}" # multiselect (w/o empty) if [ -z "${PARENT_ARCHIVES}" ] then case "${MODE}" in progress-linux) db_subst container/parent-archives CHOICES "${PARENT_DISTRIBUTION}, ${PARENT_DISTRIBUTION}-security, ${PARENT_DISTRIBUTION}-updates, ${PARENT_DISTRIBUTION}-backports, ${PARENT_DISTRIBUTION}-proposed-updates" case "${PARENT_DISTRIBUTION}" in *) db_set container/parent-archives "${PARENT_DISTRIBUTION}, ${PARENT_DISTRIBUTION}-security, ${PARENT_DISTRIBUTION}-updates" ;; esac db_fset container/parent-archives seen false db_settitle container/title db_input high container/parent-archives || true db_go ;; *) db_subst container/parent-archives CHOICES "${DISTRIBUTION}, ${DISTRIBUTION}-security, ${DISTRIBUTION}-updates, ${DISTRIBUTION}-backports, ${DISTRIBUTION}-proposed-updates" db_set container/parent-archives "${ARCHIVES}" db_fset container/parent-archives seen true ;; esac db_get container/parent-archives PARENT_ARCHIVES="${RET}" # multiselect (w/o empty) if [ -z "${PARENT_ARCHIVES}" ] then case "${MODE}" in progress-linux) case "${PARENT_DISTRIBUTION}" in *) PARENT_ARCHIVES="${PARENT_DISTRIBUTION}, ${PARENT_DISTRIBUTION}-security, ${PARENT_DISTRIBUTION}-updates" ;; esac ;; *) PARENT_ARCHIVES="${ARCHIVES}" ;; esac fi fi PARENT_ARCHIVES="$(echo ${PARENT_ARCHIVES} | sed -e 's|, | |g')" echo "PARENT_ARCHIVES=\"${PARENT_ARCHIVES}\"" >> "${DEBCONF_TMPDIR}/debconf.default" export PARENT_ARCHIVES } Mirror () { db_get container/mirror MIRROR="${RET}" if [ -z "${MIRROR}" ] then case "${MODE}" in debian) db_set container/mirror https://deb.debian.org/debian db_fset container/mirror seen false ;; progress-linux) db_set container/mirror https://deb.progress-linux.org/packages db_fset container/mirror seen false ;; esac db_settitle container/title db_input high container/mirror || true db_go db_get container/mirror MIRROR="${RET}" # string (w/o empty) if [ -z "${MIRROR}" ] then case "${MODE}" in debian) MIRROR="https://deb.debian.org/debian" ;; progress-linux) MIRROR="https://deb.progress-linux.org/packages" ;; esac fi fi echo "MIRROR=\"${MIRROR}\"" >> "${DEBCONF_TMPDIR}/debconf.default" export MIRROR } Mirror_security () { if ! echo "${ARCHIVES}" | grep -qs "-security" then return 0 fi db_get container/mirror-security MIRROR_SECURITY="${RET}" # string (w/o empty) if [ -z "${MIRROR_SECURITY}" ] then case "${MODE}" in debian) db_set container/mirror-security https://security.debian.org db_fset container/mirror-security seen false ;; *) db_set container/mirror-security ${MIRROR} db_fset container/mirror-security seen true ;; esac db_settitle container/title db_input high container/mirror-security || true db_go db_get container/mirror-security MIRROR_SECURITY="${RET}" # string (w/o empty) if [ -z "${MIRROR_SECURITY}" ] then case "${MODE}" in debian) MIRROR_SECURITY="https://security.debian.org" ;; *) MIRROR_SECURITY="${MIRROR}" ;; esac fi fi echo "MIRROR_SECURITY=\"${MIRROR_SECURITY}\"" >> "${DEBCONF_TMPDIR}/debconf.default" export MIRROR_SECURITY } Parent_mirror () { db_get container/parent-mirror PARENT_MIRROR="${RET}" # string (w/o empty) if [ -z "${PARENT_MIRROR}" ] then case "${MODE}" in progress-linux) db_set container/parent-mirror https://deb.debian.org/debian db_fset container/parent-mirror seen false db_settitle container/title db_input high container/parent-mirror || true db_go ;; *) db_set container/parent-mirror ${MIRROR} db_fset container/parent-mirror seen true ;; esac db_get container/parent-mirror PARENT_MIRROR="${RET}" # string (w/o empty) if [ -z "${PARENT_MIRROR}" ] then case "${MODE}" in progress-linux) PARENT_MIRROR="https://deb.debian.org/debian" ;; *) PARENT_MIRROR="${MIRROR}" ;; esac fi fi echo "PARENT_MIRROR=\"${PARENT_MIRROR}\"" >> "${DEBCONF_TMPDIR}/debconf.default" export PARENT_MIRROR } Parent_mirror_security () { if ! echo "${PARENT_ARCHIVES}" | grep -qs "-security" then return 0 fi db_get container/parent-mirror-security PARENT_MIRROR_SECURITY="${RET}" # string (w/o empty) if [ -z "${PARENT_MIRROR_SECURITY}" ] then case "${MODE}" in progress-linux) db_set container/parent-mirror-security https://security.debian.org db_fset container/parent-mirror-security seen false db_settitle container/title db_input high container/parent-mirror-security || true db_go ;; *) db_set container/parent-mirror-security ${MIRROR_SECURITY} db_fset container/parent-mirror-security seen true ;; esac db_get container/parent-mirror-security PARENT_MIRROR_SECURITY="${RET}" # string (w/o empty) if [ -z "${PARENT_MIRROR_SECURITY}" ] then case "${MODE}" in progress-linux) PARENT_MIRROR_SECURITY="https://security.debian.org" ;; *) PARENT_MIRROR_SECURITY="${MIRROR_SECURITY}" ;; esac fi fi echo "PARENT_MIRROR_SECURITY=\"${PARENT_MIRROR_SECURITY}\"" >> "${DEBCONF_TMPDIR}/debconf.default" export PARENT_MIRROR_SECURITY } Archive_areas () { db_get container/archive-areas ARCHIVE_AREAS="${RET}" case "${PARENT_DISTRIBUTION}" in bookworm|testing|sid) ARCHIVE_AREAS_ALL="main, contrib, non-free, non-free-firmware" ;; *) ARCHIVE_AREAS_ALL="main, contrib, non-free" ;; esac if [ -z "${ARCHIVE_AREAS}" ] then case "${MODE}" in progress-linux) db_subst container/archive-areas CHOICES "${ARCHIVE_AREAS_ALL}" db_set container/archive-areas "${ARCHIVE_AREAS_ALL}" db_fset container/archive-areas seen false ;; *) db_subst container/archive-areas CHOICES "${ARCHIVE_AREAS_ALL}" db_set container/archive-areas "main" db_fset container/archive-areas seen false ;; esac db_settitle container/title db_input high container/archive-areas || true db_go db_get container/archive-areas ARCHIVE_AREAS="${RET}" # multiselect (w/o empty) if [ -z "${ARCHIVE_AREAS}" ] then case "${MODE}" in debian) ARCHIVE_AREAS="main" ;; progress-linux) ARCHIVE_AREAS="${ARCHIVE_AREAS_ALL}" ;; esac fi fi ARCHIVE_AREAS="$(echo ${ARCHIVE_AREAS} | sed -e 's| ||g')" echo "ARCHIVE_AREAS=\"${ARCHIVE_AREAS}\"" >> "${DEBCONF_TMPDIR}/debconf.default" export ARCHIVE_AREAS } Parent_archive_areas () { db_get container/parent-archive-areas PARENT_ARCHIVE_AREAS="${RET}" # multiselect (w/o empty) case "${PARENT_DISTRIBUTION}" in bookworm|testing|sid) PARENT_ARCHIVE_AREAS_ALL="main, contrib, non-free, non-free-firmware" ;; *) PARENT_ARCHIVE_AREAS_ALL="main, contrib, non-free" ;; esac if [ -z "${PARENT_ARCHIVE_AREAS}" ] then case "${MODE}" in progress-linux) db_subst container/parent-archive-areas CHOICES "${PARENT_ARCHIVE_AREAS_ALL}" db_set container/parent-archive-areas "${PARENT_ARCHIVE_AREAS_ALL}" db_fset container/parent-archive-areas seen false db_settitle container/title db_input high container/parent-archive-areas || true db_go ;; *) db_subst container/parent-archive-areas CHOICES "${ARCHIVE_AREAS}" db_set container/parent-archive-areas "${ARCHIVE_AREAS}" db_fset container/parent-archive-areas seen true ;; esac db_get container/parent-archive-areas PARENT_ARCHIVE_AREAS="${RET}" # multiselect (w/o empty) if [ -z "${PARENT_ARCHIVE_AREAS}" ] then case "${MODE}" in progress-linux) PARENT_ARCHIVE_AREAS="${PARENT_ARCHIVE_AREAS_ALL}" ;; *) PARENT_ARCHIVE_AREAS="${ARCHIVE_AREAS}" ;; esac fi fi PARENT_ARCHIVE_AREAS="$(echo ${PARENT_ARCHIVE_AREAS} | sed -e 's| ||g')" echo "PARENT_ARCHIVE_AREAS=\"${PARENT_ARCHIVE_AREAS}\"" >> "${DEBCONF_TMPDIR}/debconf.default" export PARENT_ARCHIVE_AREAS } Packages () { db_get container/packages PACKAGES="${RET}" # string (w/ empty) if [ -z "${PACKAGES}" ] then db_settitle container/title db_input high container/packages || true db_go db_get container/packages PACKAGES="${RET}" # string (w/ empty) fi echo "PACKAGES=\"${PACKAGES}\"" >> "${DEBCONF_TMPDIR}/debconf.default" export PACKAGES } Local_archives () { NUMBER="1" while db_get container/archive${NUMBER}/repository && [ "${RET}" ] do mkdir -p "${DEBCONF_TMPDIR}/apt" REPOSITORY="$(echo "${RET}" | sed -e 's|^deb ||')" MIRROR="$(echo ${REPOSITORY} | cut -d' ' -f1)" SUITES="$(echo ${REPOSITORY} | cut -d' ' -f2)" AREAS="$(echo ${REPOSITORY} | cut -d' ' -f3-)" LIST="archive${NUMBER}.sources" if db_get container/archive${NUMBER}/list then LIST="$(basename ${RET} .sources).sources" fi COMMENT="" if db_get container/archive${NUMBER}/comment then COMMENT="${RET}" cat > "${DEBCONF_TMPDIR}/apt/${LIST}" << EOF # ${COMMENT} EOF fi if db_get container/archive${NUMBER}/source && [ "$RET" = true ] then TYPES="deb deb-src" else TYPES="deb" fi KEY="" if db_get container/archive${NUMBER}/key then KEY="${RET}" wget -q "${KEY}" -O "${DEBCONF_TMPDIR}/apt/$(basename ${LIST} .sources).key" SIGNED="/etc/apt/keyrings/$(basename ${LIST} .sources).key" else SIGNED="" fi cat > "${DEBCONF_TMPDIR}/apt/${LIST}" << EOF Types: deb URIs: ${MIRROR} Suites: ${SUITES} Components: ${AREAS} PDiffs: no EOF if [ -n "${SIGNED}" ] then cat >> "${DEBCONF_TMPDIR}/apt/${LIST}" << EOF Signed-By: ${SIGNED} EOF fi PREFERENCES_PACKAGE="" PREFERENCES_PIN="" PREFERENCES_PIN_PRIORITY="" if db_get container/archive${NUMBER}/preferences-package then PREFERENCES_PACKAGE="${RET}" if db_get container/archive${NUMBER}/preferences-pin then PREFERENCES_PIN="${RET}" fi if db_get container/archive${NUMBER}/preferences-pin-priority then PREFERENCES_PIN_PRIORITY="${RET}" fi if [ -n "${PREFERENCES_PACKAGE}" ] || [ -n "${PREFERENCES_PIN}" ] || [ -n "${PREFERENCES_PIN_PRIORITY}" ] then cat >> "${DEBCONF_TMPDIR}/apt/$(basename ${LIST} .sources).pref" << EOF Package: ${PREFERENCES_PACKAGE} Pin: ${PREFERENCES_PIN} Pin-Priority: ${PREFERENCES_PIN_PRIORITY} EOF fi fi NUMBER="$((${NUMBER} + 1))" done } Network_defaults () { HOSTNAME_SHORT="$(echo veth-$(echo ${NAME} | cut -c-8)-0)" VETH_NAME="${HOSTNAME_SHORT}" NETWORK1_VETH="${NETWORK1_VETH:-$VETH_NAME}" NETWORK1_BRIDGE="${NETWORK1_BRIDGE:-bridge0}" NETWORK1_IPV4_METHOD="${NETWORK1_IPV4_METHOD:-dhcp}" NETWORK1_IPV4_ADDRESS="${NETWORK1_IPV4_ADDRESS:-192.168.1.2}" NETWORK1_IPV4_NETMASK="${NETWORK1_IPV4_NETMASK:-24}" NETWORK1_IPV6_METHOD="${NETWORK1_IPV6_METHOD:-none}" NETWORK1_IPV6_ADDRESS="${NETWORK1_IPV6_ADDRESS:-fc00::2}" NETWORK1_IPV6_NETMASK="${NETWORK1_IPV6_NETMASK:-7}" if [ "${NETWORK1_IPV4_METHOD}" = "static" ] || [ "${NETWORK1_IPV6_METHOD}" = "static" ] then if [ -e /etc/resolv.conf ] then NAMESERVER_SERVER="${NAMESERVER_SERVER:-$(awk '/^nameserver / {$1=""; print $0}' /etc/resolv.conf)}" # Workaround to get rid of newlines since debconf can not handle multiline return value in assignments NAMESERVER_SERVER="$(echo ${NAMESERVER_SERVER})" NAMESERVER_DOMAIN="${NAMESERVER_DOMAIN:-$(awk '/^domain / {$1=""; print $0}' /etc/resolv.conf)}" NAMESERVER_SEARCH="${NAMESERVER_SEARCH:-$(awk '/^search / {$1=""; print $0}' /etc/resolv.conf)}" NAMESERVER_OPTIONS="${NAMESERVER_OPTIONS:-$(awk '/^options / {$1=""; print $0}' /etc/resolv.conf)}" fi fi } Network () { db_get container/network1/bridge NETWORK1_BRIDGE="${RET}" # string (w/o empty) db_get container/network1/veth NETWORK1_VETH="${RET}" # string (w/o empty) db_get container/network1/ipv4-method NETWORK1_IPV4_METHOD="${RET}" # select db_get container/network1/ipv4-comment NETWORK1_IPV4_COMMENT="${RET}" # string (w/ empty) db_get container/network1/ipv4-address NETWORK1_IPV4_ADDRESS="${RET}" # string (w/o empty) db_get container/network1/ipv4-gateway NETWORK1_IPV4_GATEWAY="${RET}" # string (w/ empty) db_get container/network1/ipv4-netmask NETWORK1_IPV4_NETMASK="${RET}" # string (w/o empty) db_get container/network1/ipv4-post-up NETWORK1_IPV4_POST_UP="${RET}" # string (w/ empty) db_get container/network1/ipv4-post-down NETWORK1_IPV4_POST_DOWN="${RET}" # string (w/ empty) db_get container/network1/ipv6-method NETWORK1_IPV6_METHOD="${RET}" # select db_get container/network1/ipv6-comment NETWORK1_IPV6_COMMENT="${RET}" # string (w/ empty) db_get container/network1/ipv6-address NETWORK1_IPV6_ADDRESS="${RET}" # string (w/o empty) db_get container/network1/ipv6-gateway NETWORK1_IPV6_GATEWAY="${RET}" # string (w/ empty) db_get container/network1/ipv6-netmask NETWORK1_IPV6_NETMASK="${RET}" # string (w/o empty) db_get container/network1/ipv6-post-up NETWORK1_IPV6_POST_UP="${RET}" # string (w/ empty) db_get container/network1/ipv6-post-down NETWORK1_IPV6_POST_DOWN="${RET}" # string (w/ empty) db_get container/nameserver/server NAMESERVER_SERVER="${RET}" # string (w/ empty) db_get container/nameserver/domain NAMESERVER_DOMAIN="${RET}" # string (w/ empty) db_get container/nameserver/search NAMESERVER_SEARCH="${RET}" # string (w/ empty) db_get container/nameserver/options NAMESERVER_OPTIONS="${RET}" # string (w/ empty) Network_defaults db_set container/network1/bridge "${NETWORK1_BRIDGE}" db_fset container/network1/bridge seen false db_set container/network1/veth "${NETWORK1_VETH}" db_fset container/network1/veth seen false db_set container/network1/ipv4-method "${NETWORK1_IPV4_METHOD}" db_fset container/network1/ipv4-method seen false db_set container/network1/ipv4-comment "${NETWORK1_IPV4_COMMENT}" db_fset container/network1/ipv4-comment seen false db_set container/network1/ipv4-address "${NETWORK1_IPV4_ADDRESS}" db_fset container/network1/ipv4-address seen false db_set container/network1/ipv4-gateway "${NETWORK1_IPV4_GATEWAY}" db_fset container/network1/ipv4-gateway seen false db_set container/network1/ipv4-netmask "${NETWORK1_IPV4_NETMASK}" db_fset container/network1/ipv4-netmask seen false db_set container/network1/ipv4-post-up "${NETWORK1_IPV4_POST_UP}" db_fset container/network1/ipv4-post-up seen false db_set container/network1/ipv4-post-down "${NETWORK1_IPV4_POST_DOWN}" db_fset container/network1/ipv4-post-down seen false db_set container/network1/ipv6-method "${NETWORK1_IPV6_METHOD}" db_fset container/network1/ipv6-method seen false db_set container/network1/ipv6-comment "${NETWORK1_IPV6_COMMENT}" db_fset container/network1/ipv6-comment seen false db_set container/network1/ipv6-address "${NETWORK1_IPV6_ADDRESS}" db_fset container/network1/ipv6-address seen false db_set container/network1/ipv6-gateway "${NETWORK1_IPV6_GATEWAY}" db_fset container/network1/ipv6-gateway seen false db_set container/network1/ipv6-netmask "${NETWORK1_IPV6_NETMASK}" db_fset container/network1/ipv6-netmask seen false db_set container/network1/ipv6-post-up "${NETWORK1_IPV6_POST_UP}" db_fset container/network1/ipv6-post-up seen false db_set container/network1/ipv6-post-down "${NETWORK1_IPV6_POST_DOWN}" db_fset container/network1/ipv6-post-down seen false db_set container/nameserver/server "${NAMESERVER_SERVER}" db_fset container/nameserver/server seen false db_set container/nameserver/domain "${NAMESERVER_DOMAIN}" db_fset container/nameserver/domain seen false db_set container/nameserver/search "${NAMESERVER_SEARCH}" db_fset container/nameserver/search seen false db_set container/nameserver/options "${NAMESERVER_OPTIONS}" db_fset container/nameserver/options seen false db_get container/network1/bridge NETWORK1_BRIDGE="${RET}" # select db_get container/network1/veth NETWORK1_VETH="${RET}" # select db_settitle container/title db_input high container/network1/ipv4-method || true db_go db_get container/network1/ipv4-method NETWORK1_IPV4_METHOD="${RET}" # select case "${NETWORK1_IPV4_METHOD}" in none|dhcp) ;; static) db_settitle container/title db_input high container/network1/ipv4-comment || true db_go db_settitle container/title db_input high container/network1/ipv4-address || true db_go db_settitle container/title db_input high container/network1/ipv4-gateway || true db_go db_settitle container/title db_input high container/network1/ipv4-netmask || true db_go db_settitle container/title db_input high container/network1/ipv4-post-up || true db_go db_settitle container/title db_input high container/network1/ipv4-post-down || true db_go ;; stub) db_settitle container/title db_input high container/network1/ipv4-comment || true db_go db_settitle container/title db_input high container/network1/ipv4-post-up || true db_go db_settitle container/title db_input high container/network1/ipv4-post-down || true db_go ;; esac db_settitle container/title db_input high container/network1/ipv6-method || true db_go db_get container/network1/ipv6-method NETWORK1_IPV6_METHOD="${RET}" # select case "${NETWORK1_IPV6_METHOD}" in none|dhcp) ;; static) db_settitle container/title db_input high container/network1/ipv6-comment || true db_go db_settitle container/title db_input high container/network1/ipv6-address || true db_go db_settitle container/title db_input high container/network1/ipv6-gateway || true db_go db_settitle container/title db_input high container/network1/ipv6-netmask || true db_go db_settitle container/title db_input high container/network1/ipv6-post-up || true db_go db_settitle container/title db_input high container/network1/ipv6-post-down || true db_go ;; stub) db_settitle container/title db_input high container/network1/ipv6-comment || true db_go db_settitle container/title db_input high container/network1/ipv6-post-up || true db_go db_settitle container/title db_input high container/network1/ipv6-post-down || true db_go ;; esac if [ "${NETWORK1_IPV4_METHOD}" = "static" ] || [ "${NETWORK1_IPV6_METHOD}" = "static" ] then db_settitle container/title db_input high container/nameserver/server || true db_go fi NUMBER="1" while ( db_get container/network${NUMBER}/ipv4-method && [ "${RET}" ] ) || ( db_get container/network${NUMBER}/ipv6-method && [ "${RET}" ] ) do if db_get container/network${NUMBER}/bridge then eval NETWORK${NUMBER}_BRIDGE="\"${RET}\"" # string (w/o empty) fi if db_get container/network${NUMBER}/veth then eval NETWORK${NUMBER}_VETH="\"${RET}\"" # string (w/o empty) fi NUMBER="$((${NUMBER} + 1))" done NETWORK_NUMBER="$((${NUMBER} - 1))" for NUMBER in $(seq 1 ${NETWORK_NUMBER}) do if db_get container/network${NUMBER}/ipv4-comment then eval NETWORK${NUMBER}_IPV4_COMMENT="\"${RET}\"" # string (w/ empty) fi if db_get container/network${NUMBER}/ipv4-method then eval NETWORK${NUMBER}_IPV4_METHOD="\"${RET}\"" # select fi if db_get container/network${NUMBER}/ipv4-address then eval NETWORK${NUMBER}_IPV4_ADDRESS="\"${RET}\"" # string (w/o empty) fi if db_get container/network${NUMBER}/ipv4-gateway then eval NETWORK${NUMBER}_IPV4_GATEWAY="\"${RET}\"" # string (w/ empty) fi if db_get container/network${NUMBER}/ipv4-netmask then eval NETWORK${NUMBER}_IPV4_NETMASK="\"${RET}\"" # string (w/o empty) fi if db_get container/network${NUMBER}/ipv4-post-up then eval NETWORK${NUMBER}_IPV4_POST_UP="\"${RET}\"" # string (w/ empty) fi if db_get container/network${NUMBER}/ipv4-post-down then eval NETWORK${NUMBER}_IPV4_POST_DOWN="\"${RET}\"" # string (w/ empty) fi done for NUMBER in $(seq 1 ${NETWORK_NUMBER}) do if db_get container/network${NUMBER}/ipv6-comment then eval NETWORK${NUMBER}_IPV6_COMMENT="\"${RET}\"" # string (w/ empty) fi if db_get container/network${NUMBER}/ipv6-method then eval NETWORK${NUMBER}_IPV6_METHOD="\"${RET}\"" # select fi if db_get container/network${NUMBER}/ipv6-address then eval NETWORK${NUMBER}_IPV6_ADDRESS="\"${RET}\"" # string (w/o empty) fi if db_get container/network${NUMBER}/ipv6-gateway then eval NETWORK${NUMBER}_IPV6_GATEWAY="\"${RET}\"" # string (w/ empty) fi if db_get container/network${NUMBER}/ipv6-netmask then eval NETWORK${NUMBER}_IPV6_NETMASK="\"${RET}\"" # string (w/o empty) fi if db_get container/network${NUMBER}/ipv6-post-up then eval NETWORK${NUMBER}_IPV6_POST_UP="\"${RET}\"" # string (w/ empty) fi if db_get container/network${NUMBER}/ipv6-post-down then eval NETWORK${NUMBER}_IPV6_POST_DOWN="\"${RET}\"" # string (w/ empty) fi done db_get container/nameserver/server NAMESERVER_SERVER="${RET}" # string (w/ empty) db_get container/nameserver/domain NAMESERVER_DOMAIN="${RET}" # string (w/ empty) db_get container/nameserver/search NAMESERVER_SEARCH="${RET}" # string (w/ empty) db_get container/nameserver/options NAMESERVER_OPTIONS="${RET}" # string (w/ empty) Network_defaults echo "NETWORK_NUMBER=\"${NETWORK_NUMBER}\"" >> "${DEBCONF_TMPDIR}/debconf.default" for NUMBER in $(seq 1 ${NETWORK_NUMBER}) do eval BRIDGE="$`echo NETWORK${NUMBER}_BRIDGE`" echo "NETWORK${NUMBER}_BRIDGE=\"${BRIDGE}\"" >> "${DEBCONF_TMPDIR}/debconf.default" eval VETH="$`echo NETWORK${NUMBER}_VETH`" echo "NETWORK${NUMBER}_VETH=\"${VETH}\"" >> "${DEBCONF_TMPDIR}/debconf.default" eval COMMENT="$`echo NETWORK${NUMBER}_IPV4_COMMENT`" echo "NETWORK${NUMBER}_IPV4_COMMENT=\"${COMMENT}\"" >> "${DEBCONF_TMPDIR}/debconf.default" eval METHOD="$`echo NETWORK${NUMBER}_IPV4_METHOD`" echo "NETWORK${NUMBER}_IPV4_METHOD=\"${METHOD}\"" >> "${DEBCONF_TMPDIR}/debconf.default" eval ADDRESS="$`echo NETWORK${NUMBER}_IPV4_ADDRESS`" echo "NETWORK${NUMBER}_IPV4_ADDRESS=\"${ADDRESS}\"" >> "${DEBCONF_TMPDIR}/debconf.default" eval GATEWAY="$`echo NETWORK${NUMBER}_IPV4_GATEWAY`" echo "NETWORK${NUMBER}_IPV4_GATEWAY=\"${GATEWAY}\"" >> "${DEBCONF_TMPDIR}/debconf.default" eval NETMASK="$`echo NETWORK${NUMBER}_IPV4_NETMASK`" echo "NETWORK${NUMBER}_IPV4_NETMASK=\"${NETMASK}\"" >> "${DEBCONF_TMPDIR}/debconf.default" eval POST_UP="$`echo NETWORK${NUMBER}_IPV4_POST_UP`" echo "NETWORK${NUMBER}_IPV4_POST_UP=\"${POST_UP}\"" >> "${DEBCONF_TMPDIR}/debconf.default" eval POST_DOWN="$`echo NETWORK${NUMBER}_IPV4_POST_DOWN`" echo "NETWORK${NUMBER}_IPV4_POST_DOWN=\"${POST_DOWN}\"" >> "${DEBCONF_TMPDIR}/debconf.default" eval COMMENT="$`echo NETWORK${NUMBER}_IPV6_COMMENT`" echo "NETWORK${NUMBER}_IPV6_COMMENT=\"${COMMENT}\"" >> "${DEBCONF_TMPDIR}/debconf.default" eval METHOD="$`echo NETWORK${NUMBER}_IPV6_METHOD`" echo "NETWORK${NUMBER}_IPV6_METHOD=\"${METHOD}\"" >> "${DEBCONF_TMPDIR}/debconf.default" eval ADDRESS="$`echo NETWORK${NUMBER}_IPV6_ADDRESS`" echo "NETWORK${NUMBER}_IPV6_ADDRESS=\"${ADDRESS}\"" >> "${DEBCONF_TMPDIR}/debconf.default" eval GATEWAY="$`echo NETWORK${NUMBER}_IPV6_GATEWAY`" echo "NETWORK${NUMBER}_IPV6_GATEWAY=\"${GATEWAY}\"" >> "${DEBCONF_TMPDIR}/debconf.default" eval NETMASK="$`echo NETWORK${NUMBER}_IPV6_NETMASK`" echo "NETWORK${NUMBER}_IPV6_NETMASK=\"${NETMASK}\"" >> "${DEBCONF_TMPDIR}/debconf.default" eval POST_UP="$`echo NETWORK${NUMBER}_IPV6_POST_UP`" echo "NETWORK${NUMBER}_IPV6_POST_UP=\"${POST_UP}\"" >> "${DEBCONF_TMPDIR}/debconf.default" eval POST_DOWN="$`echo NETWORK${NUMBER}_IPV6_POST_DOWN`" echo "NETWORK${NUMBER}_IPV6_POST_DOWN=\"${POST_DOWN}\"" >> "${DEBCONF_TMPDIR}/debconf.default" done echo "NAMESERVER_SERVER=\"${NAMESERVER_SERVER}\"" >> "${DEBCONF_TMPDIR}/debconf.default" echo "NAMESERVER_DOMAIN=\"${NAMESERVER_DOMAIN}\"" >> "${DEBCONF_TMPDIR}/debconf.default" echo "NAMESERVER_SEARCH=\"${NAMESERVER_SEARCH}\"" >> "${DEBCONF_TMPDIR}/debconf.default" echo "NAMESERVER_OPTIONS=\"${NAMESERVER_OPTIONS}\"" >> "${DEBCONF_TMPDIR}/debconf.default" } Root_password () { if db_get container/root-password then ROOT_PASSWORD="${RET}" # string (w/o empty) fi if [ -z "${ROOT_PASSWORD}" ] then # Create a random password as suggestion for the user RANDOM_PASSWORD="$(dd if=/dev/urandom bs=12 count=1 2> /dev/null | base64)" db_set container/root-password ${RANDOM_PASSWORD} db_fset container/root-password seen false db_settitle container/title db_input high container/root-password || true db_go db_get container/root-password ROOT_PASSWORD="${RET}" if [ -z "${ROOT_PASSWORD}" ] then # User did set not set a password, falling back to random password ROOT_PASSWORD="${RANDOM_PASSWORD}" fi if [ "${ROOT_PASSWORD}" = "${RANDOM_PASSWORD}" ] then echo "ROOT_RANDOM_PASSWORD=\"true\"" >> "${DEBCONF_TMPDIR}/debconf.default" fi fi echo "ROOT_PASSWORD=\"${ROOT_PASSWORD}\"" >> "${DEBCONF_TMPDIR}/debconf.default" } Internal_options () { if db_get container/apt-recommends then APT_RECOMMENDS="${RET}" # boolean (w/ empty) fi echo "APT_RECOMMENDS=\"${APT_RECOMMENDS}\"" >> "${DEBCONF_TMPDIR}/debconf.default" if db_get container/debconf-frontend then DEBCONF_FRONTEND="${RET}" # select fi DEBCONF_FRONTEND="${DEBCONF_FRONTEND:-dialog}" echo "DEBCONF_FRONTEND=\"${DEBCONF_FRONTEND}\"" >> "${DEBCONF_TMPDIR}/debconf.default" if db_get container/debconf-priority then DEBCONF_PRIORITY="${RET}" # select fi DEBCONF_PRIORITY="${DEBCONF_PRIORITY:-high}" echo "DEBCONF_PRIORITY=\"${DEBCONF_PRIORITY}\"" >> "${DEBCONF_TMPDIR}/debconf.default" if db_get container/container-command then CONTAINER_COMMAND="${RET}" # string (w/ empty) fi echo "CONTAINER_COMMAND=\"${CONTAINER_COMMAND}\"" >> "${DEBCONF_TMPDIR}/debconf.default" NUMBER="1" while db_get container/container-command${NUMBER} && [ "${RET}" ] do if db_get container/container-command${NUMBER} then eval CONTAINER_COMMAND${NUMBER}="\"${RET}\"" # string (w/o empty) fi NUMBER="$((${NUMBER} + 1))" done CONTAINER_COMMAND_NUMBER="$((${NUMBER} - 1))" echo "CONTAINER_COMMAND_NUMBER=\"${CONTAINER_COMMAND_NUMBER}\"" >> "${DEBCONF_TMPDIR}/debconf.default" for NUMBER in $(seq 1 ${CONTAINER_COMMAND_NUMBER}) do eval COMMAND="$`echo CONTAINER_COMMAND${NUMBER}`" echo "CONTAINER_COMMAND${NUMBER}=\"${COMMAND}\"" >> "${DEBCONF_TMPDIR}/debconf.default" done if db_get container/host-command then HOST_COMMAND="${RET}" # string (w/ empty) fi echo "HOST_COMMAND=\"${HOST_COMMAND}\"" >> "${DEBCONF_TMPDIR}/debconf.default" NUMBER="1" while db_get container/host-command${NUMBER} && [ "${RET}" ] do if db_get container/host-command${NUMBER} then eval HOST_COMMAND${NUMBER}="\"${RET}\"" # string (w/o empty) fi NUMBER="$((${NUMBER} + 1))" done HOST_COMMAND_NUMBER="$((${NUMBER} - 1))" echo "HOST_COMMAND_NUMBER=\"${HOST_COMMAND_NUMBER}\"" >> "${DEBCONF_TMPDIR}/debconf.default" for NUMBER in $(seq 1 ${HOST_COMMAND_NUMBER}) do eval COMMAND="$`echo HOST_COMMAND${NUMBER}`" echo "HOST_COMMAND${NUMBER}=\"${COMMAND}\"" >> "${DEBCONF_TMPDIR}/debconf.default" done if db_get container/auto then CNT_AUTO="${RET:-last-on}" # string (w/o empty) fi CNT_AUTO="${CNT_AUTO:-last-on}" echo "CNT_AUTO=\"${CNT_AUTO}\"" >> "${DEBCONF_TMPDIR}/debconf.default" if db_get container/container-server then CNT_CONTAINER_SERVER="${RET:-FQDN}" # string (w/o empty) fi CNT_CONTAINER_SERVER="${CNT_CONTAINER_SERVER:-FQDN}" case "${CNT_CONTAINER_SERVER}" in FQDN) CNT_CONTAINER_SERVER="$(hostname -f 2> /dev/null || hostname)" ;; esac echo "CNT_CONTAINER_SERVER=\"${CNT_CONTAINER_SERVER}\"" >> "${DEBCONF_TMPDIR}/debconf.default" if db_get container/bind then BIND="${RET}" # string (w/ empty) fi echo "BIND=\"${BIND}\"" >> "${DEBCONF_TMPDIR}/debconf.default" if db_get container/bind-ro then BIND_RO="${RET}" # string (w/ empty) fi echo "BIND_RO=\"${BIND_RO}\"" >> "${DEBCONF_TMPDIR}/debconf.default" if db_get container/overlay then CNT_OVERLAY="${RET}" # string (w/ empty) fi echo "CNT_OVERLAY=\"${CNT_OVERLAY}\"" >> "${DEBCONF_TMPDIR}/debconf.default" if db_get container/overlay-options then CNT_OVERLAY_OPTIONS="${RET}" # string (w/ empty) fi echo "CNT_OVERLAY_OPTIONS=\"${CNT_OVERLAY_OPTIONS}\"" >> "${DEBCONF_TMPDIR}/debconf.default" } Mode Images Distribution Parent_distribution Architecture Archives Parent_archives Mirror Mirror_security Parent_mirror Parent_mirror_security Archive_areas Parent_archive_areas Packages Local_archives Network Root_password Internal_options db_stop