#!/bin/sh # container-tools - Manage systemd-nspawn containers # Copyright (C) 2014-2018 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 cnt-debconf/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 } Distribution () { db_get cnt-debconf/distribution DISTRIBUTION="${RET}" # select if [ -z "${DISTRIBUTION}" ] then case "${MODE}" in debian) db_subst cnt-debconf/distribution CHOICES "Debian GNU/Linux 9 \"stretch\", Debian GNU/Linux testing/buster, Debian GNU/Linux unstable/sid" db_subst cnt-debconf/distribution CHOICES_C "stretch, buster, sid" db_set cnt-debconf/distribution stretch db_fset cnt-debconf/distribution seen false ;; progress-linux) db_subst cnt-debconf/distribution CHOICES "Progress Linux 4 (dschinn), Progress Linux 4+ (dschinn-backports)" db_subst cnt-debconf/distribution CHOICES_C "dschinn, dschinn-backports" db_set cnt-debconf/distribution dschinn-backports db_fset cnt-debconf/distribution seen false ;; esac db_settitle cnt-debconf/title db_input high cnt-debconf/distribution || true db_go db_get cnt-debconf/distribution DISTRIBUTION="${RET}" # select fi echo "DISTRIBUTION=\"${DISTRIBUTION}\"" >> "${DEBCONF_TMPDIR}/debconf.default" export DISTRIBUTION } Parent_distribution () { db_get cnt-debconf/parent-distribution PARENT_DISTRIBUTION="${RET}" if [ -z "${PARENT_DISTRIBUTION}" ] then case "${MODE}" in progress-linux) case "${DISTRIBUTION}" in dschinn*) PARENT_DISTRIBUTION="stretch" ;; 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, Rpi1 (armel), Rpi2 (armhf), Rpi3 (arm64)" CHOICES_C="auto, armel, armhf, arm64" ;; armel) DEFAULT="armel" CHOICES="Automatic, Rpi1 (armel)" CHOICES_C="auto, armel" ;; armhf) DEFAULT="armhf" CHOICES="Automatic, Rpi1 (armel), Rpi2 (armhf)" CHOICES_C="auto, armel, armhf" ;; 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 cnt-debconf/architecture ARCHITECTURE="${RET}" # select if [ -z "${ARCHITECTURE}" ] && [ -n "${CHOICES}" ] then db_subst cnt-debconf/architecture CHOICES ${CHOICES} db_subst cnt-debconf/architecture CHOICES_C ${CHOICES_C} db_set cnt-debconf/architecture ${DEFAULT} db_fset cnt-debconf/distribution seen false db_settitle cnt-debconf/title db_input high cnt-debconf/architecture || true db_go db_get cnt-debconf/architecture ARCHITECTURE="${RET}" # select fi case "${ARCHITECTURE}" in auto) ARCHITECTURE="${DEFAULT}" ;; esac echo "ARCHITECTURE=\"${ARCHITECTURE}\"" >> "${DEBCONF_TMPDIR}/debconf.default" export ARCHITECTURE } Archives () { db_get cnt-debconf/archives ARCHIVES="${RET}" # multiselect if [ -z "${ARCHIVES}" ] then case "${MODE}" in debian) case "${PARENT_DISTRIBUTION}" in sid) db_subst cnt-debconf/archives CHOICES "Experimental" db_subst cnt-debconf/archives CHOICES_C "experimental" db_set cnt-debconf/archives "" db_fset cnt-debconf/archives seen false ;; *) db_subst cnt-debconf/archives CHOICES "Security, Updates, Backports, Proposed Updates" db_subst cnt-debconf/archives CHOICES_C "${DISTRIBUTION}-security, ${DISTRIBUTION}-updates, ${DISTRIBUTION}-backports, ${DISTRIBUTION}-proposed-updates" case "${PARENT_DISTRIBUTION}" in sid) db_set cnt-debconf/archives "" ;; buster) db_set cnt-debconf/archives "${DISTRIBUTION}-security, ${DISTRIBUTION}-updates" ;; *) #db_set cnt-debconf/archives "${DISTRIBUTION}-security, ${DISTRIBUTION}-updates, ${DISTRIBUTION}-backports" db_set cnt-debconf/archives "${DISTRIBUTION}-security, ${DISTRIBUTION}-updates" ;; esac db_fset cnt-debconf/archives seen false ;; esac ;; progress-linux) DIST="$(echo ${DISTRIBUTION} | sed -e 's|-backports||')" db_subst cnt-debconf/archives CHOICES "staging, Security, Security (staging), Updates, Updates (staging), Extras, Extras (staging), Backports, Backports (staging), Backports Extras, Backports Extras (staging)" db_subst cnt-debconf/archives CHOICES_C "${DIST}-staging, ${DIST}-security, ${DIST}-security-staging, ${DIST}-updates, ${DIST}-updates-staging, ${DIST}-extras, ${DIST}-extras-staging, ${DIST}-backports, ${DIST}-backports-staging, ${DIST}-backports-extras, ${DIST}-backports-extras-staging" db_set cnt-debconf/archives "${DIST}-security, ${DIST}-updates, ${DIST}-extras, ${DIST}-backports, ${DIST}-backports-extras" db_fset cnt-debconf/archives seen false ;; esac db_settitle cnt-debconf/title db_input high cnt-debconf/archives || true db_go db_get cnt-debconf/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 cnt-debconf/parent-archives PARENT_ARCHIVES="${RET}" # multiselect (w/o empty) if [ -z "${PARENT_ARCHIVES}" ] then case "${MODE}" in progress-linux) db_subst cnt-debconf/parent-archives CHOICES "Security, Updates, Backports, Proposed Updates" db_subst cnt-debconf/parent-archives CHOICES_C "${PARENT_DISTRIBUTION}-security, ${PARENT_DISTRIBUTION}-updates, ${PARENT_DISTRIBUTION}-backports, ${PARENT_DISTRIBUTION}-proposed-updates" case "${PARENT_DISTRIBUTION}" in *) #db_set cnt-debconf/parent-archives "${PARENT_DISTRIBUTION}-security, ${PARENT_DISTRIBUTION}-updates, ${PARENT_DISTRIBUTION}-backports" db_set cnt-debconf/parent-archives "${PARENT_DISTRIBUTION}-security, ${PARENT_DISTRIBUTION}-updates" ;; esac db_fset cnt-debconf/parent-archives seen false db_settitle cnt-debconf/title db_input high cnt-debconf/parent-archives || true db_go ;; *) db_subst cnt-debconf/parent-archives CHOICES "Security, Updates, Backports, Proposed Updates" db_subst cnt-debconf/parent-archives CHOICES_C "${ARCHIVES}" db_set cnt-debconf/parent-archives "${ARCHIVES}" db_fset cnt-debconf/parent-archives seen true ;; esac db_get cnt-debconf/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}-security, ${PARENT_DISTRIBUTION}-updates, ${PARENT_DISTRIBUTION}-backports" PARENT_ARCHIVES="${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 cnt-debconf/mirror MIRROR="${RET}" if [ -z "${MIRROR}" ] then case "${MODE}" in debian) db_set cnt-debconf/mirror https://deb.debian.org/debian db_fset cnt-debconf/mirror seen false ;; progress-linux) db_set cnt-debconf/mirror https://cdn.archive.progress-linux.org/packages db_fset cnt-debconf/mirror seen false ;; esac db_settitle cnt-debconf/title db_input high cnt-debconf/mirror || true db_go db_get cnt-debconf/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://cdn.archive.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 cnt-debconf/mirror-security MIRROR_SECURITY="${RET}" # string (w/o empty) if [ -z "${MIRROR_SECURITY}" ] then case "${MODE}" in debian) db_set cnt-debconf/mirror-security http://security.debian.org db_fset cnt-debconf/mirror-security seen false ;; *) db_set cnt-debconf/mirror-security ${MIRROR} db_fset cnt-debconf/mirror-security seen true ;; esac db_settitle cnt-debconf/title db_input high cnt-debconf/mirror-security || true db_go db_get cnt-debconf/mirror-security MIRROR_SECURITY="${RET}" # string (w/o empty) if [ -z "${MIRROR_SECURITY}" ] then case "${MODE}" in debian) MIRROR_SECURITY="http://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 cnt-debconf/parent-mirror PARENT_MIRROR="${RET}" # string (w/o empty) if [ -z "${PARENT_MIRROR}" ] then case "${MODE}" in progress-linux) db_set cnt-debconf/parent-mirror https://deb.debian.org/debian db_fset cnt-debconf/parent-mirror seen false db_settitle cnt-debconf/title db_input high cnt-debconf/parent-mirror || true db_go ;; *) db_set cnt-debconf/parent-mirror ${MIRROR} db_fset cnt-debconf/parent-mirror seen true ;; esac db_get cnt-debconf/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 cnt-debconf/parent-mirror-security PARENT_MIRROR_SECURITY="${RET}" # string (w/o empty) if [ -z "${PARENT_MIRROR_SECURITY}" ] then case "${MODE}" in progress-linux) db_set cnt-debconf/parent-mirror-security http://security.debian.org db_fset cnt-debconf/parent-mirror-security seen false db_settitle cnt-debconf/title db_input high cnt-debconf/parent-mirror-security || true db_go ;; *) db_set cnt-debconf/parent-mirror-security ${MIRROR_SECURITY} db_fset cnt-debconf/parent-mirror-security seen true ;; esac db_get cnt-debconf/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="http://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 cnt-debconf/archive-areas ARCHIVE_AREAS="${RET}" if [ -z "${ARCHIVE_AREAS}" ] then case "${MODE}" in progress-linux) db_subst cnt-debconf/archive-areas CHOICES "main, contrib, non-free" db_set cnt-debconf/archive-areas "main, contrib, non-free" db_fset cnt-debconf/archive-areas seen false ;; *) db_subst cnt-debconf/archive-areas CHOICES "main, contrib, non-free" db_set cnt-debconf/archive-areas "main" db_fset cnt-debconf/archive-areas seen false ;; esac db_settitle cnt-debconf/title db_input high cnt-debconf/archive-areas || true db_go db_get cnt-debconf/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="main, contrib, non-free" ;; 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 cnt-debconf/parent-archive-areas PARENT_ARCHIVE_AREAS="${RET}" # multiselect (w/o empty) if [ -z "${PARENT_ARCHIVE_AREAS}" ] then case "${MODE}" in progress-linux) db_subst cnt-debconf/parent-archive-areas CHOICES "main, contrib, non-free" db_set cnt-debconf/parent-archive-areas "main, contrib, non-free" db_fset cnt-debconf/parent-archive-areas seen false db_settitle cnt-debconf/title db_input high cnt-debconf/parent-archive-areas || true db_go ;; *) db_subst cnt-debconf/parent-archive-areas CHOICES "${ARCHIVE_AREAS}" db_set cnt-debconf/parent-archive-areas "${ARCHIVE_AREAS}" db_fset cnt-debconf/parent-archive-areas seen true ;; esac db_get cnt-debconf/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="main, contrib, non-free" ;; *) 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 cnt-debconf/packages PACKAGES="${RET}" # string (w/ empty) if [ -z "${PACKAGES}" ] then db_settitle cnt-debconf/title db_input high cnt-debconf/packages || true db_go db_get cnt-debconf/packages PACKAGES="${RET}" # string (w/ empty) fi echo "PACKAGES=\"${PACKAGES}\"" >> "${DEBCONF_TMPDIR}/debconf.default" export PACKAGES } Local_archives () { NUMBER="1" while db_get cnt-debconf/archive${NUMBER}/repository && [ "${RET}" ] do mkdir -p "${DEBCONF_TMPDIR}/apt" REPOSITORY="${RET#deb }" LIST="archive${NUMBER}.list" if db_get cnt-debconf/archive${NUMBER}/list then LIST="$(basename ${RET} .list).list" fi COMMENT="" if db_get cnt-debconf/archive${NUMBER}/comment then COMMENT="${RET}" echo "# ${COMMENT}" > "${DEBCONF_TMPDIR}/apt/${LIST}" fi echo "deb ${REPOSITORY}" >> "${DEBCONF_TMPDIR}/apt/${LIST}" if db_get cnt-debconf/archive${NUMBER}/source && [ "$RET" = true ] then echo "deb-src ${REPOSITORY}" >> "${DEBCONF_TMPDIR}/apt/${LIST}" fi KEY="" if db_get cnt-debconf/archive${NUMBER}/key then KEY="${RET}" wget -q "${KEY}" -O "${DEBCONF_TMPDIR}/apt/$(basename ${LIST} .list).key" fi PREFERENCES_PACKAGE="" PREFERENCES_PIN="" PREFERENCES_PIN_PRIORITY="" if db_get cnt-debconf/archive${NUMBER}/preferences-package then PREFERENCES_PACKAGE="${RET}" if db_get cnt-debconf/archive${NUMBER}/preferences-pin then PREFERENCES_PIN="${RET}" fi if db_get cnt-debconf/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} .list).pref" << EOF Package: ${PREFERENCES_PACKAGE} Pin: ${PREFERENCES_PIN} Pin-Priority: ${PREFERENCES_PIN_PRIORITY} EOF fi fi NUMBER="$((${NUMBER} + 1))" done } Network_defaults () { # FIXME: # * use interfaces.d where possible # * respect pre-existing interfaces (or interfaces.d) # * add support for bridges (make interface configuration more generic?) 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:-255.255.255.0}" if [ "${NETWORK1_IPV4_METHOD}" = "static" ] && [ -e /etc/resolv.conf ] then NAMESERVER_SERVER="${NAMESERVER_SERVER:-$(if [ -e /etc/resolv.conf ]; then awk '/^nameserver / {$1=""; print $0}' /etc/resolv.conf; fi)}" # 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:-$(if [ -e /etc/resolv.conf ]; then awk '/^domain / {$1=""; print $0}' /etc/resolv.conf; fi)}" NAMESERVER_SEARCH="${NAMESERVER_SEARCH:-$(if [ -e /etc/resolv.conf ]; then awk '/^search / {$1=""; print $0}' /etc/resolv.conf; fi)}" NAMESERVER_OPTIONS="${NAMESERVER_OPTIONS:-$(if [ -e /etc/resolv.conf ]; then awk '/^options / {$1=""; print $0}' /etc/resolv.conf; fi)}" fi } Network () { db_get cnt-debconf/network1/bridge NETWORK1_BRIDGE="${RET}" # string (w/o empty) db_get cnt-debconf/network1/veth NETWORK1_VETH="${RET}" # string (w/o empty) db_get cnt-debconf/network1/ipv4-method NETWORK1_IPV4_METHOD="${RET}" # select db_get cnt-debconf/network1/ipv4-comment NETWORK1_IPV4_COMMENT="${RET}" # string (w/ empty) db_get cnt-debconf/network1/ipv4-address NETWORK1_IPV4_ADDRESS="${RET}" # string (w/o empty) db_get cnt-debconf/network1/ipv4-gateway NETWORK1_IPV4_GATEWAY="${RET}" # string (w/ empty) db_get cnt-debconf/network1/ipv4-netmask NETWORK1_IPV4_NETMASK="${RET}" # string (w/o empty) db_get cnt-debconf/network1/ipv4-post-up NETWORK1_IPV4_POST_UP="${RET}" # string (w/ empty) db_get cnt-debconf/network1/ipv4-post-down NETWORK1_IPV4_POST_DOWN="${RET}" # string (w/ empty) db_get cnt-debconf/nameserver/server NAMESERVER_SERVER="${RET}" # string (w/ empty) db_get cnt-debconf/nameserver/domain NAMESERVER_DOMAIN="${RET}" # string (w/ empty) db_get cnt-debconf/nameserver/search NAMESERVER_SEARCH="${RET}" # string (w/ empty) db_get cnt-debconf/nameserver/options NAMESERVER_OPTIONS="${RET}" # string (w/ empty) Network_defaults db_set cnt-debconf/network1/bridge "${NETWORK1_BRIDGE}" db_fset cnt-debconf/network1/bridge seen false db_set cnt-debconf/network1/veth "${NETWORK1_VETH}" db_fset cnt-debconf/network1/veth seen false db_set cnt-debconf/network1/ipv4-method "${NETWORK1_IPV4_METHOD}" db_fset cnt-debconf/network1/ipv4-method seen false db_set cnt-debconf/network1/ipv4-comment "${NETWORK1_IPV4_COMMENT}" db_fset cnt-debconf/network1/ipv4-comment seen false db_set cnt-debconf/network1/ipv4-address "${NETWORK1_IPV4_ADDRESS}" db_fset cnt-debconf/network1/ipv4-address seen false db_set cnt-debconf/network1/ipv4-gateway "${NETWORK1_IPV4_GATEWAY}" db_fset cnt-debconf/network1/ipv4-gateway seen false db_set cnt-debconf/network1/ipv4-netmask "${NETWORK1_IPV4_NETMASK}" db_fset cnt-debconf/network1/ipv4-netmask seen false db_set cnt-debconf/network1/ipv4-post-up "${NETWORK1_IPV4_POST_UP}" db_fset cnt-debconf/network1/ipv4-post-up seen false db_set cnt-debconf/network1/ipv4-post-down "${NETWORK1_IPV4_POST_DOWN}" db_fset cnt-debconf/network1/ipv4-post-down seen false db_set cnt-debconf/nameserver/server "${NAMESERVER_SERVER}" db_fset cnt-debconf/nameserver/server seen false db_set cnt-debconf/nameserver/domain "${NAMESERVER_DOMAIN}" db_fset cnt-debconf/nameserver/domain seen false db_set cnt-debconf/nameserver/search "${NAMESERVER_SEARCH}" db_fset cnt-debconf/nameserver/search seen false db_set cnt-debconf/nameserver/options "${NAMESERVER_OPTIONS}" db_fset cnt-debconf/nameserver/options seen false db_settitle cnt-debconf/title db_input high cnt-debconf/network1/ipv4-method || true db_go db_get cnt-debconf/network1/bridge NETWORK1_BRIDGE="${RET}" # select db_get cnt-debconf/network1/veth NETWORK1_VETH="${RET}" # select db_get cnt-debconf/network1/ipv4-method NETWORK1_IPV4_METHOD="${RET}" # select case "${NETWORK1_IPV4_METHOD}" in none|dhcp) ;; static) db_settitle cnt-debconf/title db_input high cnt-debconf/network1/ipv4-comment || true db_go db_settitle cnt-debconf/title db_input high cnt-debconf/network1/ipv4-address || true db_go db_settitle cnt-debconf/title db_input high cnt-debconf/network1/ipv4-gateway || true db_go db_settitle cnt-debconf/title db_input high cnt-debconf/network1/ipv4-netmask || true db_go db_settitle cnt-debconf/title db_input high cnt-debconf/network1/ipv4-post-up || true db_go db_settitle cnt-debconf/title db_input high cnt-debconf/network1/ipv4-post-down || true db_go db_settitle cnt-debconf/title db_input high cnt-debconf/nameserver/server || true db_go ;; esac NUMBER="1" while db_get cnt-debconf/network${NUMBER}/ipv4-method && [ "${RET}" ] do if db_get cnt-debconf/network${NUMBER}/bridge then eval NETWORK${NUMBER}_BRIDGE="\"${RET}\"" # string (w/o empty) fi if db_get cnt-debconf/network${NUMBER}/veth then eval NETWORK${NUMBER}_VETH="\"${RET}\"" # string (w/o empty) fi if db_get cnt-debconf/network${NUMBER}/ipv4-comment then eval NETWORK${NUMBER}_IPV4_COMMENT="\"${RET}\"" # string (w/ empty) fi if db_get cnt-debconf/network${NUMBER}/ipv4-method then eval NETWORK${NUMBER}_IPV4_METHOD="\"${RET}\"" # select fi if db_get cnt-debconf/network${NUMBER}/ipv4-address then eval NETWORK${NUMBER}_IPV4_ADDRESS="\"${RET}\"" # string (w/o empty) fi if db_get cnt-debconf/network${NUMBER}/ipv4-gateway then eval NETWORK${NUMBER}_IPV4_GATEWAY="\"${RET}\"" # string (w/ empty) fi if db_get cnt-debconf/network${NUMBER}/ipv4-netmask then eval NETWORK${NUMBER}_IPV4_NETMASK="\"${RET}\"" # string (w/o empty) fi if db_get cnt-debconf/network${NUMBER}/ipv4-post-up then eval NETWORK${NUMBER}_IPV4_POST_UP="\"${RET}\"" # string (w/ empty) fi if db_get cnt-debconf/network${NUMBER}/ipv4-post-down then eval NETWORK${NUMBER}_IPV4_POST_DOWN="\"${RET}\"" # string (w/ empty) fi NUMBER="$((${NUMBER} + 1))" done NETWORK_NUMBER="$((${NUMBER} - 1))" db_get cnt-debconf/nameserver/server NAMESERVER_SERVER="${RET}" # string (w/ empty) db_get cnt-debconf/nameserver/domain NAMESERVER_DOMAIN="${RET}" # string (w/ empty) db_get cnt-debconf/nameserver/search NAMESERVER_SEARCH="${RET}" # string (w/ empty) db_get cnt-debconf/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" 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 cnt-debconf/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 cnt-debconf/root-password ${RANDOM_PASSWORD} db_fset cnt-debconf/root-password seen false db_settitle cnt-debconf/title db_input high cnt-debconf/root-password || true db_go db_get cnt-debconf/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 cnt-debconf/apt-recommends then APT_RECOMMENDS="${RET}" # boolean (w/ empty) fi echo "APT_RECOMMENDS=\"${APT_RECOMMENDS}\"" >> "${DEBCONF_TMPDIR}/debconf.default" if db_get cnt-debconf/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 cnt-debconf/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 cnt-debconf/container-command then CONTAINER_COMMAND="${RET}" # string (w/ empty) fi echo "CONTAINER_COMMAND=\"${CONTAINER_COMMAND}\"" >> "${DEBCONF_TMPDIR}/debconf.default" if db_get cnt-debconf/host-command then HOST_COMMAND="${RET}" # string (w/ empty) fi echo "HOST_COMMAND=\"${HOST_COMMAND}\"" >> "${DEBCONF_TMPDIR}/debconf.default" if db_get cnt-debconf/auto then CNT_AUTO="${RET:-true}" # string (w/o empty) fi CNT_AUTO="${CNT_AUTO:-true}" echo "CNT_AUTO=\"${CNT_AUTO}\"" >> "${DEBCONF_TMPDIR}/debconf.default" if db_get cnt-debconf/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)" ;; esac echo "CNT_CONTAINER_SERVER=\"${CNT_CONTAINER_SERVER}\"" >> "${DEBCONF_TMPDIR}/debconf.default" if db_get cnt-debconf/bind then BIND="${RET}" # string (w/ empty) fi echo "BIND=\"${BIND}\"" >> "${DEBCONF_TMPDIR}/debconf.default" if db_get cnt-debconf/overlay then CNT_OVERLAY="${RET}" # string (w/ empty) fi echo "CNT_OVERLAY=\"${CNT_OVERLAY}\"" >> "${DEBCONF_TMPDIR}/debconf.default" NUMBER="1" while db_get cnt-debconf/files${NUMBER}/copy && [ "${RET}" ] do eval FILES${NUMBER}_COPY="\"${RET}\"" # string (w/o empty) NUMBER="$((${NUMBER} + 1))" done FILES_NUMBER="$((${NUMBER} - 1))" echo "FILES_NUMBER=\"${FILES_NUMBER}\"" >> "${DEBCONF_TMPDIR}/debconf.default" for NUMBER in $(seq 1 ${FILES_NUMBER}) do eval FILES_COPY="$`echo FILES${NUMBER}_COPY`" echo "FILES${NUMBER}_COPY=\"${FILES_COPY}\"" >> "${DEBCONF_TMPDIR}/debconf.default" done } Mode 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