Mostrar mensaje al usuario durante una instalación preconfigurada desatendida de Debian

Mostrar mensaje al usuario durante una instalación preconfigurada desatendida de Debian

Durante el late_commandpaso de una instalación desatendida, estoy ejecutando un script de shell:

d-i preseed/late_command string in-target /bin/sh -c './execute-script.sh'

Cuando se alcanza el paso late_command, la interfaz de usuario (fondo azul, ventana gris) muestra el mensaje "Ejecutando preseed...":

ingrese la descripción de la imagen aquí

Me pregunto si hay alguna forma de mostrar otros mensajes en función de lo que execute-script.shestá haciendo.

Ingenuamente pensé que usar el STDOUT normal con ecos funcionaría, pero parece más complicado.

Mis búsquedas hasta ahora me han llamado la atención sobre un uso potencial de debconfpero no he podido encontrar ninguna manera.

La versión actual de mi script se modificó según la respuesta de @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;
) &

El script anterior dará como resultado lo siguiente:

ingrese la descripción de la imagen aquí

Y conduce de regreso al menú del instalador (al elegir Finalizar, la instalación ejecutará nuevamente la parte preestablecida y fallará, al elegir Abortar no se desmontará el ISO ni se reiniciará; de todos modos, estoy tratando de que tanto el desmontaje como el reinicio se realicen automáticamente):

ingrese la descripción de la imagen aquí

Respuesta1

Estará bastante limitado debconfy puede que no valga la pena el esfuerzo. No creo que puedas hacerlo en absoluto con la ejecución de un script in-target. Tuve éxito al utilizar el siguiente fragmento y secuencia de comandos preestablecidos con Debian Buster. Cambia el texto donde Running Preseed...se muestra tres veces. Se mostrará

  1. Step A
  2. Step B
  3. Running c...(la opción "alternativa")

Archivo preestablecido parcial para descargar y ejecutar un script.

d-i preseed/late_command string \
  wget -P /run http://REDACTED/my_script.sh ; \
  chmod 755 /run/my_script.sh ; \
  /run/my_script.sh

Contenido de 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

El script y el archivo de plantillas generado se basan en el finish-install( debian-installerpaquete)guionyplantillas.

información relacionada