2016-04-27 7 views
2

これは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が完全に登場しました。盲目的にすると、あまりにも壊れやすいハックのように思えます。

答えて

4

あなたは、少なくとも私が同じ問題を経験したときには、日々の日常的なサービスで正しい軌道に乗っています。しかし、apt-dailyは即座に無人アップグレードを起動します。これはおそらくあなたのスリープループが何もしなかったためです。アイデアのカップル:

オプション1

あなたがあなた自身の放浪ボックスを構築している場合は、ここではこの問題解決する方法は次のとおりです。

をお使いのベースボックス上に新しいファイルを作成します。

の/ etc/systemdに/システム/のapt-daily.timer.d /のapt-daily.timer.conf

[Timer] 
Persistent=false 

これがデフォルトを上書きします起動時にすぐに実行するのapt-毎日トリガータイマー(dはsystemdにefault persistent = trueは、システムが停止している間にジョブが失われた場合、起動時に直ちに実行されることを意味します。このファイルには、このファイルのデフォルトの設定を上書きします:

/lib/systemd/system/apt-daily.timer

これは私が自分自身の放浪ボックスを構築し、私はそれが動作を確認することができますので、私がやったことです。

オプション2

このxenial画像を使用

https://github.com/geerlingguy/packer-ubuntu-1604

Geerlingguyは、無人アップグレードを無効にすることによって問題を解決しました。あなたはここで議論を見ることができます

https://github.com/geerlingguy/packer-ubuntu-1604/issues/3#issue-154560190

関連する問題