これはUbuntuの14.04下の問題の多くはありませんでしたが、16.04のものに切り替えるので、少し厄介得ている:私は新しいVMを起動し、プロビジョニング・スクリプトを実行するためのツールを使用する場合(ベイグラントまたはパッカーを新しく起動したVMのプロビジョニング準備ができていることを確認するにはどうすればよいですか?
考えますスクリプトが最初に行うことの1つは、apt-get update
/upgrade
/install
のダンスです。私は、スクリプトの先頭でsleep 30
または類似を投げた場合、これらのスクリプトは
Reading package lists...
E: Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)
E: Unable to lock directory /var/lib/apt/lists/
と
E: Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavailable)
E: Unable to lock the administration directory (/var/lib/dpkg/), is another process using it?
のような非決定性のエラーの多くを投げていることをUbuntuのXenialに切り替えたので、気づきましたそれは落ち着いているようだ。終了ステータスが0
になるまで再試行するループで各コマンドを試しても機能します。私が考えることができる最高の、私のプロビジョニングと同時にapt - getを実行するいくつかの最初の起動タスクがあります。
私はそれが日常的なサービスのように明白であると思いました。しかし、次の待機ループを追加しても効果はありません。それは何のために待機しません:私は、私は特にがちロックをチェックするためにthis questionにアイデアをたどることができます知っている
while systemctl status apt-daily.service > /dev/null 2>&1; do
sleep 0.5
done
、私は決定するために、より汎用的かつ防弾方法がある場合、より興味を持っています新しいVMが完全に登場しました。盲目的にすると、あまりにも壊れやすいハックのように思えます。