Debian
預置安裝後 Debian 安裝程序不會退出
我正在進行預置安裝,其中涉及
debconf
在 debian 安裝程序中顯示 INFO 消息。在 late_command 結束時,我希望系統彈出安裝 cdrom,並重新啟動我的實例。問題是它沒有以這種方式執行,而是返回到 debian 安裝程序菜單,為了完成安裝過程,它只留下了手動關閉和從磁碟引導以彈出安裝 cdrom 的選項。重要的是要準確地說,這種意外行為僅在我開始使用
debconf INFO
消息時出現(它之前按預期工作,因此preseed.cfg
通常正確配置),因此它與它直接相關。以下是以下內容:我的,
late_command part
由其啟動的腳本,安裝完成的時間,以及我被引導回來的螢幕。late_command``debconf``syslog
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 }
經過幾天的嘗試失敗後,我會回復自己。
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;