Durante a late_command
etapa de uma instalação autônoma, estou executando um script de shell:
d-i preseed/late_command string in-target /bin/sh -c './execute-script.sh'
Quando a etapa late_command é alcançada, a UI (fundo azul, janela cinza) exibe uma mensagem "Executando pré-configuração...":
Estou me perguntando se existe alguma maneira de exibir outras mensagens com base no que está execute-script.sh
fazendo.
Ingenuamente pensei que usar o STDOUT regular com ecos resolveria o problema, mas parece mais complicado.
Minhas pesquisas até agora chamaram minha atenção para um uso potencial, debconf
mas não consegui encontrar nenhuma maneira.
Versão atual do meu script remodelado de acordo com a resposta do @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;
) &
O script anterior resultará no seguinte:
E leva de volta ao menu do instalador (escolher Concluir a instalação irá realmente executar novamente a parte pré-configurada e falhar, escolher Abortar não desmontará o ISO e reinicializará, de qualquer forma, estou tentando fazer a desmontagem e a reinicialização automaticamente):
Responder1
Você ficará bastante limitado debconf
e pode não valer a pena o esforço. Eu não acho que você conseguirá fazer isso com um script run in-target
. Tive sucesso usando o seguinte trecho de pré-configuração e script com o Debian Buster. Altera o texto onde Running Preseed...
é exibido três vezes. Isso vai mostrar
Step A
Step B
Running c...
(a opção "substituição")
Arquivo de pré-configuração parcial para baixar e executar um 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
Conteúdo 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
O script e o arquivo de modelos gerados são baseados no finish-install
( debian-installer
pacote)roteiroemodelos.