在late_command
无人值守安装的步骤中,我正在运行一个 shell 脚本:
d-i preseed/late_command string in-target /bin/sh -c './execute-script.sh'
当达到 late_command 步骤时,UI(蓝色背景,灰色窗口)显示“正在运行 preseed...”消息:
我想知道是否有任何方法可以根据execute-script.sh
正在做的事情来生动地显示其他消息。
我天真地认为使用带有回声的常规 STDOUT 可以解决问题,但它似乎更复杂。
到目前为止,我的搜索引起了我的注意,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;
) &
前面的脚本将产生以下结果:
并返回安装程序菜单(选择完成安装实际上将再次运行预置部分并失败,选择中止不会卸载 ISO 并重新启动,无论如何,我正在尝试自动完成卸载和重新启动):
您将受到很大限制,
debconf
并且可能不值得付出努力。我认为您根本无法通过脚本运行来做到这一点in-target
。我在 Debian Buster 中使用以下预置代码片段和脚本确实取得了成功。它会更改Running Preseed...
显示三次的文本。它会显示Step A
Step B
Running c...
(“后备”选项)用于下载和运行脚本的部分预置文件。
的内容
my_script.sh
。生成的脚本和模板文件基于
finish-install
(debian-installer
包)脚本和模板。