#!/bin/sh # Cloned-and-hacked from preseed/debconf-set-selections for live-initramfs. set -e OLDIFS="$IFS" CR=$(echo -en "\r") NL=" " . /scripts/live-functions load_confmodule # Returns the first field in the current line first_field() { echo "$line" | grep -q "[[:space:]]" || return 1 echo "$line" | sed -r 's/^([^[:space:]]*).*/\1/' } # Returns any fields after the first field in the current line rest_line() { if echo "$line" | grep -q "[[:space:]]"; then echo "$line" | sed 's/^[^[:space:]]*[[:space:]]*//' fi } SEEN=1 if [ "$1" = --unseen ]; then SEEN= shift fi file="$1" parse_error() { echo "Error parsing preconfiguration file: $*" >&2 exit 1 } IFS="$NL" multiline="" # TODO: this squashes \r elsewhere in the line too for line in $(grep -v '^#\|^[[:space:]]*$' "$file" | sed "s/$CR//g"); do IFS="$OLDIFS" line="$(echo "$line" | sed 's/^[[:space:]]*//')" if echo "$line" | grep -q '\\$'; then multiline="${multiline:+$multiline }$(echo "$line" | \ sed 's/[[:space:]]*\\$//')" continue elif [ -n "$multiline" ]; then line="$multiline $line" multiline="" fi package="" var="" type="" val="" if ! package="$(first_field)"; then parse_error "Syntax error: unable to determine template owner" fi line="$(rest_line)" if ! var="$(first_field)"; then parse_error "Syntax error: unable to determine template name" fi line="$(rest_line)" if ! type="$(first_field)"; then # Allow for lines without separator before an empty value if [ "$line" ]; then type="$line" else parse_error "Syntax error: unable to determine template type" fi fi line="$(rest_line)" val="$line" if [ "$type" = seen ]; then # Set seen flag. db_fset "$var" "$type" "$val" || true # how to handle this error? else if ! db_set "$var" "$val"; then # Question does not exist yet. db_register debian-installer/dummy "$var" db_set "$var" "$val" db_subst "$var" ID "$var" fi if [ "$SEEN" ]; then db_fset "$var" seen true fi fi done