今日は debconf の config script をいじって、必須チェックや、[Cancel]ボタンが効くようにしてみた。db_set した後に、db_get にて値を取得し、値が取得できなければ同じ質問を行うようにした。[Cancel]ボタンの動きは、
DEBCONF-DEVELの Letting the user back up を参考にし、STATE を設定して判別するようにしてみた。必須、[Cancel]ボタン共にうまく動いているようだ。
#!/bin/sh -e
# A simplified version of debconf's own config script.
. /usr/share/debconf/confmodule
db_capb backup
# Use a state machine to allow jumping back to previous questions.
STATE=1
while [ "$STATE" != 0 -a "$STATE" != 5 ]; do
case "$STATE" in
1)
db_beginblock
db_input medium webupdate/documentroot || true
db_endblock
;;
2)
db_beginblock
db_input medium webupdate/loginexpiretime || true
db_endblock
;;
3)
db_beginblock
ok=''
while [ ! "$ok" ]; do
db_input medium webupdate/mastermailaddress || true
db_go || true
db_get webupdate/mastermailaddress
if [ "$RET" ]; then
ok=1
fi
done
db_endblock
;;
4)
db_beginblock
ok=''
while [ ! "$ok" ]; do
db_input medium webupdate/domain || true
db_go || true
db_get webupdate/domain
if [ "$RET" ]; then
ok=1
fi
done
db_endblock
;;
5)
db_beginblock
ok=''
while [ ! "$ok" ]; do
db_input medium webupdate/packageserver || true
db_go || true
db_get webupdate/packageserver
if [ "$RET" ]; then
ok=1
fi
done
db_endblock
;;
esac
if db_go; then
STATE=$(($STATE + 1))
else
STATE=$(($STATE - 1))
fi
done