Dem Benutzer wird während einer unbeaufsichtigten voreingestellten Debian-Installation eine Nachricht angezeigt

Dem Benutzer wird während einer unbeaufsichtigten voreingestellten Debian-Installation eine Nachricht angezeigt

Während des late_commandSchritts 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:

Bildbeschreibung hier eingeben

execute-script.shIch 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, debconfkonnte 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:

Bildbeschreibung hier eingeben

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):

Bildbeschreibung hier eingeben

Antwort1

Sie werden ziemlich eingeschränkt sein debconfund 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

  1. Step A
  2. Step B
  3. 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-installerPaket)SkriptUndVorlagen.

verwandte Informationen