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

Я выполняю установку с предварительно заданными параметрами, которая включает отображение сообщений debconf INFO прямо внутри установщика debian . В конце late_command я ожидаю, что система извлечет установочный компакт-диск и перезагрузит мой экземпляр. Проблема в том, что вместо того, чтобы вести себя таким образом, он возвращается в меню установщика debian и для завершения процесса установки оставляет мне только возможность вручную завершить работу и загрузиться с диска, чтобы извлечь установочный компакт-диск.

Важно уточнить, что это неожиданное поведение проявилось только тогда, когда я начал использовать сообщения debconf INFO (раньше оно работало должным образом, поэтому preseed.cfg обычно правильно настроен) , таким образом, это напрямую связано с ним.

Ниже приведены следующие: Моя late_command part , сценарий, запускаемый late_command , который включает debconf , системный журнал когда установка закончится, es и экран, в который меня уведут обратно.

late_command :

d-i preseed/late_command string \
cp -rf /cdrom/build /target/home/device; \
/bin/sh /target/home/machine/build/deployment-preseed-track.sh; \
chmod +x /target/home/machine/build/deployment-preseed.sh; \
in-target --pass-stdout ./home/machine/build/deployment-preseed.sh > /target/var/log/installation.log; \
in-target rm -rf /home/machine/build;

deployment-preseed-track.sh (Он в основном активно сканирует журнал для определения хода развертывания)

#!/bin/sh

. /usr/share/debconf/confmodule
. "/home/machine/build/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
}

syslog

leading back to this screen

0
задан 17 August 2021 в 09:29
1 ответ

Я отвечу сам себе после нескольких дней неудачных попыток.

Debconf не виноват. Произошло то, что то, как я организовывал вызовы сценариев (трекер в фоновом режиме и сценарий развертывания на переднем плане), не давало установщику debian возможности завершить фоновый сценарий чистым, ожидаемым образом. Как только сценарий развертывания был непоследовательно убит или не убит, что привело к успешному или неудачному развертыванию случайным образом.

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

Вместо того, чтобы запускать сценарий развертывания deployment-preseed.sh в качестве процесса переднего плана и трекер deployment-preseed-track.sh в качестве фонового процесса, я сделал точную противоположность , то есть: deployment-preseed-track.sh в качестве процесса переднего плана и deployment-preseed.sh в качестве фонового процесса.

Соответственно, я обновил late_command:

d-i preseed/late_command string \
cp -rf /cdrom/build /target/home/device; \
chmod +x /target/home/machine/build/deployment-preseed.sh; \
(in-target --pass-stdout ./home/machine/build/deployment-preseed.sh > /target/var/log/installation.log &); \
/bin/sh /target/home/machine/build/deployment-preseed-track.sh; \
in-target rm -rf /home/machine/build;
0
ответ дан 19 August 2021 в 06:32

Теги

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