In timpul late_command
pasul unei instalări nesupravegheate, rulez un script shell:
d-i preseed/late_command șir în-țintă /bin/sh -c './execute-script.sh'
Când este atins pasul late_command, interfața de utilizare (fond albastru, fereastră gri) afișează un mesaj „Running preseed...”:
Mă întreb dacă există vreo modalitate de a afișa în mod viu alte mesaje pe baza a ceea ce execute-script.sh
face.
Am crezut naiv că folosirea STDOUT obișnuit cu ecouri ar face smecheria, dar pare mai complicat.
Căutările mele de până acum mi-au adus în atenție o potențială utilizare a debconf
dar nu am reușit să găsesc nicio cale.
Versiunea actuală a scriptului meu a fost remodelată conform răspunsului @Andrew:
#!/bin/sh
. /usr/share/debconf/confmodule
. „./variables.sh”
logFile="/target${INSTALLATION_LOG_LOCATION}"
templatePath="/target/tmp/deployment_progress_tracker.templates"
pisică > „${templatePath}” << „EOF”
Șablon: deployment_progress_tracker/progress/fallback
Tip: text
Descriere: ${STEP}...
EOF
debconf-loadtemplate deployment_progress_tracker „${templatePath}”
db_progress START 0 1 deployment_progress_tracker/progress
watchLogs () {
deploymentDone=fals
in timp ce ! $deploymentDone
do
if [ -f "${logFile}" ]; atunci
pas=$(grep -E -o -a -h "Pasul de progres: .*" "${logFile}" | coada -1 | sed 's/Pasul de progres: //')
if [ -z "${pas##*$DEPLOYMENT_FINISHED*}" ]; atunci
deploymentDone=true
elif [ -n "${pas}" ]; atunci
db_subst deployment_progress_tracker/progress/fallback PASUL „${step}”
INFO db_progress deployment_progress_tracker/progress/fallback
fi
fi
somn 3
Terminat
}
(
WatchLogs;
rm -f "${templatePath}";
db_progress SET 1;
somn 1;
db_progress STOP;
db_unregister deployment_progress_tracker/progress;
) &
Scriptul anterior va avea ca rezultat următoarele:
Și duce înapoi la meniul de instalare (alegerea Terminare, instalarea va rula din nou partea preseedată și va eșua, alegerea Abort nu va demonta ISO și nu va reporni, oricum, încerc să fac atât demontarea, cât și repornirea automată):