#!/bin/bash set -e . /usr/share/debconf/confmodule db_capb backup # allow to go back, for that we implement that STATE loop debug() { [ "${DEBCONF_DEBUG:-}" != "developer" ] || echo -e "D: $*" >&2 } db_settitle neurodebian/title if [ "$1" = "configure" ]; then # Must have been called in preinst state, so no nd-configurerepo # tool is yet installed, thus delay asking questions to # whenever will be called in postinst state which nd-configurerepo 1>/dev/null 2>&1 || exit 0 fi # Create temporary directory which will be reused export ND_AE_TEMPDIR=$(mktemp -d) trap "rm -rf \"$ND_AE_TEMPDIR\"" TERM INT EXIT neurodebian_releases="auto" # This implements a simple state machine so the back button can be handled. # taken from debconf demo example STATE=1 while [ "$STATE" != 0 -a "$STATE" -lt 9 ]; do case $STATE in 1) # allow to be overridden by environment variable as discussed with # ftpmaster if [ ! -z "${NEURODEBIAN_ENABLE:-}" ]; then case "${NEURODEBIAN_ENABLE}" in true|yes|YES|1) enable=true;; false|no|NO|0) enable=false;; *) echo "ERROR: Non-supported value $NEURODEBIAN_ENABLE of NEURODEBIAN_ENABLE env variable. Use yes or no" >&2; exit 1;; esac db_set neurodebian/enable $enable fi db_input high neurodebian/enable || true ;; 2) neurodebian_releases="$(ND_IFS=', ' nd-configurerepo --print-releases)" debian_release="$(ND_IFS=', ' nd-configurerepo --print-release)" if [ -z "$debian_release" ]; then # just a failover debian_release="sid" fi debug "releases: $neurodebian_releases" db_subst neurodebian/release releases "$neurodebian_releases" db_subst neurodebian/release release "$debian_release" db_input medium neurodebian/release || true ;; 3) neurodebian_mirrors="$(ND_IFS=', ' nd-configurerepo --print-mirrors)" debug "mirrors: $neurodebian_mirrors" db_subst neurodebian/mirror mirrors "$neurodebian_mirrors" db_input medium neurodebian/mirror || true mirror_selection_ret="$RET" debug "mirror select return: <$mirror_selection_ret>" ;; 4) neurodebian_flavor="$(ND_IFS=', ' nd-configurerepo --print-flavor)" db_subst neurodebian/flavor flavor "$neurodebian_flavor" db_input medium neurodebian/flavor || true ;; 5) db_input medium neurodebian/components || true ;; 6) db_input low neurodebian/suffix || true ;; 7) db_input low neurodebian/overwrite || true ;; 8) db_input medium neurodebian/run-update-note || true ;; esac if db_go; then case $STATE in 1) db_get neurodebian/enable # get new value if [ "$RET" = "false" ]; then # no need to proceed with further questions if ls /etc/apt/sources.list.d/neurodebian.sources*.list &>/dev/null; then # we have configuration present -- display a note about apt-get update STATE=8 else STATE=100 # just go out -- nothing to do, nothing to inform about fi continue fi;; # Ubuntus managed to remove netselect "to accompany apt-netselect" # https://bugs.launchpad.net/ubuntu/+source/netselect/+bug/337377 # So for now remove this mandatory demanding of netselect for "best", and # rely on logic in nd-configurerepo to select default mirror (currently origin) # as the 'best' # # 3) # db_metaget neurodebian/mirror value # selected_mirror="$RET" # # TODOs: # # - handle custom # # - separate out alias from url # debug "selected mirror: $selected_mirror" # if [ "$selected_mirror" = "best" ] && ! which netselect &>/dev/null; then # if [ "$mirror_selection_ret" = "30 question skipped" ]; then # # if the question was not even shown, we would # # not get a chance to specify mirror, thus # # better just fail altogether and demand intervention # db_input high neurodebian/netselect-cannot-be-used # exit 1 # else # db_input high neurodebian/netselect-not-found # continue; # fi # fi esac STATE=$(($STATE + 1)) else STATE=$(($STATE - 1)) fi done db_stop