Показ сообщения пользователю во время неуправляемой установки Debian с предварительной загрузкой

На этапе late_command неуправляемой установки я запускаю сценарий оболочки :

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

Когда достигнут шаг late_command, пользовательский интерфейс (синий фон, серое окно) отображает сообщение "Running preseed..." :

enter image description here

Мне интересно, есть ли способ живого отображения других сообщений, основанных на том, что делает execute-script.sh.

Я наивно полагал, что использование обычного STDOUT с echoes поможет, но это кажется более сложным.

Мои поиски до сих пор привели меня к потенциальному использованию debconf, но я не смог найти никакого способа.

Текущая версия моего скрипта переделана в соответствии с ответом @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;
) &

Предыдущий скрипт приводит к следующему:

enter image description here

И приводит обратно в меню установщика (при выборе Finish the installation фактически запустится снова часть с предварительной установкой и произойдет сбой, при выборе Abort не произойдет размонтирование ISO и перезагрузка, в любом случае, я пытаюсь, чтобы и размонтирование, и перезагрузка выполнялись автоматически) :

enter image description here

1
задан 5 August 2021 в 10:30
1 ответ

Вы будете сильно ограничены debconf и, возможно, не стоит усилие. Я не думаю, что вы вообще сможете это сделать с помощью скрипта, запускаемого в целевом объекте. Я добился успеха, используя следующий предварительно заданный фрагмент и сценарий с Debian Buster. Он изменяет текст, в котором Running Preseed... отображается три раза. Он покажет

  1. Шаг A
  2. Шаг B
  3. Запуск c... (опция "fallback")

Частичный preseed-файл для загрузки и запуска скрипта.

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

Содержимое 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

Сценарий и сгенерированный файл шаблонов основаны на finish-install (debian-installer пакете) script и templates .

2
ответ дан 11 August 2021 в 02:24

Теги

Похожие вопросы