late_command
無人インストールのステップ中に、シェル スクリプトを実行しています。
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 はアンマウントされず、再起動も行われません。とにかく、アンマウントと再起動の両方が自動的に実行されるようにしています)。
答え1
かなり制限がありdebconf
、努力する価値がないかもしれません。スクリプトを実行してもまったくできないと思いますin-target
。私はDebian Busterで次のpreseedスニペットとスクリプトを使用して成功しました。表示されるテキストをRunning Preseed...
3回変更します。
Step A
Step B
Running c...
(「フォールバック」オプション)
スクリプトをダウンロードして実行するための部分的な 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
パッケージ)に基づいています。脚本そしてテンプレート。