summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorDaniel Baumann <daniel@debian.org>2010-05-01 13:31:18 +0200
committerDaniel Baumann <daniel@debian.org>2011-03-09 17:48:09 +0100
commitc967ebfc4e43fb16a0c2c140c66900712be95ab7 (patch)
tree74a8a142d7d6ceadcd9c4cb23ee3819fd8739336 /bin
parent65721717c4e37f6cec9e66f2ac355746490338ab (diff)
downloadlive-boot-c967ebfc4e43fb16a0c2c140c66900712be95ab7.tar.gz
live-boot-c967ebfc4e43fb16a0c2c140c66900712be95ab7.zip
Merging casper 1.216.
Diffstat (limited to 'bin')
-rwxr-xr-xbin/live-preseed23
-rwxr-xr-xbin/live-set-selections92
2 files changed, 107 insertions, 8 deletions
diff --git a/bin/live-preseed b/bin/live-preseed
index d98c4f3..add29bd 100755
--- a/bin/live-preseed
+++ b/bin/live-preseed
@@ -4,22 +4,29 @@ set -e
PATH=/usr/sbin:/usr/bin:/sbin:/bin
+# Only do this once
+if [ -z "${DEBCONF_REDIR}" ]
+then
+ exec <&4
+ export DEBIAN_HAS_FRONTEND=1
+ export DEBCONF_REDIR=1
+fi
+
root="${1}"
+. "$root/usr/share/debconf/confmodule"
+
question="${2}"
value="${3}"
seen="${4}"
[ "${seen}" ] || seen=true
-if ! (echo "SET ${question} ${value}"; echo "FSET ${question} seen ${seen}") | chroot "${1}" /usr/bin/debconf-communicate -fnoninteractive live-initramfs >/dev/null
+if ! db_set "${question}" "${value}"
then
-
-chroot "${1}" /usr/bin/debconf-communicate -fnoninteractive live-initramfs >/dev/null << EOF
-REGISTER debian-installer/dummy ${question}
-SET ${question} ${value}
-FSET ${question} seen ${seen}
-EOF
-
+ db_register debian-installer/dummy "${question}"
+ db_set "${question}" "${value}"
fi
+db_fset "${question}" seen "${seen}"
+
exit 0
diff --git a/bin/live-set-selections b/bin/live-set-selections
new file mode 100755
index 0000000..c4c38dd
--- /dev/null
+++ b/bin/live-set-selections
@@ -0,0 +1,92 @@
+#!/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