Während des late_command
Schritts einer unbeaufsichtigten Installation führe ich ein Shell-Skript aus:
d-i preseed/late_command string in-target /bin/sh -c './execute-script.sh'
Wenn der Schritt „late_command“ erreicht ist, zeigt die Benutzeroberfläche (blauer Hintergrund, graues Fenster) die Meldung „Voreinstellung wird ausgeführt …“ an:
execute-script.sh
Ich frage mich, ob es eine Möglichkeit gibt, andere Nachrichten basierend auf dem, was gerade geschieht, aktiv anzuzeigen .
Ich dachte naiverweise, dass die Verwendung des regulären STDOUT mit Echos den Zweck erfüllen würde, aber es scheint komplizierter zu sein.
Bei meinen bisherigen Recherchen bin ich auf eine mögliche Verwendung aufmerksam geworden, debconf
konnte jedoch keine Möglichkeit finden.
Aktuelle Version meines Skripts, umgestaltet gemäß der Antwort von @Andrew:
#!/bin/sh
. /usr/share/debconf/confmodule
. "./variables.sh"
logFile="/target${INSTALLATION_LOG_LOCATION}"
templatePath="/target/tmp/deployment_progress_tracker.templates"
cat > "${templatePath}" << 'EOF'
Template: deployment_progress_tracker/progress/fallback
Type: text
Description: ${STEP}...
EOF
debconf-loadtemplate deployment_progress_tracker "${templatePath}"
db_progress START 0 1 deployment_progress_tracker/progress
watchLogs () {
deploymentDone=false
while ! $deploymentDone
do
if [ -f "${logFile}" ]; then
step=$(grep -E -o -a -h "Progress-step: .*" "${logFile}" | tail -1 | sed 's/Progress-step: //')
if [ -z "${step##*$DEPLOYMENT_FINISHED*}" ]; then
deploymentDone=true
elif [ -n "${step}" ]; then
db_subst deployment_progress_tracker/progress/fallback STEP "${step}"
db_progress INFO deployment_progress_tracker/progress/fallback
fi
fi
sleep 3
done
}
(
watchLogs;
rm -f "${templatePath}";
db_progress SET 1;
sleep 1;
db_progress STOP;
db_unregister deployment_progress_tracker/progress;
) &
Das vorherige Skript führt zu Folgendem:
Und führt zurück zum Installationsmenü (wenn Sie „Fertig stellen“ wählen, wird die Installation tatsächlich noch einmal ausgeführt und schlägt fehl. Wenn Sie „Abbrechen“ wählen, wird die ISO-Datei nicht ausgehängt und es wird kein Neustart durchgeführt. Ich versuche jedenfalls, sowohl das Aushängen als auch den Neustart automatisch durchführen zu lassen):
Antwort1
Sie werden ziemlich eingeschränkt sein debconf
und es ist den Aufwand vielleicht nicht wert. Ich glaube nicht, dass Sie es mit einem Skript run überhaupt schaffen werden in-target
. Ich hatte Erfolg mit dem folgenden Preseed-Snippet und Skript mit Debian Buster. Es ändert den Text, wo Running Preseed...
angezeigt wird, dreimal. Es wird angezeigt
Step A
Step B
Running c...
(die „Fallback“-Option)
Teilweise voreingestellte Datei zum Herunterladen und Ausführen eines Skripts.
d-i preseed/late_command string \
wget -P /run http://REDACTED/my_script.sh ; \
chmod 755 /run/my_script.sh ; \
/run/my_script.sh
Inhalt von my_script.sh
.
#!/bin/sh
. /usr/share/debconf/confmodule
set -e
# create a templates file with the strings for debconf to display
cat > /run/my_script.templates << 'EOF'
Template: my_script/progress/a
Type: text
Description: Step A
Template: my_script/progress/b
Type: text
Description: Step B
Template: my_script/progress/fallback
Type: text
Description: Running ${STEP}...
EOF
# use the utility to load the generated template file
debconf-loadtemplate my_script /run/my_script.templates
# pause just to show "Running Preseed..."
sleep 2
# foreach 3 steps tell debconf which template string to display
for step in a b c; do
if ! db_progress INFO my_script/progress/$step; then
db_subst my_script/progress/fallback STEP "$step"
db_progress INFO my_script/progress/fallback
fi
case $step in
"a")
# run commands or scripts in the installer environment (this uses the sleep command in the installer environment)
sleep 10
;;
"b")
# run commands or scripts in the chroot environment (this uses the sleep command from the installed system)
in-target sleep 10
;;
"c")
# just another sample step
sleep 10
;;
esac
done
Das Skript und die generierte Vorlagendatei basieren auf dem finish-install
( debian-installer
Paket)SkriptUndVorlagen.